때로는 경로 액세스 권한이있는 디렉토리를 결정해야합니다. 예를 들면 다음과 같습니다.
$ 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 권한 (소유자 / 그룹 / 기타) namei
의 경우 util-linux의 일부인을 사용 하십시오 .
# namei -l / sys / kernel / debug / usb / devices f : / sys / kernel / debug / usb / devices drwxr-xr-x 루트 루트 / dr-xr-xr-x 루트 루트 시스템 drwxr-xr-x 루트 루트 커널 drwx ------ 루트 루트 디버그 drwxr-xr-x 루트 루트 USB -r--r--r-- 루트 루트 장치
답변
아래는 간단한 Bourne-like-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
쇼 +
끝에 당신은 사용 목록 ACL에있는 getfacl
전체 액세스 권한을 확인합니다 :
#!/bin/sh
f="$1"
p=
while test "$f" != "$p" ; do
getfacl "$f"
p="$f"
f="$(dirname "$f")"
done