A Linux lsof parancs használata

Ha a Linuxban minden fájl, akkor többnek kell lennie, mint a merevlemezen lévő fájloknak. Ez az oktatóanyag bemutatja, hogyan használhatja az lsof-ot az összes többi eszköz és folyamat megtekintéséhez, amelyeket fájlként kezelnek.

Linuxon minden egy fájl

A gyakran idézett kifejezés, hogy a Linuxban minden fájl, egyfajta igaz. A fájl bájtok gyűjteménye. Amikor beolvassák őket egy programba vagy elküldik egy nyomtatóra, úgy tűnik, hogy bájtfolyamot generálnak. Amikor írnak rájuk, egy bájtfolyamot fogadnak el.

Sok más rendszerösszetevő fogadja vagy generálja a bájtfolyamokat, például billentyűzetek, aljzatcsatlakozások, nyomtatók és kommunikációs folyamatok. Mivel vagy elfogadnak, generálnak, vagy elfogadnak és generálnak bájtfolyamokat, ezek az eszközök – nagyon alacsony szinten – úgy kezelhetők, mintha fájlok lennének.

Ez a tervezési koncepció leegyszerűsítette a Unix operációs rendszer megvalósítását. Ez azt jelentette, hogy kezelők, eszközök és API-k kis halmazát lehetett létrehozni a különféle erőforrások széles körének kezelésére.

A merevlemezen található adat- és programfájlok egyszerű régi fájlrendszer-fájlok. Az ls paranccsal kilistázhatjuk őket, és megtudhatunk róluk néhány részletet.

Hogyan tudhatunk meg az összes többi folyamatról és eszközről, amelyeket fájlként kezelünk? Az lsof parancsot használjuk. Ez felsorolja a rendszerben lévő nyitott fájlokat. Azaz mindent felsorol, amit úgy kezelnek, mintha fájl lenne.

Az lsof parancs

Sok olyan folyamat vagy eszköz, amelyről az lsof jelentést tud tenni, a root-hoz tartozik, vagy a root indította el őket, ezért a sudo parancsot kell használnia az lsof-fal.

És mivel ez a lista nagyon hosszú lesz, kevésbé fogjuk átvezetni.

sudo lsof | less

Mielőtt az lsof kimenet megjelenik, a GNOME-felhasználók figyelmeztető üzenetet láthatnak a terminál ablakában.

lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.

Az lsof megpróbálja feldolgozni az összes csatolt fájlrendszert. Ez a figyelmeztető üzenet azért jelenik meg, mert az lsof a GNOME virtuális fájlrendszer (GVFS). Ez egy speciális esete a fájlrendszer a felhasználói térben (BIZTOSÍTÉK). Hídként működik a GNOME, API-k és a kernel között. Senki – még a root sem – nem férhet hozzá ezekhez a fájlrendszerekhez, kivéve a tulajdonost, aki csatlakoztatta (jelen esetben a GNOME-ot). Ezt a figyelmeztetést figyelmen kívül hagyhatja.

Az lsof kimenete nagyon széles. A bal szélső oszlopok a következők:

  Titkosított mappák létrehozása a KDE Linux asztalon Vaults segítségével

A jobb szélső oszlopok a következők:

Az oszlopok lsof

Nem minden oszlop vonatkozik minden típusú megnyitott fájlra. Normális, hogy egyesek üresek.

