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.
Tartalomjegyzék
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:
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.
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.
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.