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 :
-cpermet de formater la sortie avec le modèle fourni ;%aaffiche les permissions en octal, donc la valeur numérique du chmod ;%Uaffiche le nom du propriétaire ;%Gaffiche le groupe propriétaire ;%naffiche 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.
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 :
%maffiche les permissions en octal ;%uaffiche l’utilisateur propriétaire ;%gaffiche le groupe propriétaire ;%paffiche 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 :
Vos mises à jour vous font peur ?
PHP 8.x qui casse un plugin, un thème qui n'est plus maintenu, une mise à jour de WooCommerce qui change tout — je gère les montées de version proprement, avec environnement de staging et rollback prévu.
Mettons votre stack à jour sans risque →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 :
%adonne la valeur octale ;%Adonne la notation lisible façonls -l;%U:%Gdonne propriétaire et groupe ;%ndonne 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é.
Un projet WordPress en tête ?
Vous avez une idée claire de ce que vous voulez, mais pas les ressources en interne pour le faire bien. Je développe des sites et extensions WordPress sur-mesure — sans délais à rallonge ni mauvaises surprises.
Décrivez-moi votre projet →
