Jak utworzyć nowy folder w Ubuntu: Kompletny przewodnik zarządzania katalogami
Tworzenie nowego folderu w Ubuntu odbywa się przede wszystkim za pomocą polecenia mkdir w terminalu. Podstawowa składnia to mkdir folder_name, które natychmiast tworzy katalog w bieżącej lokalizacji roboczej. W przypadku zagnieżdżonych struktur mkdir -p parent/child/grandchild tworzy całą ścieżkę w jednej operacji, nawet jeśli katalogi pośrednie jeszcze nie istnieją.
Ten przewodnik wykracza daleko poza podstawy. Obejmuje każdą praktyczną metodę tworzenia katalogów w Ubuntu — od prostego tworzenia pojedynczego folderu po struktury rekurencyjne, udostępnianie z uwzględnieniem uprawnień oraz wzorce skryptów gotowych do automatyzacji, stosowane w rzeczywistych środowiskach serwerów produkcyjnych.
Dlaczego właściwa struktura katalogów ma znaczenie na serwerze Linux
Na każdym serwerze Ubuntu system plików jest podstawą każdej operacji. Źle zorganizowane katalogi powodują narastające problemy: uszkodzone ścieżki aplikacji, błędnie skonfigurowane hierarchie uprawnień, nieudane zadania tworzenia kopii zapasowych oraz luki w zabezpieczeniach spowodowane katalogami z możliwością zapisu przez wszystkich, umieszczonymi w newralgicznych lokalizacjach.
Zdyscyplinowane podejście do zarządzania katalogami bezpośrednio wpływa na:
- Dziedziczenie uprawnień — katalogi podrzędne dziedziczą uprawnienia nadrzędne, chyba że zostaną jawnie nadpisane, co sprawia, że początkowe decyzje dotyczące struktury są kluczowe
- Zakres kopii zapasowych — narzędzia do tworzenia kopii zapasowych, takie jak
rsyncitar, działają na drzewach katalogów, więc logiczne grupowanie zmniejsza złożoność kopii zapasowych - Konfiguracja usług — serwery WWW (Apache, Nginx), bazy danych i środowiska uruchomieniowe aplikacji zależą od przewidywalnych, dobrze zdefiniowanych ścieżek katalogów
- Audyt i zgodność — ustrukturyzowane ścieżki znacznie przyspieszają korelację logów i analizę kryminalistyczną
Jeśli zarządzasz środowiskiem VPS Hosting lub Serwerem Dedykowanym, ustanowienie spójnej konwencji katalogów od pierwszego dnia zapobiega długowi technicznemu, który narasta szybko wraz z rozwojem systemu.
Wymagania wstępne
Przed wykonaniem któregokolwiek z poniższych poleceń upewnij się, że:
- Masz dostęp do terminala (lokalnego lub przez SSH)
- Twoje konto użytkownika ma uprawnienia do zapisu w docelowej lokalizacji
- W przypadku katalogów systemowych (np. pod
/etc/lub/var/) masz uprawnieniasudo - Wersja Ubuntu: te polecenia mają zastosowanie uniwersalne do Ubuntu 18.04, 20.04, 22.04 i 24.04 LTS
Aby w dowolnym momencie sprawdzić bieżący katalog roboczy, uruchom:
pwdMetoda 1: Podstawowe tworzenie katalogów za pomocą mkdir
Polecenie mkdir (make directory) to standardowe narzędzie POSIX do tworzenia katalogów. Jest dostępne w każdej dystrybucji Linux bez instalacji.
Składnia:
mkdir directory_namePrzykład:
mkdir project_filesTworzy to katalog o nazwie project_files w bieżącej lokalizacji. Polecenie nie generuje żadnych danych wyjściowych w przypadku powodzenia — jest to standardowe zachowanie Unix. Aby potwierdzić utworzenie:
ls -laKonwencje nazewnictwa do stosowania w środowisku produkcyjnym:
- Używaj małych liter oraz podkreśleń lub myślników:
web_assets,backup-2024 - Unikaj spacji w nazwach katalogów — wymagają one stosowania znaków ucieczki (
mkdir "my folder"lubmkdir my folder) i psują wiele skryptów powłoki - Unikaj znaków specjalnych:
&,*,?,!,|mają specyficzne dla powłoki znaczenia i powodują nieprzewidywalne zachowanie
Metoda 2: Tworzenie katalogu pod określoną ścieżką bezwzględną
Zamiast najpierw przechodzić do docelowej lokalizacji, możesz przekazać pełną ścieżkę bezwzględną bezpośrednio do mkdir. Jest to preferowane podejście w skryptach i automatycznym udostępnianiu.
Składnia:
mkdir /full/path/to/new_directoryPrzykład:
mkdir /var/www/html/myappWażne ograniczenie: To polecenie zakończy się niepowodzeniem, jeśli którykolwiek katalog pośredni w ścieżce nie istnieje. Na przykład, jeśli /var/www/html/ nie istnieje, powyższe polecenie zwraca:
mkdir: cannot create directory '/var/www/html/myapp': No such file or directoryRozwiązaniem jest flaga -p, omówiona w Metodzie 3.
Używanie ścieżek względnych jest równie poprawne i często bardziej czytelne w sesjach interaktywnych:
mkdir ../sibling_directory
mkdir ./subdirectoryMetoda 3: Rekurencyjne tworzenie zagnieżdżonych katalogów za pomocą -p
Flaga -p (parents) jest jedną z najważniejszych operacyjnie opcji w mkdir. Instruuje polecenie, aby tworzyło wszystkie brakujące katalogi pośrednie w określonej ścieżce i pomija błąd, który normalnie wystąpiłby, gdyby docelowy katalog już istniał.
Składnia:
mkdir -p parent_directory/child_directory/grandchild_directoryPrzykład:
mkdir -p /var/www/html/myapp/logs/archiveJeśli /var/www/html/myapp/ nie istnieje, to pojedyncze polecenie tworzy cały łańcuch: myapp, następnie logs wewnątrz niego, a następnie archive wewnątrz tego.
Krytyczny przypadek użycia w produkcji — katalogi główne dokumentów serwera WWW:
mkdir -p /var/www/vhosts/example.com/{public_html,logs,ssl,tmp}Ta składnia rozwinięcia nawiasów klamrowych (omówiona szczegółowo w Metodzie 6) w połączeniu z -p jest standardowym wzorcem do udostępniania nowych środowisk wirtualnych hostów w jednym poleceniu.
Flaga -p zapobiega również błędom w skryptach idempotentnych. Jeśli uruchomisz to samo polecenie mkdir -p dwukrotnie, drugie wykonanie nic nie robi i kończy się poprawnie z kodem 0. Bez -p drugie uruchomienie zwróciłoby błąd, przerywając każdy skrypt używający set -e (wyjście przy błędzie).
Metoda 4: Jednoczesne tworzenie wielu katalogów
mkdir przyjmuje wiele argumentów, tworząc wszystkie określone katalogi w jednym wywołaniu.
Składnia:
mkdir dir1 dir2 dir3Przykład:
mkdir assets uploads cache sessionsTworzy to cztery oddzielne katalogi w bieżącej lokalizacji. Wszystkie katalogi są tworzone na tym samym poziomie — nie jest to struktura zagnieżdżona.
Łączenie ze ścieżkami bezwzględnymi:
mkdir /srv/app/modules /srv/app/config /srv/app/dataŁączenie z -p dla wielu zagnieżdżonych ścieżek:
mkdir -p /srv/project/frontend/src /srv/project/backend/src /srv/project/docsJest to szczególnie przydatne podczas tworzenia szkieletu nowej struktury katalogów aplikacji przed wdrożeniem.
Metoda 5: Tworzenie katalogów z określonymi uprawnieniami za pomocą -m
Domyślnie mkdir stosuje uprawnienia na podstawie wartości umask systemu. W większości systemów Ubuntu domyślna wartość umask wynosi 0022, co oznacza, że nowe katalogi otrzymują uprawnienia 755 (właściciel: odczyt/zapis/wykonanie; grupa: odczyt/wykonanie; pozostali: odczyt/wykonanie).
W wielu scenariuszach serwerowych domyślne uprawnienia są albo zbyt liberalne, albo zbyt restrykcyjne. Flaga -m pozwala ustawić dokładne uprawnienia w czasie tworzenia przy użyciu notacji ósemkowej.
Składnia:
mkdir -m octal_mode directory_nameTypowe wzorce uprawnień:
| Tryb ósemkowy | Symboliczny | Typowy przypadek użycia |
|---|---|---|
700 | rwx------ | Prywatne dane użytkownika, katalogi kluczy SSH |
750 | rwxr-x--- | Katalogi aplikacji współdzielone z grupą |
755 | rwxr-xr-x | Publiczne katalogi główne dokumentów WWW |
770 | rwxrwx--- | Współdzielone katalogi zespołowe |
777 | rwxrwxrwx | Tymczasowa przestrzeń robocza (unikaj w produkcji) |
Przykład — tworzenie bezpiecznego katalogu dla kluczy SSH:
mkdir -m 700 ~/.sshPrzykład — tworzenie katalogu głównego WWW z prawidłowymi uprawnieniami:
mkdir -m 755 /var/www/html/newsiteŁączenie -m i -p:
mkdir -p -m 750 /srv/app/config/secretsNależy pamiętać, że przy użyciu -p tryb jest stosowany tylko do ostatniego katalogu w ścieżce, a nie do żadnych tworzonych katalogów pośrednich. Katalogi pośrednie otrzymują domyślne uprawnienia oparte na umask. Jeśli potrzebujesz precyzyjnej kontroli nad wszystkimi poziomami, utwórz każdy poziom osobno z jawnymi flagami -m lub użyj chmod po fakcie.
Metoda 6: Rozwinięcie nawiasów klamrowych dla złożonych drzew katalogów
Rozwinięcie nawiasów klamrowych to funkcja powłoki Bash — nie opcja mkdir — która generuje wiele argumentów z jednego wzorca. W połączeniu z mkdir -p jest to najefektywniejszy sposób tworzenia złożonych hierarchii katalogów.
Podstawowe rozwinięcie nawiasów klamrowych:
mkdir -p project/{src,tests,docs,build}Rozszerza się to do:
mkdir -p project/src project/tests project/docs project/buildWielopoziomowe rozwinięcie nawiasów klamrowych:
mkdir -p app/{frontend/{components,pages,styles},backend/{controllers,models,routes},shared/utils}Tworzy to następującą strukturę:
app/
├── frontend/
│ ├── components/
│ ├── pages/
│ └── styles/
├── backend/
│ ├── controllers/
│ ├── models/
│ └── routes/
└── shared/
└── utils/Ten wzorzec jest standardową praktyką podczas inicjowania nowych repozytoriów aplikacji lub udostępniania katalogów aplikacji na świeżym VPS z cPanel lub serwerze bare-metal.
Metoda 7: Tworzenie katalogów przez GUI Ubuntu (aplikacja Pliki)
W przypadku desktopowych instalacji Ubuntu lub sesji zdalnego pulpitu aplikacja GNOME Pliki (Nautilus) zapewnia metodę graficzną.
Kroki:
- Otwórz aplikację Pliki z menu Aktywności lub doku
- Przejdź do katalogu nadrzędnego, w którym chcesz utworzyć nowy folder
- Kliknij prawym przyciskiem myszy na pustym obszarze w katalogu
- Wybierz Nowy folder z menu kontekstowego
- Wpisz żądaną nazwę folderu i naciśnij Enter
Skrót klawiaturowy: W Nautilusie Ctrl+Shift+N natychmiast tworzy nowy folder bez użycia menu kontekstowego.
Ograniczenia podejścia GUI:
- Nie można ustawić niestandardowych uprawnień podczas tworzenia — wymaga późniejszej akcji w terminalu lub właściwościach pliku
- Nie można tworzyć rekurencyjnych zagnieżdżonych struktur w jednej operacji
- Niedostępne w środowiskach serwerów bez interfejsu graficznego (zdecydowana większość produkcyjnych serwerów Ubuntu działa bez środowiska graficznego)
W przypadku poważnej pracy z administracją serwerami metody wiersza poleceń są zawsze preferowane.
Metoda 8: Skryptowe tworzenie katalogów do automatyzacji
W rzeczywistej administracji serwerami katalogi rzadko są tworzone ręcznie jeden po drugim. Skrypty udostępniające, potoki wdrożeniowe i narzędzia do zarządzania konfiguracją opierają się na automatycznym tworzeniu katalogów.
Przykład podstawowego skryptu powłoki:
#!/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."Kluczowe praktyki skryptowania:
- Zawsze używaj
set -edo przerywania przy każdym błędzie - Umieszczaj wszystkie zmienne w cudzysłowach (
"$dir"), aby bezpiecznie obsługiwać ścieżki ze spacjami - Łącz
mkdir -pzchownichmodw tym samym skrypcie, aby zapewnić poprawność uprawnień natychmiast po utworzeniu - Używaj tablic dla list katalogów, aby skrypty były czytelne i łatwe w utrzymaniu
To podejście jest niezbędne podczas zarządzania wieloma wirtualnymi hostami, wdrażania aplikacji w różnych środowiskach lub automatyzacji konfiguracji serwera za pomocą narzędzi takich jak Ansible lub skryptów udostępniających opartych na Bash.
Porównanie: opcje mkdir i ich przypadki użycia
| Polecenie | Tworzy katalogi pośrednie | Ustawia uprawnienia | Wiele katalogów | Idempotentne |
|---|---|---|---|---|
mkdir dir | Nie | Nie (używa umask) | Nie | Nie |
mkdir -p path/to/dir | Tak | Nie (używa umask) | Nie | Tak |
mkdir -m 755 dir | Nie | Tak | Nie | Nie |
mkdir -p -m 750 path/dir | Tak | Tak (tylko ostatni katalog) | Nie | Tak |
mkdir dir1 dir2 dir3 | Nie | Nie (używa umask) | Tak | Nie |
mkdir -p {a,b,c}/sub | Tak | Nie (używa umask) | Tak | Tak |
Typowe błędy i sposoby ich naprawy
Błąd: Permission denied
mkdir: cannot create directory '/etc/myapp': Permission deniedPrzyczyna: Próbujesz zapisać do katalogu należącego do systemu bez podwyższonych uprawnień.
Naprawa: Poprzedź polecenie sudo:
sudo mkdir /etc/myappBłąd: No such file or directory
mkdir: cannot create directory '/srv/app/config': No such file or directoryPrzyczyna: Jeden lub więcej katalogów pośrednich w ścieżce nie istnieje.
Naprawa: Użyj flagi -p:
mkdir -p /srv/app/configBłąd: File exists
mkdir: cannot create directory 'mydir': File existsPrzyczyna: Katalog lub plik o tej nazwie już istnieje.
Naprawa: Użyj -p, aby pominąć ten błąd, gdy istniejąca ścieżka jest katalogiem, lub wybierz inną nazwę.
Ciche niepowodzenie w skryptach: Jeśli mkdir zawiedzie, a skrypt nie używa set -e ani nie sprawdza kodów wyjścia, kolejne operacje mogą być wykonywane na nieistniejącej ścieżce, powodując nieprzewidywalne błędy. Zawsze weryfikuj krytyczne tworzenie katalogów:
mkdir -p /srv/app/data || { echo "Failed to create data directory"; exit 1; }Kwestie bezpieczeństwa przy tworzeniu katalogów
Uprawnienia do katalogów są pierwszą linią obrony w zabezpieczeniach serwera. Kilka poważnych luk w zabezpieczeniach wynika bezpośrednio z nieprawidłowych uprawnień do katalogów:
- Katalogi z możliwością zapisu przez wszystkich (
777) pozwalają każdemu użytkownikowi w systemie na zapis, modyfikację lub usuwanie plików — krytyczne ryzyko na hostingu współdzielonym lub serwerach wieloużytkownikowych - Nieprawidłowe właścicielstwo katalogów dostępnych przez WWW może pozwolić exploitom aplikacji webowych na zapisywanie złośliwych plików poza zamierzonym katalogiem głównym dokumentów
- Bit sticky (
chmod +t) na współdzielonych katalogach (takich jak/tmp) uniemożliwia użytkownikom usuwanie plików należących do innych — zawsze ustawiaj go na współdzielonych katalogach z możliwością zapisu - Bit SetGID na katalogach zapewnia, że nowe pliki dziedziczą grupę katalogu, a nie podstawową grupę tworzącego użytkownika — przydatne dla katalogów projektów współpracy
Przykład — bezpieczny współdzielony katalog projektu:
mkdir -p /srv/shared/project
chown root:developers /srv/shared/project
chmod 2775 /srv/shared/project # SetGID + rwxrwxr-xPodczas hostowania aplikacji webowych, domen zabezpieczonych SSL lub usług e-mail, właściwe uprawnienia do katalogów są nieodłączne od poziomu bezpieczeństwa konfiguracji Certyfikatów SSL i konfiguracji Hostingu Poczty E-mail.
Weryfikacja tworzenia katalogów
Po utworzeniu katalogów zawsze weryfikuj wynik przed przystąpieniem do zależnych operacji.
Lista ze szczegółowymi uprawnieniami:
ls -la /path/to/parent/Weryfikacja istnienia określonego katalogu (przydatne w skryptach):
[ -d /srv/app/config ] && echo "Directory exists" || echo "Directory missing"Wyświetlanie pełnej struktury drzewa (wymaga pakietu tree):
sudo apt install tree -y
tree /srv/app/Sprawdzanie użycia i-węzłów — na serwerach z wieloma małymi plikami wyczerpanie i-węzłów może uniemożliwić tworzenie katalogów nawet wtedy, gdy dostępne jest miejsce na dysku:
df -i /srv/Jeśli użycie i-węzłów zbliża się do 100%, nie można tworzyć nowych katalogów ani plików niezależnie od dostępnego miejsca na dysku. Jest to częsty problem produkcyjny na serwerach hostujących dużą liczbę małych plików, takich jak serwery pocztowe lub katalogi sesji PHP.
Praktyczna macierz decyzyjna: którą metodę wybrać
| Scenariusz | Zalecane polecenie |
|---|---|
| Pojedynczy katalog, sesja interaktywna | mkdir dirname |
| Katalog pod znaną ścieżką bezwzględną | mkdir /full/path/dirname |
| Zagnieżdżona ścieżka, niektóre katalogi nadrzędne mogą nie istnieć | mkdir -p /full/nested/path |
| Wiele katalogów równorzędnych naraz | mkdir dir1 dir2 dir3 |
| Złożone wielopoziomowe drzewo w jednym poleceniu | mkdir -p root/{a,b,c}/{sub1,sub2} |
| Katalog z niestandardowymi uprawnieniami | mkdir -m 750 dirname |
| Automatyczny skrypt udostępniający | mkdir -p z chown/chmod w sekwencji |
| Idempotentny krok potoku wdrożeniowego | mkdir -p (bezpieczne do ponownego uruchomienia) |
Kluczowe wnioski techniczne
mkdir -pjest najbezpieczniejszym domyślnym wyborem do skryptowego lub automatycznego tworzenia katalogów — jest idempotentne i obsługuje brakujące ścieżki pośrednie- Nigdy nie używaj uprawnień
777w katalogach produkcyjnych; preferuj755dla ścieżek publicznych i750lub700dla danych wrażliwych - Flaga
-mwmkdirustawia uprawnienia tylko dla ostatniego katalogu przy użyciu z-p— użyjchmod -Rlub wywołańmkdirna każdym poziomie dla pełnej kontroli - Rozwinięcie nawiasów klamrowych to funkcja Bash, nie funkcja
mkdir— nie będzie działać w skryptach/bin/sh, chyba że powłoką jest Bash - Zawsze sprawdzaj dostępność i-węzłów (
df -i) w systemach plików o dużej gęstości przed masowym tworzeniem katalogów - Łącz tworzenie katalogów z natychmiastowym przypisaniem
chownw skryptach udostępniających, aby uniknąć okna, w którym katalogi istnieją z nieprawidłowym właścicielstwem - W środowiskach Paneli Sterowania VPS użytkownicy serwera WWW (zazwyczaj
www-datalubnginx) muszą mieć uprawnienie do wykonania dla każdego katalogu w ścieżce katalogu głównego dokumentów — nie tylko dla ostatniego katalogu
FAQ
Jaka jest różnica między mkdir folder a mkdir -p folder?
mkdir folder tworzy pojedynczy katalog i kończy się niepowodzeniem, jeśli jakakolwiek część ścieżki nie istnieje lub jeśli katalog już istnieje. mkdir -p folder tworzy wszystkie brakujące katalogi pośrednie i kończy się cicho bez błędu, jeśli cel już istnieje, co czyni go bezpiecznym dla skryptów i wielokrotnego wykonywania.
Czy mkdir może utworzyć katalog ze spacją w nazwie?
Tak. Umieść nazwę w cudzysłowach: mkdir "my project folder" lub zastosuj znaki ucieczki przed spacjami: mkdir my project folder. Jednak spacje w nazwach katalogów są zdecydowanie odradzane na serwerach, ponieważ wymagają stosowania znaków ucieczki w każdym kolejnym poleceniu i psują wiele skryptów powłoki oraz konfiguracji aplikacji.
Dlaczego mkdir kończy się błędem „Permission denied” nawet z sudo?
Zazwyczaj dzieje się tak, gdy docelowy system plików jest zamontowany tylko do odczytu, gdy zasady SELinux lub AppArmor ograniczają zapis do tej ścieżki lub gdy ścieżka znajduje się w sieciowym systemie plików z ograniczeniami po stronie serwera. Sprawdź opcje montowania za pomocą mount | grep /target/path i przejrzyj logi AppArmor za pomocą sudo aa-status.
Jak utworzyć katalog i natychmiast ustawić jego właściciela i grupę?
mkdir samo w sobie nie ustawia właścicielstwa — użyj chown natychmiast po: mkdir -p /srv/app && chown www-data:www-data /srv/app. W jednym potoku: install -d -m 755 -o www-data -g www-data /srv/app — polecenie install tworzy katalogi z właścicielem, grupą i trybem w jednym kroku.
Co dzieje się z uprawnieniami przy użyciu mkdir -p z wieloma nowymi poziomami?
Tylko ostatni (najgłębszy) katalog otrzymuje tryb określony przez -m. Wszystkie nowo tworzone katalogi pośrednie otrzymują uprawnienia wynikające z bieżącego umask. Jeśli wymagane są spójne uprawnienia na wszystkich poziomach, utwórz każdy poziom osobno z jawnymi flagami -m lub zastosuj chmod -R po utworzeniu pełnej ścieżki.
