รับค่าตัวเลข chmod สำหรับไฟล์


100

ใน FreeBSD และใน Linux ฉันจะรับchmodค่าตัวเลขของไฟล์ได้อย่างไร ตัวอย่างเช่น644แทนที่จะเป็น-rw-r--r--? ฉันต้องการวิธีอัตโนมัติสำหรับสคริปต์ Bash

คำตอบ:


159

คุณสามารถรับค่าโดยตรงโดยใช้รูปแบบเอาต์พุต stat เช่น BSD / OS X:

stat -f "%OLp" <file>

หรือใน Linux

stat --format '%a' <file>

และใน busybox

 stat -c '%a' <file>

ขอบคุณเลือกเป็นคำตอบเพราะมันเป็นอันแรกและดูเหมือนจะง่ายที่สุด :-) @seg_fault: stat -x YOUR_FILE ให้ฉันมากกว่าแค่ค่าโหมด
stefan.at.wpf

5
ในbusyboxการใช้งานstat -c '%a' <file>
สจ๊วร์ Cardall

1
ไม่จำเป็นต้องใช้เครื่องหมายคำพูดเดี่ยวและ--formatสามารถย่อ-cได้ ใช้งานได้:stat -c %a <file>
johny ทำไม

ฉันต้องการคำตอบ busybox บน Ubuntu มิฉะนั้น 'stat: ไม่สามารถอ่านข้อมูลระบบไฟล์สำหรับ'% OLp ': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว'
tofutim

7

ใช้stat YOUR_FILEยกเว้นเขียนสคริปต์ที่คำนวณ:

rwx rwx rwx ==> ( r = 4 ) if set + ( w = 2) if set + (x = 1) if set , for example:
You have :
-rw-wxrw- => (4+2+0)(0+2+1)(4+2+) = 0636 
First argument before 9 permissions is one of :
- = regular file
d =  directory
b = block device
c = character device
s = socket
p = pipe
f = fifo

โดยวิธีการที่ผมใช้stat commandในLinux boxไม่freebsdเพราะมันตรวจสอบอาจจะทำงานร่วมกับHFSUFS


ใช่ฉันพบFreeBSD boxแล้วใช้stat -x YOUR_FILEภายใต้FreeBSD box
PersianGulf

stat -r YOUR_FILE |awk '{print $3}' ให้สิทธิ์ของคุณ
PersianGulf

สั่งให้แสดงมิตร? ไม่เพียง แต่ตัวเลข666 หรือรหัส-rw-wxrw- เท่านั้น แต่เป็นข้อความที่มีคำอธิบายเกี่ยวกับสิทธิ์แต่ละรายการ
Peter Krauss

@PeterKrauss ดีกว่าที่จะเขียนawkเพื่อคืนค่าผลลัพธ์เป็นตัวเลข
PersianGulf

ขอบคุณ @PersianGulf ไง ... ไม่มีวิธีมาตรฐานแบบ plug-and-play ....
Peter Krauss

2

ข้อมูลเพิ่มเติมเกี่ยวกับstat:

$ stat -c %a file.txt

777  

$ stat -c %A file.txt

-rwxrwxrwx

มันอยู่stat -f %A file.txtภายใต้ mac มันจะคืนค่า 644 หรือตัวเลขดิจิตอล 3 ตัว
Weijing Jay Lin

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.