2008年7月21日星期一

Linux的多人多工命令

Linux的多人多工命令如表2-4所示。

  表2-4 Linux的多人多工命令说明

常用命令
简要中文说明
程序所在目录
备 注

adduser
增加用户 (useradd亦可)
/usr/sbin
限系统

管理者

passwd
更改自己或别人的密码
/usr/bin


chfn
更改用户的资料
/usr/bin


chsh
更改用户所用的Shell 程序
/usr/bin


chmod
更改文件或目录的使用权限
/bin


chown
更改文件或目录的所有者
/bin


chgrp
更改文件或目录的所属的用户组
/bin


su
使自己暂时变成超级用户root
/bin


sudo
暂时以超级用户root身份执行
/usr/bin


uname
显示目前的版本等系统信息
/bin


who
显示目前有哪些人在使用
/usr/bin


whoami
显示目前自己是谁
/usr/bin


ps
显示目前有哪些进程在执行
/bin


kill
中断一个处理进程(process)
/bin



  adduser [新用户名称]

  增加用户

  一个人能不能使用这套UNIX系统,就取决于超级用户要不要用这个命令“赐”给他一个账号了。

  例如,您(您是超级用户才行)想为 tommy 先生设立一个账号,那么就这样下达:

  adduser tommy

  它会自动帮您在 /home 处产生一个目录来置放他自己的文件,这个目录就叫做用户主目录(Home Directory)。例如,这位先生叫做 tommy ,那么他的用户主目录就在 /home/tommy,其他人的也如此。(注:只有超级用户的主目录不一样,他是在 /root中。)

  但是在Slackware 版本中有一点小差别,adduser 命令却是一个Script脚本(脚本类似DOS的批处理文件)。它的用户名称是执行完 adduser这个命令后再回答的。

  咦,怎么没有设置密码的动作?

  密码是要另外再用 passwd 这个命令设置的。

  无论adduser是程序文件或者脚本,我们不用太在意。但是它们同样都会去改变 /etc 目录中的passwd设置文件的内容。每增加一个用户,passwd里面就会多增加一行。如图2-16所示。


图2-16 passwd文件的内容

  资料安排是:用户名称、密码(为什么只有一个x,在下一个 passwd命令会说明),用户编号(惟一的,不可重复)、用户组编号(目前系统给每人各自一个用户组编号)、用户全名(目前空着,在两个冒号之间)、用户主目录所在、用户选用的命令解释器(Shell)。

  练习:

  (1)请用 adduser 增设3个用户之后,再去观察 /etc 中的passwd文件。

  (2)系统能允许增设tommy和Tommy这样两个用户吗?

  passwd [用户名称]

  更改自己或别人的密码

  passwd 命令可以更改自己的密码,也可以更改别人的密码。如果后面没有接用户名称的话,它就是更改自己的密码:

  passwd

  如果接着一个用户名称的话,就是为这个用户设置或更改密码。当然,这个用户名称必须是已经用 adduser 命令增加过的名称才可以。不然密码文件里根本没有这行资料。(每个用户的密码资料文件,并不是在执行这个 passwd 命令时才有的,而是在执行 adduser 时就已经准备好了空白的,执行 passwd 只是把它再填进去而已。)

  passwd tommy

  前面提到,设置后的密码会存在 /etc 中的passwd文件中。那么如果我们把这个文件拿来读取,会不会看到别人的密码呢?可以看到,但是它已经经过“加密程序”处理,变成一堆不相干的字母和数字了。如图2-17所示。


图2-17 经加密处理的密码

  但是为了防范有心人士仍然对这些加密过的密码努力研究,近来最新的 Linux 系统又更进一步,把这堆加密过的密码再移到另外一个 /etc/shadow 中,而原来的 /etc/passwd 文件放置密码的地方,只留一个x字节。这就是在图2-16中看到的情况。

  而 /etc/shadow里只有超级用户有读取的权限,其他人想要看到加密过的密码都免谈。这就叫做最新的Shadow password功能,您在系统的安装过程中可能会看到。

  练习:

  (1)如果您设置的密码是1234567,会怎么样?

  (2)您添加两个用户,然后对它们分别设置一样的密码,然后到 /etc 里去看 /shadow 文件的内容,两个人加密后的码是一样的吗?

 chfn [用户名称]

  更改用户的资料

  用户的账号名称设立了,密码也设立了。这位用户到底真名为何?尤其中国人,英文名字其实都是随便取的。一个办公室里可能有很多个 john,超级用户要求他们用户名称不可以重复时,有的 john 就说我叫 johnny 好了,有的 john 就改叫 johnson,到最后,谁是谁也搞不清楚自己是谁了。

  chfn 可以留下真实的姓名(虽然您仍然可以用假名)、办公室、电话等资料。如图2-18所示。