Parancs: A fájlt megnyitó folyamathoz társított parancs neve.
PID: A fájlt megnyitó folyamat folyamatazonosító száma.
TID: Feladat (szál) Azonosító szám. Az üres oszlop azt jelenti, hogy nem feladat; ez egy folyamat.
Felhasználó: Annak a felhasználónak a felhasználói azonosítója vagy neve, akihez a folyamat tartozik, vagy annak a személynek a felhasználói azonosítója vagy bejelentkezési neve, aki a /proc könyvtárat birtokolja, ahol az lsof információkat talál a folyamatról.
FD: Megjeleníti a fájl fájlleíróját. A fájlleírók leírása alább található.
Típus: a fájlhoz társított csomópont típusa. A jegyzettípusokat az alábbiakban ismertetjük.
Eszköz: Tartalmazza az eszközszámokat, vesszővel elválasztva egy speciális karakteres, speciális blokk, normál, könyvtár- vagy NFS-fájlhoz, vagy egy kernel-hivatkozási címet, amely a fájlt azonosítja. Megjelenítheti egy Linux AX.25 foglalateszköz alapcímét vagy eszköznevét is.
Méret/Ki: A fájl méretét vagy a fájl eltolását mutatja bájtokban.
Csomópont: Megjeleníti egy helyi fájl csomópontszámát, vagy egy NFS-fájl inode számát a kiszolgáló gazdagépében vagy internetprotokoll típusában. Megjelenítheti az STR-t egy adatfolyamhoz vagy egy Linux AX.25 socket eszköz IRQ- vagy inode-számát.
Név: A beillesztési pont és a fájlrendszer nevét mutatja, amelyen a fájl található.

Az FD oszlop

Az FD oszlopban található fájlleíró a sok lehetőség egyike lehet; a man oldalt sorold fel mindet.

Az FD oszlop bejegyzése három részből állhat: egy fájlleíróból, egy mód karakterből és egy zár karakterből. Néhány általános fájlleíró:

cwd: Jelenlegi munkakönyvtár.
hiba: FD információs hiba (lásd a NÉV oszlopot).
ltx: Megosztott könyvtár szövege (kód és adatok).
m86: DOS Merge leképezett fájl.
mem: Memória-leképezett fájl.
mmap: Memória-leképezett eszköz.
pd: Szülőkönyvtár.
rtd: Gyökérkönyvtár.
txt: Program szövege (kód és adatok)
Egy szám, amely egy fájlleírót jelöl.

A mód karakter a következők egyike lehet:

r: Olvasási hozzáférés.
w: írási hozzáférés.
u: olvasási és írási hozzáférés.
‘ ‘: Szóköz karakter, ha a mód ismeretlen és nincs zár karakter.
–: Ismeretlen mód, és van egy zár karakter.

A zár karakter a következők egyike lehet:

r: Olvasási zárolás a fájl egy részén.
R: Olvasási zár a teljes fájlon.
w: Írja be a zárolást a fájl egy részére.
W: Írászár a teljes fájlra.
u: Bármilyen hosszúságú olvasási és írási zár.
U: Ismeretlen zártípus.
‘ ‘: Szóköz karakter. Nincs zár.

A TÍPUS oszlop

Vannak több mint 70 bejegyzés amelyek megjelenhetnek a TÍPUS oszlopban. Néhány gyakori bejegyzés, amelyet látni fog:

REG: Normál fájlrendszer fájl.
RENDEZŐ: Címtár.
FIFO: First In First Out.
CHR: Karakter speciális fájl.
BLK: Speciális fájl letiltása.
INET: Internet aljzat.
unix: UNIX tartományi socket

Lásd: Fájlokat megnyitó folyamatok

Egy adott fájlt megnyitó folyamatok megtekintéséhez adja meg a fájl nevét paraméterként az lsof számára. Például a kern.log fájlt megnyitó folyamatok megtekintéséhez használja ezt a parancsot:

sudo lsof /var/log/kern.log

Az lsof az egyetlen folyamat, az rsyslogd megjelenítésével válaszol, amelyet a felhasználó syslog indított el.

  A Linux cat and tac parancsainak használata

Tekintse meg a könyvtárból megnyitott összes fájlt

A könyvtárból megnyitott fájlok és az azokat megnyitó folyamatok megtekintéséhez adja át a könyvtárat az lsof-nak paraméterként. Használnia kell a +D (könyvtár) opciót.

A /var/log/ könyvtárban megnyitott összes fájl megtekintéséhez használja ezt a parancsot:

sudo lsof +D /var/log/

Az lsof az adott könyvtárban lévő összes megnyitott fájl listájával válaszol.

A /home könyvtárból megnyitott összes fájl megtekintéséhez használja a következő parancsot:

sudo lsof +D /home

Megjelennek a /home könyvtárból megnyitott fájlok. Vegye figyelembe, hogy néhány oszlopban rövidebb leírások esetén a teljes lista szűkebb.

