到这个阶段﹐游戏就比较复杂了。学完这些东西﹐您就可以说﹐我懂一些 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>