Bash

檢查文件大小時出現意外行為

  • December 7, 2021

我正在嘗試編寫一個 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

如果/proc/$pid/maps大小大於 0,腳本應該輸出 pid。但是,腳本什麼也不輸出。

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

我可以使用另一種方​​法解決此問題,但-s網際網路建議使用此選項來檢查文件是否為空。

這裡有什麼問題?我確實知道在其命令行(avahi 守護程序)中有一個帶有括號的程序,其中包含內容/proc/$pid/maps,因此應該至少有 1 個 pid 輸出用於測試目的。如果我從管道中刪除 grep,所以它遍歷所有 pid,仍然沒有輸出。

問題是文件/proc/$pid的表觀大小為 0,無論其內容如何;比較的輸出

ls -l /proc/*/maps

wc -c /proc/*/maps

要檢查/proc/$pid/maps你需要實際閱讀它的大小,使用例如 wc -c上面的方法。

引用自:https://unix.stackexchange.com/questions/680513