如何打印索引为 24 的文件描述符总数

如何打印索引为 24 的文件描述符总数

如何打印 Linux 上所有正在运行的进程的索引为 24 的文件描述符总数?

我试过

$ ls /proc/*/fd 2> errors.txt > stdout.txt | grep "^24" stdout.txt | wc -l

该解决方案每次都返回 0。

我提到我的任务要求我写一行代码来解决它。

答案1

你可以使用

find /proc/[0-9]*/fd/ -name 24 2> /dev/null | wc -l

或者,如果您坚持使用ls(这应该是其中之一几个例子在安全的情况下这样做):

ls /proc/[0-9]*/fd 2>/dev/null | grep -c '^24$'

您的第一次尝试失败了,因为您将输出重定向到文件 ( > output.txt),这意味着grep永远不会匹配,因为它没有可匹配的输出。您可以|像上面那样使用管道 ( ),或者使用;&来分隔命令:

ls /proc/[0-9]*/fd 2> errors.txt > stdout.txt; grep "^24" stdout.txt | wc -l

答案2

ls打电话或在这里没有意义find。这就是 shell 通过扩展全局来完成工作。

只是:

set -- /proc/[0-9]*/fd/24 && echo "$#"

需要注意的是,除了 之外zsh,如果您得到1,您不知道是因为存在一个还是模式不匹配。

有了bash,你可以做

shopt -s nullglob
fds=(/proc/[0-9]*/fd/24)
echo "${#fds[@]}"

另一种更便携的选择是使用lsof

lsof -td24 | wc -l

相关内容