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 Хостинг или Dedicated сървър, установяването на последователна конвенция за директории от първия ден предотвратява технически дълг, който се натрупва бързо с нарастването на системата.

Предварителни изисквания

Преди да изпълните някоя от командите по-долу, потвърдете следното:

  • Имате достъп до терминал (локален или чрез 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) и нарушават много шел скриптове
  • Избягвайте специални символи: &, *, ?, !, | имат специфични за шела значения и причиняват непредвидимо поведение

Метод 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 или сървър с голям метал.

Метод 7: Създаване на директории чрез Ubuntu GUI (приложение Files)

За настолни инсталации на Ubuntu или сесии с отдалечен работен плот, приложението GNOME Files (Nautilus) предоставя графичен метод.

Стъпки:

  1. Отворете приложението Files от менюто Activities или дока
  2. Навигирайте до родителската директория, където искате новата папка
  3. Щракнете с десния бутон върху празна област в директорията
  4. Изберете New Folder от контекстното меню
  5. Въведете желаното име на папката и натиснете Enter

Клавишна комбинация: В Nautilus, Ctrl+Shift+N създава нова папка незабавно без използване на менюто с десен бутон.

Ограничения на GUI подхода:

  • Не може да задава персонализирани разрешения по време на създаване — изисква последващо действие в терминала или свойствата на файла
  • Не може да създава рекурсивни вложени структури в една операция
  • Не е налично в среди на сървъри без глава (огромното мнозинство от производствените Ubuntu сървъри работят без среда за работен плот)

За всяка сериозна работа по администриране на сървъри, методите от командния ред винаги са предпочитани.

Метод 8: Скриптиране на създаването на директории за автоматизация

В реалното администриране на сървъри директориите рядко се създават ръчно по една. Скриптове за осигуряване, конвейери за внедряване и инструменти за управление на конфигурации разчитат на автоматизирано създаване на директории.

Пример за основен шел скрипт:

#!/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 bit върху директории гарантира, че новите файлове наследяват групата на директорията, а не основната група на създаващия потребител — полезно за директории на съвместни проекти

Пример — защитена споделена директория на проект:

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. Въпреки това, интервалите в имената на директории са силно обезкуражени на сървъри, защото изискват екраниране във всяка следваща команда и нарушават много шел скриптове и конфигурации на приложения.

Защо 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
За начало