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 chgrp --recursive dunderheads *.data 2 # "dunderheads"(译者: 晕,蠢才...) 组现在拥有了所有的"*.data"文件. 3 #+ 包括所有$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 + -
显示快捷键?