Unix list 명령 'ls'가 숫자 chmod 권한을 출력 할 수 있습니까?


답변:


339

거의 할 수 ..

 ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/) \
             *2^(8-i));if(k)printf("%0o ",k);print}'

31
별명으로 작성하려면 (예 : 'cls'명령) 다음을 사용하십시오. alias cls="ls -l | awk '{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(\"%0o \",k);print}'"
danger89

6
나는 위험 89에서 줄을 복사하여 붙여 넣었으며 이상한 결과가 755가 아닌 줄 당 % 0..o로 시작한다는 것을 알았습니다. 삭제되면 명령이 제대로 설정됩니다. 건배!
Donna

계산 문제가 있다고 생각합니다. chmod 777 dir명령이 다음과 같이 권한을 인쇄 한 후767
Julian F. Weinert

Donna가 언급했듯이, 0과 o 사이에는 재미있는 문자 (또는 2)가 있으며, 이상하게도 SO가 추가하는 것처럼 보입니다.
nbsp

3
비트 t 및 s를 인식하지 못합니다. 파일 권한 정보를 얻으려면 'stat'명령을 사용해야합니다. 손으로 계산하면 오류가 발생합니다!
Evan Langlois

148

내가 stat찾고있는 파일을 알고 있다고 가정하면 가장 간단하게 생각할 수 있습니다 . 그렇지 않으면 *대부분을 찾을 수 있습니다.

/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...

그것은 끈적 끈적한, 수 이드 및 회사를 즉시 처리합니다.

$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo

20
이것은 내가 발견, 리눅스에서 잘 작동합니다 stat -f '%A %N' *(FreeBSD의) 맥에 같은 일을
reevesy

2
나는 논쟁이 stat아니기 ls때문에 이것이 정답이 아니라고 생각합니다 . 그러나, 이것이 원하는 출력과 관련하여 정답이라고 생각합니다. awk파이프에서 허용되는 경우 다음 에서 호출 find되는 위치에서 허용되어야합니다 . 다음 없이 직접 사용할 수 있습니다stat-execstat*
javafueled

2
이것은 훨씬 더 짧은 100 %는 모든 시스템에서 작업이다
Kangarooo

