Danh sách Unix có thể ra lệnh cho phép chmod bằng số không?


179

Có thể khi liệt kê một thư mục để xem các quyền unix số như 644 thay vì đầu ra tượng trưng -rw-rw-r--

Cảm ơn.

Câu trả lời:


339

nó gần như có thể ..

 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
Để tạo nó dưới dạng bí danh (ví dụ bên dưới: lệnh 'cls'), hãy sử dụng: 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}'"
risk89

6
Tôi sao chép và dán dòng từ nguy hiểm89 và thấy rằng đầu ra kỳ lạ bắt đầu bằng% 0..o trên mỗi dòng, thay vì nói 755. Nếu có ai khác gặp phải điều này, nguyên nhân dường như là một ký tự ẩn giữa 0 và o. Sau khi xóa lệnh được thiết lập độc đáo. Chúc mừng!
Donna

Tôi nghĩ rằng có một vấn đề tính toán. Sau khi chmod 777 dirlệnh của bạn in quyền như767
Julian F. Weinert

Như Donna đề cập, có một nhân vật hài hước (hoặc 2) giữa 0 và o, thật kỳ lạ, có vẻ như SO đang thêm nó ...
nbsp

3
Điều này không nhận ra bit t và s. Bạn nên sử dụng lệnh 'stat' để lấy thông tin cấp phép tệp. Tính toán bằng tay sẽ dẫn đến sai sót!
Evan Langlois

148

Gần nhất tôi có thể nghĩ đến (giữ cho nó đủ đơn giản) là stat, giả sử bạn biết tập tin nào bạn đang tìm kiếm. Nếu bạn không, *có thể tìm thấy hầu hết trong số họ:

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

Nó xử lý dính, suid và công ty ra khỏi hộp:

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

20
Điều này hoạt động rất tốt trong Linux, tôi thấy stat -f '%A %N' *làm điều tương tự trên máy mac (FreeBSD)
thiệu

2
Tôi đoán rằng đối số là statkhông phải lsdo đó đây không phải là câu trả lời chính xác. Tuy nhiên, tôi tin rằng đây là câu trả lời chính xác trong bối cảnh đầu ra mong muốn. Nếu awkđược cho phép trong một đường ống, thì findnên được cho phép nơi statđược gọi trong -exec; sau đó bạn có thể sử dụng stattrực tiếp mà không cần*
javafueled 4/03/2015

2
Điều này tốt hơn ngắn hơn nhiều và hoạt động 100% trên bất kỳ hệ thống nào
Kangarooo

