15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати
16.11.2023

Як створити нову папку в 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

Поширені шаблони дозволів:

Вісімковий режимСимвольнийТиповий сценарій використання
700rwx------Приватні дані користувача, директорії SSH-ключів
750rwxr-x---Директорії застосунків, спільні для групи
755rwxr-xr-xПублічні кореневі директорії веб-документів
770rwxrwx---Спільні директорії команди
777rwxrwxrwxТимчасовий робочий простір (уникайте у виробництві)

Приклад — створення захищеної директорії для 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) надає графічний метод.

Кроки:

  1. Відкрийте застосунок Files з меню Activities або панелі задач
  2. Перейдіть до батьківської директорії, де ви хочете створити нову папку
  3. Клацніть правою кнопкою миші на порожній ділянці в директорії
  4. Виберіть New Folder з контекстного меню
  5. Введіть бажану назву папки та натисніть 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 після створення повного шляху.

15%

Збережіть 15% на всі хостинг-послуги

Перевірте свої навички і отримайте Знижку на будь-який план хостингу

Використовуй код:

Skills
Почати