Sobes.tech
Middle

Πώς μπορούμε να μάθουμε με ποια αρχεία εργάζεται αυτήν τη στιγμή ένα πρόγραμμα στο Linux;

sobes.tech AI

Απάντηση από AI

Χρησιμοποιήστε το εργαλείο lsof (λίστα ανοικτών αρχείων).

# Βασική χρήση του lsof για εμφάνιση λίστας όλων των ανοικτών αρχείων
lsof

Για να λάβετε μια λίστα με ανοικτά αρχεία από μια συγκεκριμένη διαδικασία (ανά PID):

# Εμφάνιση λίστας ανοικτών αρχείων για τη διαδικασία με PID 1234
lsof -p 1234

Για να λάβετε μια λίστα με ανοικτά αρχεία από μια συγκεκριμένη εντολή (ανά όνομα):

# Εμφάνιση λίστας ανοικτών αρχείων για όλες τις διαδικασίες με το όνομα "nginx"
lsof -c nginx

Για να λάβετε μια λίστα με ανοικτά αρχεία από έναν συγκεκριμένο χρήστη:

# Εμφάνιση λίστας ανοικτών αρχείων για τον χρήστη "user1"
lsof -u user1

Επιπλέον σημαίες του lsof:

Σημαία Περιγραφή
-i Εμφανίζει τις δικτυακές συνδέσεις (σωλήνες)
-n Δεν μετατρέπει τις διευθύνσεις IP σε ονόματα υπολογιστών
-P Δεν μετατρέπει τις θύρες σε ονόματα υπηρεσιών
-r [N] Επανεκκινεί το lsof κάθε N δευτερόλεπτα

Παράδειγμα χρήσης για να προσδιορίσετε ποια διαδικασία χρησιμοποιεί ένα συγκεκριμένο αρχείο:

# Ποια διαδικασία χρησιμοποιεί το αρχείο /var/log/syslog;
lsof /var/log/syslog

Η έξοδος του lsof περιλαμβάνει τις ακόλουθες στήλες:

  • COMMAND: Το όνομα της εντολής που ξεκίνησε τη διαδικασία.
  • PID: Αναγνωριστικό διαδικασίας.
  • TID: Αναγνωριστικό νήματος (αν ισχύει).
  • USER: Το όνομα χρήστη που ξεκίνησε τη διαδικασία.
  • FD: Αντιπροσωπευτής αρχείου.
  • TYPE: Τύπος κόμβου αρχείου (DIR, REG, FIFO, CHR, BLK, SOCK, κ.λπ.).
  • DEVICE: Αναγνωριστικό συσκευής.
  • SIZE/OFF: Μέγεθος αρχείου ή μετατόπιση.
  • NODE: Αριθμός inode.
  • NAME: Όνομα αρχείου ή διεύθυνση δικτύου.