快速业务通道

对话 UNIX: 学习更多的命令行技巧和操作符

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-05-10

系统上当前正在运行的进程的列表可能像 清单 1 这么简单;但是,大多数生产系统运行的进程更多,这会使 ps 的输出更长.为了把这个列表缩短到自己需要的范围,可以使用管道把 ps –ef 的标准输出重定向到 grep,从而搜索自己真正希望看到的结果.清单 2 把 清单 1 产生的进程列表重定向到 grep,搜索字符串 “rpc” 和 “ksh”.

清单 2. 把进程列表重定向到 grep

# ps –ef | grep –E "rpc|ksh"

root 196718 151674 0 11:00:27 - 0:00 /usr/sbin/rpc.mountd
daemon 225402 151674 0 11:00:27 - 0:00 /usr/sbin/rpc.statd
root 229498 151674 0 11:00:27 - 0:00 /usr/sbin/rpc.lockd
root 340144 168018 0 12:34:56 - 0:00 rpc.ttdbserver 100083 1
cormany 409708 569522 0 19:29:27 pts/1 0:00 -ksh
cormany 733202 409708 0 19:52:20 pts/1 0:00 grep -E rpc|ksh

当多次把 stdout 重定向到 stdin 时,管道的使用方法可以很复杂.在下面的示例中,扩展了前面的 ps 和 grep 示例,把它的 stdout 重定向到另一个 grep,其作用是排除包含 “grep” 或 “ttdbserver” 的字符串.当的 grep 操作完成时,再次使用管道把 stdout 重定向到一个 awk 语句,其作用是输出进程标识符(PID)大于 200,000 的所有进程:

# ps –ef | grep –E "rpc|ksh" | grep -vE "grep|rpc.ttdbserver" | 

   awk -v _MAX_PID=200000 ''{if ($2 > _MAX_PID) {print "PID for 

   process",$8,"is greater than", _MAX_PID}}''



PID for process /usr/sbin/rpc.statd is greater than 200000

PID for process /usr/sbin/rpc.lockd is greater than 200000

PID for process -ksh is greater than 200000

图 1 通过图形说明命令的 stdout 重定向到后续命令的 stdin 的次序.

图 1. 管道示例

管道示例

用 >、>>、< 和 << 执行数据重定向 拥有帝国一切,皆有可能。欢迎访问phome.net

通过命令行界面(CLI)执行命令的另一个重要方面是,能够把各种输出写到一个设备,或者把来自另一个设备的输入读取到命令中.要想写一个命令的输出,需要在执行的命令后面加上大于号(> 或 >>)和所需的目标文件名或设备.如果目标文件不存在,您对目标目录有写权限,那么 > 和 >> 会创建这个文件并根据您的 umask 设置权限,然后把命令的输出写到刚创建的文件中.但是,如果这个文件存在,> 会尝试打开文件并覆盖整个内容.如果希望在这个文件中追加内容,那么只需使用 >>.可以认为它的作用是把左边命令的输出数据流移动到右边的目标文件中(即 <cmd> -> <output> -> <file>).

下面的示例执行 “管道” 一节中的 ps –ef 示例,并把输出重定向到文件 ps_out:

# ps –ef | grep –E "rpc|ksh" > ps_out

下面的代码执行前面扩展的管道示例并把输出重定向到同一个文件(ps_out),但是追加到当前数据后面:

# ps –ef | grep –E "rpc|ksh" | grep -vE "grep|rpc.ttdbserver" | 

   awk -v _MAX_PID=200000 ''{if ($2 > _MAX_PID) {print "PID for 

   process",$8,"is greater than", _MAX_PID}}'' >> ps_out

清单 3 给出前两个重定向的输出.

清单 3. 重定向的输出

# cat ps_out

root 196718 151674 0 11:00:27 - 0:00 /usr/sbin/rpc.mountd
daemon 225402 151674 0 11:00:27 - 0:00 /usr/sbin/rpc.statd
root 229498 151674 0 11:00:27 - 0:00 /usr/sbin/rpc.lockd
root 340144 168018 0 12:34:56 - 0:00 rpc.ttdbserver 100083 1
cormany 409708 569522 0 19:29:27 pts/1 0:00 -ksh
cormany 733202 409708 0 19:52:20 pts/1 0:00 grep -E rpc|ksh
PID for process /usr/sbin/rpc.statd is greater than 200000
PID for process /usr/sbin/rpc.lockd is greater than 200000
PID for process -ksh is greater than 200000
拥有帝国一切,皆有可能。欢迎访问phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号