파일 경로가 있습니다. 경로에 있는 모든 중간 디렉터리의 파일/디렉터리 권한을 볼 수 있는 단일 명령이 있습니까?
답변1
리눅스와 함께 제공되는namei
이 명령은 주로 경로의 기호 링크를 표시하는 데 사용되지만 소유권도 표시할 수 있습니다.
$ namei -nom ~
f: /home/gilles
drwxr-xr-x root root /
drwxr-sr-x root staff home
drwxr-xr-x gilles gilles gilles
그렇지 않으면 이것은 주어진 파일을 포함하는 연속 디렉토리 (이 페이지의 다른 답변에서 제안하는 것처럼 고유 디렉토리가 아님)를 반복하고 해당 내용을 나열하는 방법입니다.
d=$PWD; set /;
while [ -n "$d" ]; do set -- "$@" "$d/"; d=${d%/*}; done;
ls -ld "$@"
심볼릭 링크가 있으면 이 목록이 약간 오해를 불러일으킬 수 있습니다. 예를 들어, 그 자체가 심볼릭 링크 및 all 이고 누구나 읽을 수 있지만(예: 모드 755) 사용자 Alice가 읽을 수 없는 /foo/bar
심볼릭 링크인 경우 Alice는 해당 링크에 액세스할 수 없지만 위 목록은 누구나 읽을 수 있는 디렉토리를 표시합니다./hello/world
/one/two
/foo
/hello
/world
/hello
/foo/bar
답변2
이것은 두 개의 단일 라이너입니다. ls
경로 구성요소당 한 번씩 호출됩니다.
$ (IFS=/; set -f -- $PWD; for arg; do path="${path%/}/$arg"; ls -dal "$path"; done)
산출:
# drwxr-xr-x 31 root admin 1122 4 Nov 22:08 /
# drwxr-xr-x 9 root admin 306 3 Nov 17:36 /Users
# drwxr-xr-x+ 67 janmoesen staff 2278 7 Nov 14:46 /Users/janmoesen
# drwxr-xr-x+ 53 janmoesen staff 1802 4 Nov 22:07 /Users/janmoesen/Sites
# drwxr-xr-x 28 janmoesen staff 952 7 Nov 15:01 /Users/janmoesen/Sites/example.com
ls
모든 경로에 대해 한 번만 호출하면 됩니다.
$ (IFS=/; set -f -- $PWD; for arg; do path="${path%/}/$arg"; paths+=("$path"); done; ls -dal "${paths[@]}")
산출:
# drwxr-xr-x 31 root admin 1122 4 Nov 22:08 /
# drwxr-xr-x 9 root admin 306 3 Nov 17:36 /Users
# drwxr-xr-x+ 67 janmoesen staff 2278 7 Nov 14:46 /Users/janmoesen
# drwxr-xr-x+ 53 janmoesen staff 1802 4 Nov 22:07 /Users/janmoesen/Sites
# drwxr-xr-x 28 janmoesen staff 952 7 Nov 15:01 /Users/janmoesen/Sites/example.com
답변3
#!/bin/bash
(( $# )) || set -- "$PWD"
IFS='/'
for _arg; do
if ! [[ -e "${_arg}" ]]; then
printf '%s\n' "${_arg} does not exist!"
exit 1
fi
read -ra _dirs <<< "${_arg}"
(( _length = ${#_dirs[@]} + 1 ))
for (( _offset = 2 ; _offset < _length ; _offset++ )); do
_current_dir="${_dirs[*]::_offset}"
_perms=$(ls -ld "${_current_dir}" | awk '{ print $1" "$3" "$4 }')
printf '%s %s\n' "${_perms}" "${_current_dir}"
done
done
답변4
그렇게 복잡하지는 않지만 이것이 도움이 될 것이라고 생각합니다.
find . -type d -exec ls -lrt {} \;