<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>成刚网志 &amp;amp;&amp;amp; CBolg Application</title>
<link>http://www.chenggang.net</link>
<description><![CDATA[记录我的网事历程，架起沟通的桥梁！欢迎留言！
]]></description>
<lastBuildDate>Sun, 05 Feb 2012 11:14:25 +0800</lastBuildDate>
<copyright>Copyright &amp;copy; 2012 by CBolg Application.</copyright>
<language>zh-cn</language>
<pubDate>Thu, 23 Feb 2012 03:32:29 +0800</pubDate>
<item>
<title>Linux Shell常用技巧</title>
<summary><![CDATA[十九. 和系统运行进程相关的Shll命令 : 1. 进程监控命令 () : 要对进程进行监测和控制，首先必须要了解当前进程的情况，也就是需要查看当前进程，而命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。 命令存在很多的命令行选项和参数，然而我们最为常用只有两种形式，这里先给出与它们相关的选项和参数的含义： : 显示终端上的所有进程，包括…]]></summary>
<description><![CDATA[<div id="cnblogs_post_body">
	<div id="cnblogs_post_body">
		<p>
			<span style="COLOR: #ff6600; FONT-SIZE: 14pt"><strong>十九.&nbsp; 和系统运行进程相关的Shell命令</strong></span><span style="COLOR: #ff6600; FONT-SIZE: 14pt"><strong>:</strong></span><br />
			&nbsp;&nbsp;&nbsp;&nbsp;<br />
			&nbsp;<span style="FONT-SIZE: 16px">&nbsp;&nbsp; <strong>1. 进程监控命令<span style="COLOR: #ff0000">(ps)</span>:</strong></span><br />
			&nbsp;&nbsp;&nbsp; 要对进程进行监测和控制，首先必须要了解当前进程的情况，也就是需要查看当前进程，而ps命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。<br />
			&nbsp;&nbsp;&nbsp; ps命令存在很多的命令行选项和参数，然而我们最为常用只有两种形式，这里先给出与它们相关的选项和参数的含义：<br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp; a: 显示终端上的所有进程，包括其他用户的进程。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp; u: 以用户为主的格式来显示程序状况。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp; x: 显示所有程序，不以终端来区分。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp; -e:显示所有进程。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp; o: 其后指定要输出的列，如user，pid等，多个列之间用逗号分隔。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp; -p:后面跟着一组pid的列表，用逗号分隔，该命令将只是输出这些pid的相关数据。</span><br />
			<br />
			&nbsp;&nbsp;&nbsp;<em><span style="COLOR: #0000ff"> /&gt; ps aux</span></em><br />
			&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp; 0.0&nbsp; 0.1&nbsp;&nbsp; 2828&nbsp; 1400 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ss&nbsp;&nbsp; 09:51&nbsp;&nbsp; 0:02 /sbin/init<br />
			&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp; 0.0&nbsp; 0.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; 0 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S&nbsp;&nbsp;&nbsp; 09:51&nbsp;&nbsp; 0:00 [kthreadd]<br />
			&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp; 0.0&nbsp; 0.0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; S&nbsp;&nbsp;&nbsp; 09:51&nbsp;&nbsp; 0:00 [migration/0]<br />
			&nbsp;&nbsp;&nbsp; ... ...&nbsp;&nbsp;<br />
			&nbsp;&nbsp;&nbsp;<em><span style="COLOR: #0000ff"> /&gt; ps -eo user,pid,%cpu,%mem,start,time,command | head -n 4</span></em><br />
			&nbsp;&nbsp;&nbsp; USER&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PID %CPU %MEM&nbsp; STARTED&nbsp;&nbsp;&nbsp;&nbsp; TIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; COMMAND<br />
			&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0&nbsp;&nbsp;&nbsp; 0.1&nbsp;&nbsp; 09:51:08&nbsp;&nbsp;&nbsp;&nbsp; 00:00:02&nbsp; /sbin/init<br />
			&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0&nbsp;&nbsp;&nbsp; 0.0&nbsp;&nbsp; 09:51:08&nbsp;&nbsp;&nbsp;&nbsp; 00:00:00&nbsp; [kthreadd]<br />
			&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0&nbsp;&nbsp;&nbsp; 0.0&nbsp;&nbsp; 09:51:08 &nbsp; &nbsp; 00:00:00&nbsp; [migration/0]<br />
			&nbsp;&nbsp;&nbsp; 这里需要说明的是，ps中存在很多和进程性能相关的参数，它们均以输出表格中的列的方式显示出来，在这里我们只是给出了非常常用的几个参数，至于更多参数，我们则需要根据自己应用的实际情况去看ps的man手册。<br />
			&nbsp;&nbsp;&nbsp; #以完整的格式显示pid为1(init)的进程的相关数据<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; ps -fp 1</span></em><br />
			&nbsp;&nbsp; &nbsp;UID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PID&nbsp; PPID&nbsp; C STIME TTY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIME&nbsp;&nbsp; CMD<br />
			&nbsp;&nbsp; &nbsp;root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 0 05:16&nbsp;&nbsp; ?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 00:00:03 /sbin/init<br />
			&nbsp;&nbsp;&nbsp;<br />
			&nbsp;&nbsp;&nbsp; <span style="FONT-SIZE: 16px"><strong>2. 改变进程优先级的命令<span style="COLOR: #ff0000">(nice和renice)</span>:</strong></span><br />
			&nbsp;&nbsp;&nbsp; 该Shell命令最常用的使用方式为：nice [-n &lt;优先等级&gt;][执行指令]，其中优先等级的范围从-20-19，其中-20最高，19最低，只有系统管理者可以设置负数的等级。<br />
			&nbsp;&nbsp;&nbsp; #后台执行sleep 100秒，同时在启动时将其nice值置为19<br />
			&nbsp;&nbsp;&nbsp;<em><span style="COLOR: #0000ff"> /&gt; nice -n 19 sleep 100 &amp;</span></em><br />
			&nbsp;&nbsp;&nbsp; [1] 4661<br />
			&nbsp;&nbsp;&nbsp; #后台执行sleep 100秒，同时在启动时将其nice值置为-19<br />
			&nbsp;&nbsp;&nbsp; <em><span style="COLOR: #0000ff">/&gt; nice -n -19 sleep 100 &amp;</span></em><br />
			&nbsp;&nbsp;&nbsp; [2] 4664<br />
			&nbsp;&nbsp;&nbsp; #关注ps -l输出中用黄色高亮的两行，它们的NI值和我们执行是设置的值一致。<br />
			&nbsp;&nbsp;&nbsp;<em><span style="COLOR: #0000ff"> /&gt; ps -l</span></em><br />
			&nbsp;&nbsp;&nbsp; F S&nbsp;&nbsp; UID&nbsp;&nbsp; PID&nbsp; PPID&nbsp; C PRI&nbsp; NI&nbsp; ADDR&nbsp; SZ&nbsp;&nbsp;&nbsp; WCHAN&nbsp; TTY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CMD<br />
			&nbsp;&nbsp;&nbsp; 4 S&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 2833&nbsp; 2829&nbsp; 0&nbsp; 80&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1739&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; pts/2&nbsp;&nbsp;&nbsp; 00:00:00&nbsp; bash<br />
			<span style="BACKGROUND-COLOR: #ffff00">&nbsp;&nbsp;&nbsp; 0 S&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 4661&nbsp; 2833&nbsp; 0&nbsp; 99&nbsp; 19&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1066&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pts/2&nbsp;&nbsp;&nbsp; 00:00:00&nbsp; sleep</span><br />
			<span style="BACKGROUND-COLOR: #ffff00">&nbsp;&nbsp;&nbsp; 4 S&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 4664&nbsp; 2833&nbsp; 0&nbsp; 61 -19&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1066&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; pts/2&nbsp;&nbsp;&nbsp; 00:00:00&nbsp; sleep</span><br />
			&nbsp;&nbsp;&nbsp; 4 R&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp; 4665&nbsp; 2833&nbsp; 1&nbsp; 80&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp; -&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1231 &nbsp; &nbsp; -&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; pts/2&nbsp;&nbsp;&nbsp; 00:00:00&nbsp; ps<br />
			&nbsp;&nbsp;&nbsp;<br />
			&nbsp;&nbsp;&nbsp; renice命令主要用于为已经执行的进程重新设定nice值，该命令包含以下几个常用选项：<br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp; -g:　使用程序群组名称，修改所有隶属于该程序群组的程序的优先权。</span><br />
			<span style="COLOR: #ff0000">　 -p:&nbsp; 改变该程序的优先权等级，此参数为预设值。</span><br />
			<span style="COLOR: #ff0000">　 -u:&nbsp; 指定用户名称，修改所有隶属于该用户的程序的优先权。</span><br />
			&nbsp;&nbsp;&nbsp;<br />
			&nbsp;&nbsp;&nbsp; #切换到stephen用户下执行一个后台进程，这里sleep进程将在后台睡眠1000秒。<br />
			&nbsp;&nbsp;&nbsp;<em><span style="COLOR: #0000ff"> /&gt; su stephen</span></em><br />
			<em><span style="COLOR: #0000ff">&nbsp;&nbsp;&nbsp; /&gt; sleep 1000&amp;&nbsp;&nbsp;</span></em><br />
			&nbsp;&nbsp;&nbsp; [1] <strong><span style="COLOR: #ff0000">4812</span></strong><br />
			&nbsp;&nbsp;&nbsp; <em><span style="COLOR: #0000ff">/&gt; exit&nbsp;</span></em>&nbsp; #退回到切换前的root用户<br />
			&nbsp;&nbsp;&nbsp; #查看已经启动的后台sleep进程，其ni值为0，宿主用户为stephen<br />
			&nbsp;&nbsp;&nbsp;<em><span style="COLOR: #0000ff"> /&gt; ps -eo user,pid,ni,command | grep stephen</span></em><br />
			&nbsp;&nbsp;&nbsp; stephen&nbsp;&nbsp; 4812&nbsp;&nbsp; 0 sleep 1000<br />
			&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4821&nbsp;&nbsp;&nbsp; 0 grep&nbsp; stephen<br />
			&nbsp;&nbsp;&nbsp; #以指定用户的方式修改该用户下所有进程的nice值<br />
			&nbsp;&nbsp;&nbsp;<em><span style="COLOR: #0000ff"> /&gt; renice -n 5 -u stephen</span></em><br />
			&nbsp;&nbsp;&nbsp; 500: old priority 0, new priority 5<br />
			&nbsp;&nbsp;&nbsp; #从再次执行ps的输出结果可以看出，该sleep后台进程的nice值已经调成了5<br />
			&nbsp;<em><span style="COLOR: #0000ff">&nbsp;&nbsp; /&gt; ps -eo user,pid,ni,command | grep stephen</span></em><br />
			&nbsp;&nbsp;&nbsp; stephen&nbsp;&nbsp; 4812&nbsp;&nbsp; 5 sleep 1000<br />
			&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp; &nbsp; &nbsp; 4826 &nbsp; 0 grep&nbsp; stephen<br />
			&nbsp;&nbsp;&nbsp; #以指定进程pid的方式修改该进程的nice值<br />
			&nbsp;&nbsp;&nbsp; <em><span style="COLOR: #0000ff">/&gt; renice -n 10 -p 4812</span></em><br />
			&nbsp;&nbsp;&nbsp; 4812: old priority 5, new priority 10<br />
			&nbsp;&nbsp;&nbsp; #再次执行ps，该sleep后台进程的nice值已经从5变成了10<br />
			&nbsp;&nbsp;&nbsp;<em><span style="COLOR: #0000ff"> /&gt; ps -eo user,pid,ni,command | grep stephen</span></em><br />
			&nbsp;&nbsp;&nbsp; stephen&nbsp;&nbsp; 4812&nbsp; 10 sleep 1000<br />
			&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4829&nbsp;&nbsp; 0 grep&nbsp; stephen</p>
		<p>
			<br />
			<span style="FONT-SIZE: 16px"><strong>&nbsp;&nbsp;&nbsp; 3. 列出当前系统打开文件的工具<span style="COLOR: #ff0000">(lsof)</span>:</strong></span><br />
			&nbsp;&nbsp; &nbsp;lsof(list opened files)，其重要功能为列举系统中已经被打开的文件。众所周知，linux环境中任何事物都是文件，如设备、目录、sockets等。所以，用好lsof命令，对日常的linux管理非常有帮助。下面先给出该命令的常用选项：<br />
			<span style="COLOR: #ff0000"><strong>&nbsp;&nbsp; &nbsp;-c command_prefix:</strong> 显示以command_prefix开头的进程打开的文件。</span><br />
			<span style="COLOR: #ff0000"><strong>&nbsp;&nbsp; &nbsp;-p PID:</strong> 显示指定PID已打开文件的信息</span><br />
			<span style="COLOR: #ff0000"><strong>&nbsp;&nbsp; &nbsp;+d directory:</strong>&nbsp; 从文件夹directory来搜寻(不考虑子目录)，列出该目录下打开的文件信息。</span><br />
			<span style="COLOR: #ff0000"><strong>&nbsp;&nbsp; &nbsp;+D directory:&nbsp;</strong> 从文件夹directory来搜寻(考虑子目录)，列出该目录下打开的文件信息。</span><br />
			<span style="COLOR: #ff0000"><strong>&nbsp;&nbsp; &nbsp;-d num_of_fd:</strong>&nbsp; 以File Descriptor的信息进行匹配，可使用3-10，表示范围，3,10表示某些值。</span><br />
			<span style="COLOR: #ff0000"><strong>&nbsp;&nbsp; &nbsp;-u user:</strong> 显示某用户的已经打开的文件，其中user可以使用正则表达式。</span><br />
			<span style="COLOR: #ff0000"><strong>&nbsp;&nbsp; &nbsp;-i:</strong> 监听指定的协议、端口、主机等的网络信息，格式为：[proto][@host|addr][:svc_list|port_list]</span><br />
			&nbsp;&nbsp; &nbsp;<br />
			&nbsp;&nbsp; &nbsp;#查看打开/dev/null文件的进程。<br />
			&nbsp;&nbsp; <em><span style="COLOR: #0000ff">&nbsp;/&gt; lsof /dev/null | head -n 5</span></em><br />
			&nbsp;&nbsp; &nbsp;COMMAND&nbsp;&nbsp;&nbsp; PID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; USER&nbsp;&nbsp; FD&nbsp;&nbsp; TYPE DEVICE SIZE/OFF NODE NAME<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp; 0u&nbsp;&nbsp; CHR&nbsp;&nbsp;&nbsp; 1,3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0 3671 /dev/null<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp; 1u&nbsp;&nbsp; CHR&nbsp;&nbsp;&nbsp; 1,3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0 3671 /dev/null<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp; 2u&nbsp;&nbsp; CHR&nbsp;&nbsp;&nbsp; 1,3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0 3671 /dev/null<br />
			&nbsp;&nbsp; &nbsp;udevd 397&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp; 0u&nbsp;&nbsp; CHR&nbsp;&nbsp;&nbsp; 1,3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0 3671 /dev/null<br />
			&nbsp;&nbsp; &nbsp;<br />
			&nbsp;&nbsp; &nbsp;#查看打开22端口的进程<br />
			&nbsp;&nbsp; <em><span style="COLOR: #0000ff">&nbsp;/&gt; lsof -i:22</span></em><br />
			&nbsp;&nbsp; &nbsp;COMMAND&nbsp; PID USER&nbsp;&nbsp; FD&nbsp;&nbsp; TYPE DEVICE SIZE/OFF NODE NAME<br />
			&nbsp;&nbsp; &nbsp;sshd&nbsp;&nbsp;&nbsp; 1582 root&nbsp;&nbsp;&nbsp; 3u&nbsp; IPv4&nbsp; 11989&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP *:ssh (LISTEN)<br />
			&nbsp;&nbsp; &nbsp;sshd&nbsp;&nbsp;&nbsp; 1582 root&nbsp;&nbsp;&nbsp; 4u&nbsp; IPv6&nbsp; 11991&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP *:ssh (LISTEN)<br />
			&nbsp;&nbsp; &nbsp;sshd&nbsp;&nbsp;&nbsp; 2829 root&nbsp;&nbsp;&nbsp; 3r&nbsp;&nbsp; IPv4&nbsp; 19635&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp; TCP bogon:ssh-&gt;bogon:15264 (ESTABLISHED)<br />
			&nbsp;&nbsp; &nbsp;<br />
			&nbsp;&nbsp; &nbsp;#查看init进程打开的文件<br />
			&nbsp;&nbsp; <em><span style="COLOR: #0000ff">&nbsp;/&gt;&nbsp; lsof -c init</span></em><br />
			&nbsp;&nbsp; &nbsp;COMMAND PID USER&nbsp;&nbsp; FD&nbsp;&nbsp; TYPE&nbsp;&nbsp;&nbsp;&nbsp; DEVICE&nbsp;&nbsp; SIZE/OFF&nbsp;&nbsp; NODE NAME<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp; cwd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DIR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,2&nbsp;&nbsp;&nbsp;&nbsp; 4096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 /<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp; rtd&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; DIR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,2&nbsp;&nbsp;&nbsp;&nbsp; 4096&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 /<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp; txt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,2&nbsp;&nbsp; 136068&nbsp;&nbsp; 148567&nbsp;&nbsp;&nbsp;&nbsp; /sbin/init<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp; mem&nbsp;&nbsp;&nbsp; REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,2&nbsp;&nbsp;&nbsp; 58536&nbsp;&nbsp; 137507&nbsp;&nbsp;&nbsp;&nbsp; /lib/libnss_files-2.12.so<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp; mem&nbsp;&nbsp;&nbsp; REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,2&nbsp;&nbsp; 122232&nbsp; 186675&nbsp;&nbsp;&nbsp;&nbsp; /lib/libgcc_s-4.4.4-20100726.so.1<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp; mem&nbsp;&nbsp;&nbsp; REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,2&nbsp;&nbsp; 141492&nbsp; 186436&nbsp;&nbsp;&nbsp;&nbsp; /lib/ld-2.12.so<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp; mem&nbsp;&nbsp;&nbsp; REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,2&nbsp; 1855584 186631&nbsp;&nbsp;&nbsp;&nbsp; /lib/libc-2.12.so<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp; mem&nbsp;&nbsp;&nbsp; REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,2&nbsp;&nbsp; 133136&nbsp; 186632&nbsp;&nbsp;&nbsp;&nbsp; /lib/libpthread-2.12.so<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp; mem&nbsp;&nbsp;&nbsp; REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,2&nbsp;&nbsp;&nbsp; 99020&nbsp;&nbsp; 180422&nbsp;&nbsp;&nbsp;&nbsp; /lib/libnih.so.1.0.0<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp; mem&nbsp;&nbsp;&nbsp; REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,2&nbsp;&nbsp;&nbsp; 37304&nbsp;&nbsp; 186773&nbsp;&nbsp;&nbsp;&nbsp; /lib/libnih-dbus.so.1.0.0<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp; mem&nbsp;&nbsp;&nbsp; REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,2&nbsp;&nbsp;&nbsp; 41728&nbsp;&nbsp; 186633&nbsp;&nbsp;&nbsp;&nbsp; /lib/librt-2.12.so<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp; mem&nbsp;&nbsp;&nbsp; REG&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8,2&nbsp;&nbsp; 286380&nbsp; 186634&nbsp;&nbsp;&nbsp;&nbsp; /lib/libdbus-1.so.3.4.0<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp; 0u&nbsp;&nbsp;&nbsp;&nbsp; CHR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1,3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3671&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/null<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp; 1u&nbsp;&nbsp;&nbsp;&nbsp; CHR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1,3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3671&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/null<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp; 2u&nbsp;&nbsp;&nbsp;&nbsp; CHR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1,3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3671&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /dev/null<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp; 3r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FIFO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7969&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pipe<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp; 4w&nbsp;&nbsp;&nbsp;&nbsp; FIFO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7969&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pipe<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp; 5r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DIR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inotify<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp; 6r&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; DIR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0,10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; inotify<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp; 7u&nbsp;&nbsp;&nbsp;&nbsp; unix&nbsp;&nbsp; 0xf61e3840&nbsp; 0t0&nbsp;&nbsp;&nbsp; 7970&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; socket<br />
			&nbsp;&nbsp; &nbsp;init&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 root&nbsp;&nbsp;&nbsp; 9u&nbsp;&nbsp;&nbsp;&nbsp; unix&nbsp;&nbsp; 0xf3bab280&nbsp; 0t0&nbsp;&nbsp; 11211&nbsp;&nbsp;&nbsp;&nbsp; socket<br />
			&nbsp;&nbsp; &nbsp;在上面输出的FD列中，显示的是文件的File Descriptor number，或者如下的内容：<br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;cwd:&nbsp; current working directory;</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;mem:&nbsp; memory-mapped file;</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;mmap: memory-mapped device;</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;pd:&nbsp;&nbsp; parent directory;</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;rtd:&nbsp; root directory;</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;txt:&nbsp; program text (code and data);</span><br />
			<span style="COLOR: #000000">&nbsp;&nbsp; &nbsp;文件的File Descriptor number显示模式有:</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;r for read access;</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;w for write access;</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;u for read and write access;</span><br />
			<br />
			&nbsp;&nbsp; &nbsp;在上面输出的FD列中，显示的是文件的File Descriptor number，或者如下的内容：<br />
			&nbsp;&nbsp; <span style="COLOR: #ff0000">&nbsp;DIR:&nbsp; 目录</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;LINK: 链接文件</span><br />
			&nbsp;&nbsp; &nbsp;<br />
			&nbsp;&nbsp; &nbsp;#查看pid为1的进程(init)打开的文件，其输出结果等同于上面的命令，他们都是init。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; lsof -p 1</span></em>&nbsp;&nbsp;<br />
			&nbsp;&nbsp; &nbsp;#查看owner为root的进程打开的文件。<br />
			&nbsp;&nbsp; <em><span style="COLOR: #0000ff">&nbsp;/&gt; lsof -u root</span></em><br />
			&nbsp;&nbsp; &nbsp;#查看owner不为root的进程打开的文件。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; lsof -u ^root</span></em><br />
			&nbsp;&nbsp; &nbsp;#查看打开协议为tcp，ip为192.168.220.134，端口为22的进程。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; lsof -i tcp@192.168.220.134:22</span></em><br />
			&nbsp;&nbsp; &nbsp;COMMAND&nbsp; PID USER&nbsp;&nbsp; FD&nbsp;&nbsp; TYPE DEVICE SIZE/OFF NODE NAME<br />
			&nbsp;&nbsp; &nbsp;sshd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2829 root&nbsp;&nbsp;&nbsp;&nbsp; 3r&nbsp;&nbsp;&nbsp; IPv4&nbsp; 19635&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0t0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TCP&nbsp;&nbsp;&nbsp; bogon:ssh-&gt;bogon:15264 (ESTABLISHED)&nbsp;&nbsp;&nbsp;<br />
			&nbsp;&nbsp; &nbsp;#查看打开/root文件夹，但不考虑目录搜寻<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; lsof +d /root</span></em><br />
			&nbsp;&nbsp; &nbsp;#查看打开/root文件夹以及其子目录搜寻<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; lsof +D /root</span></em><br />
			&nbsp;&nbsp; &nbsp;#查看打开FD(0-3)文件的所有进程<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; lsof -d 0-3</span></em></p>
		<p>
			<br />
			<span style="FONT-SIZE: 16px"><strong>&nbsp;&nbsp;&nbsp; 4. 进程查找/杀掉命令<span style="COLOR: #ff0000">(pgrep/pkill)</span>：</strong></span><br />
			&nbsp;&nbsp; &nbsp;查找和杀死指定的进程, 他们的选项和参数完全相同, 这里只是介绍pgrep。下面是常用的命令行选项：<br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;-d：定义多个进程之间的分隔符, 如果不定义则使用换行符。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;-n：表示如果该程序有多个进程正在运行，则仅查找最新的，即最后启动的。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;-o：表示如果该程序有多个进程正在运行，则仅查找最老的，即最先启动的。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;-G：其后跟着一组group id，该命令在搜索时，仅考虑group列表中的进程。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;-u：其后跟着一组有效用户ID(effetive user id)，该命令在搜索时，仅考虑该effective user列表中的进程。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;-U：其后跟着一组实际用户ID(real user id)，该命令在搜索时，仅考虑该real user列表中的进程。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;-x：表示进程的名字必须完全匹配, 以上的选项均可以部分匹配。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;-l： 将不仅打印pid,也打印进程名。</span><br />
			<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;-f： 一般与-l合用, 将打印进程的参数。</span><br />
			&nbsp;&nbsp; &nbsp;<br />
			&nbsp;&nbsp; &nbsp;#手工创建两个后台进程<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; sleep 1000&amp;</span></em><br />
			&nbsp;&nbsp; &nbsp;3456<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; sleep 1000&amp;</span></em><br />
			&nbsp;&nbsp; &nbsp;3457<br />
			&nbsp;&nbsp; &nbsp;<br />
			&nbsp;&nbsp; &nbsp;#查找进程名为sleep的进程，同时输出所有找到的pid<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; pgrep sleep</span></em><br />
			&nbsp;&nbsp; &nbsp;3456<br />
			&nbsp;&nbsp; &nbsp;3457<br />
			&nbsp;&nbsp; &nbsp;#查找进程名为sleep的进程pid，如果存在多个，他们之间使用:分隔，而不是换行符分隔。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; pgrep -d: sleep</span></em><br />
			&nbsp;&nbsp; &nbsp;3456:3457<br />
			&nbsp;&nbsp; &nbsp;#查找进程名为sleep的进程pid，如果存在多个，这里只是输出最后启动的那一个。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; pgrep -n sleep</span></em><br />
			&nbsp;&nbsp; &nbsp;3457<br />
			&nbsp;&nbsp; &nbsp;#查找进程名为sleep的进程pid，如果存在多个，这里只是输出最先启动的那一个。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; pgrep -o&nbsp; sleep</span></em><br />
			&nbsp;&nbsp; &nbsp;3456<br />
			&nbsp;&nbsp; &nbsp;#查找进程名为sleep，同时这个正在运行的进程的组为root和stephen。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; pgrep -G root,stephen sleep</span></em><br />
			&nbsp;&nbsp; &nbsp;3456<br />
			&nbsp;&nbsp; &nbsp;3457<br />
			&nbsp;&nbsp; &nbsp;#查找有效用户ID为root和oracle，进程名为sleep的进程。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; pgrep -u root,oracle sleep</span></em><br />
			&nbsp;&nbsp; &nbsp;3456<br />
			&nbsp;&nbsp; &nbsp;3457<br />
			&nbsp;&nbsp; &nbsp;#查找实际用户ID为root和oracle，进程名为sleep的进程。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; pgrep -U root,oracle sleep</span></em><br />
			&nbsp;&nbsp; &nbsp;3456<br />
			&nbsp;&nbsp; &nbsp;3457<br />
			&nbsp;&nbsp; &nbsp;#查找进程名为sleep的进程，注意这里找到的进程名必须和参数中的完全匹配。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; pgrep -x sleep</span></em><br />
			&nbsp;&nbsp; &nbsp;3456<br />
			&nbsp;&nbsp; &nbsp;3457<br />
			&nbsp;&nbsp; &nbsp;#-x不支持部分匹配，sleep进程将不会被查出，因此下面的命令没有结果。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; pgrep -x sle</span></em><br />
			&nbsp;&nbsp; &nbsp;#查找进程名为sleep的进程，同时输出所有找到的pid和进程名。&nbsp;&nbsp; &nbsp;<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; pgrep -l sleep</span></em><br />
			&nbsp;&nbsp; &nbsp;3456 sleep<br />
			&nbsp;&nbsp; &nbsp;3457 sleep<br />
			&nbsp;&nbsp; &nbsp;#查找进程名为sleep的进程，同时输出所有找到的pid、进程名和启动时的参数。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; pgrep -lf sleep</span></em><br />
			&nbsp;&nbsp; &nbsp;3456 sleep 1000<br />
			&nbsp;&nbsp; &nbsp;3457 sleep 1000<br />
			&nbsp;&nbsp; &nbsp;#查找进程名为sleep的进程，同时以逗号为分隔符输出他们的pid，在将结果传给ps命令，-f表示显示完整格式，-p显示pid列表，ps将只是输出该列表内的进程数据。<br />
			&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; pgrep -f sleep -d, | xargs ps -fp</span></em><br />
			&nbsp;&nbsp; &nbsp;UID&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; PID&nbsp; PPID&nbsp; C STIME TTY&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TIME CMD<br />
			&nbsp;&nbsp; &nbsp;root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3456&nbsp; 2138&nbsp; 0 06:11 pts/5&nbsp;&nbsp;&nbsp; 00:00:00 sleep 1000<br />
			&nbsp;&nbsp; &nbsp;root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3457&nbsp; 2138&nbsp; 0 06:11 pts/5&nbsp;&nbsp;&nbsp; 00:00:00 sleep 1000&nbsp;</p>
	</div>
	<p>
		<span style="COLOR: #ff6600"><strong><span style="FONT-SIZE: 14pt">二十. 通过管道组合Shell命令获取系统运行数据<span style="COLOR: #ff6600; FONT-SIZE: 14pt"><strong>:</strong></span></span></strong></span></p>
	<p>
		<br />
		&nbsp;&nbsp; <span style="FONT-SIZE: 16px"><strong>&nbsp;1.&nbsp; 输出当前系统中占用内存最多的5条命令</strong></span><span style="FONT-SIZE: 16px"><strong>:</strong></span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#1) 通过ps命令列出当前主机正在运行的所有进程。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#2) 按照第五个字段基于数值的形式进行正常排序(由小到大)。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#3) 仅显示最后5条输出。</span><br />
		&nbsp;&nbsp;<em><span style="COLOR: #0000ff"> &nbsp;/&gt; ps aux | sort -k 5n | tail -5</span></em><br />
		&nbsp;&nbsp; &nbsp;stephen&nbsp;&nbsp; 1861&nbsp; 0.2&nbsp; 2.0&nbsp; 96972 21596&nbsp; ?&nbsp; S&nbsp;&nbsp;&nbsp;&nbsp; Nov11&nbsp;&nbsp; 2:24 nautilus<br />
		&nbsp;&nbsp; &nbsp;stephen&nbsp;&nbsp; 1892&nbsp; 0.0&nbsp; 0.4 102108&nbsp; 4508&nbsp; ?&nbsp; S&lt;sl Nov11&nbsp;&nbsp; 0:00 /usr/bin/pulseaudio<br />
		&nbsp;&nbsp; &nbsp;stephen&nbsp;&nbsp; 1874&nbsp; 0.0&nbsp; 0.9 107648 10124 ?&nbsp; S&nbsp;&nbsp;&nbsp;&nbsp; Nov11&nbsp;&nbsp; 0:00 gnome-volume<br />
		&nbsp;&nbsp; &nbsp;stephen&nbsp;&nbsp; 1855&nbsp; 0.0&nbsp; 1.2 123776 13112 ?&nbsp; Sl&nbsp;&nbsp;&nbsp;&nbsp; Nov11&nbsp;&nbsp; 0:00 metacity<br />
		&nbsp;&nbsp; &nbsp;stephen&nbsp;&nbsp; 1831&nbsp; 0.0&nbsp; 0.9 125432&nbsp; 9768&nbsp; ?&nbsp; Ssl&nbsp;&nbsp; Nov11&nbsp;&nbsp; 0:05 /usr/libexec/gnome<br />
		&nbsp;&nbsp; &nbsp;<br />
		&nbsp;&nbsp; &nbsp;<strong><span style="FONT-SIZE: 16px">2.&nbsp; 找出cpu利用率高的20个进程</span></strong><span style="FONT-SIZE: 16px"><strong>:</strong></span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#1) 通过ps命令输出所有进程的数据，-o选项后面的字段列表列出了结果中需要包含的数据列。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#2) 将ps输出的Title行去掉，grep -v PID表示不包含PID的行。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#3) 基于第一个域字段排序，即pcpu。n表示以数值的形式排序。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#4) 输出按cpu使用率排序后的最后20行，即占用率最高的20行。</span><br />
		&nbsp;&nbsp; &nbsp;<span style="COLOR: #0000ff"><em>/&gt; ps -e -o pcpu,pid,user,sgi_p,cmd | grep -v PID | sort -k 1n | tail -20</em></span><br />
		<br />
		&nbsp;&nbsp;&nbsp; <span style="FONT-SIZE: 16px"><strong>3.&nbsp; 获取当前系统物理内存的总大小:</strong></span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#1) 以兆(MB)为单位输出系统当前的内存使用状况。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#2) 通过grep定位到Mem行，该行是以操作系统为视角统计数据的。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#3) 通过awk打印出该行的第二列，即total列。</span><br />
		&nbsp;&nbsp; <em><span style="COLOR: #0000ff">&nbsp;/&gt; free -m | grep &quot;Mem&quot; | awk &#39;{print $2, &quot;MB&quot;}&#39;</span></em><br />
		&nbsp;&nbsp; &nbsp;1007 MB<br />
		<br />
		<span style="FONT-SIZE: 14pt"><strong><span style="COLOR: #ff6600">二十一. 通过管道组合Shell命令进行系统管理</span></strong></span><span style="COLOR: #ff6600; FONT-SIZE: 14pt"><strong>:</strong></span><br />
		<br />
		&nbsp;&nbsp; &nbsp;<span style="FONT-SIZE: 16px"><strong>1.&nbsp; 获取当前或指定目录下子目录所占用的磁盘空间，并将结果按照从大到小的顺序输出:</strong></span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#1) 输出/usr的子目录所占用的磁盘空间。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#2) 以数值的方式倒排后输出。</span><br />
		&nbsp;&nbsp; <em><span style="COLOR: #0000ff">&nbsp;/&gt; du -s /usr/* | sort -nr</span></em><br />
		&nbsp;&nbsp; &nbsp;1443980 /usr/share<br />
		&nbsp;&nbsp; &nbsp;793260&nbsp;&nbsp; /usr/lib<br />
		&nbsp;&nbsp; &nbsp;217584&nbsp;&nbsp; /usr/bin<br />
		&nbsp;&nbsp; &nbsp;128624&nbsp;&nbsp; /usr/include<br />
		&nbsp;&nbsp; &nbsp;60748&nbsp;&nbsp;&nbsp; /usr/libexec<br />
		&nbsp;&nbsp; &nbsp;45148&nbsp;&nbsp;&nbsp; /usr/src<br />
		&nbsp;&nbsp; &nbsp;21096&nbsp;&nbsp;&nbsp; /usr/sbin<br />
		&nbsp;&nbsp; &nbsp;6896&nbsp;&nbsp; &nbsp;&nbsp; /usr/local<br />
		&nbsp;&nbsp; &nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/games<br />
		&nbsp;&nbsp; &nbsp;4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/etc<br />
		&nbsp;&nbsp; &nbsp;0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /usr/tmp<br />
		&nbsp;&nbsp; &nbsp;<br />
		&nbsp;&nbsp; &nbsp;<span style="FONT-SIZE: 16px"><strong>2.&nbsp; 批量修改文件名</strong></span><span style="FONT-SIZE: 16px"><strong>:</strong></span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#1) find命令找到文件名扩展名为.output的文件。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#2) sed命令中的-e选项表示流编辑动作有多次，第一次是将找到的文件名中相对路径前缀部分去掉，如./aa改为aa。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp; 流编辑的第二部分，是将20110311替换为mv &amp; 20110310，其中&amp;表示s命令的被替换部分，这里即源文件名。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#&nbsp;&nbsp;&nbsp; 1表示被替换部分中#的(.*)。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp; #3) 此时的输出应为</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#&nbsp;&nbsp; &nbsp;mv 20110311.output 20110310.output</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#&nbsp;&nbsp; &nbsp;mv 20110311abc.output 20110310abc.output</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#&nbsp;&nbsp;&nbsp; 最后将上面的输出作为命令交给bash命令去执行，从而将所有</span><span style="COLOR: #ff0000">20110311*.output改为</span><span style="COLOR: #ff0000">20110311*.output</span><br />
		&nbsp;&nbsp; <em><span style="COLOR: #0000ff">&nbsp;/&gt; find ./ -name &quot;*.output&quot; -print&nbsp; | sed -e &#39;s/.///g&#39; -e &#39;s/20110311(.*)/mv &amp; 201103101/g&#39; | bash</span></em><br />
		&nbsp;&nbsp;&nbsp;<br />
		<span style="FONT-SIZE: 16px"><strong>&nbsp;&nbsp; &nbsp;3.&nbsp; 统计当前目录下文件和目录的数量</strong></span><span style="FONT-SIZE: 16px"><strong>:</strong></span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#1) ls -l命令列出文件和目录的详细信息。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp;&nbsp; #2) ls -l输出的详细列表中的第一个域字段是文件或目录的权限属性部分，如果权限属性部分的第一个字符为d，<br />
		&nbsp;&nbsp; &nbsp;#&nbsp;&nbsp;&nbsp; 该文件为目录，如果是-，该文件为普通文件。<br />
		&nbsp;&nbsp;&nbsp; #3) 通过wc计算grep过滤后的行数。</span><br />
		&nbsp;&nbsp; <em><span style="COLOR: #0000ff">&nbsp;/&gt; ls -l * | grep &quot;^-&quot; | wc -l</span></em><br />
		<em><span style="COLOR: #0000ff">&nbsp;&nbsp; &nbsp;/&gt; ls -l * | grep &quot;^d&quot; | wc -l</span></em><br />
		&nbsp;&nbsp;&nbsp;<br />
		&nbsp;&nbsp; &nbsp;<span style="FONT-SIZE: 16px"><strong>4.&nbsp; 杀掉指定终端的所有进程:</strong></span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#1) 通过ps命令输出终端为pts/1的所有进程。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#2) 将ps的输出传给grep，grep将过滤掉ps输出的Title部分，-v PID表示不包含PID的行。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#3) awk打印输出grep查找结果的第一个字段，即pid字段。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#4) 上面的三个组合命令是在反引号内被执行的，并将执行的结果赋值给数组变量${K}。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#5) kill方法将杀掉数组${K}包含的pid。</span><br />
		&nbsp;&nbsp; <em><span style="COLOR: #0000ff">&nbsp;/&gt; kill -9 ${K}=`ps -t pts/1 | grep -v PID | awk &#39;{print $1}&#39;`&nbsp;&nbsp;</span></em> &nbsp;<br />
		<br />
		&nbsp;&nbsp; &nbsp;<span style="FONT-SIZE: 16px"><strong>5.&nbsp; 将查找到的文件打包并copy到指定目录</strong></span><span style="FONT-SIZE: 16px"><strong>:</strong></span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#1) 通过find找到当前目录下(包含所有子目录)的所有*.txt文件。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#2) tar命令将find找到的结果压缩成test.tar压缩包文件。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#3) 如果&amp;&amp;左侧括号内的命令正常完成，则可以执行&amp;&amp;右侧的shell命令了。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#4) 将生成后的test.tar文件copy到/home/.目录下。</span><br />
		&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; (find . -name &quot;*.txt&quot; | xargs tar -cvf test.tar) &amp;&amp; cp -f test.tar /home/.</span></em><br />
		&nbsp;&nbsp;&nbsp;<br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#1) cpio从find的结果中读取文件名，将其打包压缩后发送到./dest/dir(目标目录)。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#2) cpio的选项介绍：</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#&nbsp;&nbsp; &nbsp;-d：创建需要的目录。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#&nbsp;&nbsp; &nbsp;-a：重置源文件的访问时间。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#&nbsp;&nbsp; &nbsp;-m：保护新文件的修改时间。</span><br />
		<span style="COLOR: #ff0000">&nbsp;&nbsp; &nbsp;#&nbsp;&nbsp; &nbsp;-p：将cpio设置为copy pass-through模式。</span><br />
		&nbsp;&nbsp; &nbsp;<em><span style="COLOR: #0000ff">/&gt; find . -name &quot;*&quot; | cpio -dampv ./dest/dir</span></em></p>
	<p>
		<span style="COLOR: #339966">　&nbsp; <em>最后需要说明的是，该篇Blog中绝大多数的示例来自于互联网，是本人经过一天左右的时间收集和整理之后筛选出来的，其中注释部分是我在后来添加的，以便于<span style="COLOR: #339966"><em>我们</em></span>阅读时的理解。如果今后再发现更好更巧妙的Shell组合命令，本人将持续更新该Blog。如果您有确实非常不错的Shell命令组合，且愿意和我们在这里分享，可以直接放在回复中，本人将对该篇Blog始终保持重点关注。</em></span></p>
</div>
<p style="text-align: right;">
	摘至：http://www.cnblogs.com/stephen-liu74/archive/2011/12/12/2262298.html</p>
]]></description>
<link>http://www.chenggang.net/posts/107</link>
<pubDate>Mon, 12 Dec 2011 21:52:11 +0800</pubDate>
<author>admin</author>
<category>Linux</category>
<guid isPermaLink="true">http://www.chenggang.nethttp://www.chenggang.net/posts/107</guid>
</item>
</channel></rss>
