Znasz to uczucie: próbujesz odmontować dysk USB, a system odmawia posłuszeństwa z komunikatem device is busy. Albo chcesz zrestartować usługę, ale port jest już zajęty. Zanim zaczniesz losowo zabijać procesy, poznaj swoich dwóch najlepszych przyjaciół w takich sytuacjach: lsof i fuser.
Po netstat, nc i tcpdump wiemy już, co dzieje się w sieci. Czas zajrzeć głębiej – które konkretnie procesy trzymają w garści nasze pliki i porty?
lsof – List Open Files (Wielki Brat Patrzy)
W Linuksie wszystko jest plikiem – również sockety sieciowe, potoki i urządzenia. lsof to narzędzie, które pokazuje, jaki proces ma otwarty jaki plik. To twój informator, który wie wszystko.
Kto używa tego pliku?
Najprostsze użycie – podajesz ścieżkę i dostajesz listę procesów.
# Kto blokuje mój pendrive?
lsof /mnt/usb_driveCo robi konkretny użytkownik lub proces?
lsof potrafi szpiegować na całego.
# Pokaż, co otworzył użytkownik 'ubikone'
lsof -u ubikone
# Pokaż pliki otwarte przez proces o PID 1234
lsof -p 1234
# ...lub przez wszystkie procesy o nazwie 'nginx'
lsof -c nginxlsof jako następca netstat
To jedno z najpotężniejszych zastosowań – sprawdzanie połączeń sieciowych.
# Kto słucha na porcie 443?
lsof -i :443
# Pokaż wszystkie aktywne połączenia TCP
lsof -i TCP
# Pokaż połączenia do konkretnego adresu
lsof -i @1.1.1.1Analiza bezpieczeństwa z lsof -i: To polecenie to kopalnia złota podczas audytu. Widzisz każdy otwarty port i każdy proces, który za nim stoi. Niespodziewany proces słuchający na dziwnym porcie? Może to być backdoor.
fuser – File User (Cichy Zabójca)
Jeśli lsof jest detektywem, to fuser jest agentem do zadań specjalnych. Działa szybciej i bardziej bezpośrednio. Jego główny cel: zidentyfikować i (jeśli trzeba) zlikwidować proces blokujący zasób.
Kto blokuje zasób?
fuser od razu zwraca PID-y. Konkret i do rzeczy.
# Pokaż PID-y procesów używających pliku
fuser /var/log/syslog
# Tryb gadatliwy (-v) pokaże więcej szczegółów
fuser -v /mnt/usb_driveCzas na działanie – zwalnianie zasobów
To jest supermoc fuser. Opcja -k wysyła sygnał SIGKILL do wszystkich procesów blokujących plik.
# Zabij procesy używające tego pliku
fuser -k /var/log/apache2/access.log
# Zawsze bezpieczniej robić to w trybie interaktywnym (-i)
fuser -ki /mnt/usb_driveUWAGA: fuser -k to ostateczność! Używaj go z rozwagą. Zabicie złego procesu (np. bazy danych) może prowadzić do utraty danych. Zawsze, gdy to możliwe, używaj -ki, aby potwierdzić każdą operację.
fuser i sieć
Podobnie jak lsof, fuser potrafi obsługiwać porty.
# Pokaż PID procesu na porcie TCP 80
fuser 80/tcp
# Zidentyfikuj i zabij proces na porcie 8080
fuser -k 8080/tcplsof vs fuser: Kiedy którego używać?
- Użyj
lsof, gdy potrzebujesz szczegółów. Chcesz wiedzieć, jaki użytkownik, jaki proces, jaki typ pliku. To narzędzie do diagnozy. - Użyj
fuser, gdy chcesz szybko działać. Chcesz po prostu znać PID albo natychmiast zwolnić zasób. To narzędzie do akcji.
Podsumowanie praktyczne
Twój nowy workflow, gdy system mówi “zasób zajęty”:
- Problem:
umount: /mnt/usb_drive: target is busy. - Śledztwo (
lsof):lsof /mnt/usb_drivepokazuje, że terminal, w którym jesteś, ma otwartą tę ścieżkę. - Alternatywne śledztwo (
fuser):fuser -v /mnt/usb_drivepokazuje PID twojej powłoki bash. - Rozwiązanie: Zamykasz terminal lub wychodzisz z katalogu (
cd). - Rozwiązanie siłowe (
fuser):fuser -ki /mnt/usb_drivei potwierdzasz zabicie procesu (jeśli wiesz, co robisz).
W serii “Wróćmy do podstaw” zamknęliśmy kolejne koło: od pakietów (tcpdump), przez połączenia (netstat), aż do procesów, które za nimi stoją (lsof, fuser).
Pro tip: Użyj lsof +L1, aby znaleźć procesy trzymające otwarte pliki, które zostały już usunięte z dysku. To częsty powód “znikającego” miejsca na dysku – plik jest skasowany, ale proces wciąż go blokuje, uniemożliwiając zwolnienie przestrzeni.
Kolejny odcinek: iptables – czas zacząć budować ściany w naszym cyfrowym królestwie. Zostań z nami!