Linux / Commande mkdir : créer des dossiers et contrôler les droits

La commande GNU mkdir crée un ou plusieurs répertoires. Avec -p, elle crée aussi les parents manquants et accepte un répertoire déjà présent. Pour une arborescence de projet, c’est pratique, mais -p ne corrige pas les droits d’un dossier existant et -m ne fixe pas automatiquement le même mode sur tous les parents créés.

Les exemples se limitent à un nouveau dossier de pratique sous votre compte. Le manuel officiel GNU Coreutils pour mkdir précise les modes et le rôle de umask ; consultez mkdir --help ou man mkdir pour la version installée.

Que crée mkdir avec et sans -p ?

mkdir [OPTION]... RÉPERTOIRE...

Sans option, chaque chemin nommé doit avoir un parent existant ; un nom déjà présent provoque une erreur. Avec -p, mkdir crée les parents absents et ne considère pas comme une erreur un dossier final déjà existant. Si le même nom est occupé par un fichier ordinaire, -p échoue. Des chemins multiples sont traités dans l’ordre fourni ; une erreur sur l’un d’eux peut laisser les dossiers déjà créés en place.

Mettez entre guillemets les noms contenant des espaces. Pour un chemin dont le nom commence par un tiret, utilisez -- avant les opérandes. Sur un système partagé, examinez la valeur d’une variable de chemin et le parent ciblé avant une création : -p peut aussi construire toute une arborescence issue d’une faute de frappe.

Créer un dossier puis plusieurs sous-dossiers

Ce bloc réserve un dossier de pratique unique avec mktemp -d, puis crée trois dossiers connus. Il affiche la structure obtenue sans modifier un chemin du système :

lab=$(mktemp -d "$HOME/mkdir-lab.XXXXXX") || exit 1
mkdir -- "$lab/src" "$lab/tests" "$lab/docs"
find "$lab" -maxdepth 1 -type d -print

find doit montrer lab et les trois sous-dossiers. mkdir n’affiche normalement rien lorsqu’il réussit ; -v annonce les dossiers créés. Le répertoire de pratique reste disponible pour les blocs suivants. Si la commande échoue, vérifiez le message, les droits d’écriture et de traversée du parent, l’espace disponible et l’existence d’un fichier portant l’un des noms choisis.

Créer les parents manquants et relancer sans erreur

Lorsque toute la chaîne n’existe pas, -p crée chaque niveau nécessaire. Relancer la même commande laisse les dossiers existants en place sans mettre automatiquement leurs attributs à jour :

mkdir -pv -- "$lab/projet/src/composants"
mkdir -p -- "$lab/projet/src/composants"
find "$lab/projet" -type d -print

La première commande doit afficher les nouveaux niveaux ; la seconde réussit silencieusement. La liste finale doit contenir projet, src et composants. Sur un chemin existant, -p ne garantit pas que la propriété ou les droits correspondent à votre politique actuelle : vérifiez-les avant d’y déposer des fichiers sensibles.

Fixer un mode avec -m et comprendre umask

umask retire des permissions à la création ordinaire d’un fichier ou dossier. La valeur courante peut être lue avec umask. L’option -m MODE de GNU mkdir définit les bits du dossier nommé sur la ligne de commande, mais pas ceux des parents créés par -p. Ces parents sont créés selon une règle propre à GNU mkdir qui tient compte d’un umask ajusté pour autoriser la traversée et l’écriture par le propriétaire ; ils peuvent donc avoir un mode différent du dernier dossier.

Dans le dossier de pratique, créez une cible demandant 0750 et inspectez chaque niveau. Le résultat exact doit être confirmé sur un système de fichiers Linux qui applique les permissions POSIX :

umask
mkdir -p -m 0750 -- "$lab/controle/cache/donnees"
stat -c '%a %n' "$lab/controle" "$lab/controle/cache" "$lab/controle/cache/donnees"

Sur ce système Linux, le dernier dossier devrait afficher 750. Ne présumez pas que controle et cache affichent aussi 750. Si chaque niveau doit suivre une politique stricte, créez et vérifiez les parents séparément, dans un ordre où aucun dossier temporairement trop ouvert n’expose des données. Un umask défini dans un sous-shell, par exemple (umask 027; mkdir -p CHEMIN), limite son effet à cette commande et au sous-shell ; vérifiez toujours le résultat plutôt que d’inférer les bits uniquement de la valeur de umask.

Sur un chemin de service réel, contrôlez aussi le propriétaire, le groupe, les ACL et le contexte SELinux si ces mécanismes sont utilisés. GNU mkdir -Z ajuste le contexte selon la politique du système lorsque l’option est prise en charge ; --context=CONTEXTE peut demander une valeur explicite pour les nouveaux dossiers, mais nécessite une politique et des droits adaptés. La commande install avec -d peut créer un dossier en demandant simultanément mode, propriétaire et groupe ; ses parents créés automatiquement doivent également être contrôlés.

Comparer les options et choisir le bon outil

Option ou outil Rôle Attention
mkdir Crée un ou plusieurs dossiers nommés dont les parents existent. Échoue si un nom existe déjà.
mkdir -p Crée les parents manquants et tolère un dossier déjà présent. Ne met pas à jour les droits d’un dossier existant ; peut construire un chemin mal orthographié.
mkdir -m MODE Définit le mode des dossiers explicitement nommés. Les nouveaux parents créés avec -p suivent une règle différente.
mkdir -v Affiche un message par dossier créé. N’indique pas que les modes et propriétaires sont corrects.
install -d Crée des dossiers en demandant aussi certains attributs. Vérifiez séparément chaque parent et les privilèges nécessaires.
mktemp -d Réserve un nom de dossier temporaire difficile à deviner. Utilisez-le pour des fichiers de travail plutôt qu’un nom fixe dans un répertoire partagé.

Pour une application, préparez d’abord le chemin, les propriétaires et les modes attendus ; exécutez ensuite mkdir avec le compte approprié et vérifiez le résultat avec stat ou namei -l. Si une création a produit par erreur une arborescence vide, inspectez son contenu et ses limites avant de choisir rmdir sur les dossiers précis. Le guide de rmdir explique pourquoi il refuse de retirer un dossier qui contient encore des données.

Questions fréquentes

Comment créer plusieurs niveaux de dossiers en une commande ?

Utilisez mkdir -p parent/sous-dossier/cible. Les parents manquants sont créés ; vérifiez le chemin et les droits après l’opération.

Que se passe-t-il si le dossier existe déjà ?

Sans -p, mkdir signale une erreur. Avec -p, un dossier existant est accepté, mais un fichier ordinaire au même chemin reste une erreur.

mkdir -m 0750 règle-t-il aussi les parents créés ?

Non. Avec -p, le mode demandé s’applique aux dossiers explicitement nommés, tandis que les parents nouvellement créés suivent la règle de création GNU liée à umask.

Pourquoi un mkdir échoue-t-il malgré un nom disponible ?

Le parent peut manquer sans -p, ou votre compte peut ne pas avoir les droits d’écriture et de traversée. Vérifiez aussi les montages, l’espace et la valeur réelle de la variable de chemin.

La référence des commandes Linux par tâche classe mkdir avec les autres outils de gestion des dossiers.