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.