如何列出檔案路徑中每個元件的權限?

如何列出檔案路徑中每個元件的權限?

有時需要確定路徑中的哪個目錄的存取權限受到限制。這是一個例子:

$ ls /sys/kernel/debug/usb/devices
ls: cannot access /sys/kernel/debug/usb/devices: Permission denied
$ cat /sys/kernel/debug/usb/devices
cat: /sys/kernel/debug/usb/devices: Permission denied

ls也沒有cat顯示使用者權限受到限制的地方。

顯示路徑中每個元件(目錄和檔案)的存取權限的最簡單方法是什麼?我主要對類 Unix 系統的解決方案感興趣。

答案1

對於基本 UNIX 權限(所有者/群組/其他),請使用namei屬於實用程式Linux:

# namei -l /sys/kernel/debug/usb/devices
f: /sys/kernel/debug/usb/devices
drwxr-xr-x根根/
dr-xr-xr-x root 根系統
drwxr-xr-x root 根內核
drwx------ root root 調試
drwxr-xr-x root root USB
-r--r--r-- root 根設備

答案2

以下是一個簡單的類似 Bourne 的 shell 腳本。它透過使用命令逐漸刪除最後一個元件來遍歷路徑,dirname直到路徑停止變化。最後你會得到/或。.

#!/bin/sh

f="$1"
p=
while test "$f" != "$p" ; do
    ls -ld "$f"
    p="$f"
    f="$(dirname "$f")"
done

在一行中能夠sudo查看具有有限存取權限的元件:

f=/sys/kernel/debug/usb/devices p= ; while test "$f" != "$p" ; do sudo ls -ld "$f" ; p="$f" ; f="$(dirname "$f")" ; done

輸出範例

-r--r--r-- 1 root root 0 Dec  5 10:36 /sys/kernel/debug/usb/devices
drwxr-xr-x 3 root root 0 Dec  5 10:36 /sys/kernel/debug/usb
drwx------ 19 root root 0 Dec  5 10:36 /sys/kernel/debug
drwxr-xr-x 7 root root 0 Dec  5 10:37 /sys/kernel
drwxr-xr-x 13 root root 0 Dec  5 10:37 /sys
drwxr-xr-x 27 root root 4096 Dec  3 09:39 /

POSIX ACL

如果權限字串ls -l顯示+在末尾,您必須使用列出 ACLgetfacl來查看完整的存取權限:

#!/bin/sh

f="$1"
p=
while test "$f" != "$p" ; do
    getfacl "$f"
    p="$f"
    f="$(dirname "$f")"
done

相關內容