Est-il possible, lors de la liste d'un répertoire, d'afficher les autorisations numériques Unix telles que 644 plutôt que la sortie symbolique -rw-rw-r--
Merci.
Est-il possible, lors de la liste d'un répertoire, d'afficher les autorisations numériques Unix telles que 644 plutôt que la sortie symbolique -rw-rw-r--
Merci.
Réponses:
ç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}'
chmod 777 dirvotre commande imprime les autorisations comme767
Le plus proche statauquel je puisse penser (en restant assez simple) est , en supposant que vous sachiez quels fichiers vous recherchez. Si vous ne le faites pas, vous *pouvez trouver la plupart d'entre eux:
/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...
Il gère les collants, les suides et les entreprises hors de la boîte:
$ stat -c '%a %n' /tmp /usr/bin/sudo
1777 /tmp
4755 /usr/bin/sudo
stat -f '%A %N' *qu'il
statn'est pas, lsdonc ce n'est pas la bonne réponse. Cependant, je pense que c'est la bonne réponse dans le contexte du résultat souhaité. Si awkest autorisé dans un tuyau, alors finddevrait être autorisé là où statest appelé -exec; alors vous pouvez utiliser statdirectement sans*
stat -c '%a %n' * **/*.
Vous pouvez utiliser la commande suivante
stat -c "%a %n" *
Vous pouvez également utiliser tout filenameou au directorynamelieu d' *obtenir un résultat spécifique.
Sur Mac, vous pouvez utiliser
stat -f '%A %N' *
stat: illegal option -- c usage: stat [-FlLnqrsx] [-f format] [-t timefmt] [file ...]
man statmacOS 10.14.4, la commande devrait être stat -f "%Lp %N" *. %Lpsemble imprimer la même chose que %A.
@Le MYYN
wow, gentil awk! Mais qu'en est-il des morceaux suid, sgid et collant?
Vous devez étendre votre filtre avec s et t, sinon ils ne compteront pas et vous obtenez un mauvais résultat. Pour calculer le nombre octal pour ces drapeaux spéciaux, la procédure est la même mais l'index est à 4 7 et 10. les drapeaux possibles pour les fichiers avec un bit d'exécution sont ---s--s--tamd pour les fichiers sans bit 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 le 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
alias "lsmod=ls -al|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;}'"
Utilisez cette option pour afficher les valeurs numériques d'autorisation Unix (valeurs octales) et le nom de fichier.
stat -c '%a %n' *
Utilisez ceci pour afficher les valeurs numériques d'autorisation Unix (valeurs octales) et le sgid et le sticky bit du dossier, le nom d'utilisateur du propriétaire, le nom du groupe, la taille totale en octets et le nom du fichier.
stat -c '%a %A %U %G %s %n' *
Ajouter %y si vous avez besoin de l'heure de la dernière modification dans un format lisible par l'homme. Pour plus d'options voir stat .
Meilleure version utilisant un alias
L'utilisation d'un alias est un moyen plus efficace d'accomplir ce dont vous avez besoin et inclut également la couleur. Les éléments suivants affichent d'abord vos résultats organisés par répertoires de groupe, affichent en couleur, tailles d'impression au format lisible par l'homme (par exemple, 1K 234M 2G)~/.bashrc et ajoutez un alias pour votre compte ou globalement en éditant/etc/profile.d/custom.sh
La saisie clsaffiche les résultats de votre nouvelle commande LS.
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;}'"
Arborescence des dossiers
Pendant que vous modifiez votre bashrc ou custom.sh, incluez l'alias suivant pour voir une représentation graphique où la saisie lstreeaffichera l'arborescence de vos dossiers actuelle
alias lstree="ls -R | grep ":$" | sed -e 's/:$//' -e 's/[^-][^\/]*\//--/g' -e 's/^/ /' -e 's/-/|/'"
Il afficherait:
|-scripts
|--mod_cache_disk
|--mod_cache_d
|---logs
|-run_win
|-scripts.tar.gz
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 souhaitées. La "manière Unix" dit que vous devez 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.
En me basant sur la réponse choisie et la suggestion d'utiliser un alias , je l'ai converti en fonction afin que le passage 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}"
}
alias cls="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}'"