Nếu bạn muốn sử dụng stat để xem các quyền đệ quy, dưới bash, hãy sử dụng stat -c '%a %n' * **/*.
Denis Chevalier

61

bạn chỉ có thể sử dụng GNU find.

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

Đây là một lệnh tôi thực sự có thể nhớ. Hữu ích và hiệu quả.
Trent

5
Điều này cũng nên có -maxdepth 1tùy chọn, nếu không nó đi qua toàn bộ cây thư mục.
Ruslan

36

Bạn có thể sử dụng lệnh sau

stat -c "%a %n" *

Ngoài ra, bạn có thể sử dụng bất kỳ filenamehoặc directorynamethay vì *để có được một kết quả cụ thể.

Trên máy Mac, bạn có thể sử dụng

stat -f '%A %N' *

1
Không làm việc cho tôi. stat: illegal option -- c usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
rschwieb

1
hoạt động trên Ubuntu 14.04 .. để không bao giờ phải nhớ điều này Tôi đã thêm một bí danh trong .bashrc: alias xxx = "stat -c '% a% n' *"
faeb187

1
Hữu ích! Làm thế nào bạn đào nó ra% A mà thậm chí không xuất hiện trong man of stat trên Mac?
igonejack

1
Nó thực sự là một lệnh FreeBSD và Mac tình cờ được xây dựng dựa trên việc sử dụng nó làm kernel trên.
Mohd Abdul Mujib

Nếu chúng ta chỉ sử dụng thông tin được trình bày trong man statmacOS 10.14.4, thì lệnh sẽ là stat -f "%Lp %N" *. %Lpxuất hiện để in điều tương tự như %A.
Cesar Andreu

17

@ MYYN

wow, tốt quá Nhưng những gì về suid, sgid và dính bit?

Bạn phải mở rộng bộ lọc của mình bằng s và t, nếu không chúng sẽ không được tính và bạn nhận được kết quả sai. Để tính số bát phân cho các cờ đặc biệt này, quy trình là như nhau nhưng chỉ số nằm ở 4 7 và 10. các cờ có thể có cho các tệp có tập bit thực thi là ---s--s--tamd cho các tệp không có tập bit thực thi là---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
}'  

Cho thử nghiệm:

touch blah
chmod 7444 blah

sẽ cho kết quả:

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

touch blah
chmod 7555 blah

sẽ cho:

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

3
+1 Cảm ơn! Tôi rút ngắn nó thành bí danh 1 dòng: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;}'"
Jeroen Wiert Pluimers

+1 đã lấy ý tưởng hơn nữa để khôi phục quyền truy cập tệp làm việc: ysgitdiary.blogspot.fi/2013/04/ Đổi
Yordan Georgiev

5
Đừng sử dụng lsmod như một bí danh .. đó là lệnh posix đã biết để liệt kê các mod kernel.
Shadowbq

@JeroenWiertPluimers Điều đó khiến tôi bị lỗi cú pháp từ awk
Evan Langlois

@EvanLanglois vì vậy hãy hỏi một câu hỏi mới.
Jeroen Wiert Pluimers

9

Sử dụng điều này để hiển thị các giá trị cấp phép số Unix (giá trị bát phân) và tên tệp.

stat -c '%a %n' *

Sử dụng điều này để hiển thị các giá trị cấp phép số Unix (giá trị bát phân) và bit sgid và dính của thư mục, tên người dùng của chủ sở hữu, tên nhóm, tổng kích thước theo byte và tên tệp.

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

nhập mô tả hình ảnh ở đây

Thêm %ynếu bạn cần thời gian sửa đổi lần cuối ở định dạng có thể đọc được. Để biết thêm tùy chọn xem stat .

Phiên bản tốt hơn bằng cách sử dụng Bí danh

Sử dụng bí danh là một cách hiệu quả hơn để thực hiện những gì bạn cần và nó cũng bao gồm màu sắc. Phần sau hiển thị kết quả của bạn được sắp xếp theo thư mục nhóm trước, hiển thị màu, kích thước in ở định dạng có thể đọc được của con người (ví dụ: 1K 234M 2G) chỉnh sửa ~/.bashrcvà thêm bí danh cho tài khoản của bạn hoặc toàn cầu bằng cách chỉnh sửa/etc/profile.d/custom.sh

clshiển thị kết quả lệnh LS mới của bạn.

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

Bí danh là giải pháp hiệu quả nhất

Cây thư mục

Trong khi bạn đang chỉnh sửa bashrc hoặc custom.sh, hãy bao gồm các bí danh sau để xem biểu diễn đồ họa trong đó việc gõ lstreesẽ hiển thị cấu trúc cây thư mục hiện tại của bạn

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

Nó sẽ hiển thị:

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

4

Bạn không sử dụng ls để lấy thông tin cho phép của tập tin. Bạn sử dụng lệnh stat. Nó sẽ cung cấp cho bạn các giá trị số bạn muốn. "Cách Unix" nói rằng bạn nên phát minh ra tập lệnh của riêng mình bằng cách sử dụng ls (hoặc 'echo *') và bất cứ điều gì khác mà bạn muốn để cung cấp thông tin theo định dạng bạn muốn.


1

Dựa vào câu trả lời đã chọngợi ý sử dụng bí danh , tôi đã chuyển đổi nó thành một hàm để có thể chuyển một thư mục vào danh sách.

# 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}"
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.