Παραδείγματα εντολών 10 lsof (Λίστα ανοιχτών αρχείων) στο Linux


Αυτή είναι η συνεχιζόμενη σειρά εντολών Linux και σε αυτό το άρθρο, θα εξετάσουμε την εντολή lsof με πρακτικά παραδείγματα. Το lsof σημαίνει ότι το "LiSt Open Files" χρησιμοποιείται για να μάθουμε ποια αρχεία είναι ανοιχτά από ποια διαδικασία Linux.

Όπως όλοι γνωρίζουμε το Linux/Unix θεωρεί τα πάντα ως αρχείο (σωλήνες, πρίζες, κατάλογοι, συσκευές, κ.λπ.). Ένας από τους λόγους για να χρησιμοποιήσετε την εντολή lsof είναι όταν δεν είναι δυνατή η αποπροσάρτηση ενός δίσκου καθώς λέει ότι χρησιμοποιούνται τα αρχεία. Με τη βοήθεια της εντολής lsof, μπορούμε εύκολα να αναγνωρίσουμε τα αρχεία που χρησιμοποιούνται.

1. Καταχωρίστε όλα τα ανοιχτά αρχεία με την εντολή lsof

Στο παρακάτω παράδειγμα, θα εμφανιστεί μια μακρά λίστα με ανοιχτά αρχεία, μερικά από αυτά έχουν εξαχθεί για καλύτερη κατανόηση και εμφανίζει τις στήλες όπως Εντολή, PID, ΧΡΗΣΤΗΣ<, FD, TYPE, κ.λπ.

lsof

COMMAND    PID      USER   FD      TYPE     DEVICE  SIZE/OFF       NODE NAME
init         1      root  cwd      DIR      253,0      4096          2 /
init         1      root  rtd      DIR      253,0      4096          2 /
init         1      root  txt      REG      253,0    145180     147164 /sbin/init
init         1      root  mem      REG      253,0   1889704     190149 /lib/libc-2.12.so
init         1      root   0u      CHR        1,3       0t0       3764 /dev/null
init         1      root   1u      CHR        1,3       0t0       3764 /dev/null
init         1      root   2u      CHR        1,3       0t0       3764 /dev/null
init         1      root   3r     FIFO        0,8       0t0       8449 pipe
init         1      root   4w     FIFO       0,8       0t0       8449 pipe
init         1      root   5r      DIR       0,10         0          1 inotify
init         1      root   6r      DIR       0,10         0          1 inotify
init         1      root   7u     unix 0xc1513880       0t0       8450 socket

Οι ενότητες και οι αξίες τους είναι αυτονόητες. Ωστόσο, θα εξετάσουμε με μεγαλύτερη ακρίβεια τις στήλες FD & TYPE.

FD – σημαίνει περιγραφή αρχείου και μπορεί να δει ορισμένες από τις τιμές ως:

  • cwd τρέχων κατάλογος εργασίας
  • rtd ριζικός κατάλογος
  • txt κείμενο προγράμματος (κώδικας και δεδομένα)
  • mem αρχείο με αντιστοίχιση μνήμης

Επίσης, στους αριθμούς στηλών FD όπως 1u υπάρχει ο πραγματικός περιγραφέας αρχείου και ακολουθείται από u,r,w της λειτουργίας του ως:

  • r για πρόσβαση ανάγνωσης.
  • w για πρόσβαση εγγραφής.
  • u για πρόσβαση ανάγνωσης και εγγραφής.

ΤΥΠΟΣ – των αρχείων και η αναγνώρισή του.

  • DIR – Κατάλογος
  • REG – Κανονικό αρχείο
  • CHR – Ειδικό αρχείο χαρακτήρων.
  • FIFO – First In First Out

2. Καταχωρίστε τα Ανοιγμένα Αρχεία Ειδικά Χρήστη

Η παρακάτω εντολή θα εμφανίσει τη λίστα με όλα τα ανοιχτά αρχεία του χρήστη tecmint.

lsof -u tecmint

