명령이 있습니다. 아파치와 함께 제공되거나 어쨌든 권한과 관련하여 권한을 확인하는 명령과 관련이 있다고 생각합니다. 내가 가지고있는 경우에 그래서 /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