到这个阶段﹐游戏就比较复杂了。学完这些东西﹐您就可以说﹐我懂一些 Linux 的东西 ;-)
文档和目录都有允许权(Permission) (即 VMS 上的 `protections') 和所有权(ownership), 这个观念不难理解﹐因为 VMS 上也有。如果您不能执行一只程序﹐或是您不能修改某一文档﹐ 或是不能进入某目录﹐这是因为您没有被赋予使用这些资源的权力的关系(没有允许权)﹐ 或者是这个文档的根本就不属于您的(没有所有权)﹐ 让我们看看下面的例子吧:
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
第一个栏位显示出这个文档的使用权限 ls
(拥有者(owner) 是 root,
群组(group) 是 bin). 拥有权可以分成三种模式: 拥有者(owner), 群组(group), 和 其他使用者(others)。
(和 VMS 的 owner, group, world 相似);有三种不同的允许权(permissions):
读(read), 写(write) (包含移除(delete)), 和执行(execute).
从左到右﹐-
是文档模式 (-
= 一般文档(ordinary file), d
= 目录(directory), l
= 连结(link), 等); rwx
是允许文档拥有者可以对该文档作读﹐写﹐和执行的动作;
r-x
是允许群组使用者可以对该文档作读和执行的动作﹐但是不可以作写的动作。;
r-x
是限制其他的使用者对该文档只有读和执行的权限﹐却没有写的权限。
如何改变文档的使用权限:
$ chmod <whoXperm> <file>
其中 who 是 u
(user(使用者), 即文档的拥有者), g
(群组 group), o
(其他 other),
X 表示可以为 +
或 -
, perm 可以为 r
(读 read), w
(写 write), 或是
x
(可执行 execute).
举例说明:
$ chmod u+x file
这是针对该文档﹐开放可执行的权限给该文档的拥有者。可缩写成:
chmod +x file
.
$ chmod go-wx file
这是对该文档﹐移除群组使用者和其他使用者对该文档的“写”的权限和“执行”的权限。
$ chmod ugo+rwx file
这是开放该文档的读﹐写﹐和执行的权限给所有的使用者。
另一个快速表示法为使用一组数字:rwxr-xr-x
可以用 755 来表示 (每一位数字对应一个控制位元: ---
表是 0,
--x
表示 1, -w-
表示 2...).
所以﹐rwx = 4+2+1 = 7﹐r-x = 4+0+1 = 5﹐所以﹐rwxr-xr-x
可以用 755 来表示。
对目录而言﹐rx
表示您可以切换到该目录: cd
, 而
w
表示您可以删除该目录的文档(当然需要视该文档的使用权限而定), 或是目录本身.
这些还只是冰山的一角而已﹐想要知道更多---RMP.
如何改变文档的拥有权:
$ chown username file
我整理成下表:
VMS Linux Notes
------------------------------------------------------------------------------
SET PROT=(O:RW) file.txt $ chmod u+rw file.txt
$ chmod 600 file.txt
SET PROT=(O:RWED,W) file $ chmod u+rwx file
$ chmod 700 file
SET PROT=(O:RWED,W:RE) file $ chmod 755 file
SET PROT=(O:RW,G:RW,W) file $ chmod 660 file
SET FILE/OWNER_UIC=JOE file $ chown joe file
SET DIR/OWNER_UIC=JOE [.dir] $ chown joe dir/
欲执行很多程序﹐在 Linux 上没有所谓的 `batch queues' ; 多工其实以非常不一样的手法处理。 以下是一般常见的命令列:
$ command -s1 -s2 ... -sn par1 par2 ... parn < input > output &
其中 -s1
, ..., -sn
是该程序的参数(switch),
par1
, ..., parn
是程序的输入变数(parameters).
现在让我们来看看在 Linux 上如何多工。程序(processes)是一只不论在前景或是背景被执行的程序。
$ progname [-switches] [parameters] [< input] [> output] &
[1] 234
shell 会提示您该程序(process)的工作号码(`job number') (第一个数字; 请看下文)
和该程序的程序识别码 PID (Process IDentifier). 每一个程序都有一组独一无二的 PID.
$ ps -ax
这会输出一大串正在执行的程序(processes)。
$ kill <PID>
如果您不知道要如何正确的终止某一个程序﹐这时您可能就要手动把程序给杀死喔!... ;-).
有些时候﹐一个程序只能被下列一个指令杀死:
$ kill -15 <PID>
$ kill -9 <PID>
附带一提﹐Sell 允许您停止或是暂时停止一个程序﹐将程序送到背景工作﹐或是将程序从背景带到前景。 在这里﹐程序(processes)我们称之为工作(`jobs').
$ jobs
工作(jobs)是由 Shell 给的工作号码(job number)来作区别﹐注意﹐不是 PID 喔.
$ CTRL-C
(不一定每一次奏效)
$ CTRL-Z
(同上)
$ bg <job>
$ fg <job>
$ kill <%job>
更多有关文档的信息。
stdin
:通常为键盘)﹐
输出结果到所谓标准输出的文档(stdout
:通成为萤幕)﹐而错误输出也是输出到一个文档﹐
我们称之为 stderr
(通常也是萤幕).
使用 <
和 >
﹐您可以将输出和输入重新导向到另外一个文档。
然而﹐ >>
是将结果附加到文档的档尾﹐而不是覆盖原来的文档。;
2>
重导错误信息(stderr); 2>&1
重导错误信息到标准输出, 而 1>&2 则是重导标准输出到错误输出。
有一个黑洞(`black hole')叫做 /dev/null
: 所有导到这个文档的东西﹐
都将消失的无影无踪。
*
' 有相同的功能。用法: * 符合所有文档﹐除了隐藏档以外。
.* 符合所有隐藏档; *.* 符合只有一个点 '.' 在中间的文档。跟随著其他字元:
p*r 表示 `peter' 或是 `piper' 都有可能; *c* 可能符合 `picked' 或是 `peck'。
'%
' 换成 '?
'。 还有另外一种万用字元:[]
. 用法: [abc]*
表示文档必须以字元 a, b, c 最为开头;
*[I-N,1,2,3]
表示文档名称由 I, J, K, L, M, N, 1, 2, 3 作为结尾。
mv
(重新命名
) 不可以一次多个文档。即 mv *.xxx *.yyy
将不会执行成功;
cp -i
和 mv -i
可以提醒您是否要覆盖以存在的文档。
就像 VMS ﹐列印工作会先被放到伫列当中(queues)﹐当您下列印指令的时候﹐您或许会指定列表机的名称。 例如:
$ lpr file.txt # 这将指用到预设的列表机
$ lpr -Plaser file.ps # 这将使用名为 'laser' 的列表机
处理列印伫列(print queues), 您可能需要下列指令:
VMS Linux
------------------------------------------------------------------------------
$ PRINT file.ps $ lpr file.ps
$ PRINT/QUEUE=laser file.ps $ lpr -Plaser file.ps
$ SHOW QUEUE $ lpq
$ SHOW QUEUE/QUEUE=laser $ lpq -Plaser
$ STOP/QUEUE $ lprm <item>