Método # 1 - stat
Você pode usar o stat
comando para obter os bits de permissão. stat
está disponível na maioria dos Unixes (OSX, BSD, não AIX pelo que posso encontrar). Isso deve funcionar na maioria dos Unixes, exceto OSX e BSD, pelo que posso encontrar.
$ stat -c "%a" <file>
Exemplo
$ ls -l a
-rw-rw-r-- 1 saml saml 155 Oct 6 14:16 afile.txt
Use este comando:
$ stat -c "%a" afile.txt
664
E use um simples grep
para ver se o modo de permissões de grupos é 6 ou 7.
$ stat -c "%a" afile.txt | grep ".[67]."
Para OSX e BSD você precisa usar esta forma de stat
, stat -f
(ou talvez stat -x
), e analisar em conformidade. Como as opções stat
são diferentes, você pode agrupar esse comando em um lsb_release -a
comando e chamar a versão apropriada com base no sistema operacional. Não é o ideal, mas viável. Perceba que lsb_release
está disponível apenas para distribuições Linux, portanto, outra alternativa precisaria ser criada para testar outros sistemas operacionais Unix.
Método # 2 - encontrar
Acho que esse comando pode atendê-lo melhor. Eu uso find
e o printf
interruptor.
Exemplo
$ find a -prune -printf '%m\n'
664
Método # 3 - Perl
Perl pode ser uma maneira mais portátil de fazer isso, dependendo dos sistemas operacionais que você está tentando cobrir.
$ perl -le '@pv=stat("afile.txt"); printf "%04o", $pv[2] & 07777;'
0664
NOTA: O item acima utiliza a stat()
função do Perl para consultar os bits do sistema de arquivos.
Você pode tornar isso mais compacto renunciando ao uso de uma matriz @pv
e lidando com a saída stat()
diretamente:
$ perl -le 'printf "%04o", (stat("a"))[2] & 07777;'
0664