Comando mkdir in Linux: creare directory e impostare i permessi
mkdir crea nuove directory in Linux. Con -p crea anche le directory superiori mancanti e accetta quelle già esistenti: è utile per preparare la struttura di un progetto o di una distribuzione applicativa.
Gli esempi si riferiscono a GNU Coreutils. Controlla mkdir --help e man mkdir sul sistema di destinazione; le opzioni lunghe e quelle per i contesti di sicurezza non sono disponibili ovunque.
Cos'è il comando mkdir?
mkdir crea le directory indicate, nell’ordine degli argomenti. Senza -p segnala un errore se manca una directory superiore o se il nome esiste già. Con -p crea i componenti mancanti e non modifica i permessi delle directory già esistenti.
Sintassi di base
mkdir [OPTION]... DIRECTORY...
Racchiudi tra virgolette i percorsi con spazi. Con GNU Coreutils, mkdir -- -archivio crea una directory il cui nome inizia con un trattino. La sintassi precedente è uno schema: sostituisci i segnaposto, senza copiarne le parentesi.
Uso base di mkdir
Crea una directory
Usa un percorso relativo alla directory corrente oppure un percorso assoluto. La directory superiore deve già esistere. Per provare gli esempi, crea prima una cartella di lavoro nuova con mkdir mkdir-demo && cd mkdir-demo; se il nome esiste già, scegline un altro. Gli esempi sotto /srv riguardano un percorso di sistema e richiedono i permessi appropriati: non eseguirli nel laboratorio senza adattarli.
mkdir logs
mkdir /srv/myapp
Crea diverse directory
Ogni percorso è un operando separato. Metti tra virgolette i nomi che contengono spazi.
mkdir src tests docs
mkdir 'project files'
Creare le directory superiori mancanti
-p crea la gerarchia necessaria. Ripetere lo stesso comando non causa un errore se i percorsi sono già directory, ma non corregge permessi, proprietario o un percorso sbagliato. Nel secondo comando, {bin,config,logs} è un’espansione della shell Bash: produce tre argomenti prima che venga eseguito mkdir; non è una funzione di mkdir né della shell POSIX sh.
mkdir -p project/src/components
mkdir -p /srv/myapp/{bin,config,logs}
Verificare il percorso creato
Se tutto va bene, mkdir normalmente non stampa nulla. Questo esempio crea demo-dir/logs e poi elenca le directory create con find. Eseguilo in una cartella di lavoro nuova per ottenere esattamente il risultato mostrato.
mkdir -p demo-dir/logs
find demo-dir -type d
Esempio di output:
demo-dir
demo-dir/logs
Anche se la directory viene creata, non significa che i permessi siano quelli previsti. Verifica i permessi effettivi con stat -c '%a %n' demo-dir demo-dir/logs.
Opzioni principali
| Opzione | Scopo |
|---|---|
-p, --parents |
Crea le directory superiori mancanti e accetta le directory esistenti, senza cambiarne i permessi. |
-m MODE |
Imposta i permessi delle nuove directory indicate come argomenti; non quelli dei componenti superiori creati da -p. |
-v |
Mostra un messaggio per ogni directory effettivamente creata. |
-Z |
Imposta il tipo SELinux predefinito per ogni nuova directory, nei sistemi che lo supportano. |
--context=CONTEXT |
Imposta il contesto SELinux o SMACK specificato, se supportato; senza valore, --context si comporta come -Z. |
Le opzioni lunghe rendono spesso più leggibili gli script. Per la portabilità, confronta le opzioni GNU con mkdir in POSIX.1-2024, che specifica -p e -m. Le opzioni di sicurezza richiedono il supporto del sistema e una politica appropriata: non sostituiscono la verifica dei permessi.
Esempi pratici
Creare una directory con permessi espliciti
-m accetta la notazione numerica o simbolica di chmod. 750 concede lettura, scrittura e attraversamento al proprietario, lettura e attraversamento al gruppo e nessun accesso agli altri; u=rwx,go= concede accesso solo al proprietario. Questi sono permessi ordinari: verifica anche proprietario, gruppo ed eventuali liste di controllo degli accessi (ACL) o bit speciali ereditati dalla directory superiore.
mkdir -m 750 private-data
mkdir -m u=rwx,go= project-secret
Controllare i permessi delle directory superiori
In mkdir -p -m 750 a/b/c, -m riguarda la nuova directory c, non le directory intermedie a e b. umask è la maschera dei permessi da escludere alla creazione. Nel seguente laboratorio, 027 produce i permessi ordinari 750 per le directory nuove in assenza di ACL predefinite; le parentesi limitano il cambiamento di umask alla subshell. Il successivo find applica chmod a tutte le directory sotto app, anche preesistenti: usalo solo sulla gerarchia di prova sotto il tuo controllo, non su un albero condiviso o non fidato.
( umask 027; mkdir -p app/cache/data )
find app -type d -exec chmod 750 {} +
Verifica il risultato
Controlla il codice di uscita: zero indica il successo per tutti gli argomenti; un valore diverso da zero indica almeno un errore. Una parte delle directory può essere già stata creata anche in caso di errore: non si tratta di una transazione con annullamento automatico. Il seguente stat mostra permessi, proprietario e gruppo; per leggere questi campi vedi anche la guida al comando stat.
mkdir -pv deploy/releases/current
stat -c '%A %U:%G %n' deploy deploy/releases deploy/releases/current
mkdir e comandi correlati
| Comando o metodo | Ruolo principale | Quando usarlo |
|---|---|---|
mkdir |
Creare directory | Spazi di lavoro e alberi di directory |
install -d |
Creare directory e impostarne gli attributi | Installazione e distribuzione di applicazioni |
rmdir |
Rimuovere directory vuote | Rimuovere un percorso soltanto se è vuoto |
mktemp -d |
Creare una directory temporanea con nome non prevedibile | Spazi di lavoro temporanei per script |
Avvertenze importanti
-p crea anche i percorsi scritti male
Un errore di battitura può diventare una nuova directory, invece di produrre un errore immediato. Controlla prima i valori delle variabili e il percorso finale. Per ripulire il laboratorio, verifica di essere nella cartella mkdir-demo e usa rmdir sui percorsi vuoti, partendo dai più profondi; un errore di directory non vuota va esaminato prima di eliminare altro.
I permessi predefiniti dipendono da umask
Senza -m, i permessi ordinari iniziali derivano da 777 con i bit della umask rimossi: ad esempio 022 lascia 755. Le ACL predefinite possono modificare questo calcolo e i bit speciali possono essere ereditati: verifica il risultato effettivo. Per i componenti superiori creati da -p, GNU assicura inoltre scrittura e attraversamento al proprietario per poter proseguire la creazione. Su directory già esistenti, -p non applica nuovamente né umask né -m.
Creazione e attraversamento richiedono permessi distinti
Per creare una sottodirectory servono scrittura e attraversamento (permesso x) nella directory che la conterrà, oltre all’attraversamento dei componenti precedenti. Controlla l’intero percorso, ad esempio con namei -l PERCORSO se disponibile. Un filesystem in sola lettura o una politica di sicurezza può impedire la creazione anche quando i bit ordinari sembrano corretti.
FAQ
Come posso creare tutte le directory padre mancanti?
Usa mkdir -p superiore/sottodirectory/destinazione. I nomi sono esempi da sostituire con il percorso desiderato.
Come posso evitare un errore quando la directory esiste già?
Usa -p. Il comando fallisce comunque se un componente richiesto è un file normale anziché una directory, oppure se non hai accesso al percorso.
mkdir -m imposta anche i permessi delle directory superiori create da -p?
No. -m imposta i permessi delle nuove directory indicate come argomenti. I componenti superiori creati automaticamente dipendono dalla umask, con scrittura e attraversamento per il proprietario; verifica o modifica separatamente i permessi quando necessario.
Come si crea una directory temporanea sicura?
Per una directory temporanea con nome unico e non prevedibile, usa mktemp -d e controlla che il comando riesca prima di utilizzare il percorso restituito. Un nome fisso creato con mkdir non offre la stessa protezione nelle aree temporanee condivise.




