Método # 1 - stat
Puede usar el stat
comando para obtener los bits de permisos. stat
está disponible en la mayoría de Unixes (OSX, BSD, no AIX de lo que puedo encontrar). Esto debería funcionar en la mayoría de los Unix, excepto OSX y BSD de lo que puedo encontrar.
$ stat -c "%a" <file>
Ejemplo
$ ls -l a
-rw-rw-r-- 1 saml saml 155 Oct 6 14:16 afile.txt
Usa este comando:
$ stat -c "%a" afile.txt
664
Y use un modo simple grep
para ver si el modo de permisos de grupos es un 6 o 7.
$ stat -c "%a" afile.txt | grep ".[67]."
Para OSX y BSD que había necesidad de utilizar esta forma de stat
, stat -f
(o tal vez stat -x
), y analizar en consecuencia. Dado que las opciones stat
son diferentes, puede incluir este comando en un lsb_release -a
comando y llamar a la versión adecuada según el sistema operativo. No es ideal pero viable. Tenga en cuenta que sololsb_release
está disponible para distribuciones de Linux, por lo que sería necesario idear otra alternativa para probar otros sistemas operativos Unix.
Método # 2 - encontrar
Sin embargo, creo que este comando podría servirle mejor. Hace uso de find
y el printf
interruptor.
Ejemplo
$ find a -prune -printf '%m\n'
664
Método # 3 - Perl
Perl podría ser una forma más portátil de hacer esto dependiendo de los sistemas operativos que intente cubrir.
$ perl -le '@pv=stat("afile.txt"); printf "%04o", $pv[2] & 07777;'
0664
NOTA: Lo anterior hace uso de la stat()
función de Perl para consultar los bits del sistema de archivos.
Puede hacerlo más compacto si deja de utilizar una matriz @pv
y trata stat()
directamente con la salida de :
$ perl -le 'printf "%04o", (stat("a"))[2] & 07777;'
0664