我试图了解以下命令的工作原理(来自here):
<!-- language: lang-bash -->
pfiles /proc/* 2>&- |
nawk 'END {
if (f) print p
}
/^[0-9]/ {
if (f) print p, RS
p = $0
f = 0
}
/INET / {
sub(/.*INET/,"")
p = p ? p RS $0 : $0
f = 1
}'
此命令运行良好(在SOLARIS 5.10中)并显示进程打开的所有端口。
据我所知,pfiles /proc/*
通过查询/ proc / filesystem显示与所有进程相关的一堆输出。从手册页:
pfiles Report fstat(2) and fcntl(2) information
for all open files in each process. In
addition, a path to the file is reported
if the information is available from
/proc/pid/path. This is not necessarily
the same name used to open the file. See
proc(4) for more information.
pfiles的输出然后由 nawk ('New Awk')处理。
f
,p
和$0
的含义最为有用。&-
意味着什么?这是否意味着标准错误流是closed?答案 0 :(得分:1)
我必须读一遍或两次这个剧本,以确保我直接进入 我的头。这有点令人困惑,因为我们在开始时看到了END。
$0
就是整行。
行/^[0-9]/
匹配进程ID(特别是)和该块
然后将sentinel变量f设置为0.
以/INET /
开头的块匹配(然后剥离,通过子(..))
开放的端口号。 sentinel值f设置为1,以便我们知道
当我们点击END
时,打印方式会有所不同。每次我们完成输出
集合(即进程的pfiles的整个输出),我们点击了END
阻止并打印输出。
BTW,RS
是记录分隔符。
只在一个进程上运行脚本可能会让它更容易获得 围绕它的头。
抱歉,忘记回复重定向问题。
2>&-
在此上下文中表示“将stderr从进程重定向到标准输入”,
以便nawk
从那里获取输入而不是文件。