Linux : obtenir la valeur numérique du chmod

Je vous ai déjà parlé du chmod et du chown de manière extensive, mais aujourd’hui on va un tout petit peu plus loin.

Lorsque l’on affiche les permissions d’un fichier avec ls -l, on obtient une notation symbolique du type :

-rw-r-----

C’est lisible quand on a l’habitude, mais cela demande toujours une petite gymnastique mentale pour retrouver la valeur numérique du chmod.

Par exemple, -rw-r----- correspond à :

640

Heureusement, il existe une commande toute simple pour afficher directement la valeur numérique des permissions : stat.

Obtenir la valeur numérique du chmod avec stat

Sous Linux, avec la version GNU de stat, utilisez :

stat -c '%a %U:%G %n' *Langage du code : JavaScript (javascript)

Exemple de résultat :

644 matt:www-data index.php
640 matt:www-data wp-config.php
755 matt:www-data wp-contentLangage du code : CSS (css)

Les options utilisées sont les suivantes :

  • -c permet de formater la sortie avec le modèle fourni ;
  • %a affiche les permissions en octal, donc la valeur numérique du chmod ;
  • %U affiche le nom du propriétaire ;
  • %G affiche le groupe propriétaire ;
  • %n affiche le nom du fichier.

La documentation GNU Coreutils liste justement ces séquences de format pour stat, dont %a pour les bits de permission en octal, %U pour le propriétaire, %G pour le groupe et %n pour le nom du fichier.

Afficher chmod, propriétaire et fichier sur une ligne

Pour auditer rapidement un dossier, cette commande est très pratique :

stat -c '%a %U:%G %n' *Langage du code : JavaScript (javascript)

Si vous voulez inclure les fichiers cachés, utilisez plutôt :

stat -c '%a %U:%G %n' .[!.]* *Langage du code : JavaScript (javascript)

Attention : selon le dossier, ce motif peut produire une erreur si aucun fichier caché ne correspond. Ce n’est pas grave, mais ce n’est pas très élégant.

Une version plus robuste avec find est souvent préférable.

Distingo, le livret à 2%

Afficher les permissions récursivement avec find

Pour lister les permissions numériques de tous les fichiers et dossiers récursivement :

find . -printf '%m %u:%g %p\n'Langage du code : JavaScript (javascript)

Exemple :

755 matt:www-data .
644 matt:www-data ./index.php
640 matt:www-data ./wp-config.php
755 matt:www-data ./wp-content
755 matt:www-data ./wp-content/uploads

Dans find -printf :

  • %m affiche les permissions en octal ;
  • %u affiche l’utilisateur propriétaire ;
  • %g affiche le groupe propriétaire ;
  • %p affiche le chemin du fichier.

Le manuel GNU Findutils documente -printf et ses directives, notamment l’affichage des permissions, du propriétaire, du groupe et du chemin.

Limiter l’affichage aux fichiers

Pour afficher uniquement les fichiers :

find . -type f -printf '%m %u:%g %p\n'Langage du code : JavaScript (javascript)

Pour afficher uniquement les dossiers :

find . -type d -printf '%m %u:%g %p\n'Langage du code : JavaScript (javascript)

Pour limiter à la profondeur du dossier courant :

find . -maxdepth 1 -printf '%m %u:%g %p\n'Langage du code : JavaScript (javascript)

C’est souvent plus lisible qu’un simple stat * lorsque le dossier contient beaucoup de fichiers.

Équivalent sur macOS ou BSD

Attention : la commande stat n’a pas la même syntaxe sous Linux GNU et sous macOS/BSD.

Sous Linux :

stat -c '%a %U:%G %n' fichierLangage du code : JavaScript (javascript)

Sous macOS ou BSD :

stat -f '%Lp %Su:%Sg %N' fichierLangage du code : JavaScript (javascript)

Exemple pour tout le dossier courant sous macOS :

stat -f '%Lp %Su:%Sg %N' *Langage du code : JavaScript (javascript)

Sur macOS/BSD, %Lp donne les permissions en octal, %Su le nom du propriétaire, %Sg le groupe, et %N le nom du fichier. La syntaxe BSD diffère donc clairement de la syntaxe GNU/Linux. FreeBSD Manual : stat

Donc si vous copiez une commande Linux dans un terminal macOS et qu’elle ne fonctionne pas, ce n’est pas vous. C’est juste Unix qui rappelle qu’il a plusieurs branches dans l’arbre généalogique.

Lire rapidement une permission comme 640

Une permission numérique se lit par groupe de trois chiffres :

640
││└── autres
│└── groupe
└── propriétaire

