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"