stat를 사용하여 재귀 적으로 권한을 보려면 bash에서을 사용하십시오 stat -c '%a %n' * **/*.
Denis Chevalier

61

GNU find를 사용할 수 있습니다.

find . -printf "%m:%f\n"

이것은 내가 실제로 기억할 수있는 명령입니다. 도움이되고 효과적입니다.
Trent

5
-maxdepth 1옵션 도 있어야합니다 . 그렇지 않으면 전체 디렉토리 트리를 통과합니다.
Ruslan

36

다음 명령을 사용할 수 있습니다

stat -c "%a %n" *

또한 특정 결과를 얻기 위해 filename또는 directoryname대신에 사용할 수 *있습니다.

Mac에서는 다음을 사용할 수 있습니다

stat -f '%A %N' *

1
나를 위해 작동하지 않았다. stat: illegal option -- c usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
rschwieb

1
이것을 기억할 필요가 없도록 우분투 14.04.에서 작동합니다. .bashrc에 별칭을 추가했습니다 : alias xxx = "stat -c '% a % n'*"
faeb187

1
도움이됩니다! Mac의 통계에 나타나지 않는 % A를 어떻게 파헤 쳤습니까?
igonejack

1
실제로는 FreeBSD 명령이며 Mac은 상위 커널로 사용하여 빌드됩니다.
Mohd Abdul Mujib

man statmacOS 10.14.4에 제공된 정보 만 사용하는 경우 명령은입니다 stat -f "%Lp %N" *. %Lp와 같은 것을 인쇄하는 것으로 보입니다 %A.
Cesar Andreu

17

The

와, 좋은 awk! 그러나 suid, sgid 및 sticky는 어떻습니까?

s와 t를 사용하여 필터를 확장해야합니다. 그렇지 않으면 계산되지 않으며 잘못된 결과를 얻습니다. 이 특수 플래그의 8 진수를 계산하려면 프로시 저는 동일하지만 색인은 4 7 및 10입니다. 실행 비트 세트가있는 파일의 가능한 플래그는 실행 비트 세트가 ---s--s--t없는 파일의 경우 amd입니다.---S--S--T

ls -l | awk '{
    k = 0
    s = 0
    for( i = 0; i <= 8; i++ )
    {
        k += ( ( substr( $1, i+2, 1 ) ~ /[rwxst]/ ) * 2 ^( 8 - i ) )
    }
    j = 4 
    for( i = 4; i <= 10; i += 3 )
    {
        s += ( ( substr( $1, i, 1 ) ~ /[stST]/ ) * j )
        j/=2
    }
    if ( k )
    {
        printf( "%0o%0o ", s, k )
    }
    print
}'  

테스트의 경우 :

touch blah
chmod 7444 blah

결과 :

7444 -r-Sr-Sr-T 1 cheko cheko   0 2009-12-05 01:03 blah

touch blah
chmod 7555 blah

줄게:

7555 -r-sr-sr-t 1 cheko cheko   0 2009-12-05 01:03 blah

3
+1 감사합니다! 나는 그것을 1 줄 별칭으로 줄 alias "lsmod=ls -al|awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"
였습니다

+1은 작업 파일 권한을 복원하기 위해 더 많은 아이디어를 취했습니다 : ysgitdiary.blogspot.fi/2013/04/…
Yordan Georgiev

5
lsmod를 별명으로 사용하지 마십시오. 커널 모드를 나열하는 알려진 posix 명령입니다.
shadowbq

@JeroenWiertPluimers awk에서 구문 오류가 발생합니다
Evan Langlois

@EvanLanglois 새로운 질문을하십시오.
Jeroen Wiert Pluimers

9

이를 사용하여 Unix 숫자 권한 값 (8 진수 값) 및 파일 이름을 표시하십시오.

stat -c '%a %n' *

이를 사용하여 Unix 숫자 권한 값 (8 진수 값)과 폴더의 sgid 및 sticky bit, 소유자의 사용자 이름, 그룹 이름, 바이트 단위의 총 크기 및 파일 이름을 표시하십시오.

stat -c '%a %A %U %G %s %n' *

여기에 이미지 설명을 입력하십시오

%y사람이 읽을 수있는 형식으로 마지막 수정 시간이 필요한 경우 추가하십시오 . 더 많은 옵션은 stat를 참조하십시오 .

별명을 사용하는 더 나은 버전

별칭을 사용하면 필요한 것을보다 효율적으로 수행 할 수 있으며 색상도 포함됩니다. 다음은 그룹 디렉토리별로 구성된 결과를 먼저 표시하고 컬러로 표시하며 사람이 읽을 수있는 형식 (예 : 1K 234M 2G)으로 인쇄 크기를 편집 ~/.bashrc하고 편집 하여 계정의 별칭을 추가하거나 전 세계적으로/etc/profile.d/custom.sh

입력 cls하면 새로운 LS 명령 결과가 표시됩니다.

alias cls="ls -lha --color=always -F --group-directories-first |awk '{k=0;s=0;for(i=0;i<=8;i++){;k+=((substr(\$1,i+2,1)~/[rwxst]/)*2^(8-i));};j=4;for(i=4;i<=10;i+=3){;s+=((substr(\$1,i,1)~/[stST]/)*j);j/=2;};if(k){;printf(\"%0o%0o \",s,k);};print;}'"

별칭은 가장 효율적인 솔루션입니다

폴더 트리

bashrc 또는 custom.sh를 편집하는 동안 다음 별명을 포함하여 입력 lstree하면 현재 폴더 트리 구조가 표시 되는 그래픽 표현을 볼 수 있습니다

alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/   /' -e 's/-/|/'"

다음과 같이 표시됩니다.

   |-scripts
   |--mod_cache_disk
   |--mod_cache_d
   |---logs
   |-run_win
   |-scripts.tar.gz

4

ls를 사용하여 파일의 권한 정보를 얻지 마십시오. stat 명령을 사용합니다. 원하는 숫자 값을 제공합니다. "Unix Way"는 ls (또는 'echo *')와 stat를 사용하여 원하는 형식으로 정보를 제공하고자하는 스크립트를 발명해야한다고 말합니다.


1

의 오프 구축 선택 대답별칭을 사용하는 제안 , 나는 목록에 디렉토리를 전달하는 것이 가능하도록하는 기능으로 변환됩니다.

# ls, with chmod-like permissions and more.
# @param $1 The directory to ls
function lls {
  LLS_PATH=$1

  ls -AHl $LLS_PATH | awk "{k=0;for(i=0;i<=8;i++)k+=((substr(\$1,i+2,1)~/[rwx]/) \
                            *2^(8-i));if(k)printf(\"%0o \",k);print}"
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.