Linux lsof Command

, Author

De “lsof” commando tool in Linux is een van de vele ingebouwde tools die is super handig voor het controleren van de “lijst van open bestanden”. Ja, de term “lsof” is de afkorting van de opdracht.

Er zijn een aantal processen die de hele tijd in het systeem draaien, die toegang hebben tot verschillende bestanden van het systeem. Deze bestanden kunnen schijfbestanden zijn, scripts, netwerk sockets, devices, named pipes, en andere. Met “lsof” is het mogelijk om een heleboel dingen uit te voeren, zoals debuggen. Het is ook heel nuttig voor systeembeheerders om uit te zoeken welke bestanden worden benaderd door welke processen. Een van de handigste scenario’s is wanneer je op het punt staat om een bestandssysteem te unmounten, maar er nog steeds toegang tot is.

Zonder verdere omhaal, laten we aan de slag gaan met “lsof”! Ik ga ervan uit dat op uw huidige UNIX/Linux systeem “lsof” al is geïnstalleerd.

which lsof

Dit rapporteert het volledige pad van het commando, in dit geval, “lsof”.

“lsof”-versie
lsof -v

Dit rapporteert diepgaande versie-informatie van “lsof”, inclusief de builddatum van het binaire bestand, de compilerversie, compilervlaggen en andere.

Basic “lsof” use

Run “lsof” by itself.

lsof

Dit rapporteert een BIG lijst van alle bestanden die door het systeem worden benaderd op het moment dat het commando wordt uitgevoerd.

Hoewel alle velden voor zichzelf spreken, raken de meesten in de war over de kolommen “FD” en “TYPE” en hun waarden. Laten we ze eens bekijken.

FD: Afkorting van “File Descriptor”. Dit levert de volgende waarden op.

  • cwd: Huidige werkdirectory
  • rtd: Root directory
  • txt: Programmatekst (gegevens, code, en andere)
  • mem: Memory-mapped file
  • err: FD-informatiefout
  • mmap: Memory-mapped device
  • ltx: Gedeelde bibliotheektekst (gegevens en code)
  • m86: DOS Merge mapped file

Er zijn ook andere waarden die je opvallen in de kolom, zoals “1u” gevolgd door u, r, w, enz. waarde. Wat betekenen die?

  • r: Leestoegang
  • w: Schrijftoegang
  • u: Lees- en schrijftoegang
  • – : Onbekende modus en het bevat een vergrendelingsteken
  • ‘ ‘: Modus is onbekend en er is geen vergrendelingsteken

TYPE: Beschrijft het bestandstype en de identificatie ervan. De waarden zijn als volgt.

  • DIR: Directory
  • CHR: Character-special file
  • REG: Regular file
  • FIFO: First in, first out

Gebruikersspecifieke geopende bestanden

Linux is een briljant multi-user platform. Meerdere gebruikers kunnen tegelijkertijd toegang krijgen tot het systeem en bewerkingen uitvoeren waar ze toestemming voor hebben.

Om te zien welke bestanden door een bepaalde gebruiker worden geopend, voert u het volgende commando uit.

lsof -u <gebruikersnaam>

Maar voor het controleren van gebruikers met een hogere rang, heeft “lsof” het privilege van de “superuser” nodig.

sudo lsof -u <gebruikersnaam>

Hoe zit het met het controleren van alle commando’s en bestanden waartoe een bepaalde gebruiker toegang heeft? Voer de volgende uit.

lsof -i -u <gebruikersnaam>

Ook hier geldt dat voor gebruikers met een hogere rang, “lsof” het “superuser”-privilege nodig zal hebben.

sudo lsof -i -u <gebruikersnaam>

Poortspecifieke lopende processen

Om alle processen te achterhalen die momenteel een bepaalde poort gebruiken, roept u “lsof” op met de vlag “-i” gevolgd door de protocol- en poortinformatie.

lsof -i<46><protocol><@hostnaam|host_adres>
:<service|poort>