COMMAND  PID    USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME
sshd    1838 tecmint  cwd    DIR      253,0     4096      2 /
sshd    1838 tecmint  rtd    DIR      253,0     4096      2 /
sshd    1838 tecmint  txt    REG      253,0   532336 188129 /usr/sbin/sshd
sshd    1838 tecmint  mem    REG      253,0    19784 190237 /lib/libdl-2.12.so
sshd    1838 tecmint  mem    REG      253,0   122436 190247 /lib/libselinux.so.1
sshd    1838 tecmint  mem    REG      253,0   255968 190256 /lib/libgssapi_krb5.so.2.2
sshd    1838 tecmint  mem    REG      253,0   874580 190255 /lib/libkrb5.so.3.3

3. Βρείτε τις διεργασίες που εκτελούνται σε συγκεκριμένη θύρα

Για να μάθετε όλες τις εκτελούμενες διεργασίες Linux μιας συγκεκριμένης θύρας, απλώς χρησιμοποιήστε την ακόλουθη εντολή με την επιλογή -i. Το παρακάτω παράδειγμα θα εμφανίσει όλες τις εκτελούμενες διεργασίες της θύρας 22.

lsof -i TCP:22

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1471    root    3u  IPv4  12683      0t0  TCP *:ssh (LISTEN)
sshd    1471    root    4u  IPv6  12685      0t0  TCP *:ssh (LISTEN)

4. Ανοίξτε τα αρχεία μόνο IPv4 & IPv6

Στο παρακάτω παράδειγμα εμφανίζεται μόνο τα αρχεία δικτύου IPv4 και IPv6 ανοιχτά με ξεχωριστές εντολές.

lsof -i 4

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc    8u  IPv4  11331      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600

# lsof -i 6

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    9u  IPv6  11333      0t0  UDP *:sunrpc
rpcbind   1203     rpc   10u  IPv6  11335      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
rpc.statd 1277 rpcuser   10u  IPv6  11858      0t0  UDP *:55800
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)
cupsd     1346    root    6u  IPv6  12112      0t0  TCP localhost:ipp (LISTEN)

5. Καταχωρίστε τα Open Files of TCP Port Ranges 1-1024

Για να παραθέσετε όλη την εκτελούμενη διαδικασία των ανοιχτών αρχείων του TCP Η θύρα κυμαίνεται από 1-1024.

lsof -i TCP:1-1024

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
cupsd   1346    root    7u  IPv4  12113      0t0  TCP localhost:ipp (LISTEN)
sshd    1471    root    4u  IPv6  12685      0t0  TCP *:ssh (LISTEN)
master  1551    root   13u  IPv6  12898      0t0  TCP localhost:smtp (LISTEN)
sshd    1834    root    3r  IPv4  15101      0t0  TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
sshd    1838 tecmint    3u  IPv4  15101      0t0  TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
sshd    1871    root    3r  IPv4  15842      0t0  TCP 192.168.0.2:ssh->192.168.0.1:groove (ESTABLISHED)
httpd   1918    root    5u  IPv6  15991      0t0  TCP *:http (LISTEN)
httpd   1918    root    7u  IPv6  15995      0t0  TCP *:https (LISTEN)

6. Εξαίρεση χρήστη με χαρακτήρα «^».

Εδώ, έχουμε εξαιρέσει τον χρήστη root. Μπορείτε να εξαιρέσετε έναν συγκεκριμένο χρήστη χρησιμοποιώντας το ‘^’ με την εντολή όπως φαίνεται παραπάνω.

lsof -i -u^root

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc    8u  IPv4  11331      0t0  TCP *:sunrpc (LISTEN)
rpcbind   1203     rpc    9u  IPv6  11333      0t0  UDP *:sunrpc
rpcbind   1203     rpc   10u  IPv6  11335      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600
rpc.statd 1277 rpcuser    5r  IPv4  11836      0t0  UDP *:soap-beep
rpc.statd 1277 rpcuser    8u  IPv4  11850      0t0  UDP *:55146
rpc.statd 1277 rpcuser    9u  IPv4  11854      0t0  TCP *:32981 (LISTEN)
rpc.statd 1277 rpcuser   10u  IPv6  11858      0t0  UDP *:55800
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)

7. Μάθετε ποιος αναζητά Ποια αρχεία και εντολές;

Το παρακάτω παράδειγμα δείχνει ότι ο χρήστης tecmint χρησιμοποιεί εντολές όπως ο κατάλογος ping και /etc.

