Inleiding tot Lsof

Onder Linux worden veel objecten als een bestand beschouwd, ongeacht of het object feitelijk een bestand, apparaat, map of socket is. Het vermelden van een bestand is eenvoudig, daar is de shell voor ingebouwd ls. Maar wat als een gebruiker wil zien welke bestanden momenteel worden geopend door het webserverproces? Of als die gebruiker wilde weten welke bestanden in een bepaalde directory zijn geopend? Dat is waar het om lsofgaat. Stel je voor lsofals lsmet de toevoeging van "open bestanden".

Houd er rekening mee dat, hoewel de BSD's voor deze taak een ander hulpprogramma hebben fstat, er ook verschillende andere smaken van Unix (bijvoorbeeld Solaris) bestaan lsof. De opties en vlaggen zijn verschillend op de andere platforms, evenals het uiterlijk van de output, maar over het algemeen zou de kennis in dit artikel ook voor hen van toepassing moeten zijn.

Laten we eerst eens kijken naar het formaat van de lsofuitvoer en hoe het gelezen moet worden. De gebruikelijke uitvoer lsofzonder parameters zou er als volgt uitzien. Dit is bijgesneden voor leesbaarheid.

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

Deze kolommen betekenen het volgende:

  • COMMAND - Het proces waartoe een open bestand behoort, in dit voorbeeld is alles gerelateerd aan init.
  • PID - Het procesidentificatienummer van het proces.
  • GEBRUIKER - De gebruiker waaronder het proces draait. Want inithet is bijna altijd root.
  • FD - De bestandsbeschrijving van het bestand, de meest voorkomende is:
    • cwd- De huidige werkdirectory (u merkt misschien de gelijkenis met de pwdopdracht die de huidige werkdirectory afdrukt).
    • rtd - De hoofdmap van een proces.
    • txt- A text file, dit kan ofwel een configuratiebestand zijn dat betrekking heeft op het proces of de "broncode" die betrekking heeft op (of hoort bij) het proces.
    • mem - Een zogenaamd "memory mapped file", dat wil zeggen een segment van virtueel geheugen (lees: RAM) dat aan een bestand is toegewezen.
    • Een nummer - het nummer vertegenwoordigt de daadwerkelijke bestandsdescriptor, het teken na het nummer is de modus waarin het bestand wordt geopend:
    • r - Lees.
    • w - Schrijven.
    • u - Lezen en schrijven.
  • TYPE - Specificeert het daadwerkelijke type van het bestand, de meest voorkomende zijn:
    • REG - Een gewoon bestand.
    • DIR - Een directory.
    • FIFO - Als eerste erin, als eerste eruit.
  • APPARAAT - Het hoofd- en kleine nummer van het apparaat dat het bestand bevat.
  • SIZE - De grootte van het bestand, in bytes.
  • NODE - Het inode-nummer van het bestand.
  • NAAM - De naam van het bestand.

Dit is misschien een beetje overweldigend voor nu, maar als je lsofeen paar keer werkt, zal het snel in je hersenen wegzakken.

Zoals hierboven vermeld, is de output van lsofhier verkort. Zonder enige argumenten of filters, lsofproduceert honderden uitvoerlijnen die u alleen maar in de war zullen brengen.

Er zijn twee basismethoden om dat probleem op te lossen:

  • Gebruik een of meer van de lsofopdrachtregelopties om de resultaten te beperken.
  • Leid de uitvoer bijvoorbeeld door grep.

Hoewel de laatste optie misschien comfortabeler klinkt, omdat u de lsofopdrachtregelopties niet hoeft te onthouden , is deze over het algemeen niet zo flexibel en efficiënt, dus we zullen bij de eerste blijven.

Stel je voor dat je een bestand wilt openen met je favoriete teksteditor en dat de teksteditor je vertelt dat het alleen kan worden geopend in de alleen-lezen modus omdat een ander programma er al toegang toe heeft. lsofhelpt je erachter te komen wie de dader is:

