5.1 文件系统安全(访问权限)
在 unixstuff 目录键入 % ls -l
。你将得到关于目录内容的详细信息,像下图
这样:
每个文件(目录)都有相应的权限,你需要键入 ls -l
或 ls -lg
查看,
后者还会多显示拥有此文件的组(下例中的 beng95):
-rwxrw-r-- 1 ee51ab beng95 2450 Sept29 11:52 file1
最左边的一列是由 d r w x - 组成的十个字符,偶尔还会有 s 或 S。 如果最左边第一个字符是 d 说明这是一个目录,否则首字符为 - 。
剩下的9个字符,每3个字符一组,共三组用来表示访问权限。
- 最左边的一组表示文件(目录)所有者的文件权限(上例中的 ee51ab)。
- 中间的一组表示文件(目录)所有者所在群组的权限(上例中的 eebeng95)。
- 最右边一组表示其他所有用户的文件权限。
像 r, w 等这些字符用在文件或目录上时会有一点区别。
文件的访问权限
- r(或者 -),表示有读权限(或者没有),可以读和拷贝文件。
- w(或者 -),表示有写权限(或者没有),可以修改文件。
- x(或者 -),表示有执行权限(或者没有),可以在适当的时候执行文件。
目录的访问权限
- r 允许用户列出目录中的文件。
- w 允许用户删除目录中的文件,或者向目录中添加文件。
- x 允许用户访问目录中的文件,这意味着你可以读此目录中有读权限的个别文件。
因此,为了读一个文件,你需要有此文件所在目录的执行权限,以及这个目录的所有 父目录的执行权限。
例子
-rwxrwxrwx
: 此文件可以被所有人读写以及执行。-rw-------
: 此文件可以被文件所有者读和写,其他任何用户不可以读写以及 执行。
5.2 修改访问选项
chmod (changing a file mode)
只有文件的所有者才可以使用 chmod
修改文件的权限。参数如下:
- u - 用户(文件所有者)
- g - 群组(文件所有者所在群组)
- o - 其他用户
- a - 所有用户
- r - 读权限
- w - 写(以及删除)权限
- x - 执行(以及访问目录)权限
-
-
- 添加权限
-
-
-
- 删减权限
-
打个比方,移除群组和其他用户对文件 biglist 的读写以及执行权限:
% chmod go-rwx biglist
其他权限不会受到影响。
下面为所有人给文件 biglist 添加读写权限
% chmod a+rw biglist
练习 5a
修改文件science.txt 以及目录 backups 的权限,并使用 ls -l
检查是否生效。
5.3 进程和任务
进程是用唯一的 PID(进程ID) 标识的正在执行的程序。查看进程的PID,状态等信息 可以键入:
% ps
一个进程可能在前台或者后台,也可能是暂停状态。一般情况下,命令提示符要等当前进程 结束后才会返回。
有些进程需要长时间运行,这样就会使终端挂起。让长时间运行的进程在后台运行可以 使命令提示符立即返回,这样在原进程运行的同时其他任务也可以执行。
运行后台进程
让进程在后台运行,需要在命令行的结尾输入一个 &
。举个例子,命令 sleep
会等待指定的秒数,键入:
% sleep 10
10 秒后命令提示符才会返回,在提示符返回之前除了等待你什么都做不了。在后台
运行 sleep
, 键入:
% sleep 10 &
[1] 6259
&
让任务在后台运行并立即返回命令提示符,在等待它执行完成的同时允许你运行
其他程序。
上例中,第一行是用户输入,第二行是机器返回,告知用户任务号码(方括号内数字,从1开始) 以及 PID。当任务完成后也会通知用户。对于需要长时间才能完成的任务后台运行很有用。
使当前在前台运行的进程在后台运行
键入:
% sleep 1000
你可以通过输入 ^Z(Ctrl + Z)暂停正在运行的前台进程,然后把到放到后台运行,键入:
% bg
注意:无法将需要用户交互的进程放到后台运行,比如 vi
5.4 列出暂停的和后台进程
当一个进程运行,后台运行或者暂停时,它以及他的任务编号会被记录在一个列表里, 为了解释这个列表键入:
% jobs
一个任务列表应该看起来像这样:
[1] Suspended sleep 1000
[2] Running netscape
[3] Running matlab
重启(前台运行)一个暂停的进程可以键入:
% fg %jobnumber
比如,重启 sleep 1000
键入:
% fg %1
键入 fg
不带任何任务编号会重启最后暂停的进程。
5.5 杀掉一个进程
kill (terminate or signal a process)
有时候需要杀掉一个进程,比如,当一个程序陷入死循环。 杀掉一个正在运行的前台进程,可以键入 ^C 举个例子,运行:
% sleep 100
^C
杀掉一个暂停的或者后台运行的进程,键入:
% kill %jobnumber
举个例子,运行:
% sleep 100 &
% jobs
假如任务编号是 4, 键入:
% kill %4
检查是否成功可以列出任务列表看进程是否被移除。
ps (process status)
另外,还可以通过找到进程的 PID 后使用 kill PID_NUMBER
的方式杀掉进程。
% sleep 1000 &
% ps
PID TT S TIME COMMAND
20077 pts/5 S 0:05 sleep 1000
21563 pts/5 T 0:00 netscape
21873 pts/5 S 0:25 nedit
杀死进程 sleep 1000
可以键入:
% kill 20077
然后再次键入 ps
查看进程是否从列表中被移除。如果一个进程拒绝被杀掉,可以使用
选项 -9
, 比如:
% kill -9 20077
注意:使用此选项可能会杀掉其他用户的进程。
总结
ls -lag
- 列出所有文件的访问权限。chmod [options] file
- 修改文件的访问权限。command &
- 运行一个后台执行命令。^C
- 杀掉当前在前台运行的进程。^Z
- 暂停当前在前台运行的进程。bg
- 使当前暂停的前台进程在后台执行。jobs
- 列出任务列表。fg %1
- 使任务号为1的任务在前台运行。kill %1
- 杀掉任务号为1的任务。ps
- 列出当前进程。kill 26152
- 杀掉进程ID为26152的进程。