A folyamat által megnyitott fájlok listája

Egy adott folyamat által megnyitott fájlok megtekintéséhez használja a -c (parancs) kapcsolót. Vegye figyelembe, hogy egyszerre több keresési kifejezést is megadhat az lsof számára.

sudo lsof -c ssh -c init

Az lsof azon fájlok listáját tartalmazza, amelyeket a parancssorban megadott folyamatok bármelyike ​​megnyitott.

Lásd: Felhasználó által megnyitott fájlok

Ha a megjelenítést egy adott felhasználó által megnyitott fájlokra szeretné korlátozni, használja a -u (felhasználó) kapcsolót. Ebben a példában azokat a fájlokat nézzük meg, amelyeket Mary tulajdonában lévő vagy a nevében elindított folyamatok nyitottak meg.

sudo lsof -u mary

Az összes felsorolt ​​fájl megnyitása Mary felhasználó nevében történt. Ide tartoznak azok a fájlok, amelyeket például az asztali környezet nyitott meg, vagy egyszerűen Mary bejelentkezésének eredményeként.

A felhasználó által megnyitott fájlok kizárása

A felhasználó által megnyitott fájlok kizárásához használja a ^ operátort. A felhasználók kizárása a listából megkönnyíti az Önt érdeklő információk megtalálását. A -u kapcsolót kell használnia, mint korábban, és a felhasználó nevének elejére a ^ karaktert kell hozzáadnia.

sudo lsof +D /home -u ^mary

Ezúttal a /home könyvtár listája nem tartalmazza azokat a fájlokat, amelyeket a Mary felhasználó nyitott meg.

Folyamat által megnyitott fájlok listázása

Egy adott folyamat által megnyitott fájlok felsorolásához használja a -p (folyamat) kapcsolót, és adja meg a folyamatazonosítót paraméterként.

sudo lsof - p 4610

Az Ön által megadott folyamatazonosítóval megnyitott összes fájl megjelenik az Ön számára.

A fájlt megnyitó folyamatazonosítók listázása

Az adott fájlt megnyitó folyamatok folyamatazonosítóinak megtekintéséhez használja a -t (terse) kapcsolót, és adja meg a fájl nevét a parancssorban.

sudo lsof -t /usr/share/mime/mime.cache

A folyamatazonosítók egy egyszerű listában jelennek meg.

Használja az ÉS és VAGY kereséseket

Soroljuk fel azokat a fájlokat, amelyeket Mary felhasználó nyitott meg, és amelyek az SSH folyamatokhoz kapcsolódnak. Tudjuk, hogy egynél több keresési elemet is megadhatunk a parancssorban, ezért ennek egyszerűnek kell lennie.

sudo lsof -u mary -c ssh

Most nézzük meg az lsof kimenetét. Ez nem néz ki jól; olyan bejegyzések vannak a kimenetben, amelyeket a root indított el.

Nem erre számítottunk. Mi történt?

Ha több keresési kifejezést ad meg, az lsof minden olyan fájlt visszaad, amely megfelel az első vagy a második keresési kifejezésnek, stb. Más szóval, VAGY keresést hajt végre.

  Hogyan készítsünk ablakkompozíciót könnyű Linux asztali számítógépeken a Compton segítségével

Ahhoz, hogy az lsof ÉS keresést hajtson végre, használja az -a (és) kapcsolót. Ez azt jelenti, hogy csak azok a fájlok fognak megjelenni, amelyek megfelelnek az első keresési kifejezésnek, a második keresési kifejezésnek és így tovább.

Próbáljuk meg újra, és használjuk az -a kapcsolót.

sudo lsof -u mary -c ssh -a

Mostantól minden fájl a listában olyan, amelyet Mary nyitott meg vagy Mary nevében nyitottak meg, és az SSH paranccsal vannak társítva.

A kijelző automatikus frissítése

Használhatjuk a +|-r (repeat) opciót, hogy az lsof-t ismétlési módba helyezzük. Az ismétlési opció kétféleképpen alkalmazható: +r vagy -r. Azt is hozzá kell adnunk, hogy hány másodpercet várjon, mielőtt frissíti a kijelzőt.