图2-18 更改用户资料

  当对方不知道这个 tommy 是谁的时候,可以用 finger 命令查一下,免得送电子邮件时送错人。如图2-19所示。


图2-19 finger命令的作用

  练习:

  (1)对于从未使用过 chfn 设置资料的人(但是有此用户账号),对他使用 finger 命令会如何?

  (2)经过 chfn 设置资料的人,在 /etc 中的passwd文件中有什么变化?

chsh [-选项] [用户名称]

  更改用户所用的Shell 程序

  Linux 上的命令解释程序(Shell)有很多种,默认的是 bash 。如果有人不喜欢用这种命令解释程序,他可以自己更换,不必经过超级用户的同意。

  chsh 就是要达成这个任务的,用法举例如图2-20所示。


图2-20 chsh用法

  问题是,如果我根本不知道系统现在有哪些 Shell 可以供选择,那怎么办?

  下面这个选项可以解决您的问题:

  l -l 列出现在系统现有的 Shell

  如图2-21所示,就是命令chsh -l的作用。


图2-21 利用chsh -l

  练习:

  请列出您现在系统中现有的 Shell,并更改,然后看看文字命令模式的提示符号有没有什么改变。

chmod [权限值] [文件名]

  更改文件或目录的使用权限

  UNIX 系统对每一个文件或目录都记录有9个权限的属性值,前面3个是“所有者”的“读权限”、“写权限”、“执行权”,接着3个是“同一用户组的人”的“读权限”、“写权限”、“执行权”,最后3个是“其他人”的“读权限”、“写权限”、“执行权”。这点我们在介绍 ls 命令时提到过,用 ls -l 时,也可以清楚地看到。如图2-22所示。


图2-22 使用ls -l命令

  凡是有“读权限”,都会标示成“r”;有“写权限”,都会标示成“w”;有“执行权”,都会标示成“x”;如果没有该项权利,就会标上“-”。

  这些权限,就可以用 chmod 这个命令来设置和改变。

  我们要把上述9项权限化为3位数字来设置就很方便了。我们先看这一道命令是什么意思:

  chmod 755 mydoc

  mydoc是一个文件名称,那么 755 是什么意思呢?

  它的第一位数字是管“所有者”的权限的。

  它的第二位数字是管“同一用户组的人”的权限的。

  它的第三位数字是管“其他人”的权限的。

  每位数字都是照下面的算法得来的:

  如果赋予读权限,算4。

  如果赋予写权限,算2。

  如果赋予执行权,算1。

  请注意数字是可以累加起来的。也就是说,如果同时拥有读取和写权限,那就是4+2=6!

  这样您应该看得懂755的意思了吧?

  是的,它就是所有者有“读取”、“写入”、“执行”的三种权限,所以加起来是7。而同一用户组的人,和其他人都一样,只有“读取”、“执行”两种权限。所以我们猜测它的9项权限值排列起来应该是:

  rwxr-xr-x

  可以用 ls 查证一下对不对,如图2-23所示。


图2-23 查证mydoc文件的权限

  这样您应该就会用数字表示来设置权限了吧!

  另外还有一种方法要背英文字,“所有者”叫做u;“同一用户组的人”叫做g;其他人叫做o。(就是 user, group, other的头一个字母。)

  chmod u-x mydoc

  减去所有者对 mydoc 文件的执行权限。

  chmod g+rw mydoc

  增设对同一用户组的人对 mydoc 文件的读取和写权限。

  chmod g-rwx,o-rwx mydoc

  除了所有者以外,同一用户组的人和其他人都不得再对 mydoc 文件读取、写入、执行。

  chmod a+rwx mydoc

  a就是所有人(all)。从此所有的人都可以对 mydoc 文件读取、写入、执行。

  练习:

  (1)请用数字表示法把您所创建的一个文字文件设置为:所有者可以读取和写入,但不能执行;同一用户组的人也是一样;而其他人只能读取。

  (2)请用英文字母法把您所创建的一个文字文件设置为:所有者可以读取、写入和执行,但同一用户组的人只能读取;而其他人一样也不行。

chown [用户名称] [文件名称]

  更改文件或目录的所有者

  如果您有一个文件要转给他人使用,文件的所有者老是挂您的名字也不行啊。这时可以用 chown 命令来达成更改文件所有者的目的。

  例如有一个文件是公司的会计账册 acclist.doc,您代替会计小姐制表之后,要转给她 (lisa)用,那就按图2-24所示进行。