Chaque chiffre correspond à une somme :

  • 4 = lecture ;
  • 2 = écriture ;
  • 1 = exécution.

Donc :

7 = 4 + 2 + 1 = lecture + écriture + exécution
6 = 4 + 2     = lecture + écriture
5 = 4 + 1     = lecture + exécution
4 = 4         = lecture
0 = aucun droit

Exemples fréquents :

644 = propriétaire lecture/écriture, groupe lecture, autres lecture
640 = propriétaire lecture/écriture, groupe lecture, autres aucun droit
755 = propriétaire tout, groupe lecture/exécution, autres lecture/exécution
750 = propriétaire tout, groupe lecture/exécution, autres aucun droit
600 = propriétaire lecture/écriture, personne d’autre

Correspondance symbolique et numérique

Voici quelques équivalences utiles :

-rw-r--r--  = 644
-rw-r-----  = 640
-rw-------  = 600
-rwxr-xr-x  = 755
-rwxr-x---  = 750
drwxr-xr-x  = 755
drwxr-x---  = 750

Le premier caractère indique le type :

  • - : fichier classique ;
  • d : dossier ;
  • l : lien symbolique.

Le reste correspond aux droits du propriétaire, du groupe, puis des autres utilisateurs.

Afficher le chmod d’un seul fichier

Pour un fichier précis sous Linux :

stat -c '%a %U:%G %n' wp-config.phpLangage du code : JavaScript (javascript)

Résultat possible :

640 matt:www-data wp-config.phpLangage du code : CSS (css)

Pour obtenir uniquement la valeur numérique :

stat -c '%a' wp-config.phpLangage du code : JavaScript (javascript)

Résultat :

640

Afficher les permissions avec les bits spéciaux

Parfois, les permissions contiennent un quatrième chiffre, par exemple :

2755
4755
1777

Ce premier chiffre correspond aux bits spéciaux :

  • 4 : setuid ;
  • 2 : setgid ;
  • 1 : sticky bit.

Exemple classique :

/tmp = 1777

Pour afficher les permissions avec les bits spéciaux, stat -c '%a' les inclut si nécessaire :

stat -c '%a %A %U:%G %n' /tmpLangage du code : JavaScript (javascript)

Exemple :

1777 drwxrwxrwt root:root /tmp

Dans le monde WordPress, si vous voyez des permissions comme 777 ou des bits spéciaux là où vous ne les attendez pas, prenez le temps de vérifier. Le chmod n’est pas une décoration murale.

Repérer les fichiers en 777

Pour chercher les fichiers ou dossiers en 777 dans un site :

find . -perm 0777 -printf '%m %u:%g %p\n'Langage du code : JavaScript (javascript)

Pour chercher uniquement les dossiers en 777 :

find . -type d -perm 0777 -printf '%m %u:%g %p\n'Langage du code : JavaScript (javascript)

Pour chercher uniquement les fichiers en 777 :

find . -type f -perm 0777 -printf '%m %u:%g %p\n'Langage du code : JavaScript (javascript)

Sur un site WordPress, des permissions 777 ne sont jamais justifiées. Les dossiers doivent généralement être en 755 ou 750, les fichiers en 644 ou 640, et qu’aucun dossier ne devrait être en 777.

Audit rapide d’un site WordPress

Pour afficher les permissions des fichiers et dossiers à la racine d’un site WordPress :

