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