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ó 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:
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}'
chmod 777 dir
lệnh của bạn in quyền như767
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
stat -f '%A %N' *
làm điều tương tự trên máy mac (FreeBSD)
stat
không phải ls
do đó đâ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ì find
nên được cho phép nơi stat
được gọi trong -exec
; sau đó bạn có thể sử dụng stat
trực tiếp mà không cần*
stat -c '%a %n' * **/*
.
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ỳ filename
hoặc directoryname
thay 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' *
stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
man stat
macOS 10.14.4, thì lệnh sẽ là stat -f "%Lp %N" *
. %Lp
xuất hiện để in điều tương tự như %A
.
@ 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--t
amd 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
và
touch blah
chmod 7555 blah
sẽ cho:
7555 -r-sr-sr-t 1 cheko cheko 0 2009-12-05 01:03 blah
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;}'"
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' *
Thêm %y
nế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 ~/.bashrc
và 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
Gõ cls
hiể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;}'"
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õ lstree
sẽ 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
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.
Dựa vào câu trả lời đã chọn và gợ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}"
}
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}'"