A Linux “lsof” parancs eszköze egyike a sok beépített eszköznek, amely szuper hasznos a “nyitott fájlok listájának” ellenőrzésére. Igen, az “lsof” kifejezés a feladat rövidítése.
A rendszerben folyamatosan számos folyamat fut, amelyek hozzáférnek a rendszer különböző fájljaihoz. Ezek a fájlok lehetnek lemezfájlok, szkriptek, hálózati aljzatok, eszközök, named pipes és mások. Az “lsof” segítségével sok mindent el lehet végezni, például hibakeresést. A rendszergazdák számára is nagyon hasznos, hogy kiderítsék, milyen fájlokhoz milyen folyamatok férnek hozzá. Az egyik leghasznosabb forgatókönyv, amit találtam, amikor egy fájlrendszert épp le akarsz csatolni, de még mindig hozzáférnek hozzá.
Minden további nélkül kezdjünk neki az “lsof”-nak! Feltételezem, hogy a jelenlegi UNIX/Linux rendszereden már telepítve van az “lsof”.
Ez a parancs, jelen esetben az “lsof” teljes elérési útvonalát jelenti.
lsof -v
Ez az “lsof” parancs részletes verzióinformációit jelenti, beleértve a bináris állomány építési dátumát, a fordító verzióját, a fordító zászlóit és egyebeket.
Az “lsof” alapvető használata
Az “lsof” futtatása önmagában.
Ez egy NAGY listát jelent az összes olyan fájlról, amelyhez a rendszer a parancs futásának pillanatában hozzáfér.
Míg az összes mező magától értetődő, legtöbbször az “FD” és a “TYPE” oszlopok és azok értékei kavarodnak össze. Nézzük meg őket.
FD: A “File Descriptor” rövidítése. A következő értékeket adja meg:
- cwd:
- rtd: Gyökérkönyvtár
- txt: Programszöveg (adatok, kód és egyéb)
- mem: Memória leképezésű fájl
- err: FD információs hiba
- mmap:
- ltx: Memória leképezésű eszköz
- ltx: Megosztott könyvtári szöveg (adat és kód)
- m86: DOS Merge mapped file
Az oszlopban más értékek is feltűnnek, mint például az “1u”, amelyet u, r, w, stb. érték követ. Mit jelentenek ezek?
- r: Olvasási hozzáférés
- w: Írási hozzáférés
- u: Olvasási és írási hozzáférés
- – : Ismeretlen mód és tartalmaz záró karaktert
- ‘ ‘ ‘: A mód ismeretlen és nincs záró karakter
TYPE: Leírja a fájltípust és annak azonosítóját. Az értékek a következők:
- DIR: Directory
- CHR: Karakterspecifikus fájl
- REG: Normál fájl
- FIFO:
A felhasználó-specifikusan megnyitott fájlok
A Linux egy zseniális többfelhasználós platform. Egyszerre több felhasználó is hozzáférhet a rendszerhez, és elvégezheti azokat a műveleteket, amelyekre jogosultsággal rendelkezik.
Az adott felhasználó által megnyitott fájlok megtekintéséhez futtassa a következő parancsot.
A magasabb rangú felhasználók ellenőrzéséhez azonban az “lsof”-nak “superuser” jogosultságra van szüksége.
Hogyan nézzük meg az összes parancsot és fájlt, amihez egy adott felhasználó hozzáfér? Futtassa a következőt.
A magasabb rangú felhasználók esetében az “lsof”-nak szüksége lesz a “superuser” jogosultságra.
Port-specifikus futó folyamatok
Az összes olyan folyamat megkereséséhez, amely jelenleg egy adott portot használ, hívja az “lsof”-ot a “-i” jelzővel, amelyet a protokoll és a port információ követ.
:<service|port>
Ha például a TCP/IP protokollon keresztül a 80-as portot jelenleg elérő összes programot szeretné megnézni, futtassa a következő parancsot.
Ez a módszer arra is használható, hogy megmutassa az összes olyan folyamatot, amely egy bizonyos tartományba, például 1 és 1000 közé eső portot használ. A parancs felépítése hasonló az előzőekhez, egy kis varázslattal a portszám résznél.
Protokollspecifikus folyamatok
Itt van 2 példa, amely az IPv4 és IPv6 protokollt jelenleg használó folyamatokat mutatja.
Hálózati kapcsolatok listázása
A következő parancs az aktuális rendszer összes hálózati kapcsolatát jelenti.
Kizárás ^-vel
Igen, a “^” karakterrel kizárhatunk konkrét felhasználót, portot, FD-t és másokat. Csak óvatosan kell használni, hogy ne rontsuk el az egész kimenetet.
Ebben a példában a “root” felhasználó összes folyamatát kizárjuk.
Az “lsof” segítségével más módon is használhatjuk ezt a kizáró mechanizmust, például az olyan zászlókkal, mint a “-c”, “-d” stb. Nem minden flag támogatja ezt a mechanizmust. Ezért javaslom, hogy próbáljunk ki egy demót ezzel a módszerrel bármilyen flaggel, mielőtt implementálnánk néhány szkriptbe.
PID keresés
A PID a rendszerben futó bármely folyamat fontos tulajdonsága. Lehetővé teszi egy adott folyamat finomabb behatárolását. A folyamatnév sok helyzetben nem igazán hasznos, mivel ugyanaz a bináris másolatokat készíthet magáról, és különböző feladatokat végezhet párhuzamosan.
Ha nem tudja, hogyan szerezze meg egy folyamat PID-jét, egyszerűen használja a “ps” programot az összes futó folyamat listázására, és szűrje a kimenetet a “grep” segítségével a folyamat nevével és/vagy parancsaival.
Most végezze el a szűrést a “grep” segítségével.
Most nézzük meg, hogy az adott PID milyen fájlokhoz fér hozzá.
A megnyitott fájlok listázása egy adott eszközhöz
Az “lsof” funkcionalitása nem csak ezekre a funkciókra korlátozódik. Az “lsof” eredményét eszközalapon is szűrheti. Erre a célra a parancs valahogy így fog kinézni.
Ez a parancs szuper hasznos ahhoz, hogy megtudja az összes futó folyamatot a tulajdonosukkal együtt, amelyek hozzáférnek egy adott fájlrendszerhez. Ha gondot okoz egy fájlrendszer leválasztása, ez a legjobb megoldás.
List opened files under a directory
Hasonlóan az előző példához, csak add át a könyvtár elérési útvonalát az “lsof”-nak, hogy megtudd, hozzáfér-e valamelyik folyamat.
Figyelem: az “lsof” rekurzívan ellenőrzi a könyvtárat, ezért időbe telhet.
Bónusz: minden felhasználói tevékenység megszüntetése
Legyen rendkívül óvatos ezzel a résszel, mert egyszerűen összezavarhat mindent, amit a felhasználó csinál. A következő parancs megöli a felhasználó összes futó folyamatát.
Végső gondolatok
Az “lsof” funkciói nem csak itt érnek véget. Az itt említettek azok, amelyekre a mindennapokban a legnagyobb szükségünk lesz. Rengeteg más funkciója is van az “lsof”-nak, ami jól jöhet (természetesen speciális esetekben).
Az összes elérhető funkciót és azok használatát az “lsof” man és info oldalain találod meg.
Érvezd!