linux files

mkdir

Создать директорию (одну или несколько, включая вложенные)

Описание

mkdir (от make directory) — одна из самых простых и часто используемых команд Unix/Linux. Она создаёт новые директории в файловой системе. Команда присутствует во всех POSIX-совместимых системах с самых ранних версий Unix и не претерпела значительных изменений за десятилетия.

Основной сценарий использования — создание структуры каталогов для проекта, временных рабочих директорий, вложенных путей за одну операцию. Благодаря флагу -p команда идемпотентна: её можно вызывать в скриптах без проверки существования директории — если директория уже есть, ошибки не возникнет.

Флаг -m позволяет сразу задать права доступа при создании, что избавляет от необходимости отдельного вызова chmod. В скриптах развёртывания и CI/CD mkdir -p — стандартная идиома для подготовки рабочих каталогов.

Синтаксис

mkdir [ОПЦИИ] ДИРЕКТОРИЯ...

Можно создать несколько директорий одной командой:

mkdir dir1 dir2 dir3

Или вложенную структуру с помощью флага -p:

mkdir -p project/src/components

Флаги и опции

Флаг Описание Пример
-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 в скриптах всегда
Флаг -p делает команду идемпотентной — скрипт не упадёт с ошибкой, если директория уже существует. Это особенно важно в CI/CD пайплайнах и установочных скриптах, которые могут запускаться повторно.
Совет: Bash-раскрытие скобок
Используйте фигурные скобки для создания нескольких вложенных путей: 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
При совместном использовании -m и -p указанные права применяются только к финальной директории. Промежуточные директории создаются с правами по умолчанию (umask). Если нужны права на все уровни — устанавливайте их отдельно через chmod -R.