권한을 역으로 재귀 적으로 확인하려면 어떻게합니까? 생각합니다. 내가 가지고있는 경우에 그래서 /home/foo/bar/baz그것은

명령이 있습니다. 아파치와 함께 제공되거나 어쨌든 권한과 관련하여 권한을 확인하는 명령과 관련이 있다고 생각합니다. 내가 가지고있는 경우에 그래서 /home/foo/bar/baz그것은 권한에 대한 무엇인지 말해 줄 것이다 baz, bar, foo,와 home. 누구 든지이 명령이 무엇인지 또는 다른 방법으로 알고 있습니까? 이 명령은 기본적으로 인수에서 시작 /하며 권한 문제가 있는지 확인할 수 있도록 권한이 무엇인지 알려줍니다.



답변

당신이 생각하는 유틸리티는 namei명령입니다. 매뉴얼 페이지에 따르면 :

Namei는 인수를 모든 유형의 Unix 파일 (기호, 파일, 디렉토리 등)에 대한 경로 이름으로 사용합니다. 그런 다음 Namei는 터미널 지점 (파일, 디렉토리, char 장치 등)을 찾을 때까지 각 경로 이름을 따릅니다. 심볼릭 링크를 찾으면 링크를 표시하고 그에 따라 컨텍스트를 표시하기 위해 출력을 들여 씁니다.

원하는 출력은 다음과 같이 수신 될 수 있습니다.

$ namei -l /usr/src/linux-headers-2.6.35-22/include/
f: /usr/src/linux-headers-2.6.35-22/include/
drwxr-xr-x root root /
drwxr-xr-x root root usr
drwxrwsr-x root src  src
drwxr-xr-x root root linux-headers-2.6.35-22
drwxr-xr-x root root include

namei명령은 linux-util-ng 소프트웨어 패키지의 일부입니다. 자세한 내용은 매뉴얼 페이지 를 참조하십시오.


답변

나는 어떤 명령도 알지 못하지만 스크립트를 작성하는 것은 매우 쉽습니다.

#!/bin/bash    
ARG=$1
while [[ "$ARG" != "." && "$ARG" != "/" ]]
do
        ls -ld -- "$ARG"
        ARG=`dirname -- "$ARG"`
done

예:

$ perms.sh /tmp/1/2/3/hello.txt

-rw-rw-r--    1 user    group          0 Jan 14 16:59 /tmp/1/2/3/hello.txt
drwxrwxr-x    2 user    group       4096 Jan 14 16:59 /tmp/1/2/3
drwxrwxr-x    3 user    group       4096 Jan 14 16:43 /tmp/1/2
drwxrwxr-x    3 user    group       4096 Jan 14 16:43 /tmp/1
drwxrwxrwt   12 root     root       4096 Jan 14 17:02 /tmp


답변

재미있는 솔루션을위한 재귀 bash 함수는 어떻습니까?

[bash#] function uptree { ( \ls -ld -- "$PWD"; [ "$PWD" = '/' ] && return; cd ..; uptree ) | column -t ; } 

[bash#] pwd
/home/frielp/bin/dev

[bash#] uptree
drwxrwxr-x.  2   frielp  frielp  4096  Dec  14  14:50  /home/frielp/bin/dev
drwxr-xr-x.  15  frielp  frielp  4096  Aug  23  10:48  /home/frielp/bin
drwxr-xr-x.  60  frielp  frielp  4096  Jan  14  16:48  /home/frielp
drwxr-xr-x.  4   root    root    4096  Dec  1   09:14  /home
dr-xr-xr-x.  23  root    root    4096  Jan  14  08:18  /

[bash#] pwd
/home/frielp/bin/dev
[bash#] 


답변

찾고있는 명령은 다음과 같습니다.

namei -l `pwd`

/ tmp / foo / bar에서 실행될 때 다음과 같은 목록을 제공합니다.

drwxr-xr-x root   root   /
drwxrwxrwt root   root   tmp
drwxr-xr-x user   group  foo
drwxr-xr-x user   group  bar


답변

이것은 쉽게 하나의 라이너로 만들 수 있습니다. 이것은 재귀 적이 지 않으며 bash 에서이 작업을 수행하는 비교적 빠른 방법이어야합니다. 각 루프에서 pwd 를 호출하는 것은 특히 빠르지 않으므로 가능하면 피하십시오.

#!/bin/bash
if [ -n "$1" ]; then
    echo "Usage: $0 [FILE]"
    exit 1
fi
cd -P -- "$1"
IFS="/"
set -f # turn off globbing for the expansion of $PWD below
for dir in $PWD; do
    stat -c "$PWD %A" .
    cd ..
done

현재 디렉토리에 대한 하나의 라이너.

(IFS="/"; set -f; for dir in $PWD; do stat -c "$PWD %A" .; cd ..; done)


답변

또는와 find함께 사용해보십시오tac

find /path -printf '%M %u %g %p\n' | tac


답변