La commande Unix peut-elle afficher la commande ‘ls’ pour obtenir des permissions numériques chmod?

Est-il possible, lors de la liste d’un répertoire, d’afficher les permissions Unix numériques telles que 644 plutôt que la sortie symbolique -rw-rw-r–

Merci.

ça peut presque ..

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

Le plus proche que je puisse penser (le garder assez simple) est stat , en supposant que vous savez quels fichiers vous recherchez. Si vous ne le faites pas, * peut trouver la plupart d’entre eux:

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

Il manipule collant, suid et compagnie hors de la boîte:

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

vous pouvez simplement utiliser GNU find.

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

Vous pouvez utiliser la commande suivante

 stat -c "%a %n" * 

De plus, vous pouvez utiliser n’importe quel filename de filename ou directoryname plutôt que * pour obtenir un résultat spécifique.

Sur Mac, vous pouvez utiliser

 stat -f '%A %N' * 

@Le myyn

wow, nice awk! Mais qu’en est-il de suid, sgid et sticky bit?

Vous devez étendre votre filtre avec s et t, sinon ils ne compteront pas et vous obtiendrez un résultat erroné. Pour calculer le nombre octal de ces drapeaux spéciaux, la procédure est la même mais l’index se situe à 4 7 et 10. Les indicateurs possibles pour les fichiers avec un bit d’exécution défini sont ---s--s--t amd ensemble de bits d’exécution sont ---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 }' 

Pour test:

 touch blah chmod 7444 blah 

aura pour résultat:

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

et

 touch blah chmod 7555 blah 

va donner:

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

Vous n’utilisez pas ls pour obtenir les informations d’autorisation d’un fichier. Vous utilisez la commande stat. Il vous donnera les valeurs numériques que vous voulez. Le “Chemin Unix” dit que vous devriez inventer votre propre script en utilisant ls (ou “echo *”) et stat et tout ce que vous voulez pour donner les informations dans le format que vous désirez.

non, il ne peut imprimer que des uids / guides numériques.

En partant de la réponse choisie et de la suggestion d’utiliser un alias , je l’ai converti en une fonction afin que la transmission d’un répertoire à la liste soit possible.

 # 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}" } 

Modifiez votre fichier custom.sh vi /etc/profile.d/custom.sh et entrez l’alias suivant.

Cela affiche les valeurs des permissions numériques unix et le sgid et le sticky bit du dossier, organisés en premier par répertoires de groupes et en couleur.

 alias cls="ls -lha --color=always -F --group-directories-first |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;}'"