เป็นไปได้หรือไม่เมื่อแสดงรายการไดเร็กทอรีเพื่อดูสิทธิ์ unix ที่เป็นตัวเลขเช่น 644 แทนที่จะเป็นสัญลักษณ์เอาต์พุต -rw-rw-r--
ขอบคุณ
เป็นไปได้หรือไม่เมื่อแสดงรายการไดเร็กทอรีเพื่อดูสิทธิ์ unix ที่เป็นตัวเลขเช่น 644 แทนที่จะเป็นสัญลักษณ์เอาต์พุต -rw-rw-r--
ขอบคุณ
คำตอบ:
มันเกือบจะ ..
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
คำสั่งของคุณพิมพ์การอนุญาตเป็น767
ที่ใกล้เคียงที่สุดฉันนึกถึง (ทำให้มันง่ายพอ) คือ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
stat -f '%A %N' *
ทำสิ่งเดียวกันบน mac (FreeBSD)
stat
คือไม่ใช่ls
ดังนั้นนี่ไม่ใช่คำตอบที่ถูกต้อง อย่างไรก็ตามฉันเชื่อว่านี่เป็นคำตอบที่ถูกต้องในบริบทของผลลัพธ์ที่ต้องการ หากawk
ได้รับอนุญาตในท่อแล้วfind
ควรได้รับอนุญาตที่stat
ถูกเรียกใน-exec
; จากนั้นคุณสามารถใช้stat
โดยตรงโดยไม่ต้อง*
stat -c '%a %n' * **/*
หากคุณต้องการที่จะใช้สถิติเพื่อดูสิทธิซ้ำภายใต้การทุบตีการใช้งาน
คุณสามารถใช้คำสั่งต่อไปนี้
stat -c "%a %n" *
นอกจากนี้คุณสามารถใช้อย่างใดอย่างหนึ่งfilename
หรือdirectoryname
แทน*
เพื่อรับผลลัพธ์เฉพาะ
บน Mac คุณสามารถใช้
stat -f '%A %N' *
stat: illegal option -- c
usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
man stat
บน MacOS 10.14.4 stat -f "%Lp %N" *
แล้วคำสั่งที่ควรจะเป็น ดูเหมือนจะพิมพ์เป็นสิ่งเดียวกับ%Lp
%A
@ MYYN
ว้าวววววว! แต่สิ่งที่เกี่ยวกับ suid, sgid และบิตเหนียว?
คุณต้องขยายตัวกรองของคุณด้วย s และ t มิฉะนั้นตัวกรองจะไม่นับและคุณได้ผลลัพธ์ที่ผิด ในการคำนวณหมายเลขฐานแปดสำหรับแฟล็กพิเศษนี้ขั้นตอนจะเหมือนกัน แต่ดัชนีอยู่ที่ 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
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;}'"
ใช้สิ่งนี้เพื่อแสดงค่าการอนุญาตเชิงตัวเลขของ Unix (ค่าฐานแปด) และชื่อไฟล์
stat -c '%a %n' *
ใช้สิ่งนี้เพื่อแสดงค่าการอนุญาตของ Unix (ค่าฐานแปด) และบิต sgid และเหนียวของโฟลเดอร์ชื่อผู้ใช้ของเจ้าของชื่อกลุ่มขนาดรวมเป็นไบต์และชื่อไฟล์
stat -c '%a %A %U %G %s %n' *
เพิ่ม%y
ถ้าคุณต้องการเวลาในการแก้ไขครั้งล่าสุดในรูปแบบที่มนุษย์อ่านได้ สำหรับตัวเลือกเพิ่มเติมดูสถิติ
รุ่นที่ดีกว่าใช้นามแฝง
การใช้นามแฝงเป็นวิธีที่มีประสิทธิภาพมากขึ้นในการบรรลุสิ่งที่คุณต้องการและรวมถึงสีด้วย ต่อไปนี้แสดงผลลัพธ์ของคุณที่จัดระเบียบโดยกลุ่มไดเรกทอรีก่อนแสดงเป็นสีขนาดการพิมพ์ในรูปแบบที่มนุษย์อ่านได้ (เช่น 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 *') และสถิติและสิ่งอื่นที่คุณต้องการให้ข้อมูลในรูปแบบที่คุณต้องการ
การสร้างคำตอบที่เลือกและข้อเสนอแนะเพื่อใช้นามแฝงฉันแปลงเป็นฟังก์ชันเพื่อให้สามารถส่งไดเรกทอรีไปยังรายการได้
# 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}'"