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_drive

Co 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 nginx

lsof 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.1

Analiza 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_drive

Czas 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_drive

UWAGA: 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/tcp

lsof 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”:

  1. Problem: umount: /mnt/usb_drive: target is busy.
  2. Śledztwo (lsof): lsof /mnt/usb_drive pokazuje, że terminal, w którym jesteś, ma otwartą tę ścieżkę.
  3. Alternatywne śledztwo (fuser): fuser -v /mnt/usb_drive pokazuje PID twojej powłoki bash.
  4. Rozwiązanie: Zamykasz terminal lub wychodzisz z katalogu (cd).
  5. Rozwiązanie siłowe (fuser): fuser -ki /mnt/usb_drive i 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!