老张的不幸生活

UNIX / Linux 新手入门(五)

#unix

5.1 文件系统安全(访问权限)

在 unixstuff 目录键入 % ls -l。你将得到关于目录内容的详细信息,像下图 这样:

ls -l example

每个文件(目录)都有相应的权限,你需要键入 ls -lls -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的进程。

原文

http://www.ee.surrey.ac.uk/Teaching/Unix/unix5.html