Dapatkan nilai numerik chmod untuk file

100

Di FreeBSD dan juga di Linux, bagaimana saya bisa mendapatkan nilai numerik chmodsuatu file? Misalnya, 644bukan -rw-r--r--? Saya perlu cara otomatis untuk skrip Bash.

stefan.at.wpf
sumber

Jawaban:

159

Anda bisa mendapatkan nilai secara langsung menggunakan format output stat, misalnya BSD / OS X:

stat -f "%OLp" <file>

atau di Linux

stat --format '%a' <file>

dan di kotak sibuk

 stat -c '%a' <file>
hangat
sumber
terima kasih, dipilih sebagai jawaban karena itu yang pertama dan juga tampaknya yang paling sederhana :-) @seg_fault: stat -x YOUR_FILE memberi saya lebih dari sekadar nilai mode.
stefan.at.wpf
5
sedang busyboxdigunakanstat -c '%a' <file>
Stuart Cardall
1
Kutipan tunggal tidak diperlukan, dan --formatdapat disingkat -c. Ini bekerja:stat -c %a <file>
Johnny mengapa
Saya memerlukan jawaban busybox di Ubuntu, jika tidak 'stat: tidak dapat membaca informasi sistem file untuk'% OLp ': Tidak ada file atau direktori'
tofutim
7

gunakan stat YOUR_FILEkecuali tulis skrip yang menghitung:

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

By the way, saya gunakan stat commandpada Linux box, bukan freebsd, karena itu menyelidiki HFSmungkin bekerja dengan baik UFS.

Teluk Persia
sumber
Ya, saya menemukannya di bawah FreeBSD box, gunakan di stat -x YOUR_FILEbawahFreeBSD box
PersianGulf
stat -r YOUR_FILE |awk '{print $3}' berikan izin Anda.
PersianGulf
perintah untuk menunjukkan ramah? tidak hanya nomor suka 666 atau kode -rw-wxrw- tetapi teks dengan penjelasan tentang setiap izin.
Peter Krauss
@ PeterKrauss, Lebih baik menulis sebuah awkuntuk mengambil kembali hasil numerik.
PersianGulf
Terima kasih @PersianGulf. Hum ... Tidak ada cara standar plug-and-play ....
Peter Krauss
2

Beberapa informasi tambahan tentang stat:

$ stat -c %a file.txt

777  

$ stat -c %A file.txt

-rwxrwxrwx
Mateen Ulhaq
sumber
itu di stat -f %A file.txtbawah mac, itu akan mengembalikan 644 atau 3 nomor digital lainnya.
Weijing Jay Lin
2

coba ini untuk daftar semua

stat --format "%a  %n" *
Hatem Badawi
sumber