Om bijvoorbeeld alle programma’s te achterhalen die momenteel poort 80 via het TCP/IP-protocol gebruiken, voert u het volgende commando uit.

lsof -i TCP:80

Deze methode kan ook worden gebruikt om alle processen weer te geven die poorten binnen een bepaald bereik gebruiken, bijvoorbeeld 1 tot 1000. De structuur van het commando is gelijk aan de vorige, met een beetje magie bij het poortnummer.

lsof -i TCP:1-1000

Protocol-specifieke processen

Hier zijn 2 voorbeelden die de processen tonen die momenteel het IPv4- en het IPv6-protocol gebruiken.

lsof -i 4

lsof -i 6

Lijsten van netwerkverbindingen

Het volgende commando geeft een overzicht van alle netwerkverbindingen van het huidige systeem.

lsof -i

Uitsluiten met ^

Ja, we kunnen specifieke gebruiker, poort, FD en anderen uitsluiten met het teken “^”. Je moet het alleen voorzichtig gebruiken, zodat je niet de hele uitvoer verknoeit.

In dit voorbeeld, laten we alle processen van de gebruiker “root” uitsluiten.

lsof -u^root

Er zijn andere manieren om dit uitsluitingsmechanisme met “lsof” te gebruiken, bijvoorbeeld met de vlaggen zoals “-c”, “-d” enzovoort. Niet alle vlaggen ondersteunen dit mechanisme. Daarom raad ik aan om een demo uit te proberen met deze methode met een vlag voordat je het implementeert in sommige scripts.

PID zoeken

PID is een belangrijke eigenschap van ieder draaiend proces op het systeem. Het maakt het mogelijk om een bepaald proces nauwkeuriger te lokaliseren. De procesnaam is in veel situaties niet erg behulpzaam, omdat dezelfde binary kopieën van zichzelf kan maken en verschillende taken parallel kan uitvoeren.

Als je niet weet hoe je de PID van een proces kunt achterhalen, gebruik dan gewoon “ps” om een lijst van alle draaiende processen te maken en filter de uitvoer met “grep” met de procesnaam en/of commando’s.

ps -A

Nu, voer het filteren uit met “grep”.

ps -A | grep <process_or_command>

Nu kunt u nagaan welke bestanden door die PID worden geopend.

lsof -p <PID >

Lijst met open bestanden voor een specifiek apparaat

De functionaliteit van “lsof” is niet alleen beperkt tot deze functies. U kunt het resultaat van “lsof” ook filteren op apparaatbasis. Voor dit doel ziet het commando er ongeveer zo uit.

lsof <device_mount_point>

Dit commando is super handig om alle draaiende processen te achterhalen met hun eigenaar info die toegang hebben tot een bepaald bestandssysteem. Als u problemen hebt met het ontkoppelen van een bestandssysteem, is dit de beste manier.

lsof <busy_device_mount_point>

Lijst geopende bestanden onder een directory

Gelijk aan het vorige voorbeeld, geeft u gewoon het pad van de directory door aan “lsof” om te achterhalen of een proces er toegang toe heeft.

Note: “lsof” zal de directory recursief controleren, dus het kan even duren.

=lsof +D <directory_path>

Bonus: beëindig alle gebruikersactiviteit

Zij uiterst voorzichtig met dit onderdeel, omdat het alles wat een gebruiker aan het doen is, in de war kan sturen. Het volgende commando doodt alle lopende processen van een gebruiker.

sudo kill -9 `lsof -t -u <username`

Final thoughts

De mogelijkheden van “lsof” houden hier niet op. Degenen die hier genoemd zijn, zijn degenen die we het meest nodig zullen hebben op een dagelijkse basis. Er zijn genoeg andere functies van “lsof” die van pas kunnen komen (in specifieke gevallen, natuurlijk).

Voor alle beschikbare functies en hun gebruik, kijk op de man en info pagina’s van “lsof”.

man lsof

info lsof

lsof -?

Genieten!

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.