Sobes.tech
Middle

Jak można sprawdzić, z jakimi plikami aktualnie pracuje program w Linux?

sobes.tech AI

Odpowiedź od AI

Używając narzędzia lsof (lista otwartych plików).

# Podstawowe użycie lsof do wyświetlenia listy wszystkich otwartych plików
lsof

Aby uzyskać listę otwartych plików przez konkretny proces (według PID):

# Wyświetl listę otwartych plików dla procesu o PID 1234
lsof -p 1234

Aby uzyskać listę otwartych plików przez konkretną komendę (według nazwy):

# Wyświetl listę otwartych plików dla wszystkich procesów o nazwie "nginx"
lsof -c nginx

Aby uzyskać listę otwartych plików przez konkretnego użytkownika:

# Wyświetl listę otwartych plików dla użytkownika "user1"
lsof -u user1

Dodatkowe flagi lsof:

Flaga Opis
-i Wyświetla połączenia sieciowe (gniazda)
-n Nie konwertuje adresów IP na nazwy hostów
-P Nie konwertuje portów na nazwy usług
-r [N] Restartuje lsof co N sekund

Przykład użycia do określenia, który proces używa konkretnego pliku:

# Który proces używa pliku /var/log/syslog?
lsof /var/log/syslog

Wyjście lsof zawiera następujące kolumny:

  • COMMAND: Nazwa polecenia uruchamiającego proces.
  • PID: Identyfikator procesu.
  • TID: Identyfikator wątku (jeśli dotyczy).
  • USER: Nazwa użytkownika uruchamiającego proces.
  • FD: Deskryptor pliku.
  • TYPE: Typ węzła pliku (DIR, REG, FIFO, CHR, BLK, SOCK, itp.).
  • DEVICE: Identyfikator urządzenia.
  • SIZE/OFF: Rozmiar pliku lub przesunięcie.
  • NODE: Numer inode.
  • NAME: Nazwa pliku lub adres sieciowy.