mkdir — Verzeichnisse anlegen
Praxis-Guide zu mkdir: einzelne Verzeichnisse, verschachtelte Bäume und Berechtigungen anlegen – inklusive Brace-Expansion und typischer Projektstrukturen.
mkdir legt Verzeichnisse an – von einem einzelnen Ordner über verschachtelte Bäume bis zu kompletten Projektstrukturen in einem einzigen Aufruf. Der Schlüssel zur Produktivität ist die Option -p: Sie erstellt fehlende Elternverzeichnisse mit und meldet keinen Fehler, wenn das Verzeichnis schon existiert – ideal für Skripte. Mit -m setzt du die Berechtigungen direkt beim Anlegen, und mit Brace-Expansion baust du ganze Verzeichnis-Matrizen mit einem Befehl. Dieser Guide zeigt dir die Grundlagen, Berechtigungen, Brace-Muster und gängige Projekt-Layouts.
Grundlagen
mkdir <directory> — Erstellt ein einzelnes Verzeichnis.
mkdir projectsmkdir <dir1> <dir2> <dir3> — Erstellt mehrere Verzeichnisse auf einmal.
mkdir css js imagesmkdir -v <directory> — Ausführlicher Modus. Gibt für jedes erstellte Verzeichnis eine Meldung aus.
mkdir -v logs backups tmpElternverzeichnisse
mkdir -p <path/to/directory> — Erstellt fehlende Elternverzeichnisse mit. Kein Fehler, wenn das Verzeichnis bereits existiert.
mkdir -p /var/www/html/assets/cssmkdir -p <dir1>/sub1 <dir2>/sub2 — Erstellt mehrere verschachtelte Verzeichnisbäume auf einmal.
mkdir -p src/components src/utils src/hooksmkdir -pv <path/to/directory> — Erstellt Elternverzeichnisse mit ausführlicher Ausgabe jedes angelegten Verzeichnisses.
mkdir -pv /opt/app/config/sslBerechtigungen
mkdir -m <mode> <directory> — Erstellt ein Verzeichnis mit bestimmten Berechtigungen (oktaler Modus).
mkdir -m 755 /var/www/htmlmkdir -m 700 <directory> — Erstellt ein privates Verzeichnis. Nur der Eigentümer hat Zugriff.
mkdir -m 700 ~/.sshmkdir -m 1777 <directory> — Erstellt ein Verzeichnis mit Sticky-Bit. Nutzer können nur ihre eigenen Dateien löschen.
mkdir -m 1777 /tmp/sharedmkdir -m 2775 <directory> — Erstellt ein Verzeichnis mit setgid. Neue Dateien erben die Gruppe des Verzeichnisses.
mkdir -m 2775 /var/www/sharedmkdir -pm <mode> <path/to/directory> — Erstellt verschachtelte Verzeichnisse mit bestimmten Berechtigungen auf dem letzten Verzeichnis.
mkdir -pm 700 ~/.config/app/secretsBrace-Expansion-Muster
mkdir -p <base>/{<dir1>,<dir2>,<dir3>} — Erstellt mehrere Unterverzeichnisse per Brace-Expansion.
mkdir -p project/{src,tests,docs}mkdir -p <base>/{<dir1>,<dir2>}/{<sub1>,<sub2>} — Erstellt eine verschachtelte Verzeichnis-Matrix per verschachtelter Brace-Expansion.
mkdir -p app/{frontend,backend}/{src,tests,config}mkdir -p <base>/{01..12} — Erstellt nummerierte Verzeichnisse per Sequenz-Expansion.
mkdir -p archive/2024/{01..12}mkdir -p <base>/{a..z} — Erstellt alphabetisch benannte Verzeichnisse per Zeichenbereich.
mkdir -p index/{a..z}mkdir -p project/{src/{components,utils,hooks},public/{css,js,images},tests} — Erstellt eine komplette Projekt-Verzeichnisstruktur in einem Befehl.
mkdir -p project/{src/{components,utils,hooks},public/{css,js,images},tests}Gängige Projektstrukturen
mkdir -p <project>/{src,dist,tests,docs} — Basis-Gerüst mit Quellcode, Build-Ausgabe, Tests und Doku.
mkdir -p my-app/{src,dist,tests,docs}mkdir -p <project>/{src/{css,js,images},dist,node_modules} — Frontend-Projektstruktur mit Asset-Verzeichnissen.
mkdir -p website/{src/{css,js,images},dist,node_modules}mkdir -p <project>/{app/{Controllers,Models,Views},config,public,storage/{logs,cache}} — Struktur einer MVC-Webanwendung.
mkdir -p my-app/{app/{Controllers,Models,Views},config,public,storage/{logs,cache}}mkdir -p <project>/{cmd,internal,pkg,api,configs,scripts,test} — Standard-Layout eines Go-Projekts.
mkdir -p my-service/{cmd,internal,pkg,api,configs,scripts,test}Temporäre Verzeichnisse
mktemp -d — Erstellt ein temporäres Verzeichnis mit eindeutigem Namen in /tmp. Gibt den Pfad zurück.
TMPDIR=$(mktemp -d); echo $TMPDIRmktemp -d -t <template> — Erstellt ein temporäres Verzeichnis mit eigenem Namens-Präfix.
mktemp -d -t myapp-XXXXXXmktemp -d -p <directory> — Erstellt ein temporäres Verzeichnis innerhalb eines bestimmten Elternverzeichnisses.
mktemp -d -p /var/tmpmktemp -d && trap 'rm -rf "$TMPDIR"' EXIT — Erstellt ein temporäres Verzeichnis, das beim Skriptende automatisch aufgeräumt wird.
TMPDIR=$(mktemp -d) && trap 'rm -rf "$TMPDIR"' EXITHäufige Muster
mkdir -p <dir> && cd <dir> — Erstellt ein Verzeichnis und wechselt sofort hinein.
mkdir -p ~/projects/new-app && cd ~/projects/new-app[ -d <dir> ] || mkdir -p <dir> — Erstellt ein Verzeichnis nur, wenn es nicht existiert (explizite Prüfung).
[ -d /var/log/app ] || mkdir -p /var/log/appinstall -d -m <mode> -o <owner> -g <group> <directory> — Erstellt ein Verzeichnis mit Berechtigungen, Eigentümer und Gruppe in einem Befehl.
install -d -m 755 -o www-data -g www-data /var/www/htmlmkdir -p <dir> && cp <files> <dir>/ — Erstellt das Zielverzeichnis und kopiert Dateien hinein.
mkdir -p /backup/2024 && cp *.sql /backup/2024/for d in <list>; do mkdir -p "$d"; done — Erstellt Verzeichnisse aus einer dynamischen Liste oder Variablen.
for d in dev staging prod; do mkdir -p "/deploy/$d/releases"; done Fazit
mkdir ist eines der grundlegendsten Kommandos überhaupt, gewinnt aber durch zwei Optionen enorm an Komfort: -p legt fehlende Elternverzeichnisse an und bleibt still, wenn das Verzeichnis schon existiert (perfekt für idempotente Skripte), und -m setzt die Berechtigungen direkt beim Anlegen, sodass keine sensible Race-Condition zwischen mkdir und einem nachfolgenden chmod entsteht. In Kombination mit Brace-Expansion baust du komplette Projektgerüste mit einem einzigen Befehl. Für Wegwerf-Arbeitsverzeichnisse greif zu mktemp -d statt zu vorhersagbaren Namen in /tmp.
Weiterführende Links
- ubuntuusers-Wiki: mkdir – deutschsprachige Erklärung mit Beispielen
- GNU coreutils: mkdir invocation – offizielle Referenz aller Optionen (englisch)