Në Linux, shumë objekte konsiderohen skedar, pavarësisht nëse objekti është në të vërtetë një skedar, pajisje, drejtori ose fole. Renditja e një skedari është e lehtë, ka një guaskë të integruar lspër këtë. Por, çka nëse një përdorues do të donte të shihte se cilët skedarë hapen aktualisht nga procesi i serverit në internet? Apo nëse ai përdorues donte të zbulonte se cilët skedarë hapen në një drejtori të caktuar? Këtu lsofhyn në lojë. Imagjinoni lsofsi një lsme shtimin e "skedarëve të hapur".
Ju lutemi vini re se ndërsa BSD-të kanë një dobi të ndryshme për këtë punë fstat, disa shije të tjera të Unix (për shembull Solaris) kanë gjithashtu lsof. Opsionet dhe flamujt janë të ndryshëm në platformat e tjera, si dhe pamja e daljes, por përgjithësisht njohuritë në këtë artikull duhet të jenë të zbatueshme edhe për to.
Së pari, le të hedhim një vështrim në formatin e lsofprodhimit dhe mënyrën se si duhet lexuar. Prodhimi i zakonshëm i lsofpa asnjë parametër do të ngjante si më poshtë. Kjo është shkurtuar për lexueshmëri.
COMMAND PID TID USER FD TYPE DEVICE SIZE/OFF NODE NAME
init 1 root cwd DIR 254,1 4096 2 /
init 1 root rtd DIR 254,1 4096 2 /
init 1 root txt REG 254,1 36992 7077928 /sbin/init
init 1 root mem REG 254,1 14768 7340043 /lib/x86_64-linux-gnu/libdl-2.13.so
init 1 root mem REG 254,1 1603600 7340040 /lib/x86_64-linux-gnu/libc-2.13.so
init 1 root mem REG 254,1 126232 7340078 /lib/x86_64-linux-gnu/libselinux.so.1
init 1 root mem REG 254,1 261184 7340083 /lib/x86_64-linux-gnu/libsepol.so.1
init 1 root mem REG 254,1 136936 7340037 /lib/x86_64-linux-gnu/ld-2.13.so
init 1 root 10u FIFO 0,14 0t0 4781 /run/initctl
Këto kolona nënkuptojnë sa vijon:
- KOMANDA - Procesi të cilit i përket një skedar i hapur, në këtë shembull gjithçka lidhet me
init.
- PID - Numri i identifikimit të procesit të procesit në fjalë.
- USER - Përdoruesi nën të cilin funksionon procesi. Sepse
init, është pothuajse gjithmonë root.
- FD - Përshkruesi i skedarit të skedarit, më i zakonshmi është:
cwd- Drejtoria aktuale e punës (mund të vëreni ngjashmëri me pwdkomandën që printon direktorinë aktuale të punës).
rtd - Drejtoria kryesore e një procesi.
txt- A text file, kjo mund të nënkuptojë ose një skedar konfigurimi që lidhet me procesin ose "kodin burimor" të lidhur me (ose që i përket) procesit.
mem - Një i ashtuquajtur "skedar i hartuar me memorie", që nënkupton një segment të memories virtuale (lexo: RAM) që i është caktuar një skedari.
- Një numër - numri përfaqëson përshkruesin aktual të skedarit, karakteri pas numrit është mënyra në të cilën hapet skedari:
r - Lexo.
w - Shkruaj.
u - Lexoni dhe shkruani.
- LLOJI - Përcakton llojin aktual të skedarit, më të zakonshmet janë:
REG - Një skedar i rregullt.
DIR - Një drejtori.
FIFO - I pari brenda, i pari jashtë.
- DEVICE - Numri kryesor dhe i vogël i pajisjes që mban skedarin.
- SIZE - Madhësia e skedarit, në bajt.
- NODE - Numri inode i skedarit.
- EMRI - Emri i skedarit.
Kjo mund të jetë pak dërrmuese për momentin, por nëse punoni lsofdisa herë me të, do të zhytet shpejt në trurin tuaj.
Siç u përmend më lart, prodhimi i lsofështë shkurtuar këtu. Pa asnjë argument apo filtër, lsofprodhon qindra rreshta të prodhimit të cilat vetëm do t'ju lënë të hutuar.
Ekzistojnë dy qasje themelore për të zgjidhur këtë problem:
- Përdorni një ose më shumë nga
lsofopsionet e linjës së komandës për të ngushtuar rezultatet.
- Tuboni daljen përmes, për shembull,
grep.
Ndërsa opsioni i fundit mund të duket më i rehatshëm pasi nuk do t'ju duhet të mësoni përmendësh lsofopsionet e linjës së komandës, në përgjithësi nuk është aq fleksibël dhe efikas, kështu që ne do t'i përmbahemi të parës.
Le të imagjinojmë se dëshironi të hapni një skedar me redaktuesin tuaj të preferuar të tekstit dhe se redaktori i tekstit ju thotë se ai mund të hapet vetëm në modalitetin vetëm për lexim, sepse një program tjetër po e qaset tashmë. lsofdo t'ju ndihmojë të zbuloni se kush është autori:
lsof /path/to/your/file
Kjo do të prodhojë një dalje të ngjashme me këtë:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vim 2679 root 5w REG 254,1 121525 6035622 /root/lsof.txt
Me sa duket, keni harruar të mbyllni dhe seancën më të vjetër! Një problem shumë i ngjashëm ndodh kur përpiqeni të çmontoni një ndarje NFS dhe umountju thotë se nuk mundet sepse diçka po i qaset ende dosjes së montuar. Përsëri, lsofmund t'ju ndihmojë në identifikimin e fajtorit:
lsof +D /path/to/your/directory/
Vini re prerjen pasuese, kjo është e rëndësishme. Përndryshe lsofdo të supozohet se keni parasysh një skedar të rregullt. Mos u hutoni nga pjesa e +përparme e flamurit - lsofka kaq shumë opsione të linjës së komandës që i duhen +përveç atyre më të zakonshmet -. Prodhimi do të duket si ky:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mocp 5637 music 4r REG 0,19 10147719 102367344 /home/Music/RMS_GNU_SONG.ogg
Kjo do të thotë se procesi mocp, me PID 5637, që i përket përdoruesit musicka hapur një skedar të quajtur RMS_GNU_SONG.ogg. Megjithatë, edhe pas mbylljes së këtij procesi, ka ende një problem - vëllimi NFS nuk mund të çmontohet.
lsofka një -cflamur që shfaq skedarët e hapur një emër procesi arbitrar.
lsof -c mocp
Kjo do të prodhonte një rezultat që duket si ky:
mocp 9383 music 4r REG 0,19 10147719 102367344 /home/Music/ANOTHER_RMS_GNU_SONG.ogg
Në këtë shembull, ekziston një shembull tjetër i mocpekzekutimit, që ju pengon të çmontoni ndarjen. Pas mbylljes së këtij procesi, dëshironi të siguroheni që përdoruesi të musicmos ketë skedarë të tjerë potencialisht problematikë të hapur. lsofka një -uflamur për shfaqjen e skedarëve të hapur nga një përdorues specifik. Mbani mend, një skedar nuk është gjithmonë vetëm një skedar i rregullt në hard diskun tuaj!
lsof -u music
Ju gjithashtu mund të kaloni disa përdorues, të ndarë me presje:
lsof -u music,moremusic
Një shënim i rëndësishëm për sjelljen e paracaktuar të lsof: rezultatet janë të bazuara në OSE , që do të thotë se do të shihni rezultatet e skedarëve të hapura nga proceset që janë në pronësi ose të përdoruesit musicose të përdoruesit moremusic. Nëse dëshironi të shihni procese që përputhen me rezultate që janë në pronësi të të dy përdoruesve, atëherë duhet të kaloni flamurin -a:
lsof -au music, moremusic
Meqenëse të dy përdoruesit janë në grup musicusers, atëherë mund të listoni gjithashtu skedarë bazuar në grup:
lsof -g musicusers
Ju gjithashtu mund të kombinoni flamujt e linjës së komandës:
lsof -u music,moremusic -c mocp
or
lsof -u ^music +D /home/Music
Në rreshtin e fundit, ne shtuam një tjetër flamur të veçantë - ^, i cili nënkupton një NOT logjik . Nëse dalja është bosh pas ekzekutimit të asaj komande, atëherë çmontimi ka shumë të ngjarë të jetë i suksesshëm.
Në shembujt e mëparshëm, ne shikuam kryesisht skedarët e rregullt. Po në lidhje me prizat dhe lidhjet e rrjetit?
Për të renditur të gjitha lidhjet aktuale të rrjetit lsofka -iflamurin:
lsof -i
Rezultati duket i ngjashëm me atë që kemi parë deri tani...
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
owncloud 3509 myuser 25u IPv4 44946 0t0 TCP strix.local:34217->myserver.vultr.com:https (ESTABLISHED)
firefox 3612 myuser 82u IPv4 49663 0t0 TCP strix.local:43897->we-in-f100.1e100.net:https (ESTABLISHED)
ssh 3784 myuser 3u IPv4 10437 0t0 TCP strix.local:51416->someserver.in:ssh (ESTABLISHED)
wget 4140 myuser 3w IPv4 45586 0t0 TCP strix.local:54460->media.ccc.de:http (CLOSE_WAIT)
... përveç një ndryshimi: në vend të emrave të skedarëve ose drejtorive, kolona NAMEtani tregon informacionin e lidhjes. Çdo lidhje përbëhet nga pjesët e mëposhtme:
- Protokolli.
- Emri lokal i hostit.
- Porta e burimit të lidhjes.
- Emri i DNS-së së destinacionit.
- Porti i destinacionit.
- Statusi i lidhjes.
Ashtu si me shumë mjete të tjera, ju mund të tërhiqeni nga zgjidhja e emrave dhe porteve DNS ( -ndhe -P, përkatësisht). Flamuri -imerr parametra shtesë. Mund të specifikoni nëse do të shfaqen ose jo tcp, udpose icmplidhjet ose porte të caktuara:
lsof -i :25
or
lsof -i :smtp
Përsëri, parametrat mund të kombinohen. Shembulli i mëposhtëm...
lsof -i tcp:80
... do t'ju tregojë vetëm lidhjet TCP duke përdorur portën 80. Mund ta kombinoni gjithashtu me opsionet që tashmë i njihni nga skedarët "klasikë":
lsof -a -u httpd -i tcp
Kjo do t'ju tregojë të gjitha lidhjet TCP të hapura nga përdoruesi httpd. Vini re -aflamurin, i cili ndryshon sjelljen e paracaktuar të lsof(siç u përmend më herët). Ashtu si me shumicën e mjeteve të linjës së komandës, mund të shkoni jashtëzakonisht thellë. Më poshtë do t'ju tregojë vetëm lidhjet TCP, gjendja e të cilave është "KRIJUAR":
lsof -i -s TCP:ESTABLISHED
Në këtë pikë, duhet të keni një kuptim themelor se si lsoffunksionon, së bashku me disa raste të përdorimit të zakonshëm. Për lexim të mëtejshëm, shihni faqen e menaxhimit të lsofnë sistemin tuaj.