Як створити нову папку в 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-скриптів - Уникайте спеціальних символів:
&,*,?,!,|мають специфічні для 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 або bare-metal сервері.
Метод 7: Створення директорій через графічний інтерфейс Ubuntu (застосунок Files)
Для настільних інсталяцій Ubuntu або сесій віддаленого робочого столу застосунок GNOME Files (Nautilus) надає графічний метод.
Кроки:
- Відкрийте застосунок Files з меню Activities або панелі задач
- Перейдіть до батьківської директорії, де ви хочете створити нову папку
- Клацніть правою кнопкою миші на порожній ділянці в директорії
- Виберіть New Folder з контекстного меню
- Введіть бажану назву папки та натисніть Enter
Комбінація клавіш: У Nautilus Ctrl+Shift+N миттєво створює нову папку без використання контекстного меню.
Обмеження графічного підходу:
- Неможливо встановити власні дозволи під час створення — потрібна подальша дія в терміналі або властивостях файлу
- Неможливо створити рекурсивні вкладені структури за одну операцію
- Недоступно в безголових серверних середовищах (переважна більшість виробничих Ubuntu-серверів працює без середовища робочого столу)
Для будь-якої серйозної роботи з адміністрування серверів методи командного рядка завжди є кращими.
Метод 8: Скриптування створення директорій для автоматизації
У реальному адмініструванні серверів директорії рідко створюються вручну по одній. Скрипти налаштування, конвеєри розгортання та інструменти управління конфігурацією — всі вони покладаються на автоматизоване створення директорій.
Приклад базового 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 Сертифікатів та налаштування вашого Email Хостингу.
Перевірка створення директорій
Після створення директорій завжди перевіряйте результат перед виконанням залежних операцій.
Список з детальними дозволами:
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 Control Panels користувачі веб-сервера (зазвичай
www-dataабоnginx) повинні мати дозвіл на виконання для кожної директорії в шляху кореня документів — не лише для кінцевої директорії
FAQ
У чому різниця між 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 після створення повного шляху.
