Obter o valor numérico chmod para um arquivo

100

No FreeBSD e também no Linux, como posso obter o chmodvalor numérico de um arquivo? Por exemplo, em 644vez de -rw-r--r--? Eu preciso de uma maneira automática para um script Bash.

stefan.at.wpf
fonte

Respostas:

159

Você pode obter o valor diretamente usando um formato de saída stat, por exemplo, BSD / OS X:

stat -f "%OLp" <file>

ou no Linux

stat --format '%a' <file>

e no busybox

 stat -c '%a' <file>
teppic
fonte
obrigado, selecionado como resposta porque foi o primeiro e também parece ser o mais simples :-) @seg_fault: stat -x YOUR_FILE me fornece mais do que apenas o valor do modo.
stefan.at.wpf
5
em busyboxusostat -c '%a' <file>
Stuart Cardall 08/08/16
1
aspas simples não são necessárias e --formatpodem ser abreviadas -c. Isso funciona:stat -c %a <file>
johny why
Eu precisava a resposta busybox no Ubuntu, caso contrário 'status: não é possível ler informações do sistema de arquivos para '% OLP': Nenhum tal lima ou diretório'
tofutim
7

use, a stat YOUR_FILEmenos que escreva um script que calcule:

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, eu uso stat commandem Linux box, não freebsd, porque investigar HFSprovavelmente trabalhar com UFS.

PersianGulf
fonte
Sim, eu encontrei-o sob FreeBSD box, uso stat -x YOUR_FILEsobFreeBSD box
Golfo Pérsico
stat -r YOUR_FILE |awk '{print $3}' dá sua permissão.
PersianGulf 01/09/12
comando para mostrar amigável? não apenas um número como 666 códigos, -rw-wxrw- mas um texto com explicações sobre cada permissão.
Peter Krauss
@ PeterKrauss, é melhor escrever um awkpara recuperar o resultado numérico.
Golfo Pérsico
Obrigado @PersianGulf. Hum ... Sem plug-and-play maneira padrão ....
Peter Krauss
2

Algumas informações adicionais sobre stat:

$ stat -c %a file.txt

777  

$ stat -c %A file.txt

-rwxrwxrwx
Mateen Ulhaq
fonte
está stat -f %A file.txtsob mac, retornaria 644 ou algum outro número digital 3.
Jay Jay Lin
2

tente isso para listar todos

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