时间:2017-04-07注:本文部分内容摘自《Linux命令行与shell脚本编程大全》一书,版权归原作者所有。《Linux命令行与shell脚本编程大全》(第三版)第4章学习总结第4章:更多bashshell命令本章内容:管理进程获取磁盘统计挂载新磁盘数据排序归档数据4.1监控程序Linux系统管理员面临的最大挑战之一复杂的任务正在跟踪系统上运行的程序,尤其是现在图形桌面集成了大量应用程序以产生完整的桌面环境。系统上总是有很多程序在运行。4.1.1探测进程当一个程序在系统上运行时,我们称它为进程。要监控这些进程,需要熟悉ps命令的用法。命令:ps命令格式:ps命令说明:ps命令只会显示当前控制台下运行的属于当前用户的进程。基本输出显示了程序的进程ID(ProcessID、PID)、它们正在运行的终端(TTY)以及进程使用的CPU时间。Linux系统中使用的GNUps命令支持3种不同类型的命令行参数:Unix风格的参数前面有单破折号(-)BSD风格的参数前面没有破折号()GNU风格的参数前面有双破折号(--)1.Unix风格的参数Unix风格的参数继承自贝尔实验室开发的AT&TUnix系统上原有的ps命令。这些命令如下:-A:显示所有进程-N:显示所有不符合指定参数的进程-a:显示除控制进程和无终端进程外的所有进程-d:显示除控制进程外的所有进程-e:显示所有进程-Ccmdlist:显示cmdlist列表中包含的进程-Ggrplist:显示grplist列表中包含的进程-Uuserlist:显示所有者用户ID在userlist列表中的进程-ggrplist:显示会话或进程groupID在grplist列表中-ppidlist:显示PID在pidlist列表中的进程-ssesslist:显示sessionID在sesslist列表中的进程-tttylist:显示terminalID在ttylist中的进程list-uuserlist:显示其有效用户ID在userlist列表中的进程-F:现在更多的额外输出(与-f参数相比)-Oformat:显示默认输出列和格式列表指定的特定列-M:显示进程安全信息-c:显示进程的额外调度程序信息-f:显示完整格式化输出-j:显示任务信息-l:显示长列表-o格式:仅显示格式指定的列-y:不显示进程flags(进程标志,表示进程的状态)-Z:显示安全标签信息-H:以分层格式显示进程(树,用于显示父进程)-nnamelist:定义WCHAN中显示的值column-w:使用宽输出模式,无限显示-L:显示进程中的线程-V:显示ps命令的版本号使用ps命令的关键不是记住所有可用的参数,而是记住哪些参数是最有用的。例如,如果要查看系统上运行的所有进程,可以使用ps-ef命令。ps命令允许您像这样将参数组合在一起。-e参数指定显示系统上运行的所有进程;-f参数扩展输出,这些扩展的列包含有用的信息。如下:UID:启动这些进程的用户PID:进程的进程号PPID:父进程的进程号(如果进程是由其他进程启动的)C:进程生命周期内的CPU利用率STIME:进程启动时的系统TimeTTY:进程启动时的终端设备TIME:运行进程所需的累计CPU时间CMD:启动的程序名称如果想获取更多信息,可以使用-l参数,这将产生长格式输出。注意使用-l参数后多出来的几列:F:内核分配给进程的系统标志S:进程的状态--O:代表运行--S:代表休眠--R:代表可运行,running等待运行--Z:代表zombie,进程已经结束但父进程不存在--T:代表stopPRI:进程的优先级(数字越大,优先级越低)NI:谦卑值用于参与决定优先级ADDR:进程的内存地址SZ:如果进程被换出,大概需要的交换空间大小WCHAN:进程休眠的内核函数地址2.BSD样式参数Berkeley软件发行版(BSD)由加州大学伯克利分校开发的Unix版本。它在许多小方面与AT&TUnix系统不同。BSD版ps命令的参数如下:T:显示与当前终端关联的所有进程a:显示与任意终端关联的所有进程g:显示所有进程,包括控制进程r:只显示正在运行的进程x:显示全部Uuserlist:显示userlist列表中某个用户ID拥有的进程ppidlist:显示其PID在pidlist列表中的进程tttylist:显示其关联终端在ttylist列表中的进程Oformat:除默认输出columns,也输出格式指定的列X:显示过去Linuxi386寄存器格式Z:在输出中添加安全信息j:显示任务信息l:使用long模式oformat:只显示格式指定的列s:显示在信息格式u:以基于用户的格式显示v:以虚拟内存格式显示Nnamelist:定义WCHAN列中使用的值Oorder:定义信息列显示的顺序S:添加来自子进程的数字信息到父进程,如CPU和内存使用情况c:显示实际命令名(用于启动进程的程序名)e:显示命令使用的环境变量f:使用分层格式显示进程,表格names,哪些进程启动哪些进程h:不显示头信息ksort:指定用于对输出进行排序的列n:与ECHAN信息一起显示,用数值表示用户ID和组IDw:更宽的屏幕宽度输出H:将线程显示为进程m:在进程之后显示线程L:列出所有格式说明符V:显示ps命令的版本号当使用BSD参数时,ps命令将自动更改输出以模仿BSD格式。使用psl命令,大部分输出结果与使用Unix风格参数时的输出结果相同,只有一小部分不同。如下:VSZ:进程在内存中的大小,单位为千字节(KB)RSS:进程未换出时占用的物理内存STAT:代表进程当前状态的双字符状态码许多系统管理员喜欢BSD样式的l参数。它可以输出更详细的进程状态代码(STAT列)。第一个字符采用与Unix风格的s列相同的值,指示进程是睡眠、运行还是等待。第二个参数进一步指定了进程的状态。第二个参数说明:<:进程以高优先级运行N:进程以低优先级运行L:进程有页锁在内存中s:进程用于控制l:进程是多线程+:进程在前台运行3.GNU长参数GNU开发人员为这个新改进的ps命令添加了一些额外的参数。其中一些GNU长参数复制了现有的Unix或BSD类型参数,而其他一些则提供了新功能。现有的GNU长参数如下:--deselect:显示所有进程,命令行中列出的进程--Gruopgrplist:显示组ID在grplist列表中的进程--Useruserlist:显示用户ID在userlist列表进程--groupgrplist:显示有效组ID在grplist列表中的进程--pidpidlist:显示PID在pidlist列表中的进程--ppidpidlist:显示其父PID在pidlist列表中的进程pidlistlist--sidsidlist:显示sessionID在sidlist列表中的进程--ttyttylist:显示终端设备ID在ttylist列表中的进程--useruserlist:显示有效用户ID在的进程userlist列表--formatformat:只显示format指定的列----context:显示额外的安全信息--colsn:设置屏幕宽度为n列--columnsn:设置屏幕宽度为n列--cunulative:包含停止子进程的信息--forest:使用hierarchy结构显示进程与父进程之间的关系--headers:在每页输出中显示列标题--no-headers:不显示列标题--linesn:设置屏幕高度为n行--rowsn:设置屏幕高度为n行--sortorder:指定输出排序的列--widthn:设置屏幕宽度为n列--help:显示帮助信息--info:显示调试信息--version:显示ps命令的版本号。您可以将GNU长参数与Unix或BSD样式的参数混合使用以自定义输出。GNU长参数的一个非常好的特性是--forest参数。它显示进程层次结构信息并用ASCII字符绘制可爱的图表。这种格式使得跟踪子进程和父进程变得非常容易。4.1.2实时监控进程虽然ps命令对于收集系统运行的进程信息非常有用,但它也有缺点:只能显示特定时间点的信息。如果想观察频繁换入换出的内存的进程趋势,使用ps命令不方便。top命令正好适用于这种情况。命令:top命令格式:top命令说明:top命令类似于ps命令,可以显示进程信息,但是是实时显示的。注意:按q退出。顶部显示分为两部分:第一部分是系统的整体概览;第二部分是流程的详细清单。第一部分:系统总体概览第一行显示当前时间、系统运行时间、登录用户数和系统平均负载。--loadaverage有三个值:last1minute,last5minutesandlast15minutesaverageload。--该值越大,系统负载越高。--如果过去15分钟的平均负载很高,说明系统可能有问题。--通常情况下,如果系统的负载值超过2,就表示系统繁忙。第二行显示进程摘要信息。top命令的输出将进程称为一个任务(task):有多少进程正在运行、休眠、停止或僵化(僵化状态是指进程完成,但父进程没有响应)。第三行显示CPU的概要信息。top根据进程的所有者(用户或系统)和进程的状态(运行、空闲或等待)将CPU利用率分成几类输出。第四行讲的是系统的物理内存:总共有多少内存,当前使用了多少,空闲了多少。第五行还显示了系统的物理内存,但用于系统交换空间的状态(如果已分配)。第二部分:进程的详细列表第二部分显示了当前正在运行的进程的详细列表,有些列类似于ps命令的输出。具体如下:PID:进程的PIDUSER:进程所有者的名字PR:进程的优先级NI:进程的谦卑值VIRT:进程占用的虚拟内存总量RES:进程占用的物理内存总量SHR:进程与其他进程共享的内存总量S:进程的状态--D:代表可中断休眠状态--R:代表运行状态---S:代表休眠状态--Z:代表僵硬状态--T:代表停止或跟踪状态%CPU:进程使用的CPU时间比例%MEM:进程使用的内存占availablememoryTIME+:进程启动至今的CPU总时间COMMAND:进程对应的命令行名称,即启动的程序名4.1.3结束一个进程在Linux中,进程通过信号进行通信。进程的信号是进程识别并决定忽略或响应的预定义消息。进程如何处理信号由开发人员以编程方式决定。这些信号如下:SIGNAL:NAME:DESCRIPTION1:HUB:PENDED2:INT:INTERRUPTED3:QUIT:ENDOFRUN9:KILL:TERMINATEUNCONDITIONAL11:SEGV:SEGMENTFAULT15:TERM:TERMINATEIFPOSSIBLE17:STOP:UNCONDITIONAL停止运行,但不终止18:TSTP:停止或暂停,但继续在后台运行19:CONT:在STOP或TSTP之后恢复执行Linux上有两个命令可以向正在运行的进程发出信号。1.要向kill命令发送进程信号,您必须是进程的所有者或以root用户身份登录。命令:kill命令格式:killPID命令说明:kill命令默认会向命令行中列出的PID发送一个TERM信号。TERM信号告诉进程在可能的情况下停止运行。但有时进程通常会忽略这个请求。命令演示:kill3940演示说明:尽可能终止PID为3940的进程。命令格式:kill-s信号名或信号值PID命令说明:如果要强制终止,-s参数支持指定其他信号(使用信号名或信息值)。命令演示:kill-93490演示说明:无条件强制终止PID为3490的进程。提示:要检查kill命令是否有效,请再次运行ps或top命令以查看有问题的进程是否已停止。2.killall命令killall命令非常强大,它支持通过进程名而不是PID来结束进程。killall命令还支持通配符,这在系统因负载过重而变慢时很有用。命令:killall命令演示:killallhttp*Demo注意:上例中的命令结束所有以http开头的进程,比如ApcaheWeb服务器的httpd服务。警告:以root用户登录系统时,使用killall命令要特别小心,因为很容易误用通配符,结束重要的系统进程。这可能会损坏文件系统。4.2监控磁盘空间4.2.1挂载存储介质在当今的图形桌面环境中,大多数Linux发行版都可以自动挂载某些类型的可移动存储介质。1.mount命令在Linux上用于挂载媒体的命令称为mount。默认情况下,mount命令输出当前安装在系统上的设备列表。挂载命令提供了以下四部分信息:媒体的设备文件名、媒体挂载到虚拟目录的挂载点、文件系统类型和挂载媒体的访问状态。Linux可以识别许多文件系统类型。如果这些存储设备与WindowsPC共享,则必须使用以下文件系统类型:vfat:Windows长文件系统ntfs:广泛用于WindowsNT、XP、Vista和Windows7的高级文件系统iso9660:标准CD-ROM文件系统命令:mount命令格式:mount-ttypedevicedirectory命令说明:type参数指定要格式化的磁盘的文件系统类型。后两个参数定义了存储设备的设备文件的位置和挂载在虚拟目录中的位置。命令演示:mount-tvfat/dev/sdb1/media/disk演示:手动挂载U盘/dev/sdb1到/media/disk。要在虚拟目录中手动挂载设备,您需要以root用户身份登录,或者以root用户身份运行sudo命令。媒体挂载到虚拟目录后,root用户拥有设备的所有访问权限,其他用户的访问将受到限制。您可以通过目录权限指定用户对设备的访问权限(在第7章中描述)。如果要使用mount命令的一些高级功能,可用的参数如下:-a:挂载/etc/fstab文件中指定的所有文件系统-f:使mount命令模拟挂载设备,而不是真正挂载-F:与-a参数一起使用时,将同时挂载所有文件系统-v:详细模式,将解释挂载设备的每一步-I:i:不启用/sbin下的任何文件系统/mount.filesystem帮助文件-l:L:自动为ext2、ext3和XFS文件系统添加文件系统标签-n:挂载设备,但不在/etc/mtab挂载设备文件中注册-pnum:执行时加密挂载,从文件描述符num中获取密码短语-s:忽略此文件系统不支持的挂载选项-r:将设备挂载为只读-w:将设备挂载为可读写(默认参数)-L标签:根据该文件系统挂载设备到指定的标签-Uuuid:根据指定的uuid挂载设备-O:与-a参数一起使用,将命令限制为特定的一组文件系统-o:给文件系统-添加特定的选项-o参数允许在挂载文件系统时添加一些以逗号分隔的附加选项。以下是常用的选项:ro:mountasread-onlyrw:mountasread-writeuser:允许普通用户挂载文件系统check=none:挂载文件系统时不进行完整性检查loop:mount当一个file2.umount命令从Linux系统中删除一个可移动设备,它不能直接从系统中删除,应该先卸载。提示:您不能在Linux上直接弹出已安装的CD。如果从驱动器中取出CD时遇到问题,通常是因为CD仍安装在虚拟目录中。在尝试弹出之前卸载它。命令:umount命令格式:umount[directory|device]命令说明:卸载设备。如果任何程序正在使用您设备上的文件,系统将不允许您卸载它。4.2.2使用df命令命令:df命令格式:df命令描述:df命令将显示挂载的文件系统及其数据。命令的输出如下:设备的设备文件位置可以容纳多少个1024字节的块已经使用了多少个1024字节的块加载了哪个挂载点使用-h参数进行输出可读。命令格式:df-h命令说明:按照用户阅读过的形式显示,一般用M代替兆字节,G代替千兆字节。4.2.3使用du命令命令:du命令格式:du命令说明:du命令可以显示特定目录的磁盘使用情况。默认情况下,会显示当前目录下所有文件和目录的磁盘使用情况。du命令的常用参数:-c:显示所有列出文件的总大小。-h:以人类可读格式输出大小。-s:显示每个输出参数的总数。4.3处理数据文件4.3.1排序处理命令:sort命令格式:sortfile命令说明:sort命令将文本文件中的数据按照会话指定的默认语言的排序规则进行排序。一些常用的排序参数:-b:排序时忽略开头的空白-C:不排序,如果数据乱序不报告-c:不排序,但检查输入数据是否排序;如果没有排序,则报-d:只考虑空格和字母,不考虑特殊字符-f:默认大写字母先排序;该参数将忽略大小写-g:按一般数字排序-i:排序时忽略不可打印的字符-M:按月份排序,月份名称为三字符-m:合并两个已排序的数据文件-n:按字符串值排序-o:将排序结果写入指定文件-R:对生成的哈希表进行随机Key-value排序-r:反向排序-S:指定使用的内存大小-s:禁用最后一次重排序比较-T:指定位置存放临时工作文件-t:指定一个用来区分keys位置的字符-u:与-c参数一起使用时,检查严格排序;不与-c参数一起使用时,只输出前两个相似的session-z:使用NULL字符作为行尾而不是换行符4.3.2搜索数据命令:grep命令格式:grep[options]pattern[file]命令说明:grep命令行将在输入或指定文件中搜索包含与指定模式匹配的字符的行。命令演示:grepthreefile命令说明:在文件file中查找包含三个的行。grep命令常用参数:-v:反向搜索-n:显示匹配模式的行的行号-c:显示包含匹配模式的行数-e:指定多个匹配模式,默认显示包含多个所有行的匹配模式grep的匹配模式支持使用正则表达式。正则表达式在第20章中介绍。4.3.3压缩数据Linux包括各种文件压缩工具。虽然听起来不错,但实际上这常常会在用户下载文件时造成混淆。以下是Linux上的文件压缩工具:工具:文件扩展名:说明bzip2:.bz2:Burrows-Wheeler块排序文件压缩算法和哈夫曼编码compress:.Z:原始的Unix文件压缩工具,几乎消失了人们使用gzip:.gz:GNU压缩工具,使用Lempel-Zivzip编码:.zip:Windows上PKZIP工具的Unix实现gzip是Linux上最流行的压缩工具。gzip是GNU项目的产物,包括以下工具:gzip:用于压缩文件gzcat:用于查看压缩文本文件的内容gunzip:用于解压文件压缩命令demo:gzipdemo.shDemo说明:压缩demo.sh文件命令:gunzip命令格式:gunzip文件命令说明:解压指定文件命令演示:gzipgunzip.sh.gz演示说明:解压demo.sh压缩文件4.3.4归档数据tar命令的作用:-A:将现有的tar存档附加到另一个现有的tar存档-c:创建一个新的tar存档-d:检查存档和文件系统之间的差异其中-r:将文件附加到现有的tar存档-t:列出一个文件的内容existingtararchive-u:追加一个新的同名文件到tararchive-x:从现有的tararchive中提取文件tar命令选项:-Cdir:切换到指定目录-ffile:将结果输出到文件或设备文件-j:将输出重定向到bzip2命令以压缩内容-p:保留所有文件权限-v:在处理文件时显示文件-z:将输出重定向到gzip命令以进行压缩contents命令:tar命令格式:tarfunction[options]object1object2...命令描述:合并文件object1和object2等待归档成一个tar文件。命令演示:tar-cvftest.tartest/test2/演示说明:创建一个名为test.tar的归档文件,其中包含test和test2目录的内容。命令格式:tar-xvffile命令描述:从tar文件中提取文件。命令格式:tarzcvfdemo.tar.gzdemo[推荐]命令说明:将文件夹压缩成.tar.gz文件。命令格式:tarzxvfdemo.tar.gz命令说明:解压压缩文件。提示:下载开源软件后,您经常会看到以.结尾的文件名。tgz结尾。这些是gzip压缩的tar文件,可以使用命令tar-zxvffilename.tgz解压缩。4.4小结本章讨论了Linux系统管理员和程序员使用的一些高级bash命令。主要介绍ps、top、kill、killall、mount、umount、df、du、sort、grep、gzip、gzcat、gunzip、tar命令。本章学习命令个人总结如下:ps:查看系统进程相关信息top:实时监控系统进程相关信息kill:通过PID结束单个进程killall:通过进程名或通配符挂载结束多个进程:挂载存储介质,如:U盘、CD等umount:卸载存储介质df:查看磁盘使用情况du:查看目录或文件的大小sort:对文本文件的内容进行排序grep:搜索数据,在输入或指定的包含匹配指定的文件gzip:压缩文件gzcat:查看压缩文本文件的内容gunzip:解压文件tar:归档数据,能够压缩和解压文件和目录
