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 dir
votre commande imprime les autorisations comme767
Le plus proche stat
auquel 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
stat
n'est pas, ls
donc 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 awk
est autorisé dans un tuyau, alors find
devrait être autorisé là où stat
est appelé -exec
; alors vous pouvez utiliser stat
directement sans*
stat -c '%a %n' * **/*
.
Vous pouvez utiliser la commande suivante
stat -c "%a %n" *
Vous pouvez également utiliser tout filename
ou au directoryname
lieu 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 stat
macOS 10.14.4, la commande devrait être stat -f "%Lp %N" *
. %Lp
semble 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--t
amd 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 cls
affiche 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 lstree
affichera 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}'"