usuario una todos permisos los ejemplos dar carpeta archivos unix command-line permissions

unix - ejemplos - dar permisos a todos los archivos de una carpeta linux



¿Puede el comando de lista Unix ''ls'' emitir permisos chmod numéricos? (8)

@The MYYN

wow, buen awk! ¿Pero qué hay de suid, sgid y sticky bit?

Tienes que extender tu filtro con s y t, de lo contrario no contarán y obtendrás el resultado incorrecto. Para calcular el número octal para estos indicadores especiales, el procedimiento es el mismo, pero el índice está en 4 7 y 10. Los posibles indicadores para los archivos con el conjunto de bits de ejecución son ---s--s--t amd para archivos sin ejecutar conjunto de bits son ---S--S--T

ls -l | awk ''{ k = 0 s = 0 for( i = 0; i <= 8; i++ ) { k += ( ( substr( $1, i+2, 1 ) ~ /[rwxst]/ ) * 2 ^( 8 - i ) ) } j = 4 for( i = 4; i <= 10; i += 3 ) { s += ( ( substr( $1, i, 1 ) ~ /[stST]/ ) * j ) j/=2 } if ( k ) { printf( "%0o%0o ", s, k ) } print }''

Para prueba:

touch blah chmod 7444 blah

resultará en:

7444 -r-Sr-Sr-T 1 cheko cheko 0 2009-12-05 01:03 blah

y

touch blah chmod 7555 blah

daré:

7555 -r-sr-sr-t 1 cheko cheko 0 2009-12-05 01:03 blah

¿Es posible al enumerar un directorio para ver los permisos numéricos de Unix como 644 en lugar de la salida simbólica -rw-rw-r--

Gracias.


Lo más cerca que puedo pensar (mantenerlo lo suficientemente simple) es una stat , suponiendo que sepas qué archivos estás buscando. Si no lo hace, * puede encontrar la mayoría de ellos:

/usr/bin$ stat -c ''%a %n'' * 755 [ 755 a2p 755 a2ps 755 aclocal ...

Se encarga de sticky, suid y compañía fuera de la caja:

$ stat -c ''%a %n'' /tmp /usr/bin/sudo 1777 /tmp 4755 /usr/bin/sudo


No usa ls para obtener la información de permiso de un archivo. Usas el comando stat. Le dará los valores numéricos que desea. La "Manera de Unix" dice que debes inventar tu propia secuencia de comandos usando ls (o ''echo *'') y stat y cualquier otra cosa que desees para dar la información en el formato que deseas.


Partiendo de la respuesta elegida y la sugerencia de usar un alias , la convertí en una función para que sea posible pasar un directorio a la lista.

# ls, with chmod-like permissions and more. # @param $1 The directory to ls function lls { LLS_PATH=$1 ls -AHl $LLS_PATH | 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}" }


Puedes usar el siguiente comando

stat -c "%a %n" *

También puede usar cualquier filename o directoryname lugar de * para obtener un resultado específico.

En Mac, puedes usar

stat -f ''%A %N'' *


casi puede ...

ls -l | 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}''


no, solo puede imprimir uids / guids numercial.


puedes usar GNU find.

find . -printf "%m:%f/n"