stat -c '%a %U:%G %n' ./*Langage du code : JavaScript (javascript)

Pour auditer récursivement :

find . -printf '%m %u:%g %p\n' | sortLangage du code : JavaScript (javascript)

Pour trouver les fichiers qui ne sont pas en 644 :

find . -type f ! -perm 0644 -printf '%m %u:%g %p\n'Langage du code : JavaScript (javascript)

Pour trouver les dossiers qui ne sont pas en 755 :

find . -type d ! -perm 0755 -printf '%m %u:%g %p\n'Langage du code : JavaScript (javascript)

Attention toutefois : certains fichiers peuvent légitimement être plus restrictifs, par exemple wp-config.php en 640 ou 600 selon votre stack. Donc ne corrigez pas aveuglément tous les écarts.

La documentation WordPress Developer Resources rappelle que 644 est généralement recommandé pour des fichiers comme .htaccess, tandis que certains fichiers sensibles comme php.ini peuvent être plus restrictifs.

Afficher les permissions d’un répertoire sans entrer dedans

Pour connaître les permissions d’un dossier lui-même :

stat -c '%a %U:%G %n' wp-contentLangage du code : JavaScript (javascript)

Pour voir les fichiers qu’il contient :

stat -c '%a %U:%G %n' wp-content/*Langage du code : JavaScript (javascript)

La différence est importante : le premier affiche les permissions du dossier wp-content, le second celles de son contenu direct.

Afficher aussi la notation symbolique

Pour afficher à la fois la valeur numérique et la notation symbolique :

stat -c '%a %A %U:%G %n' *Langage du code : JavaScript (javascript)

Exemple :

644 -rw-r--r-- matt:www-data index.php
640 -rw-r----- matt:www-data wp-config.php
755 drwxr-xr-x matt:www-data wp-contentLangage du code : CSS (css)

Ici :

  • %a donne la valeur octale ;
  • %A donne la notation lisible façon ls -l ;
  • %U:%G donne propriétaire et groupe ;
  • %n donne le nom du fichier.

Créer un alias pratique

Si vous utilisez souvent cette commande, vous pouvez créer un alias dans ~/.bashrc ou ~/.zshrc :

alias perms="stat -c '%a %A %U:%G %n'"Langage du code : JavaScript (javascript)

Rechargez votre shell :

source ~/.bashrc

ou :

source ~/.zshrc

Vous pourrez ensuite lancer :

perms wp-config.php
perms *Langage du code : CSS (css)

Pour une version récursive avec find :

alias rperms="find . -printf '%m %u:%g %p\n'"Langage du code : JavaScript (javascript)

Pas indispensable, mais franchement pratique quand on passe souvent dans des arborescences WordPress ou serveur.

Version avec tri numérique

Pour trier les fichiers par valeur de permission :

find . -printf '%m %u:%g %p\n' | sort -nLangage du code : JavaScript (javascript)

Pour trouver visuellement les permissions atypiques :

find . -printf '%m\n' | sort | uniq -c | sort -nLangage du code : JavaScript (javascript)

Exemple de résultat :

      1 600
      3 640
    284 644
     42 755

C’est très utile pour repérer rapidement les valeurs inhabituelles dans un projet.

Mémo rapide

# GNU/Linux : afficher chmod, propriétaire, groupe et nom.
stat -c '%a %U:%G %n' *

# GNU/Linux : afficher chmod numérique + symbolique.
stat -c '%a %A %U:%G %n' *

# GNU/Linux : un seul fichier.
stat -c '%a %U:%G %n' wp-config.php

# GNU/Linux : valeur numérique uniquement.
stat -c '%a' wp-config.php

# macOS/BSD.
stat -f '%Lp %Su:%Sg %N' *

# Récursif avec find.
find . -printf '%m %u:%g %p\n'

# Fichiers uniquement.
find . -type f -printf '%m %u:%g %p\n'

# Dossiers uniquement.
find . -type d -printf '%m %u:%g %p\n'

# Chercher les permissions 777.
find . -perm 0777 -printf '%m %u:%g %p\n'

# WordPress : fichiers qui ne sont pas en 644.
find . -type f ! -perm 0644 -printf '%m %u:%g %p\n'

# WordPress : dossiers qui ne sont pas en 755.
find . -type d ! -perm 0755 -printf '%m %u:%g %p\n'

# Voir les permissions utilisées dans un projet.
find . -printf '%m\n' | sort | uniq -c | sort -nLangage du code : PHP (php)

Conclusion

Pour obtenir la valeur numérique du chmod sous Linux, la commande la plus simple est :

stat -c '%a %U:%G %n' *Langage du code : JavaScript (javascript)

Elle affiche directement les permissions octales, le propriétaire, le groupe et le nom du fichier.

Pour un audit récursif, find est encore plus pratique :

find . -printf '%m %u:%g %p\n'Langage du code : JavaScript (javascript)

Et pour macOS ou BSD, utilisez la syntaxe adaptée :

stat -f '%Lp %Su:%Sg %N' *Langage du code : JavaScript (javascript)

En résumé : ls -l est parfait pour lire les permissions à l’œil, mais stat donne directement la valeur numérique. C’est plus rapide, plus clair, et cela évite de convertir mentalement -rw-r----- avant le café.

Demandez à l'IA son opinion
Gravatar for Matt Biscay

Je suis Matt Biscay, développeur WordPress & WooCommerce certifié chez Codeable, administrateur système et enseignant.

J’aide les entreprises à créer, optimiser et fiabiliser leurs sites WordPress avec une approche technique propre : performance, sécurité, maintenance, développement sur mesure et résolution de problèmes complexes.

Sur Skyminds, je partage des tutoriels WordPress, WooCommerce, Linux et administration système, avec des solutions testées sur des cas réels et pensées pour durer.

Découvrez mes services WordPress et WooCommerce.

Opinions