图2-24 更换文件所有者

  注意看一下,所有者已经改变了。

  练习:

  (1)某文件不是您拥有的,您能改变它的所有者吗?您是超级用户的话呢?试试看!

  (2)某文件已经转给他人使用了,您能把它转变回来,或者变成您也能存取的吗?如果您是超级用户的话呢?试试看!

 chgrp [用户组名称] [文件名称]

  更改文件或目录的所属用户组

  chgrp 命令与 chown 的意思很相近。chown 是改变文件的所有者,chgrp 是改变文件的用户组。

  例如,有一份公司产品的成本价格表,公司下令一般职员不能阅读,必须要经理级以上才可以过目。那么“经理”可以是一个“用户组”,例如我们可以取名为manager用户组,凡是属于这个用户组的人才有阅读权。

  问题是,我们练习这个命令之前,总要先有“用户组”才能练习吧。

  好,于是我们以超级用户的身份去编辑 /etc 目录下的group文件。

  我们假设 jacky, tommy, peggy 都是经理人员,而且这3个人的用户账号都已经存在了(就是说,已经用 adduser 命令去增设过了)。那么就新设立一行,开头是用户组名称,冒号隔开后是密码,不用设置,所以空着,再下来是用户组号码,这个超级用户可依其职权随意自行编定,系统规定只要比99大,比500小就可以。我们例子中编108当然可以。后面再把这个用户组的人列出来,中间用逗号隔开。输入完检查正确后就保存文件。如图2-25所示。


图2-25 编辑group文件

  我们注意到,上方每个人还各自有个“一人用户组”。但是因为系统允许一个人参加好几个用户组,所以消不消掉它都无所谓。

  现在我们把 prilist.doc文件设置给 manager 这个用户组。如图2-26所示。


图2-26 把 prilist.doc设给 manager组

  并设置此文件在同一用户组的权限。如图2-27所示。

  chmod 770 prilist.doc


图2-27 设置文件在同用户组的权限

  以后便只有jacky, tommy, paggy 三个人能看这个文件了。(除非 manager 这个用户组的人再增加。)

  练习:

  (1)当同一用户组在没有读取、写入和执行权的时候,其他人可能有任何一种权限吗?

  (2)现有会计室人员cora,她不是经理人员,但是理应让她也能看成本报表,那么有几种方法可以达成这样的要求?

 su

  使自己暂时变成超级用户

  请不要误会了这个命令的中文解释。当然,可能很多人都想变成超级用户,如果这个命令就能让人人都“变”,岂不大乱?

  比较精确一点的描述是这样,当某个普通用户正用到一半,发觉系统有问题时,找来超级用户查看。

  于是超级用户坐在他的机器前面,查看许久,发觉如果以这个人的权限并没有办法解决问题。于是他就输入su 命令,并且回答他才知道的 root 密码,这时,他就马上拥有超级用户的所有处理权限了。并不需要先将这个人的账号注销,再重新用root 登录。

  再一种可能是,其实超级用户并不需要天天都用root 的身份办事。他平常也是和大家一样打打文书、报表,玩玩遊戏,并没有使用root 权利的必要,所以他可能还有另外一个一般等级的账号使用,平常就装成普通人,在那里打文书报告。这样也可以避免他用 root 身份打报告,但是待会儿起身去洗手间的时候,被有心人拿他的机器来操作而根本不需知道密码。

  当然,突然有事发生的时候,这位仁兄就会走进附近的电话亭,走出来的时候,他已经变成了超人。不,超级用户。他只要输入一个su以及他的密码,马上就能替大家解决重大的系统问题。

  好了,您有没有注意到,从头到尾,最后用 su 的那个人,仍然是同一个人,就是知道密码的那一个人。并没有谁变成了超级用户。

  练习:

  (1)如果您是超级用户,才能练习这道题。到一般用户已经登录的机器上,下达 su 命令并回答密码试试看,权限是否有提升?

  (2)如果您是超级用户,才能练习这道题。请您另外创建一个一般账号,做日常事务。而真有事需要超级用户处理时,您才用su 命令并回答密码处理。

sudo 某命令

  暂时以超级用户身份执行某命令

  如果您是超级用户,而您打算要请假,却又不想把 root 密码告诉别人。这时您可以叫您的代理人在有必要的情况下,用 sudo 执行某些只有您可以执行的命令。

  sudo 后面接着的就是原本只有超级用户才能执行的命令,譬如 shutdown 关机。

  您放心,执行sudo 的人,要回答的只是他自己的密码,您的密码仍得以保密。当然,也并不是每个人都有执行 sudo 的权利。而是限于被您列在 /etc 中的sudoers名单中的人,甚至连他可以执行的命令,都被您明列在那份名单中,他别想趁您休假时胡作非为……

  所以,您应该可以想像到这份名单也事涉复杂吧!我们在这里就不谈名单的编辑了。如果您是超级用户所委讬的 sudo 人员,您就乖乖地做您该做的命令就是了,UNIX 系统可不是随随便便就有漏洞的!

  练习:

  因为 sudo 名单编辑较困难,所以本小节省略练习。

  uname [-选项]

  显示目前的版本等系统信息

  uname 可以知道您现在所用的操作系统的版本、硬件的名称等种种数据。这个命令没有什么变化,我们直接列出选项供您选用就可以了:

  l -m 显示硬件的型号。

  l -n 显示网络节点的名称。

  l -r 显示操作系统是第几个 release 版本(release 比version小)。

  l -s 显示操作系统名称。

  l -v 显示操作系统是第几个 version 版本。

  l -a 全显示出来。

  各选项的效果如图2-28所示。