Ha bármelyik formátumban használja az ismétlés opciót, az lsof a szokásos módon jeleníti meg az eredményeket, de egy szaggatott vonalat ad a kijelző aljához. Megvárja a parancssorban megadott számú másodpercet, majd új eredményekkel frissíti a képernyőt.

Az -r kapcsolóval ez addig folytatódik, amíg meg nem nyomja a Ctrl+C billentyűkombinációt. A +r formátum esetén ez addig folytatódik, amíg nincs megjeleníthető eredmény, vagy amíg meg nem nyomja a Ctrl+C billentyűkombinációt.

sudo lsof -u mary -c ssh -a -r5

Jegyezze meg a szaggatott vonalat a lista alján. Ez különválaszt minden új adatmegjelenítést a kimenet frissítésekor.

Internetkapcsolatokhoz kapcsolódó fájlok megjelenítése

Az -i (internet) opció lehetővé teszi a hálózati és internetkapcsolatokhoz kapcsolódó folyamatok által megnyitott fájlok megtekintését.

lsof -i

A hálózati és internetkapcsolaton keresztül megnyitott összes fájl megjelenik.

Internetkapcsolatokhoz kapcsolódó fájlok megjelenítése folyamatazonosító szerint

Egy adott folyamatazonosítóhoz társított internetkapcsolatok által megnyitott fájlok megtekintéséhez adja hozzá a -p és az -a kapcsolót.

Itt olyan fájlokat keresünk, amelyeket internet- vagy hálózati kapcsolattal, 606-os azonosítójú folyamattal nyitott meg.

sudo lsof -i -a -p 606

Megjelenik a 606-os folyamatazonosítóval megnyitott összes fájl, amely internet- vagy hálózati kapcsolathoz van társítva.

Internetkapcsolatokhoz és parancsokhoz kapcsolódó fájlok megjelenítése

A -c (parancs) kapcsolóval kereshetünk bizonyos folyamatok által megnyitott fájlokat. Az ssh-folyamathoz kapcsolódó internet- vagy hálózati kapcsolatok által megnyitott fájlok kereséséhez használja a következő parancsot:

lsof -i -a -c ssh

Az ssh folyamatok miatt megnyitott összes fájl megjelenik a kimenetben.

Internetkapcsolatokhoz és portokhoz kapcsolódó fájlok megjelenítése

Lsof jelentést készíthetünk azokról a fájlokról, amelyeket internet vagy hálózati kapcsolat nyitott meg egy adott porton. Ehhez a : karaktert használjuk, amelyet a portszám követ.

Itt arra kérjük az lsof-ot, hogy sorolja fel azokat a fájlokat, amelyeket a 22-es porton keresztül megnyitott a hálózati vagy internetkapcsolat.

lsof -i :22

Az összes felsorolt ​​fájlt a 22-es porthoz társított folyamatok nyitották meg (ez az SSH-kapcsolatok alapértelmezett portja).

Internetkapcsolatokhoz és protokollokhoz kapcsolódó fájlok megjelenítése

Megkérhetjük az lsof-ot, hogy mutassa meg azokat a fájlokat, amelyeket a hálózati és internetkapcsolatokhoz kapcsolódó folyamatok nyitottak meg, és amelyek egy adott protokollt használnak. TCP, UDP és SMTP közül választhatunk. Használjuk a TCP protokollt, és nézzük meg, mit kapunk.

sudo lsof -i tcp

A felsorolt ​​fájlok csak a TCP protokollt használó folyamatok által megnyitottak.

Csak a felületet karcoltuk meg

Ez jó alapozás az lsof néhány általános használati esetéhez, de ennél sokkal többről van szó. Hogy mennyivel többet, azt abból lehet megítélni, hogy a kézikönyv oldala több mint 2800 soros.

Az lsof paranccsal egyre mélyebbre lehet fúrni a nyitott fájlok és pszeudofájlok rétegeit. Készítettünk egy térképvázlatot; benne van az atlasz a man oldalt.