Как создать новую папку в Ubuntu: полное руководство по управлению директориями
Создание новой папки в Ubuntu выполняется преимущественно с помощью команды mkdir в терминале. Базовый синтаксис — mkdir folder_name, что мгновенно создаёт директорию в вашем текущем рабочем расположении. Для вложенных структур mkdir -p parent/child/grandchild создаёт весь путь за одну операцию, даже если промежуточные директории ещё не существуют.
Это руководство выходит далеко за рамки основ. Оно охватывает все практические методы создания директорий в Ubuntu — от простого создания одной папки до рекурсивных структур, создания с учётом прав доступа и готовых к автоматизации шаблонов скриптов, используемых в реальных производственных серверных средах.
Почему правильная структура директорий важна на Linux-сервере
На любом Ubuntu-сервере файловая система является основой каждой операции. Плохо организованные директории создают каскадные проблемы: нарушенные пути приложений, неправильно настроенные иерархии прав доступа, сбои заданий резервного копирования и уязвимости безопасности, вызванные директориями с открытой записью, размещёнными в чувствительных местах.
Дисциплинированный подход к управлению директориями напрямую влияет на:
- Наследование прав доступа — дочерние директории наследуют права родительских, если явно не переопределены, что делает начальные структурные решения критически важными
- Область резервного копирования — инструменты резервного копирования, такие как
rsyncиtar, работают с деревьями директорий, поэтому логическая группировка снижает сложность резервного копирования - Конфигурация служб — веб-серверы (Apache, Nginx), базы данных и среды выполнения приложений зависят от предсказуемых, чётко определённых путей директорий
- Аудит и соответствие требованиям — структурированные пути значительно ускоряют корреляцию журналов и криминалистический анализ
Если вы управляете средой VPS Хостинга или Выделенным сервером, установление последовательного соглашения о директориях с первого дня предотвращает технический долг, который быстро накапливается по мере роста системы.
Предварительные требования
Перед выполнением любой из приведённых ниже команд убедитесь в следующем:
- У вас есть доступ к терминалу (локальному или через SSH)
- Ваша учётная запись пользователя имеет право на запись в целевое расположение
- Для директорий системного уровня (например, в
/etc/или/var/) у вас есть привилегииsudo - Версия Ubuntu: эти команды универсально применимы к Ubuntu 18.04, 20.04, 22.04 и 24.04 LTS
Чтобы в любой момент проверить текущую рабочую директорию, выполните:
pwdМетод 1: Базовое создание директории с помощью mkdir
Команда mkdir (make directory) — стандартная утилита POSIX для создания директорий. Она доступна в каждом дистрибутиве Linux без установки.
Синтаксис:
mkdir directory_nameПример:
mkdir project_filesЭто создаёт директорию с именем project_files в вашем текущем расположении. При успешном выполнении команда не выводит никакого результата — это стандартное поведение Unix. Для подтверждения создания:
ls -laСоглашения об именовании для использования в производственной среде:
- Используйте строчные буквы и символы подчёркивания или дефисы:
web_assets,backup-2024 - Избегайте пробелов в именах директорий — они требуют экранирования (
mkdir "my folder"илиmkdir my folder) и нарушают работу многих shell-скриптов - Избегайте специальных символов:
&,*,?,!,|имеют специфические для оболочки значения и вызывают непредсказуемое поведение
Метод 2: Создание директории по конкретному абсолютному пути
Вместо того чтобы сначала переходить в целевое расположение, вы можете передать полный абсолютный путь непосредственно в mkdir. Это предпочтительный подход в скриптах и автоматизированном развёртывании.
Синтаксис:
mkdir /full/path/to/new_directoryПример:
mkdir /var/www/html/myappВажное ограничение: Эта команда завершится ошибкой, если какая-либо промежуточная директория в пути ещё не существует. Например, если /var/www/html/ не существует, приведённая выше команда вернёт:
mkdir: cannot create directory '/var/www/html/myapp': No such file or directoryРешением является флаг -p, рассмотренный в Методе 3.
Использование относительных путей также допустимо и зачастую более читаемо в интерактивных сессиях:
mkdir ../sibling_directory
mkdir ./subdirectoryМетод 3: Рекурсивное создание вложенных директорий с помощью -p
Флаг -p (parents) — один из наиболее важных с операционной точки зрения параметров в mkdir. Он указывает команде создать все отсутствующие промежуточные директории в указанном пути и подавляет ошибку, которая обычно возникает, если целевая директория уже существует.
Синтаксис:
mkdir -p parent_directory/child_directory/grandchild_directoryПример:
mkdir -p /var/www/html/myapp/logs/archiveЕсли /var/www/html/myapp/ не существует, эта единственная команда создаёт всю цепочку: myapp, затем logs внутри неё, затем archive внутри той.
Критический производственный сценарий использования — корневые директории документов веб-сервера:
mkdir -p /var/www/vhosts/example.com/{public_html,logs,ssl,tmp}Этот синтаксис расширения фигурных скобок (подробно рассмотренный в Методе 6) в сочетании с -p является стандартным шаблоном для развёртывания новых сред виртуальных хостов в одной команде.
Флаг -p также предотвращает ошибки в идемпотентных скриптах. Если вы выполните одну и ту же команду mkdir -p дважды, второе выполнение ничего не делает и завершается с кодом 0. Без -p второй запуск вернёт ошибку, нарушая работу любого скрипта, использующего set -e (выход при ошибке).
Метод 4: Одновременное создание нескольких директорий
mkdir принимает несколько аргументов, создавая все указанные директории за один вызов.
Синтаксис:
mkdir dir1 dir2 dir3Пример:
mkdir assets uploads cache sessionsЭто создаёт четыре отдельные директории в текущем расположении. Все директории создаются на одном уровне — это не вложенная структура.
Сочетание с абсолютными путями:
mkdir /srv/app/modules /srv/app/config /srv/app/dataСочетание с -p для нескольких вложенных путей:
mkdir -p /srv/project/frontend/src /srv/project/backend/src /srv/project/docsЭто особенно полезно при создании структуры директорий нового приложения перед развёртыванием.
Метод 5: Создание директорий с конкретными правами доступа с помощью -m
По умолчанию mkdir применяет права доступа на основе значения umask системы. На большинстве систем Ubuntu umask по умолчанию равен 0022, что означает, что новые директории получают права 755 (владелец: чтение/запись/выполнение; группа: чтение/выполнение; остальные: чтение/выполнение).
Во многих серверных сценариях права доступа по умолчанию либо слишком разрешительны, либо слишком ограничительны. Флаг -m позволяет задать точные права доступа во время создания с использованием восьмеричной нотации.
Синтаксис:
mkdir -m octal_mode directory_nameРаспространённые шаблоны прав доступа:
| Восьмеричный режим | Символьный | Типичный сценарий использования |
|---|---|---|
700 | rwx------ | Личные данные пользователя, директории ключей SSH |
750 | rwxr-x--- | Директории приложений, общие для группы |
755 | rwxr-xr-x | Публичные корневые директории документов веб-сервера |
770 | rwxrwx--- | Общие директории команды |
777 | rwxrwxrwx | Временное рабочее пространство (избегайте в производственной среде) |
Пример — создание защищённой директории для ключей SSH:
mkdir -m 700 ~/.sshПример — создание корневой директории веб-сервера с правильными правами доступа:
mkdir -m 755 /var/www/html/newsiteСочетание -m и -p:
mkdir -p -m 750 /srv/app/config/secretsОбратите внимание, что при использовании -p режим применяется только к конечной директории в пути, а не к промежуточным директориям, которые создаются. Промежуточные директории получают права доступа по умолчанию на основе umask. Если вам нужен точный контроль над всеми уровнями, создавайте каждый уровень отдельно с явными флагами -m или используйте chmod после создания.
Метод 6: Расширение фигурных скобок для сложных деревьев директорий
Расширение фигурных скобок — это функция оболочки Bash, а не параметр mkdir, которая генерирует несколько аргументов из одного шаблона. В сочетании с mkdir -p это наиболее эффективный способ создания сложных иерархий директорий.
Базовое расширение фигурных скобок:
mkdir -p project/{src,tests,docs,build}Это раскрывается в:
mkdir -p project/src project/tests project/docs project/buildМногоуровневое расширение фигурных скобок:
mkdir -p app/{frontend/{components,pages,styles},backend/{controllers,models,routes},shared/utils}Это создаёт следующую структуру:
app/
├── frontend/
│ ├── components/
│ ├── pages/
│ └── styles/
├── backend/
│ ├── controllers/
│ ├── models/
│ └── routes/
└── shared/
└── utils/Этот шаблон является стандартной практикой при инициализации новых репозиториев приложений или развёртывании директорий приложений на новом VPS с cPanel или выделенном сервере.
Метод 7: Создание директорий через графический интерфейс Ubuntu (приложение «Файлы»)
Для настольных установок Ubuntu или сессий удалённого рабочего стола приложение GNOME «Файлы» (Nautilus) предоставляет графический метод.
Шаги:
- Откройте приложение Файлы из меню «Действия» или панели задач
- Перейдите в родительскую директорию, где вы хотите создать новую папку
- Щёлкните правой кнопкой мыши на пустой области внутри директории
- Выберите Новая папка из контекстного меню
- Введите желаемое имя папки и нажмите Enter
Сочетание клавиш: В Nautilus Ctrl+Shift+N мгновенно создаёт новую папку без использования контекстного меню.
Ограничения графического подхода:
- Невозможно задать пользовательские права доступа во время создания — требуется последующее действие в терминале или свойствах файла
- Невозможно создать рекурсивные вложенные структуры за одну операцию
- Недоступно в безголовых серверных средах (подавляющее большинство производственных серверов Ubuntu работают без среды рабочего стола)
Для любой серьёзной работы по администрированию серверов всегда предпочтительны методы командной строки.
Метод 8: Скриптовое создание директорий для автоматизации
В реальном администрировании серверов директории редко создаются вручную по одной. Скрипты развёртывания, конвейеры CI/CD и инструменты управления конфигурацией — все они полагаются на автоматизированное создание директорий.
Пример базового shell-скрипта:
#!/bin/bash
set -e
BASE_DIR="/var/www/vhosts"
DOMAIN="example.com"
directories=(
"$BASE_DIR/$DOMAIN/public_html"
"$BASE_DIR/$DOMAIN/logs"
"$BASE_DIR/$DOMAIN/ssl"
"$BASE_DIR/$DOMAIN/tmp"
"$BASE_DIR/$DOMAIN/backup"
)
for dir in "${directories[@]}"; do
mkdir -p "$dir"
echo "Created: $dir"
done
# Set ownership to web server user
chown -R www-data:www-data "$BASE_DIR/$DOMAIN"
chmod -R 755 "$BASE_DIR/$DOMAIN"
echo "Directory structure for $DOMAIN provisioned successfully."Ключевые практики написания скриптов:
- Всегда используйте
set -eдля прерывания при любой ошибке - Заключайте все переменные в кавычки (
"$dir"), чтобы безопасно обрабатывать пути с пробелами - Комбинируйте
mkdir -pсchownиchmodв одном скрипте, чтобы обеспечить правильность прав доступа сразу после создания - Используйте массивы для списков директорий, чтобы скрипты оставались читаемыми и удобными в сопровождении
Этот подход необходим при управлении несколькими виртуальными хостами, развёртывании приложений в разных средах или автоматизации настройки сервера с помощью таких инструментов, как Ansible или скрипты развёртывания на основе Bash.
Сравнение: параметры mkdir и их сценарии использования
| Команда | Создаёт промежуточные директории | Задаёт права доступа | Несколько директорий | Идемпотентна |
|---|---|---|---|---|
mkdir dir | Нет | Нет (использует umask) | Нет | Нет |
mkdir -p path/to/dir | Да | Нет (использует umask) | Нет | Да |
mkdir -m 755 dir | Нет | Да | Нет | Нет |
mkdir -p -m 750 path/dir | Да | Да (только конечная директория) | Нет | Да |
mkdir dir1 dir2 dir3 | Нет | Нет (использует umask) | Да | Нет |
mkdir -p {a,b,c}/sub | Да | Нет (использует umask) | Да | Да |
Распространённые ошибки и способы их устранения
Ошибка: Permission denied
mkdir: cannot create directory '/etc/myapp': Permission deniedПричина: Вы пытаетесь выполнить запись в директорию, принадлежащую системе, без повышенных привилегий.
Решение: Добавьте sudo в начало:
sudo mkdir /etc/myappОшибка: No such file or directory
mkdir: cannot create directory '/srv/app/config': No such file or directoryПричина: Одна или несколько промежуточных директорий в пути не существуют.
Решение: Используйте флаг -p:
mkdir -p /srv/app/configОшибка: File exists
mkdir: cannot create directory 'mydir': File existsПричина: Директория или файл с таким именем уже существует.
Решение: Используйте -p для подавления этой ошибки, когда существующий путь является директорией, или выберите другое имя.
Скрытый сбой в скриптах: Если mkdir завершается ошибкой, а ваш скрипт не использует set -e или не проверяет коды выхода, последующие операции могут продолжиться с несуществующим путём, вызывая непредсказуемые сбои. Всегда проверяйте критически важное создание директорий:
mkdir -p /srv/app/data || { echo "Failed to create data directory"; exit 1; }Соображения безопасности при создании директорий
Права доступа к директориям — это первая линия защиты в безопасности сервера. Ряд серьёзных уязвимостей напрямую связан с неправильными правами доступа к директориям:
- Директории с открытой записью для всех (
777) позволяют любому пользователю системы записывать, изменять или удалять файлы — критический риск на общем хостинге или многопользовательских серверах - Неправильное владение веб-директориями может позволить эксплойтам веб-приложений записывать вредоносные файлы за пределами предполагаемого корня документов
- Sticky bit (
chmod +t) на общих директориях (например,/tmp) предотвращает удаление пользователями файлов, принадлежащих другим — всегда устанавливайте его на общих директориях с правом записи - Бит SetGID на директориях обеспечивает наследование новыми файлами группы директории, а не основной группы создающего пользователя — полезно для совместных проектных директорий
Пример — защищённая общая проектная директория:
mkdir -p /srv/shared/project
chown root:developers /srv/shared/project
chmod 2775 /srv/shared/project # SetGID + rwxrwxr-xПри размещении веб-приложений, доменов с SSL или почтовых служб правильные права доступа к директориям неотделимы от уровня безопасности конфигурации SSL-сертификатов и настройки почтового хостинга.
Проверка создания директорий
После создания директорий всегда проверяйте результат перед выполнением зависимых операций.
Список с подробными правами доступа:
ls -la /path/to/parent/Проверка существования конкретной директории (полезно в скриптах):
[ -d /srv/app/config ] && echo "Directory exists" || echo "Directory missing"Просмотр полной древовидной структуры (требует пакета tree):
sudo apt install tree -y
tree /srv/app/Проверка использования inode — на серверах с большим количеством мелких файлов исчерпание inode может предотвратить создание директорий даже при наличии свободного дискового пространства:
df -i /srv/Если использование inode близко к 100%, вы не можете создавать новые директории или файлы независимо от доступного дискового пространства. Это распространённая производственная проблема на серверах, хранящих большое количество мелких файлов, например на почтовых серверах или в директориях PHP-сессий.
Практическая матрица решений: какой метод использовать
| Сценарий | Рекомендуемая команда |
|---|---|
| Одна директория, интерактивная сессия | mkdir dirname |
| Директория по известному абсолютному пути | mkdir /full/path/dirname |
| Вложенный путь, некоторые родительские директории могут не существовать | mkdir -p /full/nested/path |
| Несколько одноуровневых директорий одновременно | mkdir dir1 dir2 dir3 |
| Сложное многоуровневое дерево в одной команде | mkdir -p root/{a,b,c}/{sub1,sub2} |
| Директория с нестандартными правами доступа | mkdir -m 750 dirname |
| Скрипт автоматизированного развёртывания | mkdir -p с chown/chmod последовательно |
| Идемпотентный шаг конвейера развёртывания | mkdir -p (безопасен для повторного запуска) |
Ключевые технические выводы
mkdir -p— наиболее безопасный вариант по умолчанию для любого скриптового или автоматизированного создания директорий — он идемпотентен и обрабатывает отсутствующие промежуточные пути- Никогда не используйте права
777для производственных директорий; предпочитайте755для публичных путей и750или700для конфиденциальных данных - Флаг
-mвmkdirзадаёт права доступа только для конечной директории при использовании с-p— используйтеchmod -Rили отдельные вызовыmkdirдля полного контроля - Расширение фигурных скобок — это функция Bash, а не функция
mkdir— оно не будет работать в скриптах/bin/sh, если оболочкой не является Bash - Всегда проверяйте доступность inode (
df -i) на файловых системах с высокой плотностью файлов перед массовым созданием директорий - Комбинируйте создание директорий с немедленным назначением
chownв скриптах развёртывания, чтобы избежать окна, когда директории существуют с неправильным владельцем - В средах панелей управления VPS пользователи веб-сервера (обычно
www-dataилиnginx) должны иметь право на выполнение для каждой директории в пути корня документов — не только для конечной директории
Часто задаваемые вопросы
В чём разница между mkdir folder и mkdir -p folder?
mkdir folder создаёт одну директорию и завершается ошибкой, если какая-либо часть пути не существует или если директория уже существует. mkdir -p folder создаёт все отсутствующие промежуточные директории и завершается без ошибки, если цель уже существует, что делает его безопасным для скриптов и повторного выполнения.
Может ли mkdir создать директорию с пробелами в имени?
Да. Заключите имя в кавычки: mkdir "my project folder" или экранируйте пробелы: mkdir my project folder. Однако пробелы в именах директорий настоятельно не рекомендуются на серверах, поскольку они требуют экранирования в каждой последующей команде и нарушают работу многих shell-скриптов и конфигураций приложений.
Почему mkdir завершается ошибкой «Permission denied» даже с sudo?
Обычно это происходит, когда целевая файловая система смонтирована только для чтения, когда политики SELinux или AppArmor ограничивают запись по этому пути, или когда путь находится на сетевой файловой системе с ограничениями на стороне сервера. Проверьте параметры монтирования с помощью mount | grep /target/path и просмотрите журналы AppArmor с помощью sudo aa-status.
Как создать директорию и сразу задать её владельца и группу?
mkdir сам по себе не задаёт владельца — используйте chown сразу после: mkdir -p /srv/app && chown www-data:www-data /srv/app. В одном конвейере: install -d -m 755 -o www-data -g www-data /srv/app — команда install создаёт директории с владельцем, группой и режимом за один шаг.
Что происходит с правами доступа при использовании mkdir -p с несколькими новыми уровнями?
Только конечная (самая глубокая) директория получает режим, указанный с помощью -m. Все промежуточные директории, которые создаются заново, получают права доступа на основе текущего umask. Если требуются одинаковые права доступа на всех уровнях, либо создавайте каждый уровень отдельно с явными флагами -m, либо применяйте chmod -R после создания полного пути.
