Bash
檢查文件大小時出現意外行為
我正在嘗試編寫一個 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
上面的方法。