ls 사용 방법 - 권한을 8진수로 표시하려면 8진수로 모든 권한을 나타낼 수 있나요? [복사]

ls 사용 방법 - 권한을 8진수로 표시하려면 8진수로 모든 권한을 나타낼 수 있나요? [복사]

내 시스템에서 man페이지를 보고 lsGoogle을 검색한 후awkperl8진수 권한을 사용하거나 표시하는 방법입니다.사용될 때 lsbash많은 기본 기능이 있습니까?

ls -alh의 표준 출력

$ ll
total 0
drwxr-xr-x   5 user  group   170B May 20 20:03 .
drwxr-xr-x  17 user  group   578B May 20 20:03 ..
-rw-r--r--   1 user  group     0B May 20 20:03 example
-rw-r--r--   1 user  group     0B May 20 20:03 example-1
-rw-r--r--   1 user  group     0B May 20 20:03 example-3

권한의 8진수 표현을 포함한 원하는 출력

$ ll
total 0
drwxr-xr-x 1775  5 user  group   170B May 20 20:03 .
drwxr-xr-x 1775 17 user  group   578B May 20 20:03 ..
-rw-r--r-- 1644  1 user  group     0B May 20 20:03 example
-rw-r--r-- 1644  1 user  group     0B May 20 20:03 example-1
-rw-r--r-- 1644  1 user  group     0B May 20 20:03 example-3

(면책조항: 이 8진수는 확실하지 않습니다.정확히옳은)

추리

나는 drwxr-xr-x권한 기호에 더 익숙하지만 때로는 대시가 이상한 위치에 있을 때 언뜻 보기에 잘못된 것을 알 수 있습니다. 나는 또한 8진수에 해당하는 것을 보고 싶습니다.

변환 기능(질문 파트 2)

나는 오래 전에 8진수 권한이 000​​- 로 제한되었을 수 있다고 생각했지만 777최근에는 4자리의 8진수를 set-group-ID제공 sticky했습니다 1775. 예를 들어 가능한 모든 권한을 8진수 형식으로 나타낼 수 있습니까? 그렇지 않다면 bash의 ls명령이 왜 이런 형식을 갖지 않는지 더 잘 이해할 것입니다 .

답변1

stat명령을 사용하여 대략적으로 원하는 것을 얻을 수 있습니다.

$ stat -c '%A %a %h %U %G %s %y %n' *
drwxrwxr-x 775 2 saml saml 4096 2013-05-16 22:02:13.230463837 -0400 alsa
drwxrwxr-x 775 31 saml saml 4096 2013-03-26 12:09:20.707827127 -0400 apps
-rw-rw-r-- 664 1 saml saml 43627 2013-05-18 12:28:32.157583577 -0400 autosave.h2song
-rw-rw-r-- 664 1 saml saml 3283 2013-05-18 02:49:41.565154101 -0400 bbbb
drwxrwxr-x 775 4 saml saml 4096 2013-05-03 06:56:50.087842384 -0400 bin
-rw-rw-r-- 664 1 saml saml 4403 2013-05-18 19:20:05.819681196 -0400 blahblah

필요한 경우 정리된 버전은 다음과 같습니다.

$ stat -c '%A %a %h %U %G %s %y %n' *| sed 's/\.[[:digit:]]\+[ ]\+-[[:digit:]]\+/ /'
drwxrwxr-x 775 2 saml saml 4096 2013-05-16 22:02:13  alsa
drwxrwxr-x 775 31 saml saml 4096 2013-03-26 12:09:20  apps
-rw-rw-r-- 664 1 saml saml 43627 2013-05-18 12:28:32  autosave.h2song
-rw-rw-r-- 664 1 saml saml 3283 2013-05-18 02:49:41  bbbb
drwxrwxr-x 775 4 saml saml 4096 2013-05-03 06:56:50  bin
-rw-rw-r-- 664 1 saml saml 4403 2013-05-18 19:20:05  blahblah

stat위에서 언급한 것 외에 사용할 수 있는 더 많은 형식 지정 연산자를 보려면 매뉴얼 페이지를 확인하십시오 .

인용하다

답변2

나도 stat비슷한 출력을 얻었 ls지만 출력 형식을 지정하기 위해 다른 방법을 사용했습니다 .TABstatnumfmt(GNU에 포함됨coreutils>= 8.21 2013-02-14) 올바른 파일 크기를 얻으려면 다음을 수행하십시오.

stat --printf="%A\t%a\t%h\t%U\t%G\t%s\t%.19y\t%n\n" * | numfmt --to=iec-i --field=6 --delimiter='     ' --suffix=B

사용된 구분 기호는 ( 터미널에 hit +를 입력한 다음 ) numfmt이기도 합니다 . 출력은 다음과 같습니다.TabCtrlVTab

drwxr-xr-x  755 2   don users   4.0KiB  2013-05-17 03:37:02 150905-adwaita-x-dark-light-1.3
drwxr-xr-x  755 8   don users   4.0KiB  2011-10-13 07:30:39 Adwaita Slim
drwxr-xr-x  755 3   don users   4.0KiB  2013-05-17 19:26:41 Away
drwxr-xr-x  755 5   don users   4.0KiB  2013-05-17 03:09:14 elementary
-rw-r--r--  644 1   don users   539KiB  2013-05-10 00:32:14 gdm.jpg
-rw-r--r--  644 1   don users   1.5MiB  2013-05-19 04:30:16 gnome-shell-3.8.2.tar.xz
drwxrwxr-x  775 4   don users   4.0KiB  2013-05-18 18:34:38 gnome-themes-standard-3.8.1
-rw-r--r--  644 1   don users   3.7MiB  2013-05-18 18:30:06 gnome-themes-standard-3.8.1.tar.xz
drwxrwxr-x  775 17  don users   4.0KiB  2013-05-18 18:37:05 gtk+-3.8.2
-rw-r--r--  644 1   don users   14MiB   2013-05-18 18:30:56 gtk+-3.8.2.tar.xz
drwxr-xr-x  755 13  don users   4.0KiB  2013-05-18 02:41:51 MediterraneanNight-2.02
-rw-r--r--  644 1   don users   603B    2013-05-19 20:07:26 python-pytaglib.tar.gz
-rw-r--r--  644 1   don users   442KiB  2013-05-19 00:33:27 Stripes.jpg

노트: 따르다서부 독일Comments OSX, coreutils명령은 gstatand 입니다 gnumfmt.

답변3

이 awk 코드는 권한을 기호에서 숫자로 변환합니다. 그러나 이는 일반적인 경우에만 적용됩니다(즉, 적어도 그렇지 않은 경우 sStT).

awk '$1 ~ /^[-dsbclp]([-r][-w][-x]){3}[.+]?$/ 
  {for(i=0;i<3;i++) {symbol=substr($1,2+i*3,3); sum=0; 
    if (substr(symbol,1,1) == "r") sum+=4;
    if (substr(symbol,2,1) == "w") sum+=2;
    if (substr(symbol,3,1) == "x") sum+=1;
    printf "%d",sum;}}'

그러면 원하는 출력이 생성됩니다.

awk '$1 ~ /^[-dsbclp]([-r][-w][-x]){3}[.+]?$/ 
  {printf "%s ",$1; 
    for(i=0;i<3;i++) {symbol=substr($1,2+i*3,3); sum=0; 
      if (substr(symbol,1,1) == "r") sum+=4;
      if (substr(symbol,2,1) == "w") sum+=2;
      if (substr(symbol,3,1) == "x") sum+=1;
      printf "%d",sum;}
    $1=""; print}'

관련 정보