Linux初学者教程

(一)基本命令--文件处理

file
  1.作用
  file通过探测文件内容判断文件类型,使用权限是所有用户。
  
  2.格式
  file [options] 文件名
  
  3.[options]主要参数
  -v:在标准输出后显示版本信息,并且退出。
  
  -z:探测压缩过的文件类型。
  
  -L:允许符合连接。
  
  -f name:从文件namefile中读取要分析的文件名列表。
  
  4.简单说明
  使用file命令可以知道某个文件究竟是二进制(ELF格式)的可执行文件, 还是Shell Script文件,或者是其它的什么格式。file能识别的文件类型有目录、Shell脚本、英文文本、二进制可执行文件、C语言源文件、文本文件、DOS的可执行文件。
  
  5.应用实例
  如果我们看到一个没有后缀的文件grap,可以使用下面命令:
  
  $ file grap
  
  grap: English text
  
  此时系统显示这是一个英文文本文件。需要说明的是,file命令不能探测包括图形、音频、视频等多媒体文件类型。
  
  mkdir
  1.作用
  mkdir命令的作用是建立名称为dirname的子目录,与MS DOS下的md命令类似,它的使用权限是所有用户。
  
  2.格式
  mkdir [options] 目录名
  
  3.[options]主要参数
  -m, --mode=模式:设定权限<模式>,与chmod类似。
  
  -p, --parents:需要时创建上层目录;如果目录早已存在,则不当作错误。
  
  -v, --verbose:每次创建新目录都显示信息。
  
  --version:显示版本信息后离开。
  
  4.应用实例
  在进行目录创建时可以设置目录的权限,此时使用的参数是“-m”。假设要创建的目录名是“tsk”,让所有用户都有rwx(即读、写、执行的权限),那么可以使用以下命令:
  
  $ mkdir -m 777 tsk
  
  grep
  1.作用
  grep命令可以指定文件中搜索特定的内容,并将含有这些内容的行标准输出。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
  
  2.格式
  grep [options]
  
  3.主要参数
  [options]主要参数:
  
  -c:只输出匹配行的计数。
  
  -I:不区分大小写(只适用于单字符)。
  
  -h:查询多文件时不显示文件名。
  
  -l:查询多文件时只输出包含匹配字符的文件名。
  
  -n:显示匹配行及行号。
  
  -s:不显示不存在或无匹配文本的错误信息。
  
  -v:显示不包含匹配文本的所有行。
  
  pattern正则表达式主要参数:
  
  /:忽略正则表达式中特殊字符的原有含义。
  
  ^:匹配正则表达式的开始行。
  
  $: 匹配正则表达式的结束行。
  
  /<:从匹配正则表达式的行开始。
  
  />:到匹配正则表达式的行结束。
  
  [ ]:单个字符,如[A]即A符合要求 。
  
  [ - ]:范围,如[A-Z],即A、B、C一直到Z都符合要求 。
  
  。:所有的单个字符。
  
  * :有字符,长度可以为0。
  
  正则表达式是Linux/Unix系统中非常重要的概念。正则表达式(也称为“regex”或“regexp”)是一个可以描述一类字符串的模式(Pattern)。如果一个字符串可以用某个正则表达式来描述,我们就说这个字符和该正则表达式匹配(Match)。这和DOS中用户可以使用通配符 “*”代表任意字符类似。在Linux系统上,正则表达式通常被用来查找文本的模式,以及对文本执行“搜索-替换”操作和其它功能。
  
  4.应用实例
  查询DNS服务是日常工作之一,这意味着要维护覆盖不同网络的大量IP地址。有时IP地址会超过2000个。如果要查看nnn.nnn网络地址,但是却忘了第二部分中的其余部分,只知到有两个句点,例如nnn nn..。要抽取其中所有nnn.nnn IP地址,使用[0-9 ]/{3 /}/.[0-0/{3/}/。含义是任意数字出现3次,后跟句点,接着是任意数字出现3次,后跟句点。
  
  $grep '[0-9 ]/{3 /}/.[0-0/{3/}/' ipfile
  
  补充说明,grep家族还包括fgrep和egrep。fgrep是fix grep,允许查找字符串而不是一个模式;egrep是扩展grep,支持基本及扩展的正则表达式,但不支持/q模式范围的应用及与之相对应的一些更加规范的模式。
  
  dd
  1.作用
  dd命令用来复制文件,并根据参数将数据转换和格式化。
  
  2.格式
  
  dd [options]
  
  3.[opitions]主要参数
  
  bs=字节:强迫 ibs=<字节>及obs=<字节>。
  
  cbs=字节:每次转换指定的<字节>。
  
  conv=关键字:根据以逗号分隔的关键字表示的方式来转换文件。
  
  count=块数目:只复制指定<块数目>的输入数据。
  
  ibs=字节:每次读取指定的<字节>。
  
  if=文件:读取<文件>内容,而非标准输入的数据。
  
  obs=字节:每次写入指定的<字节>。
  
  of=文件:将数据写入<文件>,而不在标准输出显示。
  
  seek=块数目:先略过以obs为单位的指定<块数目>的输出数据。
  
  skip=块数目:先略过以ibs为单位的指定<块数目>的输入数据。
  
  4.应用实例
  dd命令常常用来制作Linux启动盘。先找一个可引导内核,令它的根设备指向正确的根分区,然后使用dd命令将其写入软盘:
  
  $ rdev vmlinuz /dev/hda
  
  $dd if=vmlinuz of=/dev/fd0
  
  上面代码说明,使用rdev命令将可引导内核vmlinuz中的根设备指向/dev/hda,请把“hda”换成自己的根分区,接下来用dd命令将该内核写入软盘。
  
  find
  1.作用
  find命令的作用是在目录中搜索文件,它的使用权限是所有用户。
  
  2.格式
  find [path][options][expression]
  
  path指定目录路径,系统从这里开始沿着目录树向下查找文件。它是一个路径列表,相互用空格分离,如果不写path,那么默认为当前目录。
  
  3.主要参数
  [options]参数:
  
  -depth:使用深度级别的查找过程方式,在某层指定目录中优先查找文件内容。
  
  -maxdepth levels:表示至多查找到开始目录的第level层子目录。level是一个非负数,如果level是0的话表示仅在当前目录中查找。
  
  -mindepth levels:表示至少查找到开始目录的第level层子目录。
  
  -mount:不在其它文件系统(如Msdos、Vfat等)的目录和文件中查找。
  
  -version:打印版本。
  
  [expression]是匹配表达式,是find命令接受的表达式,find命令的所有操作都是针对表达式的。它的参数非常多,这里只介绍一些常用的参数。
  
  —name:支持统配符*和?。
  
  -atime n:搜索在过去n天读取过的文件。
  
  -ctime n:搜索在过去n天修改过的文件。
  
  -group grpoupname:搜索所有组为grpoupname的文件。
  
  -user 用户名:搜索所有文件属主为用户名(ID或名称)的文件。
  
  -size n:搜索文件大小是n个block的文件。
  
  -print:输出搜索结果,并且打印。
  
  4.应用技巧
  find命令查找文件的几种方法:
  
  (1)根据文件名查找
  
  例如,我们想要查找一个文件名是lilo.conf的文件,可以使用如下命令:
  
  find / -name lilo.conf
  
  find命令后的“/”表示搜索整个硬盘。
  
  (2)快速查找文件
  
  根据文件名查找文件会遇到一个实际问题,就是要花费相当长的一段时间,特别是大型Linux文件系统和大容量硬盘文件放在很深的子目录中时。如果我们知道了这个文件存放在某个目录中,那么只要在这个目录中往下寻找就能节省很多时间。比如smb.conf文件,从它的文件后缀“.conf”可以判断这是一个配置文件,那么它应该在/etc目录内,此时可以使用下面命令:
  
  find /etc -name smb.conf
  
  这样,使用“快速查找文件”方式可以缩短时间。
  
  (3)根据部分文件名查找方法
  
  有时我们知道只某个文件包含有abvd这4个字,那么要查找系统中所有包含有这4个字符的文件可以输入下面命令:
  
  find / -name '*abvd*'
  
  输入这个命令以后,Linux系统会将在/目录中查找所有的包含有abvd这4个字符的文件(其中*是通配符),比如abvdrmyz等符合条件的文件都能显示出来。
  
  (4) 使用混合查找方式查找文件
  
  find命令可以使用混合查找的方法,例如,我们想在/etc目录中查找大于500000字节,并且在24小时内修改的某个文件,则可以使用-and (与)把两个查找参数链接起来组合成一个混合的查找方式。
  
  find /etc -size +500000c -and -mtime +1
  
  mv
  1.作用
  mv命令用来为文件或目录改名,或者将文件由一个目录移入另一个目录中,它的使用权限是所有用户。该命令如同DOS命令中的ren和move的组合。
  
  2.格式
  mv[options] 源文件或目录 目标文件或目录
  
  3.[options]主要参数
  -i:交互方式操

(二)基本命令--文本编辑器Vi

介绍Linux上最常用的文本编辑器Vi。文本编辑器是所有计算机系统中最常使用的一种工具。用户在使用计算机的时候,往往需要建立自己的文件,无论是一般的文本文件、数据文件,还是编写的源程序文件,这些工作都离不开编辑器。
  Linux系统提供了一个完整的编辑器家族系列,如Ed、Ex、Vi和Emacs等,按功能它们可以分为两大类:行编辑器(Ed、Ex)和全屏幕编辑器(Vi、Emacs)。行编辑器每次只能对一行进行操作,使用起来很不方便。而全屏幕编辑器可以对整个屏幕进行编辑,用户编辑的文件直接显示在屏幕上,修改的结果可以立即看出来,克服了行编辑的那种不直观的操作方式,便于用户学习和使用,具有强大的功能。
  Vi是Linux系统的第一个全屏幕交互式编辑程序,它从诞生至今一直得到广大用户的青睐,历经数十年仍然是人们主要使用的文本编辑工具,足见其生命力之强,而强大的生命力是其强大的功能带来的。
  本章中,我们将循序渐进地介绍如何使用Vi来建立、编辑、显示以及处理文件。(注:文中的大写字母为[shift]键+相应的小写字母的组合)
   Vi简介
  Vi是“Visual interface”的简称,它在Linux上的地位就仿佛Edit程序在DOS上一样。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制,这是其他编辑程序所没有的。
  Vi不是一个排版程序,它不象Word或WPS那样可以对字体、格式、段落等其他属性进行编排,它只是一个文本编辑程序。
  Vi没有菜单,只有命令,且命令繁多。Vi有三种基本工作模式:命令行模式、文本输入模式和末行模式。
  命令行模式
  任何时候,不管用户处于何种模式,只要按一下键,即可使Vi进入命令行模式;我们在shell环境(提示符为$)下输入启动Vi命令,进入编辑器时,也是处于该模式下。
  在该模式下,用户可以输入各种合法的Vi命令,用于管理自己的文档。此时从键盘上输入的任何字符都被当做编辑命令来解释,若输入的字符是合法的Vi命令,则Vi在接受用户命令之后完成相应的动作。但需注意的是,所输入的命令并不在屏幕上显示出来。若输入的字符不是Vi的合法命令,Vi会响铃报警。
  文本输入模式
  在命令模式下输入插入命令i、附加命令a 、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被Vi当做文件内容保存起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按键即可。
  末行模式
  末行模式也称ex转义模式。
  Vi和Ex编辑器的功能是相同的,二者主要区别是用户界面。在Vi中,命令通常是单个键,例如i、a、o等;而在Ex中,命令是以按回车键结束的正文行。Vi有一个专门的“转义”命令,可访问很多面向行的Ex命令。在命令模式下,用户按“:”键即可进入末行模式下,此时Vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的提示符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令执行完后,Vi自动回到命令模式。例如:
  :1,$s / A / a / g
  则从文件第一行至文件尾将大写A全部替换成小写a。
  若在末行模式下输入命令过程中改变了主意,可按键,或用退格键将输入的命令全部删除之后,再按一下退格键,即可使Vi回到命令模式下。
  Vi编辑器的三种工作模式之间的转换如图11-1所示
  如果要从命令模式转换到编辑模式,可以键入命令a或者i;如果需要从文本模式返回,则按Esc键即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。
  第二十五课 Vi的进入与退出      2000年/6月/13日
  Vi 的进入
  用户登录到系统中之后,系统给出提示符“$”。在提示符后键入Vi和想要编辑(或建立)的文件名,便可进入Vi。
  [例1] 键入命令:
  $ vi example.c
  屏幕显示如下:
  ~
  ~
  ~
  ~
  ~
  ~
  ~
  ~
  ~
  ~
  ~
  ~
  ~
  “ example.c” [New File]
  如果只键入Vi,而不带文件名,也可以进入Vi。之后在光标处键入文件内容,退出Vi时,只需在退出命令后输入文件名即可。
  进入Vi之后,首先进入的就是命令模式,也就是说等待命令输入而不是文本输入。这时输入的字母都将作为命令来解释。光标停在屏幕第一行首位上(用表示),其余各行行首均有一个“~”符号,表示该行为空行。最后一行也称状态行,显示出当前正在编辑的文件名以及其状态。如本例是[New File],表示example.c是一个新建的文件。如果example.c文件已在系统中存在,那么输入上述命令后,则在屏幕上显示出该文件的内容,并且光标停在第一行的首位,在状态行显示出该文件的文件名、行数和字符数。
  [例2] 键入命令:
  $ vi example.c
  然后键入:
  #include
  main ( )
  { int k ;
  for ( k=0 ; k<3 ; k++) add( );
  }
  add( )
  { static int x=0;
  x++ ;
  printf(“x = %d/n”, x);
  }
  ~
  ~
  ~
  ~
  “ example.c” [ New File]
  注意,在这里我们为了节省篇幅起见,屏幕只显示15行。事实上,初始的显示行数与用户所用终端有关,一般的CRT终端可显示25行。在窗口系统中,显示行数与运行Vi的那个窗口有关。然而我们可以对显示行数进行设置。例如,在能显示25行的CRT终端上,让Vi只显示15行。设置的方法将在本节后面介绍。
  当用Vi建立一个新文件时,在进入Vi的命令中也可以不给出文件名,当编辑完文件需要保存数据时,再由用户指定文件名。
  进入Vi时,用户不仅可以指定一个待编辑的文件名,而且还有许多附加操作。
  如果希望在进入Vi之后,光标处于文件中特定的某行上,可在Vi后加上任选项+n,其中n为指定的行数。
  [例3] 键入命令:
  $ vi +5 example1.c
  后,屏幕显示如下:
  #include
  main ( )
  { int k ;
  for ( k=0 ; k<3 ; k++) add( );
  }
  add( )
  { static int x=0;
  x++ ;
  printf(“x = %d/n”, x);
  }
  ~
  ~
  ~
  ~
  ~
  “ example.c” 12 lines, 125 characters
  光标将位于文件example1.c中的第5行上。
  如果希望在进入Vi之后光标处于文件最末行,则只需把命令中附加项“+”后面的数字n省略掉即可。
  在进入Vi时,除了可以指定一个光标起始行号之外,还可以在命令中指定一个模式串,此时在进入Vi后,光标就处于文件中第一个与指定模式串相匹配的那行上。
  [例4] 键入命令:
  $ vi +/int example1.c
  屏幕显示如下:
  #include
  main ( )
  { int k ;
  for ( k=0 ; k<3 ; k++) add( );
  }
  add( )
  { static int x=0;
  x++ ;
  printf(“x = %d/n”, x);
  }
  ~
  ~
  ~
  ~
  ~
  “ example.c” 12 lines, 125 characters
  光标将位于文件example1.c中的第3行上。
  使用Vi可以同时编辑多个文件,只要在进入Vi的命令中写入所要操作的文件即可,还可以使用通配符。
  [例5] 键入命令:
  $ vi *.cat
  就可以编辑所有后缀为cat的文件了。当然,您还可以使用shell中内置的模式匹配来装载文件,这样会更富技巧性。一旦您在命令行中包含了所有的待编辑文件名,就可以在Vi中方便地移来移去。
  退出Vi
  当编辑完文件,准备退出Vi返回到shell时,可以使用以下几种方法之一。
  在命令模式中,连按两次大写字母Z,若当前编辑的文件曾被修改过,则Vi保存该文件后退出,返回到shell;若当前编辑的文件没被修改过,则Vi直接退出, 返回到shell。
  在末行模式下,输入命令:w
  Vi保存当前编辑文件,但并不退出,而是继续等待用户输入命令。在使用w命令时,可以再给编辑文件起一个新的文件名。
  [例6]
  :w newfile
  此时Vi将把当前文件的内容保存到指定的newfile中,而原有文件保持不变。若newfile是一个已存在的文件,则Vi在显示窗口的状态行给出提示信息:
  File exists (use ! to override)
  此时,若用户真的希望用文件的当前内容替换newfile中原有内容,可使用命令
  :w! newfile
  否则可选择另外的文件名来保存当前文件。
  在末行模式下,输入命令:q
  系统退出Vi返回到shell。若在用此命令退出Vi时,编辑文件没有被保存,则Vi在显示窗口的最末行显示如下信息:
  No write since last change (use ! to overrides)
  提示用户该文件被修改后没有保存,然后Vi并不退出,继续等待用户命令。若用户就是不想保存被修改后的文件而要强行退出Vi时,可使用命令:q!
  Vi放弃所作修改而直接退到shell下。
  在末行模式下,输入命令:wq
  Vi将先保存文件,然后退出Vi返回到shell。
  在末行模式下,输入命令:x
  该命令的功能同命令模式下的ZZ命令功能相同。
  Vi中的行号
  Vi中的许多命令都要用到行号及行数等数值。若编辑的文件较大时,自己去数是非常不方便的。为此Vi提供了给文本加行号的功能。这些行号显示在屏幕的左边,而相应行的内容则显示在行号之后。
  使用的命令为:在末行方式下输入命令:
  :set number
  需要说明的是,这里加的行号只是显示给用户看的,它们并不是文件内容的一部分。
  在一个较大的文件中,用户可能需要了解光标当前行是哪一行,在文件中处于什么位置,可在命令模式下  

(三)基本命令---关机命令详解

在linux下一些常用的关机/重启命令有shutdown、halt、reboot、及init,它们都可以达到重启系统的目的,但每个命令的内部工作过程是不同的,通过本文的介绍,希望你可以更加灵活的运用各种关机命令.
  在linux下一些常用的关机/重启命令有shutdown、halt、reboot、及init,它们都可以达到重启系统的目的,但每个命令的内部工作过程是不同的,通过本文的介绍,希望你可以更加灵活的运用各种关机命令。
  
    1.shutdown
  
    shutdown命令安全地将系统关机。有些用户会使用直接断掉电源的方式来关闭linux,这是十分危险的。因为linux与windows不同,其后台运行着许多进程,所以强制关机可能会导致进程的数据丢失╋使系统处于不稳定的状态╋甚至在有的系统中会损坏硬件设备。
  
    而在系统关机前使用shutdown命令╋系统管理员会通知所有登录的用户系统将要关闭。并且login指令会被冻结╋即新的用户不能再登录。直接关机或者延迟一定的时间才关机都是可能的╋还可能重启。这是由所有进程〔process〕都会收到系统所送达的信号〔signal〕决定的。这让像vi之类的程序有时间储存目前正在编辑的文档╋而像处理邮件〔mail〕和新闻〔news〕的程序则可以正常地离开等等。
  
    shutdown执行它的工作是送信号〔signal〕给 init程序╋要求它改变runlevel。Runlevel 0被用来停机〔halt〕╋runlevel 6是用来重新激活〔reboot〕系统╋而runlevel 1则是被用来让系统进入管理工作可以进行的状态?这是预设的╋假定没有-h也没有-r参数给shutdown。要想了解在停机〔halt〕或者重新开机〔reboot〕过程中做了哪些动作╋你可以在这个文件/etc/inittab里看到这些runlevels相关的资料。
  
    shutdown 参数说明:
  
    [-t] 在改变到其它runlevel之前╋告诉init多久以后关机。
  
    [-r] 重启计算器。
  
    [-k] 并不真正关机╋只是送警告信号给每位登录者〔login〕。
  
    [-h] 关机后关闭电源〔halt〕。
  
    [-n] 不用init╋而是自己来关机。不鼓励使用这个选项╋而且该选项所产生的后果往往不总是你所预期得到的。
  
    [-c] cancel current process取消目前正在执行的关机程序。所以这个选项当然没有时间参数╋但是可以输入一个用来解释的讯息╋而这信息将会送到每位使用者。
  
    [-f] 在重启计算器〔reboot〕时忽略fsck。
  
    [-F] 在重启计算器〔reboot〕时强迫fsck。
  
    [-time] 设定关机〔shutdown〕前的时间。
  
    2.halt----最简单的关机命令
  
    其实halt就是调用shutdown -h。halt执行时╋杀死应用进程╋执行sync系统调用╋文件系统写操作完成后就会停止内核。
  
    参数说明:
  
    [-n] 防止sync系统调用╋它用在用fsck修补根分区之后╋以阻止内核用老版本的超级块〔superblock〕覆盖修补过的超级块。
  
    [-w] 并不是真正的重启或关机╋只是写wtmp〔/var/log/wtmp〕纪录。
  
    [-d] 不写wtmp纪录〔已包含在选项[-n]中〕。
  
    [-f] 没有调用shutdown而强制关机或重启。
  
    [-i] 关机〔或重启〕前╋关掉所有的网络接口。
  
    [-p] 该选项为缺省选项。就是关机时调用poweroff。
  
    3.reboot
  
    reboot的工作过程差不多跟halt一样╋不过它是引发主机重启╋而halt是关机。它的参数与halt相差不多。
  
    4.init
  
    init是所有进程的祖先╋它的进程号始终为1╋所以发送TERM信号给init会终止所有的用户进程?守护进程等。shutdown 就是使用这种机制。init定义了8个运行级别(runlevel),init 0为关机╋init 1为重启。关于init可以长篇大论╋这里就不再叙述。另外还有telinit命令可以改变init的运行级别╋比如╋telinit -iS可使系统进入单用户模式╋并且得不到使用shutdown时的信息和等待时间。

(四)基本命令----系统管理有关命令

wall命令
  这个命令的功能是对全部已登录的用户发送信息,用户可以先把要发送的信息写好存入一个文件中,然后输入:
  # wall < 文件名
  这样就能对所有的用户发送信息了。
  在上面的例子中符号“<”表示输入重定向,有关它的含义和用法请参阅第十章的有关内容。
  例如:
  # wall ‘Thank you!’
  Broadcast message from root (tty1) Fri Nov 26 14:15:07 1999…
  Thank you!
  #
  执行以上命令后,用户的屏幕上显示出“Thank you!”信息后,并不出现系统提示符$(#),再次按回车键后,屏幕出现系统提示符。
  write命令
  write命令的功能是向系统中某一个用户发送信息。
  该命令的一般格式为:
  write 用户帐号 [终端名称]
  例如:
  $ write xxq
  hello
  此时系统进入发送信息状态,用户可以输入要发送的信息,输入完毕,希望退出发送状态时,按组合键即可。
  上述命令执行的结果是,用户xxq的屏幕上会显示:
  message from [email protected] tty1 at 15:51…
  hello
  EOF
  mesg指令
  mesg命令设定是否允许其他用户用write命令给自己发送信息。如果允许别人给自己发送信息,输入命令:
  # mesg y
  否则,输入:
  # mesg n
  对于超级用户,系统的默认值为 n;而对于一般用户系统的默认值为y。
  如果mesg后不带任何参数,则显示当前的状态是y还是n,如:
  $ mesg
  is y
  或:
  # mesg
  is n
  sync命令
  sync命令是在关闭Linux系统时使用的。
  用户需要注意的是,不能用简单的关闭电源的方法关闭系统,因为Linux象其他Unix系统一样,在内存中缓存了许多数据,在关闭系统时需要进行内存数据与硬盘数据的同步校验,保证硬盘数据在关闭系统时是最新的,只有这样才能确保数据不会丢失。一般正常的关闭系统的过程是自动进行这些工作的,在系统运行过程中也会定时做这些工作,不需要用户干预。
  sync命令是强制把内存中的数据写回硬盘,以免数据的丢失。用户可以在需要的时候使用此命令。该命令的一般格式为:
  sync
  shutdown命令
  shutdown 命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。精确时间的格式是hh:mm,表示小时和分钟;时间段由“+”和分钟数表示。系统执行该命令后,会自动进行数据同步的工作。该命令的一般格式为:
  shutdown [选项] [时间] [警告信息]
  命令中各选项的含义为:
  - k 并不真正关机,而只是发出警告信息给所有用户。
  - r 关机后立即重新启动。
  - h 关机后不重新启动。
  - f 快速关机,重启动时跳过fsck。
  - n 快速关机,不经过init程序。
  - c 取消一个已经运行的shutdown。
  需要特别说明的是,该命令只能由超级用户使用。
  例1:系统在十分钟后关机,并且马上重新启动。
  # shutdown ? r +10
  例2:系统马上关机,并且不重新启动。
  # shutdown ? h now
  free命令
  free命令的功能是查看当前系统内存的使用情况,它显示系统中剩余及已用的物理内存和交换内存,以及共享内存和被核心使用的缓冲区。该命令的一般格式为:
  free [-b | -k | -m]
  命令中各选项的含义如下:
  -b 以字节为单位显示。
  -k 以K字节为单位显示。
  -m 以兆字节为单位显示。
  例:
  $ free
  total used free shared buffers cached
  Mem: 63076 32020 31056 8204 16360 6048
  -/+ buffers/cache: 9612 53464
  Swap: 64476 2240 62236
  uptime命令
  uptime命令显示系统已经运行了多长时间,它依次显示下列信息:现在时间、系统已经运行了多长时间、目前有多少登录用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。该命令的一般格式为:
  uptime
  例:
  # uptime
  4:43pm up 1 day, 5:51, 2 user, load average: 0.01, 0.01, 0.00
  与用户有关的命令
  passwd命令
  出于系统安全考虑,Linux系统中的每一个用户除了有其用户名外,还有其对应的用户口令。因此使用useradd命令增加时,还需使用passwd命令为每一位新增加的用户设置口令;用户以后还可以随时用passwd命令改变自己的口令。该命令的一般格式为:
  passwd [用户名]
  其中用户名为需要修改口令的用户名。只有超级用户可以使用“passwd 用户名”修改其他用户的口令,普通用户只能用不带参数的passwd命令修改自己的口令。该命令的使用方法如下:
  输入passwd< Enter>;
  在(current) UNIX passwd:下输入当前的口令
  在new password:提示下输入新的口令(在屏幕上看不到这个口令):
  系统提示再次输入这个新口令。
  输入正确后,这个新口令被加密并放入/etc/shdow文件。选取一个不易被破译的口令是很重要的。选取口令应遵守如下规则:
  口令应该至少有六位(最好是八位)字符;
  口令应该是大小写字母、标点符号和数字混杂的。
  超级用户修改其他用户(xxq)的口令的过程如下,
  # passwd xxq
  New UNIX password:
  Retype new UNIX password:
  passwd: all authentication tokens updated successfully
  #
  su命令
  这个命令非常重要。它可以让一个普通用户拥有超级用户或其他用户的权限,也可以让超级用户以普通用户的身份做一些事情。普通用户使用这个命令时必须有超级用户或其他用户的口令。如要离开当前用户的身份,可以打exit。
  该命令的一般形式为:
  su [选项] [? ] [使用者帐号]
  说明:若没有指定使用者帐号,则系统预设值为超级用户root。
  该命令中各选项的含义分别为:
  ? c 执行一个命令后就结束。
  ? 加了这个减号的目的是使环境变量和欲转换的用户相同。
  ? m 保留环境变量不变。
  例1: 变成root用户
  $ su ?
  password: 【输入超级用户的密码】
  例2: 变成xu使用者,并执行一个命令就结束。
  $ su -xu ? c “rmdir cat1”
  其他命令
  echo命令
  echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。该命令的一般格式为:
  echo [ -n ] 字符串
  其中选项n表示输出文字后不换行;字符串可以加引号,也可以不加引号。用echo命令输出加引号的字符串时,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。
  例1:
  $ echo ‘Thank you !’
  Thank you !
  例2:
  $ echo Thank you !
  Thank you !
  cal命令
  cal命令的功能是显示某年某月的日历。该命令的一般格式为
  cal [选项] [月 [年]]
  命令中各选项的含义为:
  - j 显示出给定月中的每一天是一年中的第几天(从1月1日算起)。
  - y 显示出整年的日历。
  例1 显示1999年11月的日历。
  $ cal 11 1999
  November 1999
  Su Mo Tu We Th Fr Sa
  1 2 3 4 5 6
  7 8 9 10 11 12 13
  14 15 16 17 18 19 20
  21 22 23 24 25 26 27
  28 29 30
  例2 显示1999年11月的每一天是一年中的第几天。
  $ cal ? j 11 1999
  November 1999
  Sun Mon Tue Wed Thu Fri Sat
  305 306 307 308 309 310
  311 312 313 314 315 316 317
  318 319 320 321 322 323 324
  325 326 327 328 329 330 331
  332 333 334
  date命令
  date命令的功能是显示和设置系统日期和时间。该命令的一般格式为:
  date [选项] 显示时间格式(以+开头,后面接格式)
  date 设置时间格式
  命令中各选项的含义分别为:
  -d datestr, --date datestr 显示由datestr描述的日期
  -s datestr, --set datestr 设置datestr 描述的日期
  -u, --universal 显示或设置通用时间
  时间域
  % H 小时(00..23)
  % I 小时(01..12)
  % k 小时(0..23)
  % l 小时(1..12)
  % M 分(00..59)
  % p 显示出AM或PM
  % r 时间(hh:mm:ss AM或PM),12小时
  % s 从1970年1月1日00:00:00到目前经历的秒数
  % S 秒(00..59)
  % T 时间(24小时制)(hh:mm:ss)
  % X 显示时间的格式(%H:%M:%S)
  % Z 时区
  日期域
  % a 星期几的简称( Sun..Sat)
  % A 星期几的全称( Sunday..Saturday)
  % b 月的简称(Jan..Dec)
  % B 月的全称(January..December)
  % c 日期和时间( Mon Nov 8 14:12:46 CST 1999)
  % d 一个月的第几天(01..31)
  % D 日期(mm/dd/yy)
  % h 和%b选项相同
  % j 一年的第几天(001..366)
  % m 月(01..12)
  % w 一个星期的第几天(0代表星期天)
  % W 一年的第几个星期(00..53,星期一为第一天)
  % x 显示日期的格式(mm/dd/yy)
  % y 年的最后两个数字( 1999则是99)
  % Y 年(例如:1970,1996等)
  需要特别说明的是,只有超级用户才能用date命令设置时间,一般用户只能用date命令显示时间。
  例1:用指定的格式显示时间。
  $ date ‘+This date now is =>

(五)基本命令------网络通信命令

ytalk
  
  功能说明:与其他用户交谈。
  
  语  法:ytalk [-isxY][-h<主机名称IP地址>][用户名称...]
  
  补充说明:通过ytalk指令,你可以和其他用户线上交谈,如果想和其他主机的用户交谈,在用户名称后加上其主机名称或IP地址即可。
  
  参  数:
  -h<主机名称IP地址> 指定交谈对象所在的远端主机。
  -i 用提醒声响代替显示信息。
  -s 在指令提示符号先开启ytalk交谈窗。
  -x 关闭图形界面。
  -Y 所有必须回应yes或no的问题,都必须用大写英文字母"Y"或"N"回答。
  
  ----------------------------------------------------
  
  write
  
  功能说明:传送信息。
  
  语  法:write [用户名称][终端机编号]
  
  补充说明:通过write指令可传递信息给另一位登入系统的用户,当输入完毕后,键入EOF表示信息结束,write指令就会将信息传给对方。如果接收信息的用户不只登入本地主机一次,你可以指定接收信息的终端机编号。
  
  ------------------------------------------------------------
  
  wall(write all)
  
  功能说明:传送信息。
  
  语  法:wall [公告信息]
  
  补充说明:通过wall指令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall指令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户。
  
  -------------------------------------------------------
  
  uux
  
  功能说明:在远端的UUCP主机上执行指令。
  
  语  法:uux [-bcCIjlnrvz][-a<地址>][-g<等级>][-s<文件>][-x<层级>][--help][指令]
  
  补充说明:uux可在远端的UUCP主机上执行指令或是执行本机上的指令,但在执行时会使用远端电脑的文件。
  
  参  数:
  -或-p或--stdin 直接从键盘读取要执行的指令。
  -a<地址>或--requestor<地址> 执行邮件地址,以便寄送状态信息。
  -b或--erturn-stdin 在屏幕上显示状态信息。
  -c或--nocopy 不用将文件复制到缓冲区。
  -C或--copy 将文件复制到缓冲区。
  -g<等级>或--grade<等级> 指定文件传送作业的优先顺序。
  -I或--config file 指定uux配置文件。
  -j或--jobid 显示作业编号。
  -l或--link 将本机上的文件连接到缓冲区。
  -n或--notification=no 无论发生任何状态,都不寄邮件通知用户。
  -r或--nouucico 不要立即启动uucico服务程序,仅将作业送到队列中,然后再执行。
  -s<文件>或--status<文件> 将完成状态保存为指定的文件。
  -v或--version 显示版本信息。
  -x<层级>或--debug<层级> 指定排错层级。
  -z或--notification=error 若发生错误,则以邮件来通知用户。
  --help 显示帮助。
  
  ------------------------------------------------
  
  uustat
  
  功能说明:显示UUCP目前的状况。
  
  语  法:uustat [-aeiKmMNpqQRv][-B<行数>][-c<指令>][-C<指令>][-I<配置文件 >][-k<工作>][-o<小时>][-r<工作>][-s<主机>][-S<主机 >][-u<用户>][-U<用户>][-W<附注>][-y<小时>][-x<层级 >][--help]
  
  补充说明:执行uucp与uux指令后,会先将工作送到队列,再由uucico来执行工作。uustat可显示,删除或启动队列中等待执行的工作。
  
  参  数:
  -a或-all 显示全部的UUCP工作。
  -B<行数>或--mail-lines<行数> 与-M或-N参数一并使用,用来指定邮件中要包含多少行的信息。
  -c<指令>或--command<指令> 显示与<指令>有关的工作。
  -C<指令>或--not-command<指令> 显示与<指令>无关的工作。
  -e或--executions 仅显示待执行的工作。
  -i或--prompt 针对队列中的每项工作,询问使用是否要删除工作。
  -I<配置文件>或--config<配置文件> 指定配置文件。
  -k<工作>或--kill<工作> 删除指定的工作。
  -m或--status 删除全部的工作。
  -M或-mail 将状态信息邮寄给UUCP管理员。
  -N或--notify 将状态信息分别邮寄给提出该项工作的用户。
  -o<小时>或--older-than<小时> 显示超过指定时数的工作。
  -p或--ps 显示负责UUCP锁定的程序。
  -q或--list 显示每台远端主机上所要执行工作的状态。
  -Q或--no-list 不显示工作。
  -r<工作>或--rejuvenate<工作> 重新启动指定的工作。
  -R或--rejuvenate-all 重新启动全部的工作。
  -s<主机>或--system<主机> 显示与<主机>有关的工作。
  -S<主机>或--not-system<主机> 显示与<主机>无关的工作。
  -v或--version 显示版本信息。
  -u<用户>或--user<用户> 显示与<用户>有关的工作。
  -U<用户>或--not-user<用户> 显示与<用户>无关的工作。
  -W<附注>或--comment<附注> 要放在邮件信息中的附注。
  -y<小时>或--younger-than<小时> 显示低于指定时数的工作。
  -x<层级>或--debug<层级> 指定排错层级。
  --help 显示帮助。
  
  ----------------------------------------------------
  
  uuname
  
  功能说明:显示全部的UUCP远端主机。
  
  语  法:uuname [-alv][-I<配置文件>][--help]
  
  补充说明:uuname可显示UUCP远端主机。
  
  参  数:
  -a或--aliases 显示别名。
  -I<配置文件>或--config<配置文件> 指定程序的配置文件。
  -l或--local 显示本机名称。
  -v或--version 显示版本信息。
  --help 显示帮助。
  
  -------------------------------------------------
  
  uulog
  
  功能说明:显示UUCP记录文件。
  
  语  法:uulog [-DFISv][-<行数>][-f<主机>][-I<配置文件>][-n<行数>][-s< 主机>][-u<用户>][-X<层级>][--help]
  
  补充说明:uulog可用来显示UUCP记录文件中记录。
  
  参  数:
  -D或--debuglog 显示排错记录。
  -f<主机>或--follow<主机> 与-F参数类似,但仅显示与指定主机相关的记录。
  -I<配置文件>或--config<配置文件> 指定程序的配置文件。
  -<行数>,-n<行数>或--lines<行数> 显示记录文件中,从最后算起指定行数的数值。
  -s<主机> 仅显示记录文件中,与指定文件相关的记录。
  -S或--statslog 显示统计记录。
  -u<用户>或--suer<用户> 仅显示记录文件中,与指定用户相关的记录。
  -v或--version 显示版本信息。
  -X<层级>或--debug<层级> 设定排错层级。
  --help 显示帮助。
  
  --------------------------------------------------
  
  tty(teletypewriter)
  
  功能说明:显示终端机连接标准输入设备的文件名称。
  
  语  法:tty [-s][--help][--version]
  
  补充说明:在Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号以特殊文件的类型存放于/dev目录下。你可以执行tty指令查询目前使用的终端机的文件名称。
  
  参  数:
  -s或--silent或--quiet 不显示任何信息,只回传状态代码。
  --help 在线帮助。
  --version 显示版本信息。
  
  ------------------------------------------------------
  
  traceroute
  
  功能说明:显示数据包到主机间的路径。
  
  语  法:traceroute [-dFlnrvx][-f<存活数值>][-g<网关>...][-i<网络界面>][-m<存活数值 >][-p<通信端口>][-s<来源地址>][-t<服务类型>][-w<超时秒数>][主机名称或IP地址][数据包大小]
  
  补充说明:traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40Bytes,用户可另行设置。
  
  参  数:
  -d 使用Socket层级的排错功能。
  -f<存活数值> 设置第一个检测数据包的存活数值TTL的大小。
  -F 设置勿离断位。
  -g<网关> 设置来源路由网关,最多可设置8个。
  -i<网络界面> 使用指定的网络界面送出数据包。
  -I 使用ICMP回应取代UDP资料信息。
  -m<存活数值> 设置检测数据包的最大存活数值TTL的大小。
  -n 直接使用IP地址而非主机名称。
  -p<通信端口> 设置UDP传输协议的通信端口。
  -r 忽略普通的Routing Table,直接将数据包送到远端主机上。
  -s<来源地址> 设置本地主机送出数据包的IP地址。
  -t<服务类型> 设置检测数据包的TOS数值。
  -v 详细显示指令的执行过程。
  -w<超时秒数> 设置等待远端主机回报的时间。
  -x 开启或关闭数据包的正确性检验。
  
  -------------------------------------------------------
  
  testparm(test parameter)
  
  功能说明:测试Samba的设置是否正确无误。
  
  语  法:testparm [-s][配置文件][<主机名称> ]
  
  补充说明:执行testparm指令可以简单测试Samba的配置文件,假如测试结果无误,Samba常驻服务就能正确载入该设置值,但并不保证其后的操作如预期般一切正常。
  
  参  数:
  -s 不显示提示符号等待用户按下Enter键,就直接列出Samba服务定义信息

(六)基本命令------常用网络命令

 netstat命令
  
  netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。
  
  该命令的一般格式为:
  
  netstat [选项]
  
  命令中各选项的含义如下:
  
  -a 显示所有socket,包括正在监听的。
  
  -c 每隔1秒就重新显示一遍,直到用户中断它。
  
  -i 显示所有网络接口的信息,格式同“ifconfig -e”。
  
  -n 以网络IP地址代替名称,显示出网络连接情形。
  
  -r 显示核心路由表,格式同“route -e”。
  
  -t 显示TCP协议的连接情况。
  
  -u 显示UDP协议的连接情况。
  
  -v 显示正在进行的工作。
  
  [例]在本地机上使用netstat命令。
  
  $ netstat
  
  Active Internet connections (w/o servers)
  
  Proto Recv-Q Send-Q Local Address Foreign Address State
  
  Active UNIX domain sockets (w/o servers)
  
  Proto RefCnt Flags Type State I-Node Path
  
  unix 1 [ ] STREAM CONNECTED 270 @00000008
  
  unix 1 [ ] STREAM CONNECTED 150 @00000002
  
  unix 1 [ ] STREAM CONNECTED 104 @00000001
  
  unix 1 [ ] STREAM CONNECTED 222 @00000004
  
  unix 1 [ ] STREAM CONNECTED 171 @00000003
  
  unix 1 [ ] STREAM CONNECTED 271 /dev/log
  
  unix 1 [ ] STREAM CONNECTED 225 /dev/log
  
  unix 1 [ ] STREAM CONNECTED 223 /dev/log
  
  unix 1 [ ] STREAM CONNECTED 203 /dev/log
  
  unix 1 [ ] STREAM CONNECTED 105 /dev/log
  
  ……
  
  nslookup命令
  
  nslookup命令的功能是查询一台机器的IP地址和其对应的域名。它通常需要一台域名服务器来提供域名服务。如果用户已经设置好域名服务器,就可以用这个命令查看不同主机的IP地址对应的域名。
  
  该命令的一般格式为:
  
  nslookup [IP地址/域名]
  
  [例]在本地机上使用nslookup命令。
  
  $ nslookup
  
  Default Server: name.tlc.com.cn
  
  Address: 192.168.1.99
  
  >
  
  在符号“>”后面输入要查询的IP地址或域名并回车即可。如果要退出该命令,输入exit并回车即可。
  
  finger命令
  
  finger命令的功能是查询用户的信息,通常会显示系统中某个用户的用户名、主目录、停滞时间、登录时间、登录shell等信息。如果要查询远程机上的用户信息,需要在用户名后面接“@主机名”,采用[用户名@主机名]的格式,不过要查询的网络主机需要运行finger守护进程。
  
  该命令的一般格式为:
  
  finger [选项] [使用者] [用户@主机]
  
  命令中各选项的含义如下:
  
  -s 显示用户的注册名、实际姓名、终端名称、写状态、停滞时间、登录时间等信息。
  
  -l 除了用-s选项显示的信息外,还显示用户主目录、登录shell、邮件状态等信息,以及用户主目录下的.plan、.project和.forward文件的内容。
  
  -p 除了不显示.plan文件和.project文件以外,与-l选项相同。 
  
  [例]在本地机上使用finger命令。
  
  $ finger xxq
  
  Login: xxq Name:
  
  Directory: /home/xxq Shell: /bin/bash
  
  Last login Thu Jan 1 21:43 (CST) on tty1
  
  No mail.
  
  No Plan. 
  
  $ finger
  
  Login Name Tty Idle Login Time Office Office Phone
  
  root root *1 28 Nov 25 09:17
  
  ……
  
  ping命令
  
  ping命令用于查看网络上的主机是否在工作,它向该主机发送ICMP ECHO_REQUEST包。有时我们想从网络上的某台主机上下载文件,可是又不知道那台主机是否开着,就需要使用ping命令查看。
  
  该命令的一般格式为:
  
  ping [选项] 主机名/IP地址
  
  命令中各选项的含义如下:
  
  -c 数目 在发送指定数目的包后停止。
  
  -d 设定SO_DEBUG的选项。
  
  -f 大量且快速地送网络封包给一台机器,看它的回应。
  
  -I 秒数 设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。
  
  -l 次数 在指定次数内,以最快的方式送封包数据到指定机器(只有超级用户可以使用此选项)。
  
  -q 不显示任何传送封包的信息,只显示最后的结果。
  
  -r 不经由网关而直接送封包到一台机器,通常是查看本机的网络接口是否有问题。
  
  -s 字节数 指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。

(七)基本命令--------进程调度

kill命令
    当需要中断一个前台进程的时候,通常是使用组合键;但是对于一个后台进程恐怕就不是一个组合键所能解决的了,这时就必须求助于kill命令。该命令可以终止后台进程。至于终止后台进程的原因很多,或许是该进程占用的CPU时间过多;或许是该进程已经挂死。总之这种情况是经常发生的。
    kill命令是通过向进程发送指定的信号来结束进程的。如果没有指定发送信号,那么默认值为TERM信号。TERM信号将终止所有不能捕获该信号的进程。至于那些可以捕获该信号的进程可能就需要使用kill(9)信号了,该信号是不能被捕捉的。
    kill命令的语法格式很简单,大致有以下两种方式:
    kill [-s 信号 | -p ] [ -a ] 进程号 ...
    kill -l [信号]
    -s 指定需要送出的信号。既可以是信号名也可以对应数字。
    -p 指定kill命令只是显示进程的pid,并不真正送出结束信号。
    -l 显示信号名称列表,这也可以在/usr/include/linux/signal.h文件中找到。
    kill命令的使用
    下面看看该命令的使用。
    [例24] 在执行一条find指令时由于时间过长,决定终止该进程。
    首先应该使用ps命令来查看该进程对应的PID,键入ps,显示如下:
    PID TTY TIME COMMAND
    285 1 00:00:00 -bash
    287 3 00:00:00 -bash
    289 5 00:00:00 /sbin/mingetty tty5
    290 6 00:00:00 /sbin/mingetty tty6
    312 3 00:00:00 telnet bbs3
    341 4 00:00:00 /sbin/mingetty tty4
    345 1 00:00:00 find / -name foxy.jpg
    348 1 00:00:00 ps
    可以看到该进程对应的PID是345,现在使用kill命令来终止该进程。键入:
    # kill 345
    再用ps命令查看,就可以看到,find进程已经被杀掉了。
    [例25] 杀掉进程11721
    # ps
    PID TTY TIME COMMAND
    11668 p1 00:00:00 -tcsh
    11721 p1 00:00:00 cat
    11737 p1 00:00:00 ps
    # kill 11721
    [1] Terminated cat
    #
    有时候可能会遇到这样的情况,某个进程已经挂死或闲置,使用kill命令却杀不掉。这时候就必须发送信号9,强行关闭此进程。当然这种“野蛮”的方法很可能会导致打开的文件出现错误或者数据丢失之类的错误。所以不到万不得已不要使用强制结束的办法。如果连信号9都不响应,那恐怕就只有重新启动计算机了。
    控制多个进程命令
    Linux可使用户同时运行多个进程,还允许用户或系统管理员能控制正在运行的进程。
    nohup命令
    理论上,我们一般退出Linux系统时,会把所有的程序全部结束掉,包括那些后台程序。但有时候,例如您正在编辑一个很长的程序,但是您下班或是有事需要先退出系统,这时您又不希望系统把您编辑那么久的程序结束掉,希望退出系统时,程序还能继续执行。这时,我们就可以使用nohup命令使进程在用户退出后仍继续执行。
    一般这些进程我们都是让它在后台执行,结果则会写到用户自己的目录下的nohup.out这个文件里(也可以使用输出重定向,让它输出到一个特定的文件)。[例26]
    $ nohup sort sales.dat &
    这条命令告诉sort命令忽略用户已退出系统,它应该一直运行,直到进程完成。利用这种方法,可以启动一个要运行几天甚至几周的进程,而且在它运行时,用户不需要去登录。
    nohup命令把一条命令的所有输出和错误信息送到nohup.out文件中。若将输出重定向,则只有错误信息放在nohup.out文件中。
    renice命令
    renice命令允许用户修改一个正在运行进程的优先权。
    利用renice命令可以在命令执行时调整其优先权。其格式如下:
    $ renice -number PID
    其中,参数number与nice命令的number意义相同。
    注:
    (1) 用户只能对自己所有的进程使用renice命令。
    (2) root用户可以在任何进程上使用renice命令。
    (3) 只有root用户才能提高进程的优先权。

(八)基本命令-------进程查看

本节中要介绍的不只是进程查看方面的内容,由于 Linux是个多用户系统,有时候也要了解其他用户现在在干什么,所以在本节中还将接触多用户方面的内容。同时Linux是一个多进程系统,经常需要对这些进程进行一些调配和管理;而要进行管理,首先就要知道现在的进程情况:究竟有哪些进程?进程情况如何?等等。所以需要进程查看方面的工作。
  who命令
  该命令主要用于查看当前在线上的用户情况。这个命令非常有用。如果用户想和其他用户建立即时通讯,比如使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。又如,系统管理员希望监视每个登录的用户此时此刻的所作所为,也要使用who命令。
  who命令的常用语法格式如下:
  who [imqsuwHT] [--count] [--idle] [--heading] [--help] [--message] [--mesg] [--version] [--writable] [file] [am i]
  所有的选项都是可选的,也就是说可以单独使用who命令。不使用任何选项时,who命令将显示以下三项内容:
  login name:登录用户名;
  terminal line:使用终端设备;
  login time:登录到系统的时间。
  如果给出的是两个非选项参数,那么who命令将只显示运行who程序的用户名、登录终端和登录时间。通常这两个参数是“am i”,即该命令格式为:“who am i”。
  下面对who命令的常用参数进行说明。
  -m 和“who am i”的作用一样,显示运行该程序的用户名。
  -q,--count 只显示用户的登录帐号和登录用户的数量,该选项优先级高于其他任何选项。
  -s 忽略。主要是用于和其他版本的who命令兼容。
  -i,-u,--idle 在登录时间后面显示该用户最后一次对系统进行操作至今的时间,也就是常说的“发呆”时间。其中“.”符号代表该用户在前1秒仍然处于活动状态;“old”则表示该用户空闲已经超过了24小时。
  -H,--heading 显示一行列标题。常用的标题如表4-2所示。
  表4-2 who命令输出常用标题
  标 题
  说 明
  USER
  用户登录帐号
  LINE
  用户登录使用终端
  LOGIN-TIME
  用户登录时间
  IDLE
  用户空闲时间,即未进行操作的时间
  PID
  用户登录shell的进程ID
  FROM
  用户网络地址
  -w,-T--mesg,--message,--writable 和-s选项一样,在登录帐号后面显示一个字符来表示用户的信息状态:
  +:允许写信息;
  -:不允许写信息;
  ?:不能找到终端设备。
  --help 在标准输出上显示帮助信息。
  --version 在标准输出上显示版本信息。
  下面介绍who命令的一些基本用法。
  如果需要查看在系统上究竟有哪些用户,可以直接使用who命令。
  [例17] 查看登录到系统的用户情况
  $ who
  root tty1 Mar 17 13:49
  foxy tty2 Mar 17 13:49
  root tty3 Mar 17 13:49
  bbs ttyp0 Mar 17 13:49 (river.net)
  可以看到,现在系统一共有四个用户。第一列是登录用户的帐号;第二列是登录所使用的终端;第三列是登录时间;第四列是用户从什么地方登录的网络地址,这里是域名。
  一般来说,这样就可以了解登录用户的大致情况了。但有时上面的显示不是那么直观,因为没有标题说明,不容易看懂,这时就需要使用-H选项了。
  [例18] 查看登录用户的详细情况,键入:
  $ who -uH
  显示如下:
  USER LINE LOGIN-TIME IDLE FROM
  root tty1 Mar 17 13:49 .
  foxy tty2 Mar 17 13:49 00:01
  root tty3 Mar 17 13:49 00:01
  bbs ttyp0 Mar 17 13:49 00:01 (river.net)
  这样一目了然。其中-u选项指定显示用户空闲时间,所以可以看到多了一项IDLE。第一个root用户的IDLE项是一个“.”,这就说明该用户在前1秒仍然是活动的,而其他用户后面都有一个时间,称为空闲时间。
  最后来看看使用“who am i”格式命令的结果:
  233.river.net!root tty1 Mar 17 13:49
  可见只显示出了运行该who命令的用户情况,当然这时候不存在空闲时间。
  who命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。
  w命令
  该命令也用于显示登录到系统的用户情况,但是与who不同的是,w命令功能更加强大,它不但可以显示有谁登录到系统,还可以显示出这些用户当前正在进行的工作,并且统计数据相对who命令来说更加详细和科学,可以认为w命令就是who命令的一个增强版。
  w命令的显示项目按以下顺序排列:当前时间,系统启动到现在的时间,登录用户的数目,系统在最近1秒、5秒和15秒的平均负载。然后是每个用户的各项数据,项目显示顺序如下:登录帐号、终端名称、远程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。
  其中JCPU时间指的是和该终端(tty)连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间。而PCPU时间则是指当前进程(即在WHAT项中显示的进程)所占用的时间。下面介绍该命令的具体用法和参数。
  语法格式如下:
  w -[husfV] [user]
  下面对参数进行说明:
  -h 不显示标题。
  -u 当列出当前进程和CPU时间时忽略用户名。这主要是用于执行su命令后的情况。
  -s 使用短模式。不显示登录时间、JCPU和PCPU时间。
  -f 切换显示FROM项,也就是远程主机名项。默认值是不显示远程主机名,当然系统管理员可以对源文件作一些修改使得显示该项成为默认值。
  -V 显示版本信息。
  User 只显示指定用户的相关情况。
  [例19] 显示当前登录到系统的用户的详细情况
  $ w
  2:50pm up 2 min, 4 users, load average:0.22,0.16,0.06
  USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
  root tty1 2:49pm 0:00s 0.56s 0.10s w
  foxy tty2 2:49pm 1:09 0.42s 0.42s bash
  root tty3 2:49pm 46.00s 0.67s 0.25s telnet bbs3
  bbs ttyp0 river.net 2:49pm 45.00s 0.49s 0.49s bbs h river.net
  ps命令
  1. ps简介
  前面介绍的两个命令都是用于查看当前系统用户的情况,下面就来看看进程的情况,这也是本章的主题。要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。
  2. ps命令及其参数
  ps命令最常用的还是用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,所以如果需要检测其情况,便可以使用ps命令了。
  该命令语法格式如下:
  ps [选项]
  下面对命令选项进行说明:
  -e 显示所有进程。
  -f 全格式。
  -h 不显示标题。
  -l 长格式。
  -w 宽输出。
  a 显示终端上的所有进程,包括其他用户的进程。
  r 只显示正在运行的进程。
  x 显示没有控制终端的进程。
  O[+|-] k1 [,[+|-] k2 [,…]] 根据SHORT KEYS、k1、k2中快捷键指定的多级排序顺序显示进程列表。对于ps的不同格式都存在着默认的顺序指定。这些默认顺序可以被用户的指定所覆盖。其中 “+”字符是可选的,“-”字符是倒转指定键的方向。
  pids 只列出指定进程的情况。各进程ID之间使用逗号分隔。该进程列表必须在命令行参数的最后一个选项后面紧接着给出,中间不能插入空格。比如:ps -f1,4,5。
  以下介绍长命令行选项,这些选项都使用“--”开头:
  --sort X[+|-] key [,[+|-] key [,…]] 从SORT KEYS段中选一个多字母键。“+”字符是可选的,因为默认的方向就是按数字升序或者词典顺序。比如: ps -jax -sort=uid,-ppid,+pid。
  --help 显示帮助信息。
  --version 显示该命令的版本信息。
  在前面的选项说明中提到了排序键,接下来对排序键作进一步说明。需要注意的是排序中使用的值是ps使用的内部值,并非仅用于某些输出格式的伪值。排序键列表见表4-3。
  表4-3 排序键列表
  短格式
  长格式
  说 明
  c
  cmd
  可执行的简单名称
  C
  cmdline
  完整命令行
  f
  flags
  长模式标志
  g
  pgrp
  进程的组ID
  G
  tpgid
  控制tty进程组ID
  j
  cutime
  累计用户时间
  J
  cstime
  累计系统时间
  k
  utime
  用户时间
  K
  stime
  系统时间
  m
  min_flt
  次要页错误的数量
  M
  maj_flt
  主要页错误的数量
  n
  cmin_flt
  累计次要页错误
  N
  cmaj_flt
  累计主要页错误
  o
  session
  对话ID
  p
  pid
  进程ID
  P
  ppid
  父进程ID
  r
  rss
  驻留大小
  R
  resident
  驻留页
  s
  size
  内存大小(千字节)
  S
  share
  共享页的数量
  t
  tty
  tty次要设备号
  T
  start_time
  进程启动的时间
  U
  uid
  UID
  u
  user
  用户名
  v
  vsize
  总的虚拟内存数量(字节)
  y
  priority
  内核调度优先级
  3. 常用p


(九)软件安装---------RPM命令

RPM 大全

  RPM 有五种基本的操作方式(不包括创建 软件 包): 安装, 卸载, 升级, 查询,和验证。

   下面我们就来逐一的讲解吧。

一、 安装RPM包

  RPM 软件 包通常具有类似foo-1.0-1.i386.rpm 的文件名。

  其中包括 软件 包的名称(foo),版本号(1.0),发行号(1), 和 硬件平台(i386)。

  安装一个 软件包只需简单的键入以下命令: $ rpm -ivh foo-1.0-1.i386.rpm foo #################################### RPM安装完毕后会打印出 软件 包的名字(并不一定与文件名相同),而后打印一连串的#号以表示安装进度。

   虽然 软件 包的安装被设计的尽量简单易行, 但还是可能会发生如下的错误:

  1、 软件包已被安装 如果您的 软件 包已被安装, 将会出现以下信息: $ rpm -ivh foo-1.0-1.i386.rpm foo package foo-1.0-1 is already installed error: foo-1.0-1.i386.rpm cannot be installed 如果您仍旧要安装该 软件 包,可以在命令行上使用--replacepkgs 选项,RPM将忽略该错误信息强行安装。

  2、文件冲突如果您要安装的 软件 包中有一个文件已在安装其它 软件 包时安装,会出现以下错误信息: # rpm -ivh foo-1.0-1.i386.rpm foo /usr/bin/foo conflicts with file from bar-1.0-1 error: foo-1.0-1.i386.rpm cannot be installed 要想让RPM 忽略该错误信息,请使用--replacefiles 命令行选项。

  3、未解决依赖关系 RPM 软件 包可能依赖于其它 软件 包,也就是说要求在安装了特定的 软件 包之后才能安装该 软件 包。如果在您安装某个 软件包时存在这种未解决的依赖关系。会产生以下信息: $ rpm -ivh bar-1.0-1.i386.rpm failed dependencies: foo is needed by bar-1.0-1 您必须安装完所依赖的 软件包,才能解决这个问题。如果您想强制安装(这是个坏主意, 因为安装后的 软件 包未必能正常运行), 请使用--nodeps 命令行选项。  

  二、卸载RPM包

   卸载 软件包就象安装 软件 包时一样简单: $ rpm -e foo 注意这里使用 软件 包的名字name ``foo, 而不是 软件包文件的名字file ``foo-1.0-1.i386.rpm。如果其它 软件 包依赖于您要卸载的 软件 包,卸载时则会产生错误信息。

  如: $ rpm -e foo removing these packages would break dependencies:foo is needed by bar-1.0-1 若让RPM忽略这个错误继续卸载(这可不是一个好主意,因为依赖于该 软件包的程序可能无法运行),请使用--nodeps 命令行选项。  

  三、升级RPM包

  升级 软件 包和安装软件 包十分类似:. $ rpm -Uvh foo-2.0-1.i386.rpm foo #################################### RPM将自动卸载已安装的老板本的foo 软件包,您不会看到有关信息。事实上您可能总是使用 -U 来安装 软件 包,因为即便以往未安装过该 软件 包,也能正常运行。

  因为RPM 执行智能化的 软件 包升级, 自动处理配置文件,您将会看到如下信息: saving /etc/foo.conf as /etc/foo.conf.rpmsave 这表示您对配置文件的修改不一定能向上兼容。

  因此,RPM 会先备份老文件再安装新文件。您应当尽快解决这两个配置文件的不同之处,以使系统能持续正常运行。

  因为升级实际包括 软件 包的卸载与安装两个过程,所以您可能会碰到由这两个操作引起的错误。

  另一个你可能碰到的问题是:当您使用旧版本的 软件 包来升级新版本的 软件 时,RPM会产生以下错误信息: $ rpm -Uvh foo-1.0-1.i386.rpm foo package foo-2.0-1 (which is newer) is already installed error: foo-1.0-1.i386.rpm cannot be installed 如果你确有需要将该 软件包”降级,加入 --oldpackage 命令选项就可以了。

   四、 查询已安装的软件包

   使用命令rpm -q来查询已安装 软件 包的 数据库 。

   简单的使用命令 rpm -q foo 会打印出foo 软件 包 的包名 , 版本号,和发行号: $ rpm -q foo foo-2.0-1 除了指定 软件 包名以外,您还可以使用以下选项来指明要查询哪些 软件 包的信 息。

这些选项被称之为“ 软件 包指定选项“。

? -a 查询所有已安装的 软件 包
? -f 将查询包含有文件. 的 软件 包
? -p 查询 软件 包文件名为的 软件 包 还可以指定查询 软件 包时所显示的信息。它们被称作信息选择选项:
? -i 显示 软件 包信息,如描述, 发行号, 尺寸, 构建日期, 安装日期, 平台, 以及其它一些各类信息。
? -l 显示 软件 包中的文件列表。
? -s 显示 软件 包中所有文件的状态。
? -d 显示被标注为文档的文件列表(man 手册, info 手册, READMEs, etc)。
? -c 显示被标注为配置文件的文件列表。这些是您要在安装完毕以后加以定制的文件(sendmail.cf, passwd, inittab, etc)。

对于那些要显示文件列表的文件, 您可以增加-v 命令行选项以获得如同 ls -l 格式的输出。  

  五、 验证软件包

  验证软件包是通过比较已安装的文件和 软件 包中的原始文件信息来进行的。验证主要是比较文件的尺寸,MD5 校验码, 文件权限, 类型, 属主和用户组等。

  rpm-V命令用来验证一个 软件 包。您可以使用任何包选择选项来查询您要验证的软件包。

  命令rpm -V foo 将用来验证foo 软件包。

又如:

? 验证包含特定文件的 软件 包: rpm -Vf /bin/vi
? 验证所有已安装的 软件 包: rpm -Va
? 根据一个RPM包来验证: rpm -Vp foo-1.0-1.i386.rpm

   如果您担心你的RPM 数据库 已被破坏,就可以使用这种方式。 如果一切均校验正常将不会产生任何输出。如果有不一致的地方,就会显示出来。输出格式是8位长字符 串, ``c 用以指配置文件, 接着是文件名. 8位字符的每一个 用以表示文件与RPM 数据库 中一种属性的比较 结果。``. (点) 表示测试通过。.

  下面的字符表示对RPM 软件 包进行的某种测试失败:

  显示字符 错误源 5 MD5

  校验码
S 文件尺寸
L 符号连接
T 文件修改日期
D 设备
U 用户
G 用户组
M 模式e (包括权限和文件类型) 如果有错误信息输出, 您应当认真加以考虑,是通过删除还是重新安装来解决出现的问题。  

   六、教你一招

  RPM不仅是安装/卸载程序的工具,它还是系统维护和诊断的一把好手。

  看过下面几个例子你就会领教它的 厉害了。

? 如果您误删了一些文件, 但您不能肯定到底都删除了那些文件,怎么办?
您可以键入: rpm -Va rpm会在屏幕上显示出文件删除的情况。若你发现一些文件丢失了或已被损坏, 您就可以重新安装或先卸载 再安装该 软件 包。
? 如果您碰到了一个自己不认识的文件,要想查处它属于哪个 软件 包,您可以输入以下命令 rpm -qf /usr/X11R6/bin/xjewel 输出的结果会是: xjewel-1.6-1
? 如果发生综合以上两个例子的情况,如文件/usr/bin/paste出了问题。您想知道哪个 软件 包中包含该文 件,您这时可以简单的键入: rpm -Vf /usr/bin/paste
? 如果您想了解正在使用的程序的详细信息, 您可以键入如下命令来获得 软件 包中关于该程序的文档信息: rpm -qdf /usr/bin/ispell 输出结果为: /usr/man/man4/ispell.4 /usr/man/man4/english.4 /usr/man/man1/unsq.1 /usr/man/man1/tryaffix.1 /usr/man/man1/sq.1 /usr/man/man1/munchlist.1 /usr/man/man1/ispell.1 /usr/man/man1/findaffix.1 /usr/man/man1/buildhash.1 /usr/info/ispell.info.gz /usr/doc/ispell-3.1.18-1/README
? 您发现了一个新的koules RPM,但您不知道它是做什么的,您可以键入如下命令: rpm -qip koules-1.2-2.i386.rpm
? 现在您想了解koules的 RPM包在系统里安装了哪些文件, 您可以键入: rpm -qlp koules-1.2-2.i386.rpm输出结果为: /usr/man/man6/koules.6 /usr/lib/games/kouleslib/start.raw /usr/lib/games/kouleslib/end.raw /usr/lib/games/kouleslib/destroy2.raw /usr/lib/games/kouleslib/destroy1.raw /usr/lib/games/kouleslib/creator2.raw /usr/lib/games/kouleslib/creator1.raw /usr/lib/games/kouleslib/colize.raw /usr/lib/games/kouleslib /usr/games/koules 以上只是几个常见例子。随着您进一步的使用RPM,您会发现它的各种功能选项组合可以实现更为强大的RPM包管理功能。

(十)基本命令-----FTP命令

带有星号的命令一般很少使用,所以往往在具体实现中不支持。
  1.ABOR 放弃传输
  2.*ACCT 某些系统将帐号和用户与文件系统相关联
  3.*ALLO 为即将传送的文件分配空间。后面携带的参数来确定字节数
  4.*APPE 将文件附加到已经存在的文件后面
  5.CDUP 在远程系统上将当前目录切换到上级父目录
  6.CWD 改变远程系统的工作目录
  7.DELE 删除远程系统的文件
  8.HELP 读取服务器的帮助信息,如:支持的命令的列表
  9.LIST 在一个新建立的数据连接上发送当前工作目录下的文件名列表
  1..MKD 创建目录
  11.MODE 指定传输模式,可携带的参数是:S、B或 C.
  12.NLST 在一个新建立的数据连接上发送一个当前目录下的“完全”的目录列表
  13.NOOP 空操作,防止连接断掉
  14.PASS 提供一个用户登录密码,必须立即跟随在USER命令后
  15.*PASV 指定服务器数据传输过程监听等待客户端的数据连接连接建立请求
  16.PORT 指定客户端监听等待服务器端建立的连接的端口号
  17.PWD 显示服务器端的当前工作目录名
  18.QUIT 退出登录并终止连接
  19.*REIN 重新初始化,退出登录但是并不断开连接,后面必须随后发出一个新的USER命令
  20.*REST 从服务器的一个标识处重新开始传输
  21.RETR 从远程系统取回一个文件
  22.RMD 删除一个目录
  23.*RNFR 指定要被命名的文件的老的路径名,随后必须是一个RNTO命令
  24.*RNTO 指定要被命名的文件的新的路径名
  25.*SITE 站点特有的服务器提供的服务
  26.*SMNT 结构加载,提供一个文件系统结构的远程系统路径名
  27.*STAT 状态信息
  28.STOR 上载一个文件到服务器上,若文件已经存在则覆盖
  29.*STOU 上载一个文件到服务器上,不覆盖已经存在的文件
  30.STRU 指定文件结构,参数可以是F、R或P.
  31.*SYST 报告远程系统的操作系统类型
  32.TYPE 指定文件类型,参数可以是A、E、I、L只有TYPE A和TYPE I常用

(十一)服务相关-----web服务器(apache主配置文件)

Apache为网络管理员提供了丰富多彩的功能,包括目录索引、目录别名、内容协商、可配置的HTTP错误报告、CGI程序的SetUID执行、子进程资源管理、服务器端图象映射、重写URL、URL拼写检查以及联机手册man等。也就是说,如果您在Linux Server上成功安装配置了Apache之后,您的计算机也将随着Apache的生效而摇身一变,成为一台名副其实的Web Server,这种变化的确是激动人心的。

在Internet时代,外部主页的发布已经成为树立公司形象的一个重要手段,而内部主页也成为公司管理的主要方式。但是,要想实现这些功能,首先应该把我们的Linux Server配置成为一台强大的Web Server。本章将详细介绍如何配置Apache服务器。希望各位同仁能够通过阅读本片文章达到理论实践双丰收的目的,在很短的时间里迅速成为一名出色的网络管理员。

1.2 所需资源
1.2.1 所需包
RedHat6.2 服务器安装

1.2.2 所需配置文件
/etc/httpd/conf/httpd.conf 系统自带,管理员配置
/etc/httpd/conf/access.conf 系统自带,不需要修改
/etc/httpd/conf/srm.conf 系统自带,不需要修改


1.3 配置方案
/etc/httpd/conf/httpd.conf
说明:apache主配置文件
源文件:

ServerType standalone
   #定义WebServer的启动方式为standalone,以增强其对大量访问的及时响应性
ServerRoot "/etc/httpd"
   #指定包含httpd服务器文件的目录
LockFile /var/lock/httpd.lock
PidFile /var/run/httpd.pid
ScoreBoardFile /var/run/httpd.scoreboard
Timeout 300
   #响应超时量,单位为秒
KeepAlive On
   #允许用户建立永久连接
MaxKeepAliveRequests 100
KeepAliveTimeout 15
MinSpareServers 5
   #要保留的空闲服务器进程的最小值
MaxSpareServers 20
   #要保留的空闲服务器进程的最大值
StartServers 8
   #系统启动时的守护进程数
MaxClients 150
   #所能提供服务的最大客户端编号,大于它的部分被放入请求队列
MaxRequestsPerChild 100
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule env_module     modules/mod_env.so
LoadModule config_log_module modules/mod_log_config.so
LoadModule agent_log_module  modules/mod_log_agent.so
LoadModule referer_log_module modules/mod_log_referer.so
LoadModule mime_module    modules/mod_mime.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule status_module   modules/mod_status.so
LoadModule info_module    modules/mod_info.so
LoadModule includes_module  modules/mod_include.so
LoadModule autoindex_module  modules/mod_autoindex.so
LoadModule dir_module     modules/mod_dir.so
LoadModule cgi_module     modules/mod_cgi.so
LoadModule asis_module    modules/mod_asis.so
LoadModule imap_module    modules/mod_imap.so
LoadModule action_module   modules/mod_actions.so
LoadModule userdir_module   modules/mod_userdir.so
LoadModule alias_module    modules/mod_alias.so
LoadModule rewrite_module   modules/mod_rewrite.so
LoadModule access_module   modules/mod_access.so
LoadModule auth_module    modules/mod_auth.so
LoadModule anon_auth_module  modules/mod_auth_anon.so
LoadModule db_auth_module   modules/mod_auth_db.so
LoadModule digest_module   modules/mod_digest.so
LoadModule proxy_module    modules/libproxy.so
LoadModule expires_module   modules/mod_expires.so
LoadModule headers_module   modules/mod_headers.so
LoadModule usertrack_module  modules/mod_usertrack.so
LoadModule setenvif_module  modules/mod_setenvif.so
LoadModule perl_module    modules/libperl.so
LoadModule php3_module    modules/libphp3.so
ClearModuleList
AddModule mod_vhost_alias.c
AddModule mod_env.c
AddModule mod_log_config.c
AddModule mod_log_agent.c
AddModule mod_log_referer.c
AddModule mod_mime.c
AddModule mod_negotiation.c
AddModule mod_status.c
AddModule mod_info.c
AddModule mod_include.c
AddModule mod_autoindex.c
AddModule mod_dir.c
AddModule mod_cgi.c
AddModule mod_asis.c
AddModule mod_imap.c
AddModule mod_actions.c
#AddModule mod_speling.c
AddModule mod_userdir.c
AddModule mod_alias.c
AddModule mod_rewrite.c
AddModule mod_access.c
AddModule mod_auth.c
AddModule mod_auth_anon.c
AddModule mod_auth_db.c
AddModule mod_digest.c
AddModule mod_proxy.c
AddModule mod_expires.c
AddModule mod_headers.c
AddModule mod_usertrack.c
AddModule mod_so.c
AddModule mod_setenvif.c
AddModule mod_perl.c
AddModule mod_php3.c
Port 80
   #定义服务器所使用的TCP的端口号
User nobody
Group nobody
   #以上两行是分配给httpd的新用户的文件权限,出于安全的考虑把
   它们的权限设置成为最低。
ServerAdmin [email protected]
   #设置Web管理员的邮件地址
ServerName WebOA
   #定义客户端从服务器读取数据时返回给客户端的主机名,其缺省值
   是localhost,第一次安装Linux的时候经常这里出错。
DocumentRoot "/home/weboa/jakarta-tomcat/webapps/weboa"
   #设置所有Apache文档的根目录,比如说,用户对
   http://www.weboa.com.cn/index.html的访问请求,Apache对它
   的响应是/home/weboa/jakarta-tomcat/webapps/weboa/index.html

   Options FollowSymLinks
   AllowOverride None


   Options Indexes Includes FollowSymLinks
   AllowOverride None
   Order allow,deny
   Allow from all      # 允许所有人访问

UserDir public_html
DirectoryIndex index.html index.htm index.shtml index.cgi
   #设置多种成功访问主页的方式,为的是提高系统的容错性
AccessFileName .htaccess

   Order allow,deny
   Deny from all

UseCanonicalName On
TypesConfig /etc/mime.types
DefaultType text/plain

   MIMEMagicFile share/magic

HostnameLookups Off
ErrorLog /usr/httpd/log/error_log
LogLevel warn
   #定义那些错误类型被记录到错误日志中
LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-Agent}i"" combined
   #所有的LogFormat都用来定义日志中的条目
LogFormat "%h %l %u %t "%r" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
CustomLog /usr/httpd/log/access_log common
ServerSignature On
Alias /icons/ "/home/httpd/icons/"
#定义虚拟主机目录与系统目录的对应关系

   Options Indexes MultiViews
   AllowOverride None
   Order allow,deny
   Allow from all

ScriptAlias /cgi-bin/ "/home/httpd/cgi-bin/"
#定义CGI目录

   AllowOverride None
   Options ExecCGI
   Order allow,deny
   Allow from all

IndexOptions FancyIndexing
AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip
AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*
AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core
AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^
DefaultIcon /icons/unknown.gif
ReadmeName README
HeaderName HEADER
AddEncoding x-compress Z
AddEncoding x-gzip gz tgz
AddLanguage en .en
AddLanguage fr .fr
AddLanguage de .de
AddLanguage da .da
AddLanguage el .el
AddLanguage it .it
LanguagePriority en fr de

   AddType application/x-httpd-php3 .php3
   AddType application/x-httpd-php3-source .phps


   AddType application/x-httpd-php .phtml

AddType application/x-tar .tgz
AddType text/html .shtml
AddHandler server-parsed .shtml
AddHandler imap-file map
BrowserMatch "RealPlayer 4/.0" force-response-1.0
BrowserMatch "Java/1/.0" force-response-1.0
BrowserMatch "JDK/1/.0" force-response-1.0

   Alias /perl/ /home/httpd/perl/

   SetHandler perl-script
   PerlHandler Apache::Registry
   Options +ExecCGI


Alias /doc/ /usr/doc/

   order deny,allow
   deny from all
   allow from localhost
   Options Indexes FollowSymLinks

include /etc/httpd/conf/tomcat-apache.conf
Alias /netcard "/home/weboa/jakarta-tomcat/webapps/weboa/net_card"

   Options Indexes FollowSymLinks
   allow from all

CacheSize 5
#定义缓存区大小,以KB为单位。可以根据需要和硬盘空间大小进行设置
CacheGcInterval 4
#每隔4小时检查缓存区,如果已经超过CacheSize就删除文件
CacheMaxExpire 24
#HTTP文件最多被保持24小时
CacheLastModifiedFactor 0.1
#定义HTTP文件失效期,缺省是0.1 ,意思是说失效期=离最近一次修改的时间X,比如离最近一次修改的时间是5小时,那么失效期就是5X0.1=0.5小时
CacheDefaultExpire 1
#这一指令提供一个缺省的时间(小时)来销毁缓存的文件,这些文件的最后更改时间不详。CacheMaxExpire 命令不覆盖这一设置

## 以下是如何对一个目录进行登陆控制的方法 ## 在/etc/httpd/conf/httpd.conf中添加以下内容:
Alias /weboa/ "/home/weboa/"

   Options Indexes MultiViews
   AllowOverride authconfig
   Order allow,deny
   Allow from all

在/home/weboa目录下建立.htaccess文件
   authname "shared files"
   authtype basic
   authuserfile /etc/httpd/conf/passwd
require valid-user

在/etc/httpd/conf目录下执行命令生成认证文件
htpasswd -c thj thj #创建认证文件和第一个名和密码
htpasswd weboa weboa #添加其他用户名和密码


### 以下是做虚拟主机的实现方法 ###

需要在/etc/httpd/conf/httpd.conf中添加下列内容:
Alias /webadmin/ "/home/weboa/webadmin/html/"

   Options Indexes MultiViews
   AllowOverride None
   Order allow,deny
   Allow from all

NameVirtualHost 192.168.0.1 #虚拟域名的DNS服务器
ServerAdmin [email protected] #网管邮件地址
DocumentRoot /home/weboa/webadmin/html/ #服务器页面目录
ServerName webadmin.weboa.com.cn #服务器名称
需要在/var/named/name2ip.conf中添加的内容:
webadmin   IN   A   192.168.0.1


1.4 测试及管理办法
1.4.1 测试方法
每当管理员更改了Apache的设置之后,都应执行 /etc/rc.d/init.d/httpd restart使得更改生效。

1.4.2 管理方法
Apache提供大量的日志文件,当Apache出错的时候,管理员可以根据htppd.conf中的ErrorLog定义的路径来诊断。具体方法是:
tail -f /var/log/httpd/apache/error_log

(十二)服务相关-----Samba 配置


给大家推荐个好网站,有大量的linux资料,软件,技术文档免费下载。
http://linux-down.kmip.net

摘要:


我将会尝试介绍给大家我们已经完成的工作:以Linux-samba服务器实现一个用作Windows网络的域控制器。

用户权限管理,profile....将会被详细介绍。

本文以Debian GNU/Linux 2.2 为基础,因此默认的smb.conf文件可能和你的文件有一些小的出入。

下面用的的samba版本号是2.0.7



Samba安装
首先我们假定你知道一点儿samba,而且它已经安装到你的server上头了。

如果没有,快速安装的方法是:

Debian: apt-get install samba
RedHat(Mandrake): rpm -vih /mnt/cdrom/RedHat(Mandrake)/RPMS/samba*



配置文件: 一般设定
Samba使用单个的配置文件,这个文件里面你可以找到一些象这样的标记块: [global]

samba只有一个配置文件!



[global]
printing = bsd
printcap name = /etc/printcap
load printers = yes
guest account = pcguest

log file = /usr/local/samba/log.%m

[tmp]
comment = Temporary file space
path = /tmp
read only = yes
public = yes


如果你用这个配置文件来运行samba,在你的局域网上头,那些windows机器就可以在他们的网络邻居里面发现一个叫做(你的linux机器的名字)的机器共享了一个temp目录出来,而且可以写入。

注意:一旦你更新了samba配置文件,你必须要通过使用/etc/init.d/samba restart (debian)来重起你的samba。


配置文件,“高级”参数
首先我们来看看这些参数:

[global]
netbios name:
你可以指定你samba服务器的netbios名字。通过windows机器的网络邻居可以看到这个名字。如果你没有特别指定,Linux将会使用它自己的网络名作为netbios名。
invalid users:
不允许访问samba的用户名列表。比如“root”不应该被允许访问samba。
interfaces:
如果你的Linux服务器有一张以上的网卡,同时你希望限制只有一个网络可用。
security:
可用的安全模式。如果使用security=user将会要求每个用户都在GNU/Linux服务器上拥有一个账号
如果你不需要samba服务器管理用户,同时打算让所有人是用同样的共享资源,可以设为:security=share。
workgroup:
你的linux服务器所在的工作组名字。
server string:
你的Linux机器的简单描述(一些字符串)。
socket options:
用来调节samba服务器,并且让他快些的选项列表。视情况而定。
encrypt passwords:
必须使用加密口令么?必须了解到,(几乎)每个windows系统都会有不同的搞法!
wins support:
你的Linux服务器需要以wins方式工作?
os level:
OS级别指定哪个服务器将成为域控制器(domain master),局部控制器(local master),等等。
domain master:
指定samba作为主域服务器
local master:
指定samba作为local master server
preferred master:
如果有其他服务器存在的话,Samba是否会是首选的一个?
domain logons:
Samba可以管理整个域的连接控制么?
logon script:
当此用户开始一次会话时运行哪个脚本?
logon path:
启动脚本文件在什么地方?
logon home:
在何处存放用户profile?
name resolve order:
以怎样的顺序使用资源顺序以查询网络内机器名字?
dns proxy:
Samba服务器是否同时也被用作DNS代理服务器?
preserve case:
保持文件名的大小写情况。
short preserve case:
保持文件名的大小写情况。
unix password sync:
是否需要同步Unix和windows的口令?
passwd program:
用哪个程序更动口令。
passwd chat:
用什么“协议”更动口令。
max log size:
log文件的最大尺寸。
Section [netlogon]
指定netlogon在哪里。
Section [profiles]
用户profile文件部分。
Section [homes]
用户Home目录。

Samba 变量
变量 说明
客户端变量
%a 客户端体系:
比如: Win95, WfWg, WinNT, Samba ...
%I 客户端IP地址
%m 客户端NetBios名
%M 客户端DNS名
用户变量
%g 用户%u 主要组
%H 用户%u home 目录
%u Unix 当前用户名
共享变量
%P 当前共享的根目录
%S 当前的共享名
服务器变量
%h Samba服务器的DNS名字
%L Samba服务器的Netbios名字
%v Samba版本
其他变量
%T 当前日期和时间

使用这些变量的例子:如果你的网络内有一些机器分别运行windows 3.11和windows98,你可以创建两个配置文件,为每种系统使用一个,那么可以使用%a变量。


结果: 我们的配置文件


[global]
printing = bsd
printcap name = /etc/printcap
load printers = yes
guest account = nobody
invalid users = root

; 改掉它的netbios名
netbios name = pantoufle
; 它监听的网络
; (你不需要他在另外一个网络上面也进行服务,因为那个是因特网联接)

interfaces = 192.168.0.1/255.255.255.0

; security user表示每个用户都必须在这个server上面拥有一个Unix账号
security = user

; 这个机器属于哪个工作组
workgroup = rycks
; 服务器的简单说明,当察看细节的时候可以看到
; %h 是服务器的DNS名字,%v samba的版本号
server string = %h server (Samba %v)

; 我们使用samba自己的log文件,不仅仅使用syslog
syslog only = no

; 至少重要的信息应当写到syslog去,
; 其他信息会写到 /var/log/smb(nmb)/
syslog = 0;

; 嗯,调整一下性能!
socket options = IPTOS_LOWDELAY TCP_NODELAY //
SO_SNDBUF=4096 SO_RCVBUF=4096

; 使用加密过的口令哦,注意了,
; 每个W95客户端都要打上 MS SMB 安全补丁。
; NT4 必须打上 SP3 或者更高补丁
; 我不记得W3.11的情况了:很有可能它并不支持加密口令 :(
encrypt passwords = yes

; 这个server同时也是WINS 服务器。
; WINS 允许两个网络使用不同的ip段
; (比如 192.168.0.0/255.255.255.0 和 192.168.0.1/255.255.255.0)
; 互相察看"另外" 网络的共享资源,一旦网关gateway激活。
wins support = yes

; OS 级别。比如我们的server是域控制器,本地登录,诸如此类
; 如果网络里面有一个NT服务器的话,我们的级别应该"更高" 。
os level = 34

; 域管理
domain master = yes
local master = yes
preferred master = yes

; 域连接管理
domain logons = yes

; 当有用户登录时,运行什么脚本?
; %g 指向用户所在的主要组
logon script = %g.bat
; 在什么地方可以找到我们的脚本?
; %L 是samba服务器的netbios名
logon path=////%L//netlogon
; 在什么地方存放用户的profile?
; %U 用户的登录名
logon home=////%L//%U//winprofile

; 以何种方式检查资源以查找该机器名字?In which order check the resources to find
; the name of a machine?
; 注意,不象windows在正常的基础上就发送广播,我们的广播是最后进行。
name resolve order = lmhosts host wins bcast

; 是否Samba必须用DNS proxy的方式运作?
dns proxy = no

; 保留其文件名和大小写
preserve case = yes
short preserve case = yes

; 我们必须同步windows和Linux的口令么?
unix password sync = yes

; 如何同步口令
passwd program = /usr/bin/passwd %u
passwd chat = *Enter//snew//sUNIX//spassword:* //
%n//n *Retype//snew//sUNIX//spassword:* %n//n .

; Log文件的最大尺寸,
; 防止/var 目录爆掉 :p
max log size = 1000

; 我们是时间服务器:用来同步各个机器的时间
; 通过登录用.bat文件来使用这一特性。
time server = yes

; 指定netlogon所在位置。
; 这只会在登录时使用到
; 因此我们不必让它公开。
[netlogon]
path = /home/netlogon/%g
public = no
writeable = no
browseable = no

; 每个用户的Home目录
[homes]
comment = Home Directories
browseable = no

; 他可以写入了,对吧。
read only = no

; 默认的Unix umask.
create mask = 0700

; 基于安全目的,该目录被设定为700
directory mask = 0700


; 共享FTP,这样可以不用特别的客户端就能在
; 网络邻居里面使用了
[ftp]
path = /home/ftp/pub
public = yes
printable = no
guest ok = yes

; 临时目录
[tmp]
path = /tmp
public = yes
printable = no
guest ok = yes
writable = yes

; 另外的一个临时目录
; 提供给特定的需要特别多空间的用户
[bigtemp]
path = /home/bigtemp
public = yes
printable = no
guest ok = yes
valid users = erics
writable = yes




现在,我们在服务器上有些啥
简单看看,我们在服务器上应该有什么:


每个用户一个账号
smb.conf 文件
一个目录 /home/netlogon (就像我例子里头的那个)
在这个目录里头应该对应每个用户组有一个 .bat 文件(例子马上就来)
一个CONFIG.POL 文件提供系统安全策略(也在这个目录里头)
config.pol文件,去windows CD里面找出poledit.exe来造。



net use P: ////pantoufle//homes
net use T: ////pantoufle//tmp
net time ////pantoufle /SET /YES




net use P: ////pantoufle//homes
net use T: ////pantoufle//tmp
net time ////pantoufle /SET /YES
regedit /s ////pantoufle//netlogon//teachers.reg




net use P: ////pantoufle//homes
net use T: ////pantoufle//tmp
net time ////pantoufle /SET /YES
regedit /s ////pantoufle//netlogon//pupils.reg




[HKEY_CURRENT_USER//Software//Microsoft//Windows
//CurrentVersion//Explorer//User Shell Folders]
"Personal"="P:////"




[HKEY_CURRENT_USER//Software//Microsoft//Windows
//CurrentVersion//Explorer//User Shell Folders]
"Personal"="P:////"



这个文件允许自动挂接用户个人目录到P: 而临时目录被挂接到T: 。同时系统时间也跟samba服务器作同步。

提示: .bat 文件的格式必须是“DOS模式”。最好就是在notepad里面生成这个文件,然后再放到服务器上。


制定系统安全策略(C) (TM) (R)
使用域控制器可以让windows安全些
就是这个标题!当然,我从MS关于他们系统安全策略工具的文档里面借来的。

因此,为了创建一个windows系统策略,比如防止某些用户(所有的?)运行regedit或者dos程序等等,你不得不使用Windows98 CD上面的POLEDIT。

运行PolEdit,查看它的帮助,写下相关的信息……本文并不打算教你怎么使用私有软件。

一旦你准备好了.POL文件, 把它复制到samba服务器上,那个在[netlogon]中指定的路径里面。

注意: 对于W9x 客户机,系统策略文件必须是CONFIG.POL……至于WindowsNT,应该是另外一个名字,因为我没有NT没办法告诉你 :'(
哈,不用送给我一个NT让我测试。总之很感谢,你的良心大大的好 :o)

提示: PolEdit 允许创建用户组和用户,不过我们还没有成功过。只有默认用户被放到账号里面去。

比如,如果我用PolEdit创建一个“admin”组,当用户以“erics”身份连接的时候,允许运行regedit(他的主要组是“admin”),我没有办法运行regedit :(

不过,用poledit创建一个“erics”用户倒是工作得很好。

因为觉得像用poledit建立1056个用户这类工作很没劲,而且全局用户管理看上去更有意思一点儿,我们“建议”下面这样一些技巧:

为了这件事儿,我们已经解决了几个问题:造出来三个config.pol文件给默认用户,因此,在Linux服务器这边,我们还有:
/home/netlogon/teachers/CONFIG.POL
/home/netlogon/teachers/teachers.bat
/home/netlogon/pupils/CONFIG.POL
/home/netlogon/pupils/pupils.bat
/home/netlogon/admin/CONFIG.POL
/home/netlogon/admin/admin.bat
此外我们已经修改smb.conf文件把这个东西放进去:


[netlogon]
; 我们用%g变量指定netlogon对于不同的用户组给出不同的用户目录
; 以让用户能够正确对应到符合他的config.pol文件。
path = /home/netlogon/%g
public = no
writeable = no
browseable = no



Windows机器的配置
如果运气好点儿的话,点20下鼠标,然后重起就足够够配置windows了!
Win98客户机

点击 开始/设置/控制面板 然后 双击 网络(译注:不好意思,很久没有用过win9x了,都靠记忆翻译的对应名字,搞不好有出入,大家多担待)

安装:

MS network
Network card driver
TCP/IP support and ONLY TCP/IP (no ipx or netbios)
Files and printers sharing

然后点击"Identification" tab然后填入机器名和机器所在工作组名。


点击"Access control" 然后选中用户级访问控制


回到the configuration tab 然后双击"Client for MS network"


不要忘记配置 TCP/IP 支持:
双击:TCP/IP
IP地址:

你希望这台机器用的IP(ex: 192.168.0.2)
子网掩码(ex: 255.255.255.0)
WINS配置:
激活 WINS
加入 WINS 服务器,IP 192.168.0.1 (假设你的samba服务器是这个地址)
网关:如果你有网关的话,就在这里指定啦
DNS配置:配置你的DNS

关于“调优/性能/good sense?”
在工作中,由于使用windows profile,瓶颈很快显现。

事实上,profile被MS认为重要的东西填满了,比如IE的cache,Outlook的cache等等。

简单地说,这意味着每当用户跟服务器连结或者断开时,都会有大约10MB的数据被下载或者上传(我的profile是很标准的,有桌面背景,ie,outlook的cache……)。

每个用户10MB,在一个有15台机器的地方(“一般”实验室的大小),就会用掉150MB,如果这个楼层有10个这样的地方……算算看下班铃响的时候,会有多少用户离开吧。

现在你该料到结果,那么提前5分钟跑路吧……(嗯,我得承认我读书时候就干过)……总比过了5分钟再跑强。就象一个大城市的将要发生的大塞车,最佳的跑路时机要么是早10分钟,要么两个小时以后!

因此,根据于你实施的策略,把每个用户home目录挂到P: (作为例子,P表示People,个人),并且告诉他们“把你的文档存到P里面去,不要放到‘我的文档’里面,否则文件会丢掉的”,这样应该是不错的办法。

接下来,你不得不去找一个软件,让它能够配置成为这样:把书签放到P://bookmarks.html等等。

我甚至不知道在windows世界是不是有这样的东西!

如果你知道这样的解决方案,不妨写下来,共享知识吧~


问题和建议,作为补充
在同一个域里面,是否有可能有多个工作组,对它如何进行管理,是否会跟GNU/Linux Samba之间发生问题?Is it possible to have various workgroups on the same domain, how can this be managed, is it possible to share the problems between various GNU/Linux Samba?(这句话比较头大,还是留着,免得误导)。

如何同时使用NT和Samba服务器?

NT客户端配置:CONFIG.POL文件在NT下面有另外一个名字。

当只有Samba服务器时(没有NT)一个现实的问题:我在W98上工作而且我想共享我的本地资源,比如我的打印机:

显示我的打印机共享状态


接下来点击添加


HOT NEWS: 有人给了我一个方案。在windows配置的第三步时选择“resource level access control”就有了。

 

你可能感兴趣的:(Linux初学者教程)