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 projects

mkdir <dir1> <dir2> <dir3> — Erstellt mehrere Verzeichnisse auf einmal.

mkdir css js images

mkdir -v <directory> — Ausführlicher Modus. Gibt für jedes erstellte Verzeichnis eine Meldung aus.

mkdir -v logs backups tmp

Elternverzeichnisse

mkdir -p <path/to/directory> — Erstellt fehlende Elternverzeichnisse mit. Kein Fehler, wenn das Verzeichnis bereits existiert.

mkdir -p /var/www/html/assets/css

mkdir -p <dir1>/sub1 <dir2>/sub2 — Erstellt mehrere verschachtelte Verzeichnisbäume auf einmal.

mkdir -p src/components src/utils src/hooks

mkdir -pv <path/to/directory> — Erstellt Elternverzeichnisse mit ausführlicher Ausgabe jedes angelegten Verzeichnisses.

mkdir -pv /opt/app/config/ssl

Berechtigungen

mkdir -m <mode> <directory> — Erstellt ein Verzeichnis mit bestimmten Berechtigungen (oktaler Modus).

mkdir -m 755 /var/www/html

mkdir -m 700 <directory> — Erstellt ein privates Verzeichnis. Nur der Eigentümer hat Zugriff.

mkdir -m 700 ~/.ssh

mkdir -m 1777 <directory> — Erstellt ein Verzeichnis mit Sticky-Bit. Nutzer können nur ihre eigenen Dateien löschen.

mkdir -m 1777 /tmp/shared

mkdir -m 2775 <directory> — Erstellt ein Verzeichnis mit setgid. Neue Dateien erben die Gruppe des Verzeichnisses.

mkdir -m 2775 /var/www/shared

mkdir -pm <mode> <path/to/directory> — Erstellt verschachtelte Verzeichnisse mit bestimmten Berechtigungen auf dem letzten Verzeichnis.

mkdir -pm 700 ~/.config/app/secrets

Brace-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 $TMPDIR

mktemp -d -t <template> — Erstellt ein temporäres Verzeichnis mit eigenem Namens-Präfix.

mktemp -d -t myapp-XXXXXX

mktemp -d -p <directory> — Erstellt ein temporäres Verzeichnis innerhalb eines bestimmten Elternverzeichnisses.

mktemp -d -p /var/tmp

mktemp -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"' EXIT

Hä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/app

install -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/html

mkdir -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.

Verwandte Kommandos

  • touch – leere Dateien anlegen und Zeitstempel setzen
  • rm – Dateien und Verzeichnisse löschen
  • ls – Verzeichnisinhalte anzeigen