15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij
16.11.2023

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 rsync i tar, 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 uprawnienia sudo
  • 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:

pwd

Metoda 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_name

Przykład:

mkdir project_files

Tworzy 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 -la

Konwencje 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" lub mkdir 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_directory

Przykład:

mkdir /var/www/html/myapp

Waż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 directory

Rozwią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 ./subdirectory

Metoda 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_directory

Przykład:

mkdir -p /var/www/html/myapp/logs/archive

Jeś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 dir3

Przykład:

mkdir assets uploads cache sessions

Tworzy 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/docs

Jest 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_name

Typowe wzorce uprawnień:

Tryb ósemkowySymbolicznyTypowy przypadek użycia
700rwx------Prywatne dane użytkownika, katalogi kluczy SSH
750rwxr-x---Katalogi aplikacji współdzielone z grupą
755rwxr-xr-xPubliczne katalogi główne dokumentów WWW
770rwxrwx---Współdzielone katalogi zespołowe
777rwxrwxrwxTymczasowa przestrzeń robocza (unikaj w produkcji)

Przykład — tworzenie bezpiecznego katalogu dla kluczy SSH:

mkdir -m 700 ~/.ssh

Przykł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/secrets

Należ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/build

Wielopoziomowe 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:

  1. Otwórz aplikację Pliki z menu Aktywności lub doku
  2. Przejdź do katalogu nadrzędnego, w którym chcesz utworzyć nowy folder
  3. Kliknij prawym przyciskiem myszy na pustym obszarze w katalogu
  4. Wybierz Nowy folder z menu kontekstowego
  5. 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 -e do przerywania przy każdym błędzie
  • Umieszczaj wszystkie zmienne w cudzysłowach ("$dir"), aby bezpiecznie obsługiwać ścieżki ze spacjami
  • Łącz mkdir -p z chown i chmod w 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

PolecenieTworzy katalogi pośrednieUstawia uprawnieniaWiele katalogówIdempotentne
mkdir dirNieNie (używa umask)NieNie
mkdir -p path/to/dirTakNie (używa umask)NieTak
mkdir -m 755 dirNieTakNieNie
mkdir -p -m 750 path/dirTakTak (tylko ostatni katalog)NieTak
mkdir dir1 dir2 dir3NieNie (używa umask)TakNie
mkdir -p {a,b,c}/subTakNie (używa umask)TakTak

Typowe błędy i sposoby ich naprawy

Błąd: Permission denied

mkdir: cannot create directory '/etc/myapp': Permission denied

Przyczyna: Próbujesz zapisać do katalogu należącego do systemu bez podwyższonych uprawnień.

Naprawa: Poprzedź polecenie sudo:

sudo mkdir /etc/myapp

Błąd: No such file or directory

mkdir: cannot create directory '/srv/app/config': No such file or directory

Przyczyna: Jeden lub więcej katalogów pośrednich w ścieżce nie istnieje.

Naprawa: Użyj flagi -p:

mkdir -p /srv/app/config

Błąd: File exists

mkdir: cannot create directory 'mydir': File exists

Przyczyna: 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-x

Podczas 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ć

ScenariuszZalecane polecenie
Pojedynczy katalog, sesja interaktywnamkdir 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 narazmkdir dir1 dir2 dir3
Złożone wielopoziomowe drzewo w jednym poleceniumkdir -p root/{a,b,c}/{sub1,sub2}
Katalog z niestandardowymi uprawnieniamimkdir -m 750 dirname
Automatyczny skrypt udostępniającymkdir -p z chown/chmod w sekwencji
Idempotentny krok potoku wdrożeniowegomkdir -p (bezpieczne do ponownego uruchomienia)

Kluczowe wnioski techniczne

  • mkdir -p jest 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ń 777 w katalogach produkcyjnych; preferuj 755 dla ścieżek publicznych i 750 lub 700 dla danych wrażliwych
  • Flaga -m w mkdir ustawia uprawnienia tylko dla ostatniego katalogu przy użyciu z -p — użyj chmod -R lub wywołań mkdir na 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 chown w 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-data lub nginx) 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.

15%

Zaoszczędź 15% na wszystkich usługach hostingowych

Sprawdź swoje umiejętności i zdobądź Rabat na dowolny plan hostingowy

Użyj kodu:

Skills
Rozpocznij