图2-28 查看系统信息

  练习:

  请用 -a 选项全部查阅一下您现在所用的操作系统信息。

 who [-选项]

  显示目前有哪些人在使用

  who 命令很简单,就是查一下目前有谁在使用。

  如果您现在是使用单人单机,能否练习这个命令呢?还是可以的。

  我们提到过,Linux 系统默认有6个虚拟终端机。我们可以用【Ctrl+Alt+F1】, 【Ctrl+Alt+F2】, …【Ctrl+Alt+F6】分别把这几个终端机按出来。那么您就可以从各个虚拟终端机登录,然后用 who 命令查看是不是能监视到这些人。如图2-29所示。


图2-29 用who命令的结果

  练习:

  一般用户可以从两个以上的虚拟终端机进行登录吗?超级用户呢?

  whoami

  显示目前自己是谁

  这个命令的意思直译很有趣:“我是谁”?怎么会有人忘了他是谁呢?

  应该是没有人会忘记他是谁,但是我们举一个例子说明这个命令的用途:

  办公室里黄小姐和李先生每天都要在同一台UNIX的终端机上操作。有一天周末下午,超级用户来办公室,看到电脑没有关,人都下班跑光了。于是分别打黄小姐和李先生的手机,告诉他们下次要记得注销和关电脑。(注:关掉他们的终端机,不是关掉主系统。)

  黄小姐坚持说她关了电脑,李先生说他好像也关了,太忙了,忘记了临走前又开过一次然后忘了关呢,还是黄小姐没关。

  这时,超级用户只要走到终端机前面,输入一个whoami,答案不就出来了?

  练习:

  练习看看吧!你是谁?

ps [-选项]

  显示目前有哪些进程在执行

  记得在 Windows 里面,如果有一个程序没有响应,但其他程序和整个主系统没有问题的话,可以用【Ctrl+Alt+Del】键把现在正在执行的程序列出来,然后把那个唤不醒的程序“结束任务”。

  ps 命令最重要的用途就是配合下一个 kill 命令,专门列出现在在执行的“进程”(UNIX 的称呼,跟 Windows的程序定义稍微有一点不一样),准备让 kill 来“杀”的。

  ps 命令所列出的东西涉及比较深入,选项也多,需要较多的技术磨练才能完全了解,但我们初学时也能学会的,最主要的就是看它的进程号码。这个进程号码待会儿就成为 kill 命令杀死的依据。我们只看两个选项:

  l -e 列出所有的进程。

  l -l 以长格式显示更详细的资料。

  图2-30所示为加了选项的ps命令的执行情况。


图2-30 运行ps –le命令的情况

  练习:

  如果您是单人单机系统没有关系,从各个虚拟终端机登录进去,并执行很多个程序,然后用 ps 命令去观察,您就会慢慢体会出来的。

  kill [-选项]

  中断一个处理进程(process)

  在前面 ps 中命令提过,有时一两个或许有漏洞或许遇到存取不当的程序,可能会一直悬在那里不动,或者正好相反,它一直空转,永远无法结束。像DOS 那样的“单工”系统,这样的话就整个系统死机了。而像 Windows, UNIX(含 Linux)都是“多工”的系统,所以可以采行“壮士断腕”,把该程序(UNIX 称做进程,定义稍有不同)强迫中断掉。kill 就是这个工具。

  kill 不能乱来,必须要先用 ps 命令把那一个进程无响应的号码看清楚,再用号码指定的方式,把它中断。

  例如这是我们所看到的进程如图2-31所示。


图2-31 用ps –e命令查看进程号码

  这时可以用:

  kill 1652

  kill 1665

  等任何一个列出的号码中断进程。

  如果还不能,就使出杀手锏:

  kill -9 1652

  kill -9 1665

  再不行的话那真的只好整个系统 shutdown 重开了。

  练习:

  利用【Ctrl+Alt+F1】, 【Ctrl+Alt+F2】, …【Ctrl+Alt+F6】的多个虚拟终端机,执行多个进程,用 ps 命令观察并练习用 kill 把它们中断。

没有评论: