Est-il possible, lors de la création d'un répertoire, d'afficher les autorisations Unix numériques telles que 644 plutôt que la sortie symbolique -rw-rw-r--
Merci.
Utilisez-le pour afficher les valeurs octales (autorisations numériques de chmod) et le nom du fichier:
stat -c '%a %n' *
Pour plus d'options, voir stat .
Pour un moyen plus efficace de faire cela en utilisant un alias, voir mon commentaire ci-dessous.
Le plus proche que je puisse penser (en le gardant assez simple) est stat
, en supposant que vous sachiez quels fichiers vous recherchez. Si vous ne le faites pas, *
peut en trouver la plupart:
/usr/bin$ stat -c '%a %n' *
755 [
755 a2p
755 a2ps
755 aclocal
...
Il gère 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" *
Vous pouvez également utiliser les variables filename
ou directoryname
au lieu de *
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 suid, sgid et collant?
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 est à 4 7 et 10. Les drapeaux possibles pour les fichiers avec le bit d'exécution défini sont ---s--s--t
AMD pour les fichiers sans le bit d'exécution défini 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 de permission d'un fichier. Vous utilisez la commande stat. Cela vous donnera les valeurs numériques que vous voulez. "Unix Way" dit que vous devez inventer votre propre script en utilisant ls (ou "echo *") et stat, ainsi que tout ce que vous voulez, pour donner les informations dans le format souhaité.
non, il ne peut imprimer que des uids/guids numériques.
Utilisez-le pour afficher les valeurs des autorisations numériques Unix (valeurs octales) et le nom du fichier.
stat -c '%a %n' *
Utilisez-le pour afficher les valeurs des autorisations numériques Unix (valeurs octales) et les bits sgid et sticky 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' *
Ajoutez %y
si vous avez besoin de l'heure de la dernière modification en 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 de répondre à vos besoins. Elle inclut également la couleur. Les éléments suivants affichent d’abord vos résultats classés par groupes de répertoires, couleurs, tailles d’impression au format lisible par l’homme (par exemple, 1K 234M 2G), éditez votre ~/.bashrc
et ajoutez un alias pour votre compte ou globalement en modifiant /etc/profile.d/custom.sh
Taper 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 de dossiers
Pendant que vous modifiez votre bashrc ou custom.sh, incluez l'alias suivant pour afficher une représentation graphique dans laquelle taper lstree
affichera la structure actuelle de votre arborescence de dossiers.
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
tl; dr: La réponse rapide à la question est, no ls ne peut pas imprimer les permissions numériques, utilisez stat .
Les autorisations étendues seront perdues lors de la traduction lors de la manipulation de awk.
par exemple:
$ ls -la /usr/local/src/
total 8
drwxrwsr-x 2 root staff 4096 Oct 23 11:18 .
drwxrwsr-x 10 root staff 4096 Oct 23 11:18 ..
La solution proposée afficherait ceci:
$ ls -la /usr/local/src | awk '{>
total 8
765 drwxrwsr-x 2 root staff 4096 Oct 23 11:18 .
765 drwxrwsr-x 10 root staff 4096 Oct 23 11:18 ..
Ce qui est totalement faux.
stat, d'autre part, réussit:
$ stat /usr/local/src Fichier: /usr/local/src Taille: 4096 Blocs: 8 IO Bloc: Répertoire 4096 Appareil: 801h/2049d Inode: 917803 Liens: 2 Accès: (2775/drwxrwsr-x) UID: (0 / racine) Gid: (50/personnel) Accès: 2018-10-24 12: 30: 58.197907324 +0900 Modifier: 2018-10-23 11: 18: 59.810677000 +0900 Changement: 2018-10-23 11: 18: 59.810677000 +0900 Naissance: -
Bonus de man stat:
$ stat -c %a /usr/local/src
2775
Cela a été testé sur Debian stable.
En me basant sur réponse choisie et sur la suggestion d'utiliser un alias , je l'ai convertie en une fonction afin de pouvoir passer un répertoire à list.
# 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}"
}