检查文件大小时出现意外行为

dco*_*nch 2 bash process proc

我正在尝试编写一个 1 行 bash 脚本,该脚本将获取看起来像内核进程的进程的所有 PID,并检查它们是否具有 中的内容/proc/*/maps,这表明内核进程伪装。

我目前有以下脚本:

for pid in $(ps aux | grep "\["  | awk -F' ' '{print $2}');do if [ -s /proc/$pid/maps ]; then echo $pid; fi;  done
Run Code Online (Sandbox Code Playgroud)

/proc/$pid/maps如果size 大于 0,脚本应输出 pid。但是,脚本不输出任何内容。

if [ -s /proc/$pid/maps ]应该指示文件是否不为空。它似乎不起作用。

我可以使用另一种方法解决此问题,但-s互联网建议使用此选项来检查文件是否为空。

这里有什么问题吗?我确实知道有一个进程在其命令行(avahi 守护进程)中带有括号,该进程的内容将包含在 中/proc/$pid/maps,因此应该至少有 1 个 pid 输出用于测试目的。如果我从管道中删除 grep,那么它会迭代所有 pid,但仍然没有输出。

Ste*_*itt 5

问题在于,/proc/$pid无论其内容如何,​​下面的文件的表观大小均为 0;比较输出

ls -l /proc/*/maps
Run Code Online (Sandbox Code Playgroud)

wc -c /proc/*/maps
Run Code Online (Sandbox Code Playgroud)

/proc/$pid/maps要检查您需要实际读取它的大小,请使用上面的例如 wc -c