mkdir
Создать директорию (одну или несколько, включая вложенные)
Описание
mkdir (от make directory) — одна из самых простых и часто используемых команд Unix/Linux.
Она создаёт новые директории в файловой системе. Команда присутствует во всех POSIX-совместимых системах
с самых ранних версий Unix и не претерпела значительных изменений за десятилетия.
Основной сценарий использования — создание структуры каталогов для проекта, временных рабочих директорий,
вложенных путей за одну операцию. Благодаря флагу -p команда идемпотентна: её можно вызывать
в скриптах без проверки существования директории — если директория уже есть, ошибки не возникнет.
Флаг -m позволяет сразу задать права доступа при создании, что избавляет от необходимости
отдельного вызова chmod. В скриптах развёртывания и CI/CD mkdir -p — стандартная
идиома для подготовки рабочих каталогов.
Синтаксис
- ОПЦИИ — необязательные флаги (см. раздел ниже)
- ДИРЕКТОРИЯ — один или несколько путей к создаваемым директориям; пути разделяются пробелами
Можно создать несколько директорий одной командой:
Или вложенную структуру с помощью флага -p:
Флаги и опции
| Флаг | Описание | Пример |
|---|---|---|
-p, --parents |
Создать все промежуточные директории; не выдавать ошибку если директория уже существует | mkdir -p a/b/c/d |
-m, --mode=MODE |
Установить права доступа в формате chmod (числовой или символьный) | mkdir -m 755 public |
-v, --verbose |
Выводить сообщение для каждой созданной директории | mkdir -v newdir |
-Z |
Установить контекст SELinux по умолчанию (только в системах с SELinux) | mkdir -Z secure_dir |
--context=CTX |
Установить указанный контекст SELinux/SMACK для созданной директории | mkdir --context=system_u:object_r:tmp_t:s0 dir |
--help |
Показать справку по команде и выйти | mkdir --help |
--version |
Показать версию утилиты и выйти | mkdir --version |
-p -v |
Комбинация: создать вложенную структуру с подробным выводом | mkdir -pv a/b/c |
Паттерны использования
Создать одну директорию
mkdir myproject
Простейший вариант — создать директорию в текущем каталоге.
Создать несколько директорий сразу
mkdir src tests docs assets
Все директории создаются в текущем каталоге одной командой.
Создать вложенную структуру
mkdir -p project/src/components
mkdir -p project/{src,tests,docs}
С флагом -p создаются все промежуточные уровни. Bash-раскрытие фигурных скобок позволяет создать несколько веток одновременно.
Создать с заданными правами доступа
mkdir -m 700 private_data mkdir -m 755 public_html
Права задаются в восьмеричной нотации: 700 — только владелец, 755 — чтение/выполнение для всех.
Развёртывание структуры проекта
mkdir -p myapp/{bin,lib,etc,var/log,tmp}
mkdir -p myapp/src/{models,views,controllers}
Bash-раскрытие скобок создаёт целое дерево директорий одной командой. Идеально для скриптов инициализации.
Создать с подробным выводом (отладка скриптов)
mkdir -pv /opt/myapp/logs # mkdir: created directory '/opt/myapp' # mkdir: created directory '/opt/myapp/logs'
Флаг -v помогает отследить, какие именно директории были созданы — полезно при отладке установочных скриптов.
Советы и предупреждения
Флаг
-p делает команду идемпотентной — скрипт не упадёт с ошибкой, если директория уже существует.
Это особенно важно в CI/CD пайплайнах и установочных скриптах, которые могут запускаться повторно.
Используйте фигурные скобки для создания нескольких вложенных путей:
mkdir -p project/{src/{models,views},tests,docs} создаст сразу 5 директорий.
Это гораздо компактнее, чем несколько вызовов mkdir.
Без флага
-m новая директория получает права, определённые текущей маской umask.
Обычно это 755 (umask 022). Проверить текущую маску: umask.
Имена директорий с пробелами нужно заключать в кавычки или экранировать:
mkdir "my project" или mkdir my\ project.
Без кавычек mkdir my project создаст ДВЕ отдельные директории my и project.
При совместном использовании
-m и -p указанные права применяются только
к финальной директории. Промежуточные директории создаются с правами по умолчанию (umask).
Если нужны права на все уровни — устанавливайте их отдельно через chmod -R.