[unix] Unix list 명령 ‘ls’가 숫자 chmod 권한을 출력 할 수 있습니까?

디렉토리를 나열 할 때 기호 출력 -rw-rw-r–이 아닌 644와 같은 숫자로 된 UNIX 권한을 볼 수 있습니까?

감사.



답변

거의 할 수 ..

 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}'


답변

내가 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


답변

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

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


답변

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

stat -c "%a %n" *

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

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

stat -f '%A %N' *


답변

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


답변

이를 사용하여 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


답변

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