我们使用熔断器来查找与特定端口关联的日志。
fuser /test/log*
这会产生与端口关联的日志列表
如何找到输出的行数?
我尝试过但|wc - l
没有运气。
答案1
$ fuser /usr/bin/zsh
/usr/bin/zsh: 4771e 4778e 7305e 9848e 12416e
$ fuser /usr/bin/zsh > /dev/null
/usr/bin/zsh: eeeee
$ fuser /usr/bin/zsh 2> /dev/null
4771 4778 7305 9848 12416
正如你所看到的,fuser
它的输出在 stdout 和 stderr 之间分割,其中 stdout 有 pid,stderr 有修饰(如果有的话,还有错误),因此要找到 pid 的数量,你可以丢弃 stderr 并使用以下命令计算 stdout 中的单词数:
n=$(fuser /test/log* 2> /dev/null | wc -w)
要找到数量独特的pids(如果某些进程打开了多个文件/test/log*
),在 zsh 中,您可以执行以下操作:
n=${#${(u)$(fuser /test/log/* 2> /dev/null)}}
(这还有利于保留 的退出状态fuser
)。
或者使用lsof
而不是fuser
:
n=$(lsof -t /test/log/* | wc -l)
其中-t
,lsof
为您提供每行一个 pid 列表,且不重复。