lsof /path/to/your/file

Dit zal een uitvoer opleveren die er ongeveer als volgt uitziet:

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
vim 2679 root    5w   REG  254,1   121525 6035622 /root/lsof.txt

Blijkbaar ben je vergeten een oudere sessie te sluiten! Een soortgelijk probleem doet zich voor wanneer u een NFS-share probeert te ontkoppelen en u umountvertelt dat dit niet kan, omdat iets nog steeds toegang heeft tot de gekoppelde map. Nogmaals, lsofkan u helpen bij het identificeren van de boosdoener:

lsof +D /path/to/your/directory/

Let op de achterliggende schuine streep, dat is belangrijk. Anders lsofgaat u ervan uit dat u een gewoon bestand bedoelt. Laat u niet verwarren door de +voorkant van de vlag - lsofheeft zoveel opdrachtregelopties die het nodig heeft +naast de meer gebruikelijke -. De uitvoer zou er als volgt uitzien:

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

Dat betekent dat het proces mocpmet de PID 5637van de gebruiker musiceen bestand heeft geopend met de naam RMS_GNU_SONG.ogg. Maar zelfs na het afsluiten van dat proces is er nog steeds een probleem: het NFS-volume kan niet worden verwijderd.

lsofheeft een -cvlag die bestanden weergeeft, opende een willekeurige procesnaam.

lsof -c mocp

Dat zou een output opleveren die er als volgt uitziet:

mocp    9383  music    4r   REG   0,19 10147719 102367344 /home/Music/ANOTHER_RMS_GNU_SONG.ogg

In dit voorbeeld is er nog een andere mocpuitvoering, waardoor u de share niet kunt ontkoppelen. Nadat je dat proces hebt afgesloten, wil je zeker weten dat de gebruiker musicgeen andere potentieel problematische bestanden heeft geopend. lsofheeft een -uvlag voor het weergeven van bestanden die door een specifieke gebruiker zijn geopend. Onthoud dat een bestand niet altijd een gewoon bestand op uw harde schijf is!

lsof -u music

U kunt ook meerdere gebruikers passeren, gescheiden door komma's:

lsof -u music,moremusic

Een belangrijke opmerking over het standaardgedrag van lsof: de resultaten zijn OR- gebaseerd, wat betekent dat u bestandsresultaten zult zien die worden geopend door processen die eigendom zijn van de gebruiker musicof de gebruiker moremusic. Als u resultaten wilt zien die overeenkomen met processen die eigendom zijn van beide gebruikers, moet u de vlag doorgeven -a:

lsof -au music, moremusic

Omdat beide gebruikers in de groep zitten musicusers, kunt u ook bestanden op basis van groep weergeven:

lsof -g musicusers

U kunt ook vlaggen op de opdrachtregel combineren:

lsof -u music,moremusic -c mocp

or

lsof -u ^music +D /home/Music

In de laatste regel hebben we nog een speciale vlag toegevoegd - ^wat staat voor een logische NOT . Als de uitvoer leeg is na het uitvoeren van die opdracht, zal het ontkoppelen hoogstwaarschijnlijk succesvol zijn.

In de vorige voorbeelden keken we vooral naar reguliere bestanden. Hoe zit het met stopcontacten en netwerkverbindingen?

Om een ​​lijst weer te geven van alle huidige netwerkverbindingen lsofheeft de -ivlag:

lsof -i

De uitvoer lijkt op wat we tot nu toe hebben gezien ...

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)

... behalve één verschil: in plaats van bestandsnamen of mappen NAMEtoont de kolom nu verbindingsinformatie. Elke verbinding bestaat uit de volgende onderdelen:

  • Protocol.
  • Lokale hostnaam.
  • Bronpoort van de verbinding.
  • Bestemming DNS-naam.
  • Haven van bestemming.
  • Status van de verbinding.

