Polski

Usuwanie pliku i katalogu w Linuksie z wiersza poleceń

3 min
Hosting VPS/VDS

Po tym poradniku będziesz umieć usunąć pojedynczy plik, pusty katalog, całe drzewo katalogów oraz pliki wybrane według nazwy lub wieku, za każdym razem sprawdzając wcześniej, co dokładnie zostanie skasowane. W wierszu poleceń Linuksa nie ma kosza: usunięcie jest ostateczne. Dlatego sposób postępowania jest tak samo ważny jak sama komenda.

Wymagania wstępne

  • Dostęp do powłoki na maszynie z Linuksem (lokalnie lub przez SSH), na przykład na serwerze VPS z Linuksem
  • Użytkownik z prawem zapisu w danym katalogu (lub dostęp do sudo)
  • Świeża kopia zapasowa wszystkiego, co jest ważne

Sprawdź cel przed usunięciem

Przejdź do właściwego katalogu i wyświetl jego zawartość. Zajmuje to dwie sekundy, a pozwala uniknąć większości wpadek.

Bash
pwd ls -la

Jeśli używasz wzorca (rozszerzenia, prefiksu), najpierw wyświetl, czego dotyczy. Polecenie rm otrzyma dokładnie tę samą listę.

Bash
ls -d *.log

Usuń plik

Podstawowym poleceniem jest rm.

Bash
rm report.txt

Dodaj -i, aby polecenie prosiło o potwierdzenie, oraz -v, aby wyświetlało, co usuwa.

Bash
rm -iv report.txt

Następnie sprawdź wynik poleceniem ls report.txt: komunikat „No such file or directory" potwierdza, że plik zniknął.

Usuń wiele plików

Znaki wieloznaczne powłoki pozwalają wskazać całą grupę plików. Najpierw wyświetl listę przez ls, potem usuń.

Bash
rm -v *.tmp rm -v photo_{01..05}.jpg

Unikaj gołego rm * w katalogu, co do którego nie masz pewności. Jeśli nazwa pliku zaczyna się od myślnika, użyj --, aby zaznaczyć koniec opcji:

Bash
rm -- -strange-file.txt

Usuń pusty katalog

rmdir usuwa wyłącznie puste katalogi. To zamierzone: działa jak zabezpieczenie.

Bash
rmdir old_folder

Aby usunąć również katalogi nadrzędne, które staną się puste:

Bash
rmdir -p project/cache/tmp

Usuń katalog wraz z całą zawartością

Potrzebna jest tu opcja rekurencyjna -r. Najpierw oszacuj, co stracisz.

Bash
du -sh old_project find old_project -type f | wc -l

Potem usuń, z potwierdzeniem:

Bash
rm -ri old_project

Przy tysiącach plików potwierdzanie każdego z nich jest niepraktyczne. Opcja -f wyłącza pytania:

Bash
rm -rf old_project

Nigdy nie wstawiaj do tego polecenia niesprawdzonej zmiennej. W rm -rf "$DIR"/ pusta zmienna $DIR oznacza, że celujesz w katalog główny. W skrypcie dodaj set -u lub użyj "${DIR:?}", co przerwie wykonanie, jeśli zmienna jest pusta.

Usuń pliki według wieku

find filtruje według precyzyjnych kryteriów (nazwa, typ, wiek, rozmiar). Zasada jest prosta: najpierw uruchom polecenie bez akcji, a dopiero potem dodaj -delete.

Bash
find /var/log/myapp -type f -name "*.log" -mtime +30

Jeśli lista zgadza się z oczekiwaniami:

Bash
find /var/log/myapp -type f -name "*.log" -mtime +30 -delete

-mtime +30 oznacza pliki zmodyfikowane ponad 30 dni temu. Umieszczaj -delete na końcu: find ocenia warunki od lewej do prawej, więc -delete postawione zbyt wcześnie usunie wszystko.

Bezpieczniej wymaż plik z wrażliwymi danymi

rm usuwa wpis o pliku, ale niekoniecznie dane z dysku. shred nadpisuje zawartość przed usunięciem.

Bash
shred -u -v secret.key

Ta metoda ma ograniczenia na dyskach SSD, w systemach plików z księgowaniem (journaling) oraz na woluminach ze snapshotami, gdzie dawne dane mogą pozostać. Przy naprawdę wrażliwych danych niezawodnym rozwiązaniem jest szyfrowanie dysku od samego początku.

Napraw typowe błędy

Permission denied

Nie masz prawa zapisu w katalogu nadrzędnym (to on kontroluje usuwanie, a nie sam plik). Sprawdź przez ls -ld DIRECTORY, a jeśli to uzasadnione, użyj sudo:

Bash
sudo rm -v /path/to/file

Operation not permitted, nawet z sudo

Plik prawdopodobnie ma ustawiony atrybut niezmienności (immutable). Sprawdź go, zdejmij, a potem usuń plik.

Bash
lsattr file.txt sudo chattr -i file.txt sudo rm file.txt

Argument list too long

Znak wieloznaczny rozwinął się do większej liczby argumentów, niż system przyjmuje. Użyj find, który przetwarza pliki jeden po drugim:

Bash
find . -maxdepth 1 -type f -name "*.tmp" -delete

Directory not empty lub Device or resource busy

W przypadku rmdir pierwszy komunikat jest normalny: katalog zawiera pliki, także ukryte (ls -A). Jeśli korzysta z niego punkt montowania lub proces, zidentyfikuj go przez lsof +D DIRECTORY albo findmnt, zwolnij katalog i spróbuj ponownie.

Do bezpiecznych ćwiczeń przydaje się tymczasowa instancja: na VPS możesz utworzyć katalog testowy i pomylić się bez żadnych konsekwencji. Więcej poradników tego typu znajdziesz w sekcji poradniki.

FAQ

Czy można odzyskać plik usunięty poleceniem rm?

Rzadko i bez gwarancji. Narzędzia takie jak extundelete czy testdisk czasem odnajdują dane, jeśli natychmiast przestaniesz zapisywać cokolwiek na dysku. Jedyną niezawodną ochroną jest kopia zapasowa.

Jaka jest różnica między rm -r a rm -rf?

rm -r usuwa rekurencyjnie, ale pyta o potwierdzenie przy plikach chronionych przed zapisem. rm -rf wymusza usunięcie i po cichu pomija nieistniejące pliki. Zarezerwuj je na sytuacje, w których cel został już sprawdzony.

Jak usunąć katalog, którego nazwa zawiera spacje?

Ujmij nazwę w cudzysłów lub poprzedź spacje ukośnikiem: rm -r "My folder" albo rm -r My\ folder. W przeciwnym razie powłoka potraktuje każde słowo jako osobny element.

Czy w wierszu poleceń istnieje kosz?

Tak, w pakiecie trash-cli (polecenie trash-put), który przenosi elementy do kosza użytkownika zamiast je kasować. Na serwerze rzadko jest zainstalowany domyślnie, więc wyrób sobie nawyk wyświetlania listy przed usuwaniem.

Bądź na bieżąco z najnowszymi ofertami, zniżkami i promocjami specjalnymi.

Zobacz promocje

Używamy plików cookie

Używamy plików cookie analitycznych, aby ulepszać nasz serwis. Nie sprzedajemy danych stronom trzecim. Więcej w polityce prywatności.