Οδηγός χρήσης της εντολής «lsof» για μια διαδικασία
Εάν είστε συχνός χρήστης συστημάτων Linux ή Unix, σίγουρα θα έχετε ακούσει τη φράση, "Στο Linux, όλα είναι ένα αρχείο". Αυτό μπορεί να κατηγοριοποιηθεί ως η υπεραπλούστευση της έννοιας, αλλά αποδεικνύεται πολύ χρήσιμο να κατανοήσουμε πώς λειτουργούν τα αρχεία στο σύστημα Linux.
Δεν πρέπει όλα όσα εμφανίζονται στο περιβάλλον Linux να είναι αρχείο. Μερικές φορές μπορεί να είναι μια διαδικασία, μπορεί να είναι ένα ειδικό αρχείο που αντιπροσωπεύει τις πληροφορίες υλικού, τους καταλόγους και άλλα πράγματα.
Αυτό το σεμινάριο θα σας καθοδηγήσει στην εύρεση όλων των αρχείων που είναι ανοιχτά για μια συγκεκριμένη διαδικασία στο Linux.
Εισαγωγή σε lsof
Εντολή
Η ομορφιά του συστήματος Linux είναι ότι μπορείτε να ελέγχετε και να διαχειρίζεστε ολόκληρο το σύστημά σας μέσω του τερματικού, υπό την προϋπόθεση ότι γνωρίζετε καλά τις εντολές. Μόλις γίνουν γνωστές οι εντολές, τότε όλες οι εργασίες στο τερματικό γίνονται cakewalk.
lsof
σημαίνει 'Λίστα Ανοιγμένων Αρχείων‘. Μόλις μάθετε τη μεγάλη έκδοση της εντολής, γίνεται πολύ εύκολο για εσάς να κατανοήσετε και να χρησιμοποιήσετε την εντολή με παραγωγικό τρόπο.
ο lsof
Η εντολή εμφανίζει τις λίστες με ανοιχτά αρχεία, υποδοχές και σωλήνες. Μπορείτε εύκολα να αναζητήσετε τα ανοιχτά αρχεία χρησιμοποιώντας αυτήν την εντολή. Οταν ο lsof
Η εντολή χρησιμοποιείται χωρίς καμία επιλογή και εμφανίζει όλα τα ανοιχτά αρχεία σε σχέση με τις ενεργές διεργασίες που εκτελούνται.
Σημείωση: Βεβαιωθείτε ότι χρησιμοποιείτε sudo
κατά την εκτέλεση των εντολών.
Χρησιμοποιώντας το lsof
Εντολή
Θα μελετήσουμε την έξοδο του lsof
εντολή αναλυτικά. Μελετήστε την παρακάτω εντολή.
sudo lsof | πιο λιγο
Σημείωση: Αν τρέξουμε απευθείας το lsof
εντολή, η έξοδος θα είναι πολύ μεγάλη και μπορεί να δημιουργήσει σύγχυση για να προχωρήσετε περαιτέρω. Ως εκ τούτου, εδώ χρησιμοποίησα lsof | πιο λιγο
εντολή για τη διευκόλυνση του σεμιναρίου.
Παραγωγή:
gaurav@ubuntu:~$ sudo lsof | λιγότερα COMMAND PID TID ΧΡΗΣΤΗΣ FD ΤΥΠΟΣ ΜΕΓΕΘΟΣ/ΑΠΕΝΕΡΓΟΠΟΙΗΣΗ ΣΥΣΚΕΥΗΣ ΟΝΟΜΑ ΚΟΜΒΟΥ kdevtmpfs 31 root cwd DIR 0,6 4400 2 / kdevtmpfs 31 root rtd DIR 0,6 4400 2 / kdevtmpfs 31 exe 2 ρίζα cwd3 άγνωστο DIR 8,8 4096 2 / netns 32 root rtd DIR 8,8 4096 2 / netns 32 root txt άγνωστο /proc/32/exe rcu_tasks 33 root cwd DIR 8,8 4096 2 / rcu_tasks 34 209 DIR09 rtd / rcu_tasks 33 root txt άγνωστο /proc/33/exe kauditd 34 root cwd DIR 8,8 4096 2 / kauditd 34 root rtd DIR 8,8 4096 2 / kauditd 34 root txt άγνωστο /proc/34/exe
Ακολουθούν τα χαρακτηριστικά που εμφανίζονται χρησιμοποιώντας το lsof
εντολή.
Παράμετρος | Περιγραφή |
---|---|
Εντολή | Εμφανίζει το όνομα της εντολής που ανοίγει το αρχείο. |
PID | Αναγνωριστικός αριθμός διεργασίας της διαδικασίας που ανοίγει το αρχείο. |
TID | Αναγνωριστικός αριθμός νήματος. Μπορεί να είναι είτε ένα νήμα είτε ένας αριθμός εργασίας. |
Χρήστης | Αναγνωριστικό χρήστη ή όνομα του χρήστη που είναι ο κάτοχος της διαδικασίας. |
FD | Εμφανίζει την περιγραφή αρχείου του αρχείου. |
Τύπος | Τύπος κόμβου που σχετίζεται με το αρχείο. |
Συσκευή | Εμφανίζει αριθμούς συσκευών. |
Μέγεθος/Απενεργοποίηση | Εμφανίζει το μέγεθος του αρχείου σε byte. |
Κόμβος | Εμφανίζει τον αριθμό inode τον κατάλογο ή τον γονικό κατάλογο. |
Ονομα | Εμφανίζει το όνομα του συστήματος αρχείων όπου βρίσκεται η διαδικασία. |
Καταχώριση των διαδικασιών
Πρώτα και κύρια, είναι σημαντικό για εσάς να αποκτήσετε τις διεργασίες που εκτελούνται και τα αντίστοιχα αναγνωριστικά διεργασιών τους. Το Linux παρέχει μια ποικιλία εντολών για την καταχώριση των διεργασιών μαζί με τα χαρακτηριστικά τους όπως PID, χρήστης, κατάλογος κ.λπ.
Μπορείτε να χρησιμοποιήσετε τις εντολές όπως μπλουζα
, ΥΣΤΕΡΟΓΡΑΦΟ
, htop
, pstree
για να απαριθμήσετε τις διαδικασίες στο τερματικό.
Σε όλο το σεμινάριο, θα χρησιμοποιώ το μπλουζα
εντολή να γίνει αυτό. ο μπλουζα
Η εντολή παρέχει μια δυναμική προβολή σε πραγματικό χρόνο ενός τρέχοντος συστήματος. Εμφανίζει επίσης όλες τις διεργασίες και τα νήματα που διαχειρίζονται αυτήν τη στιγμή ο πυρήνας του Linux. Μελετήστε το παρακάτω μπλοκ για να ελέγξετε την έξοδο του μπλουζα
εντολή.
Σύνταξη:
sudo top
Παραγωγή:
gaurav@ubuntu:~$sudo top PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2703 gaurav 20 0 4286124 1.142g 103584 R 88.2 30.5 87:4326001 Web. 34.41 mongod 13765 Gaurav 20 0 2.931.568 131.408 47.496 S 5.9 3.3 1: 42.34 Περιεχόμενο ιστού 1 ρίζας 20 0 225 904 6824 4900 S 0.0 0.2 0: 27,25 systemd 2 ρίζας 20 0 0 0 0 S 0.0 0.0 0: 00,05 KThreadd 4 ρίζα 0 -20 0 0 0 I 0,0 0,0 0:00,00 kworker/0:0H 6 root 0 -20 0 0 0 I 0,0 0,0 0:00,00 mm_percpu_wq 7 root 20 0 0 0 0 S 0,0 0,0 0,0 0 0 0,0 0,0 0,00 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,00 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,0 0,00 0,00 0,0 0,0 0,00 0,000 0 0 I 0,0 0,0 0:22,32 rcu_sched 9 root 20 0 0 0 0 I 0,0 0,0 0:00,00 rcu_bh 10 root rt 0 0 0 0 S 0,0 0,0 0:03,13 migration/0
Στο παραπάνω μπλοκ, μπορούμε να δούμε όλες τις πληροφορίες που σχετίζονται με τη διαδικασία σε ένα μέρος. Από εδώ μπορούμε να βρούμε το PID
της διαδικασίας της οποίας πρέπει να εμφανίσουμε τα ανοιχτά αρχεία χρησιμοποιώντας το lsof
εντολή.
Αλλά αν θέλετε να μάθετε το αναγνωριστικό διαδικασίας μόνο μιας συγκεκριμένης διεργασίας και να αποφύγετε άλλες ανεπιθύμητες διεργασίες, χρησιμοποιήστε την ακόλουθη εντολή.
Σύνταξη:
sudo top | grep [Όνομα_διαδικασίας]
Παράδειγμα:
gaurav@ubuntu:~$ κορυφή | grep τερματικό 13819 Gaurav 20 0 803336 19728 9160 S 0.3 0.5 0: 53,63 gnome-terminal- 13819 Gaurav 20 0 803336 19728 9160 S 1.0 0.5 0: 53.66 gnome-terminal- 13819 Gaurav 20 0 803336 19728 9160 S 0.3 0.5 0: 53.67 gnome -terminal- gaurav@ubuntu:~$
Εδώ έχουμε εμφανίσει συγκεκριμένα το αναγνωριστικό διεργασίας της διεργασίας που έχει τη συμβολοσειρά «τερματικό» στο όνομα της διεργασίας. Αυτή η μέθοδος είναι χρήσιμη όταν δεν γνωρίζετε το πλήρες όνομα της διαδικασίας ή το PID.
Εμφάνιση των ανοιχτών αρχείων που σχετίζονται με μια διεργασία χρησιμοποιώντας το PID
Στο παραπάνω μπλοκ, μάθαμε πώς να λαμβάνουμε πληροφορίες σχετικά με τη διαδικασία με τη βοήθεια της εντολής top. Τώρα θα χρησιμοποιήσουμε το PID
που αντιστοιχεί σε οποιαδήποτε διαδικασία στο σύστημα και προσπαθήστε να εμφανίσετε τη λίστα των ανοιχτών αρχείων που σχετίζονται με αυτήν τη διαδικασία χρησιμοποιώντας το lsof
εντολή.
Από την παραπάνω έξοδο, ας πάρουμε τη διαδικασία που αντιστοιχεί στο PID 1173 που επισημαίνεται. Θα χρησιμοποιήσουμε το lsof -p [PID]
εντολή να γίνει αυτό.
Σύνταξη:
sudo lsof -p [PID]
Αυτή η εντολή παίρνει το PID της διεργασίας ως είσοδο και παραθέτει όλα τα αρχεία που αντιστοιχούν σε αυτό το PID.
Παραγωγή:
gaurav@ubuntu:~$ sudo lsof -p 1173 lsof: ΠΡΟΕΙΔΟΠΟΙΗΣΗ: δεν μπορεί να γίνει stat() σύστημα αρχείων fuse.gvfsd-fuse /run/user/1000/gvfs Οι πληροφορίες εξόδου ενδέχεται να είναι ελλιπείς. PID ΕΝΤΟΛΗ ΧΡΗΣΤΗ FD ΤΥΠΟΣ ΣΥΣΚΕΥΗ ΜΕΓΕΘΟΣ/ΑΠΕΝΕΡΓΟΠΟΙΗΣΗ ΟΝΟΜΑ ΚΟΣΜΟΥ mongod 1173 mongodb cwd DIR 8,8 4096 2 / mongod 1173 mongodb rtd DIR 8,8 4096 2 / mongod 1173 RONGOD385800/Mongod 1173 mongod38000000000/Mongod 1173 mongodb mem REG 8,8 71776 2624380 /lib/x86_64-linux-gnu/libnss_myhostname.so.2 mongod 1173 mongodb mem REG 8,8 101168 262468-262468-262468-262468-262468-2000000000000000000000000000000000000000000000000000000000. mem REG 8,8 26936 2624439 /lib/x86_64-linux-gnu/libnss_dns-2.27.so mongod 1173 mongodb mem REG 8,8 10160 2626002 /lib/x86_640000000/x86_60000000/x86_60000000/x86_6000000000/x86_malgn000/1000000000000000000000000000/lib. 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-2.27.so mongod 1173 mongodb mem REG 8,8 3004224 2909671 /usr/lib/locale/locale-204, 201, 201, 201, 201, 201, 201, 201, 201, 3004224 lib/x86_64-linux-gnu/libc-2.27.so mongod 1173 mongodb mem REG 8,8 144976 2624627 /lib/x86_64-linux-gnu/libpthread-2.27.so mongod 1174 mem REG 8,8 144976 2624627 /lib/x86_64-linux-gnu/libpthread-2.27.so mongod 1174 mem x86_64-linux-gnu/libgcc_s.so.1 mongod 1173 mongodb me m REG 8,8 1700792 2622735 /lib/x86_64-linux-gnu/libm-2.27.so mongod 1173 mongodb mem REG 8,8 14560 2621535 /lib/x86_64-libdulux1m-gnu. 8,8 31680 2624646 /lib/x86_64-linux-gnu/librt-2.27.so mongod 1173 mongodb mem REG 8,8 2357760 2890079 /usr/lib/[email protected]. :~$
Τα αρχεία που είναι ανοιχτά για τη διαδικασία με αναγνωριστικό διεργασίας 1713 εμφανίζονται χρησιμοποιώντας το lsof
εντολή.
Σημείωση: Οι χρήστες του GNOME ενδέχεται να αντιμετωπίσουν την παρακάτω προειδοποίηση. Μπορείτε να το αγνοήσετε με ασφάλεια.
lsof: ΠΡΟΕΙΔΟΠΟΙΗΣΗ: can't stat() fuse.gvfsd-fuse σύστημα αρχείων /run/user/1000/gvfs Οι πληροφορίες εξόδου ενδέχεται να είναι ελλιπείς.
Καταχώριση Ανοίξτε αρχεία που σχετίζονται με μια διεργασία χρησιμοποιώντας το όνομα διεργασίας
ο lsof
Η εντολή σας παρέχει επίσης μια επιλογή για να παραθέσετε τα ανοιχτά αρχεία χρησιμοποιώντας τα ονόματα των διεργασιών. Τα ονόματα πρέπει να παρέχονται στην εντολή ως συμβολοσειρά εισόδου. Δείτε την παρακάτω σύνταξη για να χρησιμοποιήσετε αυτήν την επιλογή.
Σύνταξη:
sudo lsof -c [Όνομα διαδικασίας]
Παράδειγμα:
sudo lsof -c mysql
Παραγωγή:
gaurav@ubuntu:~$ sudo lsof -c mysql lsof: ΠΡΟΕΙΔΟΠΟΙΗΣΗ: δεν μπορεί να γίνει stat() σύστημα αρχείων fuse.gvfsd-fuse /run/user/1000/gvfs Οι πληροφορίες εξόδου ενδέχεται να είναι ελλιπείς. PID ΕΝΤΟΛΗ ΧΡΗΣΤΗΣ FD ΤΥΠΟΣ ΜΕΓΕΘΟΣ/ΑΠΕΝΕΡΓΟΠΟΙΗΣΗ ΣΥΣΚΕΥΗΣ ΟΝΟΜΑ ΚΟΣΜΟΥ mysqld 1266 mysql cwd DIR 8,8 4096 3154135 /var/lib/mysql mysqld 1266 mysql rtd DIR 8,8 /288 1800/4096 mysql rtd /sbin/mysqld mysqld 1266 mysql mem REG 8,8 6288 5505444 /usr/lib/mysql/plugin/auth_socket.so mysqld 1266 mysql DEL REG 0,18 28127 mys 0,18 28127 mysq28 /[a] aio] mysqld 1266 mysql DEL REG 0,18 28125 /[aio] mysqld 1266 mysql mem REG 8,8 47568 2624441 /lib/x86_64-linux-gnu/libnss_files-gnu/libnss_files-2. lib/x86_64-linux-gnu/libnss_nis-2.27.so mysqld 1266 mysql mem REG 8,8 39744 2624438 /lib/x86_64-linux-gnu/libnss_compat-2.27.so
Η έξοδος θα είναι όπως αυτή στην οποία χρησιμοποιείται το Αναγνωριστικό διεργασίας αντί για το όνομα διεργασίας.
Αρχεία καταχώρισης που ανοίγουν από συνδέσεις δικτύου
Στο Linux, τα αρχεία μπορούν επίσης να έχουν τη μορφή πληροφοριών σχετικά με τις συνδέσεις δικτύου σας, τις συνδέσεις υλικού κ.λπ. Μπορούμε να χρησιμοποιήσουμε lsof
εντολή για τη λίστα των αρχείων που ανοίγονται από τη σύνδεση δικτύου. Χρησιμοποιήστε την ακόλουθη μέθοδο.
sudo lsof -i
Παραγωγή:
gaurav@ubuntu:~$ sudo lsof -i ΕΝΤΟΛΗ PID ΧΡΗΣΤΗΣ FD ΤΥΠΟΣ ΣΥΣΚΕΥΗΣ ΜΕΓΕΘΟΣ/ΑΠΕΝΕΡΓΟΠΟΙΗΣΗ ΟΝΟΜΑ ΚΟΣΜΟΥ systemd-r 969 systemd-resolve 12u IPv4 17357 0t0 UDP localhost:domain systemd-r 969 systemd-r 969 systemd3005 τομέας (LISTEN) systemd-r 969 systemd-resolve 15u IPv4 1685575 0t0 UDP ubuntu:48090->_gateway:domain avahi-dae 1028 avahi 12u IPv4 23810 0t0 UDPhi 23810 0t0 UDP 8-dav10 0t0 UDP 2-dav10 Avahi-dae 1028 Avahi 14U IPv4 23812 0t0 UDP *: 58999 Avahi-dae 1028 Avahi 15κα IPv6 23813 0t0 UDP *: 37512 mongod 1173 MongoDB 6U IPv4 28149 0t0 TCP localhost: 27017 (LISTEN) mysqld 1266 mysql 19U IPv4 25992 0t0 TCP localhost: mysql (LISTEN) apache2 1283 root 4u IPv6 28140 0t0 TCP *:http (LISTEN) gaurav@ubuntu:~$
Εδώ μπορούμε να δούμε τις πληροφορίες σχετικά με τα αρχεία που είναι ανοιχτά από τη σύνδεση δικτύου χρησιμοποιώντας το λσοφ -ι
εντολή.
συμπέρασμα
Σε αυτό το απλό σεμινάριο, μάθαμε πώς να παραθέτουμε ανοιχτά αρχεία για μια διεργασία στο Linux χρησιμοποιώντας διάφορες μεθόδους που είναι εύχρηστες. Για περισσότερες χρήσεις του lsof
εντολή, δείτε το lsof
σελίδα ανθρώπου.