Как да създадете нова папка в 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Чести модели на разрешения:
| Осмичен режим | Символен | Типичен случай на употреба |
|---|---|---|
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 GUI (приложение Files)
За настолни инсталации на Ubuntu или сесии с отдалечен работен плот, приложението GNOME Files (Nautilus) предоставя графичен метод.
Стъпки:
- Отворете приложението Files от менюто Activities или дока
- Навигирайте до родителската директория, където искате новата папка
- Щракнете с десния бутон върху празна област в директорията
- Изберете New Folder от контекстното меню
- Въведете желаното име на папката и натиснете 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 след като пълният път е създаден.
