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" $FILE
te 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;
ls
es una mala idea. Si realmente quieres usar un bucle, puedes hacerlofor f in *; do stat "%a %n" "$f"; done
Los 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
lso
que actúels -l
pero 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 ) .
lso
ls
awk
lso
-F
--color
lso
La solución es definir
lso
como una función en lugar de un alias.Si está probando esto de forma interactiva en su shell, ejecute
unalias lso
para 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 laalias
lí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 , haciendolso
que 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
lso
cuando se define de esta manera como una función, es posible que desee eliminar las opciones-a
y-G
de la definición; puede pasarlas manualmente en los casos en que las desee. ( El-l
se 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
lso
como 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
.ls
produce 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 analizamosls
ya que deseamos preservar el comportamiento exacto dels
excepto 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
,s
oS
en 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)
--color
pará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
find
con la-printf
acción.ls
no muestra permisos octales, pero puede usar estafind
solución alternativa basada en:Por ejemplo, para consultar mi directorio de Videos:
El
%m
especificador de formato le dice a la-printf
acción que imprima permisos octales, mientras que el%f
especificador 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
-name
o-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.find
le da un gran control sobre cómo muestra la salida. Hay dos modificaciones en particular que pueden resultarle útiles:Por defecto,
find
recurre subdirectorios, similares als -R
. Si no deseafind
visitar los subdirectorios de los puntos de partida que le pasa, puede agregar-maxdepth 0
(o usar-maxdepth
con otros valores para indicar qué tan profundo quiere que vaya).%f
solo muestra un nombre de archivo, por lo que sifind
tiene 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%p
en su lugar.Consulte
man find
para obtener más información sobre el uso delfind
comando.Otro método (
ls
yawk
)Esto se puede usar para enumerar todos los archivos de directorio con sus permisos:
Este es esencialmente el mismo comando que en el
lso
alias 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