lsof -i -u tecmint

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
bash    1839 tecmint  cwd    DIR  253,0    12288   15 /etc
ping    2525 tecmint  cwd    DIR  253,0    12288   15 /etc

8. Καταχωρίστε όλες τις συνδέσεις δικτύου

Η ακόλουθη εντολή με την επιλογή “-i” εμφανίζει τη λίστα όλων των συνδέσεων δικτύου “LISTENING & ESTABLISHED”.

lsof -i

COMMAND    PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
rpcbind   1203     rpc    6u  IPv4  11326      0t0  UDP *:sunrpc
rpcbind   1203     rpc    7u  IPv4  11330      0t0  UDP *:954
rpcbind   1203     rpc   11u  IPv6  11336      0t0  TCP *:sunrpc (LISTEN)
avahi-dae 1241   avahi   13u  IPv4  11579      0t0  UDP *:mdns
avahi-dae 1241   avahi   14u  IPv4  11580      0t0  UDP *:58600
rpc.statd 1277 rpcuser   11u  IPv6  11862      0t0  TCP *:56428 (LISTEN)
cupsd     1346    root    6u  IPv6  12112      0t0  TCP localhost:ipp (LISTEN)
cupsd     1346    root    7u  IPv4  12113      0t0  TCP localhost:ipp (LISTEN)
sshd      1471    root    3u  IPv4  12683      0t0  TCP *:ssh (LISTEN)
master    1551    root   12u  IPv4  12896      0t0  TCP localhost:smtp (LISTEN)
master    1551    root   13u  IPv6  12898      0t0  TCP localhost:smtp (LISTEN)
sshd      1834    root    3r  IPv4  15101      0t0  TCP 192.168.0.2:ssh->192.168.0.1:conclave-cpp (ESTABLISHED)
httpd     1918    root    5u  IPv6  15991      0t0  TCP *:http (LISTEN)
httpd     1918    root    7u  IPv6  15995      0t0  TCP *:https (LISTEN)
clock-app 2362   narad   21u  IPv4  22591      0t0  TCP 192.168.0.2:45284->www.gov.com:http (CLOSE_WAIT)
chrome    2377   narad   61u  IPv4  25862      0t0  TCP 192.168.0.2:33358->maa03s04-in-f3.1e100.net:http (ESTABLISHED)
chrome    2377   narad   80u  IPv4  25866      0t0  TCP 192.168.0.2:36405->bom03s01-in-f15.1e100.net:http (ESTABLISHED)

9. Αναζήτηση κατά PID

Το παρακάτω παράδειγμα δείχνει μόνο ποιανού το PID είναι 1 [Ένα].

lsof -p 1

COMMAND PID USER   FD   TYPE     DEVICE SIZE/OFF   NODE NAME
init      1 root  cwd    DIR      253,0     4096      2 /
init      1 root  rtd    DIR      253,0     4096      2 /
init      1 root  txt    REG      253,0   145180 147164 /sbin/init
init      1 root  mem    REG      253,0  1889704 190149 /lib/libc-2.12.so
init      1 root  mem    REG      253,0   142472 189970 /lib/ld-2.12.so

10. Σκοτώστε όλη τη δραστηριότητα συγκεκριμένου χρήστη

Μερικές φορές μπορεί να χρειαστεί να σκοτώσετε όλες τις διαδικασίες για έναν συγκεκριμένο χρήστη. Η παρακάτω εντολή θα σκοτώσει όλες τις διεργασίες του χρήστη tecmint.

kill -9 `lsof -t -u tecmint`

Σημείωση: Εδώ, δεν είναι δυνατό να δοθούν παραδείγματα όλων των διαθέσιμων επιλογών, αυτός ο οδηγός είναι μόνο για να δείξει πώς μπορεί να χρησιμοποιηθεί η εντολή lsof. Μπορείτε να ανατρέξετε στη σελίδα χρήστη της εντολής lsof για να μάθετε περισσότερα σχετικά με αυτήν. Μοιραστείτε το εάν πιστεύετε ότι αυτό το άρθρο είναι χρήσιμο μέσα από το πλαίσιο σχολίων μας παρακάτω.