PQ
PQ.Hosting

Валюта

Команда mkdir в Linux: создание директорий, флаги и права доступа

Автор
PQ
25 февраля 2026
4 мин чтения
20 просмотров

mkdir расшифровывается как make directory. Команда делает ровно одно — создаёт директории. Но несколько флагов и нюансов с правами доступа делают её существенно полезнее, чем кажется на первый взгляд.

Синтаксис

mkdir [опции] имя_директории

Создать одну директорию в текущем каталоге:

mkdir logs

Создать по абсолютному пути:

mkdir /var/www/myapp

Флаг -p: создание вложенных директорий

Самый важный флаг. Без него mkdir не создаст директорию, если родительский каталог не существует — выдаст ошибку.

mkdir projects/backend/api

Если projects или backend не существуют — команда упадёт с ошибкой No such file or directory.

С флагом -p создаётся вся цепочка сразу:

mkdir -p projects/backend/api

Если промежуточные директории уже есть — ошибки не будет, команда просто продолжит. Поэтому -p безопасно использовать в скриптах, не проверяя заранее, существует ли путь.

Создание нескольких независимых путей одной командой:

mkdir -p /opt/myapp/{logs,config,data,tmp}

Фигурные скобки разворачивает bash, а не mkdir — это называется brace expansion. Результат: четыре директории внутри /opt/myapp/ одной командой.

Флаг -m: права доступа при создании

По умолчанию mkdir создаёт директорию с правами 755 (rwxr-xr-x) — владелец может всё, остальные только читают и переходят. Это определяется значением umask в системе.

Флаг -m задаёт права сразу при создании, не требуя отдельного chmod:

mkdir -m 700 private

Директория private будет доступна только владельцу — никто другой не сможет ни прочитать содержимое, ни войти.

mkdir -m 755 public_html

Стандартные права для веб-директорий: владелец пишет, остальные только читают.

mkdir -m 1777 shared

Sticky bit (1 в начале) — классические права для общих директорий вроде /tmp. Каждый может создавать файлы, но удалить чужой не может.

Флаг -m не действует на промежуточные директории, созданные вместе с -p — они получат стандартные права по umask. Права будут применены только к конечной директории.

Создание нескольких директорий

Передать несколько имён через пробел — mkdir создаст все сразу:

mkdir css js images fonts

С абсолютными путями:

mkdir /var/log/nginx /var/log/php /var/log/mysql

С brace expansion для создания вложенной структуры:

mkdir -p project/{src,dist,tests,docs}

Результат — четыре директории внутри project/. Можно делать и вложеннее:

mkdir -p project/{src/{components,utils,hooks},dist,tests/{unit,integration}}

Флаг -v: подробный вывод

По умолчанию mkdir работает молча. Флаг -v выводит сообщение о каждой созданной директории:

mkdir -pv /opt/app/{logs,config,data}

Вывод:

mkdir: created directory '/opt/app'
mkdir: created directory '/opt/app/logs'
mkdir: created directory '/opt/app/config'
mkdir: created directory '/opt/app/data'

Полезно в скриптах, когда нужно видеть, что именно было создано.

Права доступа и владелец

mkdir создаёт директорию от имени текущего пользователя — он становится её владельцем. Для создания директорий в системных путях нужны права root:

sudo mkdir /etc/myapp

После создания директорию часто нужно передать другому пользователю или сервису:

sudo mkdir /var/www/myapp
sudo chown www-data:www-data /var/www/myapp

Или создать и сразу задать права одной цепочкой:

sudo mkdir -m 750 /etc/myapp && sudo chown root:myapp /etc/myapp

Типичные ошибки

mkdir: cannot create directory 'path': No such file or directory Промежуточные директории не существуют. Решение: добавить флаг -p.

mkdir: cannot create directory 'path': File exists Директория уже есть. С флагом -p такой ошибки не будет — команда проигнорирует существующие пути.

mkdir: cannot create directory 'path': Permission denied Нет прав на запись в родительскую директорию. Нужно либо sudo, либо проверить, в правильном ли месте создаётся директория.

Полезные комбинации

Создать директорию и сразу перейти в неё

mkdir -p /opt/myapp && cd /opt/myapp

&& выполняет cd только если mkdir завершился успешно.

Создать временную директорию с уникальным именем

Для временных данных лучше mktemp — он гарантирует уникальное имя:

tmpdir=$(mktemp -d)
echo "Временная директория: $tmpdir"

Создать структуру проекта одной командой

mkdir -p myproject/{src/{models,controllers,views},tests,config,logs,docs}

Проверить, существует ли директория, перед созданием

В скриптах стандартный паттерн:

[ -d /opt/myapp ] || mkdir -p /opt/myapp

Или через -p, который сам обрабатывает существующие пути.

Шпаргалка

Команда Что делает
mkdir dir Создать директорию в текущем каталоге
mkdir /path/to/dir Создать по абсолютному пути
mkdir -p a/b/c Создать всю вложенную цепочку
mkdir dir1 dir2 dir3 Создать несколько директорий
mkdir -p project/{a,b,c} Создать несколько вложенных сразу
mkdir -m 700 dir Создать с конкретными правами
mkdir -pv path Создать с подробным выводом
sudo mkdir /etc/dir Создать системную директорию

Итог

Для большинства задач хватает mkdir -p — создаёт весь путь сразу и не падает с ошибкой если путь уже существует. Флаг -m экономит отдельный вызов chmod, когда права важны с момента создания.

Всё это работает одинаково на любом Linux-сервере. Подобрать VPS можно в каталоге PQ.Hosting.

Поделиться статьей

Похожие статьи