Hay un comando chmod para establecer permisos de archivo, pero ¿puedo obtener permisos de archivo en modo octal (como 755) desde la línea de comandos?
command-line
permissions
Anwar
fuente
fuente

stat --format "%A" $FILEte da eldrwxr-x---formato legible por humanos . que puede o no ser útil.Respuestas:
Puedes probar
Reemplace
*con el directorio relevante o el nombre de archivo exacto que desea examinar.Desde la página de manual de stat ,
Uso:
Con archivos:
Con carpetas:
(Referencia)
fuente
stat -f '%A %a %N' *(crédito: geeklog.adamwilson.info/article/58/… )ls:for f in $(ls -a); do stat -c "%a %n" $f; done;lses una mala idea. Si realmente quieres usar un bucle, puedes hacerlofor f in *; do stat "%a %n" "$f"; doneLos permisos de archivo en Linux se pueden mostrar en formato octal utilizando el comando stat de Linux.
Simplemente presione Ctrl+ Alt+ Ten su teclado para abrir Terminal. Cuando se abra, navegue al directorio donde desea encontrar los permisos de archivo en modo octal.
% A Derechos de acceso en forma legible para humanos
% a Derechos de acceso en octal
% n Nombre de archivo
Fuente: http://kmaiti.blogspot.com/2011/09/umask-concept.html
fuente
Como se detalla en los permisos de estilo "755" con 'ls' de Adam Courtemanche en AgileAdam.com , puede crear un alias
lsoque actúels -lpero procese ligeramente la salida 1 para mostrar los permisos también en octal. Esto agrega una columna inicial que muestra los permisos octales de dos dígitos de tres dígitos . Como está escrito, esto funciona para la mayoría de los archivos y directorios, pero no funciona correctamente si los pegajosos o setuid / setgid se establecen bits. 3Sin embargo, esto tiene una grave deficiencia, como señala techtonik . No puede pasar argumentos a este alias como lo haría con el comando , porque en su lugar se toman como argumentos adicionales . Por lo tanto, no puede ejecutarse en un archivo o directorio específico, ni puede pasar ninguna opción (como o ) .
lsolsawklso-F--colorlsoLa solución es definir
lsocomo una función en lugar de un alias.Si está probando esto de forma interactiva en su shell, ejecute
unalias lsopara eliminar el alias; puede hacerlo antes o después de definir la función. Si lo está colocando en un archivo de origen, por ejemplo~/.bashrc, simplemente saque laaliaslínea y agregue la definición de la función.¿Por qué funciona esto? A diferencia de los alias, las funciones de shell bash pueden tomar parámetros posicionales , es decir, argumentos de línea de comandos .
"$@"se expande a la lista de argumentos completa , haciendolsoque se pasen argumentos a la funciónls. (A diferencia de una definición de alias, no se cita un cuerpo de función; por lo tanto, era necesario eliminar los\caracteres antes$y").Dado que puede pasar opciones a
lsocuando se define de esta manera como una función, es posible que desee eliminar las opciones-ay-Gde la definición; puede pasarlas manualmente en los casos en que las desee. ( El-lse requiere opción para detalles como los permisos de archivo que se muestra en absoluto , por lo que no hay ningún beneficio a retirarlo.)Gracias a techtonik por señalar la limitación en la definición
lsocomo un alias, lo que me motivó a expandir esta publicación con material sobre cómo convertirla en una función.1 Uno puede notar que esto parece ignorar la regla general sobre no analizar la salida de
ls.lsproduce una salida muy legible para el ser humano; Esto introduce idiosincrasias y limitaciones, por lo que generalmente no es adecuado como entrada para otros comandos. En este caso analizamoslsya que deseamos preservar el comportamiento exacto delsexcepto nuestro único cambio agregado.2 Una limitación de este alias, que también se aplica a la versión de la función que se muestra debajo, y que puede considerarse un error, es que solo muestra tres dígitos octales incluso cuando el cuarto dígito octal es cero. Como jfmercer ha señalado correctamente , los dígitos octales que se muestran aquí no reflejan el bit adhesivo si está presente, ni los bits setuid o setgid.
3 Más serio que simplemente no mostrar el cuarto dígito octal es que este método asume que no se han establecido, y si son - si usted ve
t,soSen la serie de permiso - entonces usted debe ignorar los dígitos octales . Esto se debe a que los bits se infieren de la cadena de permisos de una manera que no tiene en cuenta los bits fijos setuid / setgid.fuente
awk: read error (Is a directory)--colorparámetros para mostrar coloreslso() { ls -alG "$@" --color | awk '{k=0;for(i=0;i<=8;i++)k+=((substr($1,i+2,1)~/[rwx]/)*2^(8-i));if(k)printf(" %0o ",k);print}'; }Simplemente extendiendo \ simplificando respuestas relacionadas con 'estadísticas' anteriores:
Simplemente puede ejecutar:
La salida contendrá permiso octal junto con otra información.
Detalles (versión estadística y ejemplo):
Tenga en cuenta lo siguiente: ( 0644 / -rw-r - r--)
fuente
Para la portabilidad, puede usar
perl:Si desea notar cuándo ocurre un error, intente:
fuente
Puedes usar
findcon la-printfacción.lsno muestra permisos octales, pero puede usar estafindsolución alternativa basada en:Por ejemplo, para consultar mi directorio de Videos:
El
%mespecificador de formato le dice a la-printfacción que imprima permisos octales, mientras que el%fespecificador de formato hace que imprima el nombre del archivo.Puede pasar varios nombres de archivo a
find. Incluso puedes usar globos (por ejemplo,find * -printf "%m:%f\n").No tiene que usar una prueba como
-nameo-iname; es suficiente pasar los nombres de los archivos o directorios que le interesan como puntos de partidafind. Es decir, proporcione sus nombres como argumentos inmediatamente después de la palabrafind, como se muestra arriba.findle da un gran control sobre cómo muestra la salida. Hay dos modificaciones en particular que pueden resultarle útiles:Por defecto,
findrecurre subdirectorios, similares als -R. Si no deseafindvisitar los subdirectorios de los puntos de partida que le pasa, puede agregar-maxdepth 0(o usar-maxdepthcon otros valores para indicar qué tan profundo quiere que vaya).%fsolo muestra un nombre de archivo, por lo que sifindtiene que recurrir para acceder a un archivo, es posible que no sepa dónde está ubicado. Para mostrar una ruta, comenzando por el punto de inicio en el que se encontró el archivo, use%pen su lugar.Consulte
man findpara obtener más información sobre el uso delfindcomando.Otro método (
lsyawk)Esto se puede usar para enumerar todos los archivos de directorio con sus permisos:
Este es esencialmente el mismo comando que en el
lsoalias de Adam Courtemanche , que esa respuesta citó, solo se ejecuta como un solo comando. Si solo usa esto una vez, o en raras ocasiones, es posible que no quiera molestarse en escribirlo como un alias o función de shell.fuente