system.html

来自「BASH Shell 编程 经典教程 《高级SHELL脚本编程》中文版」· HTML 代码 · 共 4,056 行 · 第 1/5 页

HTML
4,056
字号
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><HTML><HEAD><TITLE>系统与管理命令</TITLE><METANAME="GENERATOR"CONTENT="Modular DocBook HTML Stylesheet Version 1.79"><LINKREL="HOME"TITLE="高级Bash脚本编程指南"HREF="index.html"><LINKREL="UP"TITLE="进阶"HREF="part3.html"><LINKREL="PREVIOUS"TITLE="混杂命令"HREF="extmisc.html"><LINKREL="NEXT"TITLE="分析一个系统脚本"HREF="sysscripts.html"></HEAD><BODYCLASS="CHAPTER"BGCOLOR="#FFFFFF"TEXT="#000000"LINK="#0000FF"VLINK="#840084"ALINK="#0000FF"><DIVCLASS="NAVHEADER"><TABLESUMMARY="Header navigation table"WIDTH="100%"BORDER="0"CELLPADDING="0"CELLSPACING="0"><TR><THCOLSPAN="3"ALIGN="center">高级Bash脚本编程指南: 一本深入学习shell脚本艺术的书籍</TH></TR><TR><TDWIDTH="10%"ALIGN="left"VALIGN="bottom"><AHREF="extmisc.html"ACCESSKEY="P">前一页</A></TD><TDWIDTH="80%"ALIGN="center"VALIGN="bottom"></TD><TDWIDTH="10%"ALIGN="right"VALIGN="bottom"><AHREF="sysscripts.html"ACCESSKEY="N">下一页</A></TD></TR></TABLE><HRALIGN="LEFT"WIDTH="100%"></DIV><DIVCLASS="CHAPTER"><H1><ANAME="SYSTEM"></A>13. 系统与管理命令</H1><P>在<TTCLASS="FILENAME">/etc/rc.d</TT>目录中的启动和关机脚本中包含了好多有用的(和没用的)系统管理命令. 		  这些命令通常总是被root用户使用, 用于系统维护或者是紧急系统文件修复. 		  一定要小心使用这些工具, 因为如果滥用的话, 它们会损坏你的系统. </P><P></P><DIVCLASS="VARIABLELIST"><P><B><ANAME="USERSGROUPS1"></A>User和Group类</B></P><DL><DT><BCLASS="COMMAND">users</B></DT><DD><P>显示所有的登录用户. 这个命令与<BCLASS="COMMAND">who -q</B>基本一致. </P></DD><DT><BCLASS="COMMAND">groups</B></DT><DD><P>列出当前用户和他所属的组. 这相当于<AHREF="internalvariables.html#GROUPSREF">$GROUPS</A>内部变量, 			但是这个命令将会给出组名字, 而不是数字. </P><TABLEBORDER="1"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="SCREEN"><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">groups</KBD><SAMPCLASS="COMPUTEROUTPUT">bozita cdrom cdwriter audio xgrp</SAMP><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">echo $GROUPS</KBD><SAMPCLASS="COMPUTEROUTPUT">501</SAMP></PRE></FONT></TD></TR></TABLE></DD><DT><BCLASS="COMMAND">chown</B>, <BCLASS="COMMAND">chgrp</B></DT><DD><P><BCLASS="COMMAND">chown</B>命令将会修改一个或多个文件的所有权. 			对于<TTCLASS="REPLACEABLE"><I>root</I></TT>用户来说, 		   如果他想将文件的所有权从一个用户换到另一个用户的话, 	      那么使用这个命令是非常好的选择. 	      一个普通用户不能修改文件的所有权, 即使他是文件的宿主也不行. 	         <ANAME="AEN10989"HREF="#FTN.AEN10989"><SPANCLASS="footnote">[1]</SPAN></A>	      </P><P>	      <TABLEBORDER="1"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="SCREEN"><SAMPCLASS="PROMPT">root# </SAMP><KBDCLASS="USERINPUT">chown bozo *.txt</KBD><SAMPCLASS="COMPUTEROUTPUT"></SAMP>	      </PRE></FONT></TD></TR></TABLE>	    </P><P><BCLASS="COMMAND">chgrp</B>将会修改一个或多个文件的<TTCLASS="REPLACEABLE"><I>group</I></TT>所有权. 			但前提是你必须是这些文件的宿主, 并且必须是目的组的成员(或者是<TTCLASS="REPLACEABLE"><I>root</I></TT>), 			这样你才能够使用这个命令. 	      <TABLEBORDER="0"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="PROGRAMLISTING">  1&nbsp;chgrp --recursive dunderheads *.data  2&nbsp;#  "dunderheads"(译者: 晕,蠢才...) 组现在拥有了所有的"*.data"文件.   3&nbsp;#+ 包括所有$PWD目录下的子目录中的文件(--recursive的作用就是包含子目录). </PRE></FONT></TD></TR></TABLE></P></DD><DT><BCLASS="COMMAND">useradd</B>, <BCLASS="COMMAND">userdel</B></DT><DD><P><BCLASS="COMMAND">useradd</B>管理命令将会在系统上添加一个用户帐号, 			  并且如果指定的话, 还会为特定的用户创建home目录. 	      相应的, <BCLASS="COMMAND">userdel</B>命令将会从系统上删除一个用户帐号, 		 <ANAME="AEN11020"HREF="#FTN.AEN11020"><SPANCLASS="footnote">[2]</SPAN></A>	      并且会删除相应的文件. </P><DIVCLASS="NOTE"><P></P><TABLECLASS="NOTE"WIDTH="90%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="./images/note.gif"HSPACE="5"ALT="Note"></TD><TDALIGN="LEFT"VALIGN="TOP"><P><BCLASS="COMMAND">adduser</B>与<BCLASS="COMMAND">useradd</B>是完全相同的, 			<BCLASS="COMMAND">adduser</B>通常仅仅是个符号链接. 	      </P></TD></TR></TABLE></DIV></DD><DT><BCLASS="COMMAND">usermod</B></DT><DD><P>修改用户帐号. 可以修改给定用户帐号的密码, 			  组身份, 截止日期, 或者其他一些属性. 			  使用这个命令, 用户的密码可能会被锁定, 因为密码会影响到帐号的有效性. 	      </P></DD><DT><BCLASS="COMMAND">groupmod</B></DT><DD><P>修改指定组. 组名字或者ID号都可以用这个命令来修改. 	      </P></DD><DT><ANAME="IDREF"></A><BCLASS="COMMAND">id</B></DT><DD><P><BCLASS="COMMAND">id</B>命令将会列出当前进程真实有效的用户ID, 还有用户的组ID. 			  这与Bash内部变量<AHREF="internalvariables.html#UIDREF">$UID</A>,	      <AHREF="internalvariables.html#EUIDREF">$EUID</A>, 和<AHREF="internalvariables.html#GROUPSREF">$GROUPS</A>很相像. 	      </P><TABLEBORDER="1"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="SCREEN"><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">id</KBD><SAMPCLASS="COMPUTEROUTPUT">uid=501(bozo) gid=501(bozo) groups=501(bozo),22(cdrom),80(cdwriter),81(audio)</SAMP><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">echo $UID</KBD><SAMPCLASS="COMPUTEROUTPUT">501</SAMP></PRE></FONT></TD></TR></TABLE><DIVCLASS="NOTE"><P></P><TABLECLASS="NOTE"WIDTH="90%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="./images/note.gif"HSPACE="5"ALT="Note"></TD><TDALIGN="LEFT"VALIGN="TOP"><P><BCLASS="COMMAND">id</B>命令只有在<EM>有效</EM>ID与<EM>实际</EM>ID不符时, 				才会显示<EM>有效</EM>ID. </P></TD></TR></TABLE></DIV><P>请参考<AHREF="internalvariables.html#AMIROOT">例子 9-5</A>. </P></DD><DT><ANAME="WHOREF"></A><BCLASS="COMMAND">who</B></DT><DD><P>显示系统上所有已经登录的用户. </P><P>	      <TABLEBORDER="1"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="SCREEN"><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">who</KBD><SAMPCLASS="COMPUTEROUTPUT">bozo  tty1     Apr 27 17:45 bozo  pts/0    Apr 27 17:46 bozo  pts/1    Apr 27 17:47 bozo  pts/2    Apr 27 17:49</SAMP>	      </PRE></FONT></TD></TR></TABLE>	    </P><P><CODECLASS="OPTION">-m</CODE>选项将会给出当前用户的详细信息. 			将任意两个参数传递到<BCLASS="COMMAND">who</B>中, 			都等价于<BCLASS="COMMAND">who -m</B>, 			就像<BCLASS="COMMAND">who am i</B>或<BCLASS="COMMAND">who The Man</B>. 		</P><P>	      <TABLEBORDER="1"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="SCREEN"><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">who -m</KBD><SAMPCLASS="COMPUTEROUTPUT">localhost.localdomain!bozo  pts/2    Apr 27 17:49</SAMP>	      </PRE></FONT></TD></TR></TABLE>	    </P><P><ANAME="WHOAMIREF"></A><BCLASS="COMMAND">whoami</B>与<BCLASS="COMMAND">who	      -m</B>很相似, 但是只列出用户名. </P><P>	      <TABLEBORDER="1"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="SCREEN"><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">whoami</KBD><SAMPCLASS="COMPUTEROUTPUT">bozo</SAMP>	      </PRE></FONT></TD></TR></TABLE>	    </P></DD><DT><BCLASS="COMMAND">w</B></DT><DD><P>显示所有的登录用户和属于它们的进程. 			  这是一个<BCLASS="COMMAND">who</B>命令的扩展版本. 			  <BCLASS="COMMAND">w</B>的输出可以通过管道传递到<BCLASS="COMMAND">grep</B>命令中, 			  这样就可以查找指定的用户或进程. </P><TABLEBORDER="1"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="SCREEN"><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">w | grep startx</KBD><SAMPCLASS="COMPUTEROUTPUT">bozo  tty1     -                 4:22pm  6:41   4.47s  0.45s  startx</SAMP></PRE></FONT></TD></TR></TABLE></DD><DT><BCLASS="COMMAND">logname</B></DT><DD><P>显示当前用户的登录名(可以在<TTCLASS="FILENAME">/var/run/utmp</TT>中找到). 			  这与上边的<AHREF="system.html#WHOAMIREF">whoami</A>很相近. 	      </P><TABLEBORDER="1"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="SCREEN"><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">logname</KBD><SAMPCLASS="COMPUTEROUTPUT">bozo</SAMP><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">whoami</KBD><SAMPCLASS="COMPUTEROUTPUT">bozo</SAMP></PRE></FONT></TD></TR></TABLE><P>然而...</P><TABLEBORDER="1"BGCOLOR="#E0E0E0"WIDTH="90%"><TR><TD><FONTCOLOR="#000000"><PRECLASS="SCREEN"><SAMPCLASS="PROMPT">bash$ </SAMP><KBDCLASS="USERINPUT">su</KBD><SAMPCLASS="COMPUTEROUTPUT">Password: ......</SAMP><SAMPCLASS="PROMPT">bash# </SAMP><KBDCLASS="USERINPUT">whoami</KBD><SAMPCLASS="COMPUTEROUTPUT">root</SAMP><SAMPCLASS="PROMPT">bash# </SAMP><KBDCLASS="USERINPUT">logname</KBD><SAMPCLASS="COMPUTEROUTPUT">bozo</SAMP></PRE></FONT></TD></TR></TABLE><DIVCLASS="NOTE"><P></P><TABLECLASS="NOTE"WIDTH="90%"BORDER="0"><TR><TDWIDTH="25"ALIGN="CENTER"VALIGN="TOP"><IMGSRC="./images/note.gif"HSPACE="5"ALT="Note"></TD><TDALIGN="LEFT"VALIGN="TOP"><P><BCLASS="COMMAND">logname</B>只会打印出登录的用户名, 				而<BCLASS="COMMAND">whoami</B>将会给出附着到当前进程的用户名. 				就像我们上边看到的那样, 这两个名字有时会不同. </P></TD></TR></TABLE></DIV></DD><DT><ANAME="SUREF"></A><BCLASS="COMMAND">su</B></DT><DD><P>使用替换的用户(<EM>s</EM>ubstitute <EM>u</EM>ser)身份来运行一个程序或脚本. 			<BCLASS="COMMAND">su rjones</B>将会以用户<EM>rjones</EM>的身份来启动shell. 			使用<BCLASS="COMMAND">su</B>命令时, 如果不使用任何参数的话, 			那默认就是<EM>root</EM>用户. 请参考<AHREF="contributed-scripts.html#FIFO">例子 A-15</A>. 			</P></DD><DT><BCLASS="COMMAND">sudo</B></DT><DD><P>以root(或其他用户)的身份来运行一个命令. 			  这个命令可以用在脚本中, 这样就允许以正规的用户身份来运行脚本. 	      </P><P><TABLE

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?