Zoals met veel andere tools, kunt u ervoor kiezen om DNS-namen en -poorten ( -nen -Prespectievelijk) niet om te zetten. De vlag -iheeft aanvullende parameters. U kunt opgeven of om aan te tonen tcp, udpof icmpverbindingen of bepaalde poorten:

lsof -i :25
or
lsof -i :smtp

Nogmaals, parameters kunnen worden gecombineerd. Het volgende voorbeeld ...

lsof -i tcp:80

... toont u alleen TCP-verbindingen via poort 80. U kunt het ook combineren met de opties die u al kent van "klassieke" bestanden:

lsof -a -u httpd -i tcp

Dit toont u alle TCP-verbindingen die door de gebruiker zijn geopend httpd. Let op de -avlag, die het standaardgedrag van verandert lsof(zoals eerder vermeld). Zoals met de meeste opdrachtregelprogramma's, kunt u extreem diep gaan. Het volgende laat alleen TCP-verbindingen zien met de status "ESTABLISHED":

lsof -i -s TCP:ESTABLISHED

Op dit punt zou u een basiskennis moeten hebben van hoe lsofwerkt, samen met enkele veelvoorkomende gebruikssituaties. Voor meer informatie, zie de manpage van lsofop uw systeem.



Leave a Comment

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Kan AI vechten met toenemend aantal ransomware-aanvallen?

Ransomware-aanvallen nemen toe, maar kan AI helpen het nieuwste computervirus het hoofd te bieden? Is AI het antwoord? Lees hier weten is AI boezem of vloek

ReactOS: is dit de toekomst van Windows?

ReactOS: is dit de toekomst van Windows?

ReactOS, een open source en gratis besturingssysteem is hier met de nieuwste versie. Kan het voldoen aan de behoeften van moderne Windows-gebruikers en Microsoft uitschakelen? Laten we meer te weten komen over deze oude stijl, maar een nieuwere OS-ervaring.

Blijf verbonden via WhatsApp Desktop-app 24 * 7

Blijf verbonden via WhatsApp Desktop-app 24 * 7

WhatsApp heeft eindelijk de Desktop-app voor Mac- en Windows-gebruikers gelanceerd. Nu heb je eenvoudig toegang tot WhatsApp vanuit Windows of Mac. Beschikbaar voor Windows 8+ en Mac OS 10.9+

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Hoe AI procesautomatisering naar een hoger niveau kan tillen?

Lees dit om te weten hoe kunstmatige intelligentie populair wordt onder de kleinschalige bedrijven en hoe het de kansen vergroot om ze te laten groeien en hun concurrenten voorsprong te geven.

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

macOS Catalina 10.15.4 Supplement Update veroorzaakt meer problemen dan het oplost

Onlangs heeft Apple macOS Catalina 10.15.4 uitgebracht, een aanvullende update om problemen op te lossen, maar het lijkt erop dat de update meer problemen veroorzaakt die ertoe leiden dat mac-machines worden gemetseld. Lees dit artikel voor meer informatie

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

13 Commerciële data-extractietools voor big data

Wat is een logboekbestandssysteem en hoe werkt het?

Wat is een logboekbestandssysteem en hoe werkt het?

Onze computer slaat alle gegevens op een georganiseerde manier op, het zogenaamde Journaling-bestandssysteem. Het is een efficiënte methode waarmee de computer bestanden kan zoeken en weergeven zodra u op zoeken drukt.https://wethegeek.com/?p=94116&preview=true

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Technologische singulariteit: een verre toekomst van de menselijke beschaving?

Naarmate de wetenschap zich snel ontwikkelt en veel van onze inspanningen overneemt, nemen ook de risico's toe om onszelf te onderwerpen aan een onverklaarbare singulariteit. Lees, wat singulariteit voor ons kan betekenen.

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

Een inzicht in 26 Big Data-analysetechnieken: deel 1

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

De impact van kunstmatige intelligentie in de gezondheidszorg 2021

AI in de zorg heeft de afgelopen decennia grote sprongen gemaakt. De toekomst van AI in de gezondheidszorg groeit dus nog steeds met de dag.