如何检查 /proc/*/* 文件的读取权限?

如何检查 /proc/*/* 文件的读取权限?

文件/proc/似乎是世界可读的,但返回权限被拒绝:

$ ls -lh /proc/5589/smaps  
-r--r--r-- 1 root root 0 Mar 18 13:11 /proc/5589/smaps
$ cat /proc/5589/smaps 
cat: /proc/5589/smaps: Permission denied

我想避免读取此类文件,但-r检查通过:

$ if [ -r /proc/5589/smaps ] ; then echo readable ; fi
readable

如何检查文件是否确实可读?

答案1

if cat /proc/5589/smaps 2>/dev/null 1>/dev/null; then 
    echo readable ; 
fi

或者少读书

if head -n 1 /proc/5589/smaps 2>/dev/null 1>/dev/null; then 
    echo readable ; 
fi

更新:

我认为你需要在脚本中结合这两项检查: 1) if [ -r /proc/5589/smaps ] 2) if cat /proc/5589/smaps 2>/dev/null 1>/dev/null;

因此,首先检查文件权限,然后检查读取 proc 文件的结果。例如:

filename="/proc/5589/smaps"
if test -r "$filename" && cat "$filename" 2>/dev/null 1>/dev/null; then
    echo readable
else
    echo not readable
fi

相关内容