...

lsof effectief gebruiken: open bestanden en processen analyseren

Ik stel lsof linux om binnen enkele seconden te zien welk proces welk bestand, welke socket of welke poort openhoudt. Zo kan ik geblokkeerde logbestanden en bezette Poorten en blokkeerde bestanden zonder omwegen en los storingen doelgericht op.

Centrale punten

Om een goede start te maken, vat ik de belangrijkste punten samen Aspecten kort samengevat.

  • Bronnen zichtbaar maken: processen, bestanden, mappen, apparaten, pipes, sockets.
  • Filters gebruik: op procesnaam (-c), PID (-p), gebruiker (-u), bestand, map (+d/+D), poort (-i).
  • Fout beperken: geblokkeerde bestanden opsporen, poortconflicten oplossen, vastgelopen diensten toewijzen.
  • Netwerk controleren: actieve verbindingen en bezette poorten snel identificeren.
  • Werkstroom stroomlijnen: eerst afbakenen, vervolgens gericht controleren en daarna handelen.

Waarom lsof in het dagelijks leven belangrijk is

Ik gebruik lsof, wanneer een dienst niet start, een bestand de status „busy“ aangeeft of een poort al bezet is. De tool brengt het bestand, het proces, de gebruiker en het netwerk samen in een overzichtelijk Bekijk. Ik zie meteen welk PID de toegang blokkeert en sinds wanneer. Zo kan ik direct ingrijpen in plaats van te gissen, en het juiste proces beëindigen in plaats van per ongeluk de verkeerde dienst te stoppen. Vooral op productieservers win ik hiermee minuten tot uren, omdat ik de oorzaak direct aan het proces kan koppelen. Deze aanpak bespaart tickets, vermindert uitval en zorgt voor robuuste Bevindingen.

De basissyntaxis en de uitvoer begrijpen

De basisvorm luidt lsof [opties] en geeft zonder parameters alle momenteel geopende objecten. Op systemen met een hoge belasting filter ik de uitvoer, in plaats van me door duizenden regels heen te werken. Belangrijk is dat Linux het begrip „bestand“ breed opvat: hieronder vallen mappen, apparaten, bibliotheken en netwerk-Sockets. In de uitvoer zijn kolommen als COMMAND, PID, USER, FD, TYPE en NAME nuttig. Ik kijk eerst naar FD (bestandsdescriptor), TYPE (REG, DIR, IPv4/6) en NAME met pad of poortnummer. Wie deze kolommen leest, begrijpt in korte tijd de huidige systeemstatus en kan de resources overzichtelijk toewijzen Processen.

Installatie en machtigingen in de praktijk

Op veel distributies is lsof niet vooraf geïnstalleerd. Ik installeer het daarom tijdig via de pakketbeheerder (apt install lsof, dnf install lsof, yum install lsof of pacman -S lsof), zodat het in geval van een incident direct beschikbaar is. Voor een volledig overzicht voer ik lsof meestal uit met sudo omdat zonder verhoogde rechten veel vermeldingen met „permission denied“ eindigen of helemaal ontbreken. Ik begin niettemin bewust zonder root, kijk hoever ik kom en verhoog de rechten alleen als dat nodig is. Op systemen met SELinux of AppArmor houd ik er rekening mee dat beveiligingscontexten het zicht kunnen beperken; afhankelijk van de build toont lsof Ik voeg extra contexten toe. Bij massale zoekopdrachten onderdruk ik waarschuwingen met -w, zodat scripts robuust blijven.

FD-velden en -typen veilig lezen

De kolom FD is mijn sleutel tot begrip. Veelvoorkomende waarden zijn:

  • cwd: de huidige werkdirectory van het proces.
  • txt: het uitvoerbare bestand (tekstsegment) van het proces.
  • mem: geladen gedeelde bibliotheken en in het geheugen afgebeelde bestanden (memory mappings).
  • 0u, 1w, 2w: Standaarddescriptoren (stdin, stdout, stderr) met modus r (lezen), w (schrijven) of u (lezen/schrijven).
  • hogere cijfers zoals 3u, 7r: reguliere open descriptoren, vaak bestanden, sockets of pipes.

Uit TYPE lees ik de objectklasse: REG (normaal bestand), DIR (lijst), CHR/BLK (teken-/blokapparaat), FIFO (Pijp), IPv4/IPv6 (netwerk), UNIX (Unix-domain-socket). In NAAM hier staat het pad of, bij sockets, het eindpunt, bijvoorbeeld. TCP *:80 (LISTEN) of UDP 127.0.0.1:123. Als ik (verwijderd) Als ik dat aan het eind zie, weet ik dat een bestand is verwijderd, maar nog steeds door een PID wordt vastgehouden – een typische reden voor „verdwenen“ schijfruimte.

Gericht filteren: bestanden, mappen, poorten

Ik baken eerst de context af en begin dan met een passende Filters. Voor een map gebruik ik lsof +D /var/log (recursief) of lsof +d /var/log (alleen de map zelf). Afzonderlijke bestanden controleer ik direct, bijvoorbeeld lsof /var/log/syslog, om schrijfprocessen te bekijken. Voor poorten stel ik lsof -i:80, lsof -i:443 of in het algemeen lsof -i een. Ik combineer dat graag met -nP, zodat lsof geen IP-adressen en poorten hoeft op te zoeken en sneller werkt. Zo ontstaat er in een mum van tijd een overzichtelijke systeemstatus uit een onoverzichtelijke situatie Afbeelding.

Filters combineren en verfijnen

Voor herhaalbare analyses combineer ik filters met -a logisch gekoppeld. Zo krijg ik alleen resultaten die aan alle voorwaarden voldoen. Voorbeelden:

  • lsof -a -p 1234 -d cwd,txt,mem – alleen de werkdirectory, het binaire bestand en de geladen bibliotheken van een proces.
  • lsof -a -iTCP -sTCP:ESTABLISHED -p 1234 – alleen actieve TCP-verbindingen van een PID.
  • lsof -a -u www-data +d /var/www – Bestanden in de map /var/www die processen van de gebruiker www-data openhouden.

Met -d filter ik op descriptoren (getallen of namen zoals cwd, mem). -U geeft me gericht Unix-domain-sockets weer in de uitvoer als ik lokale IPC-problemen wil onderzoeken. Zo verminder ik ruis en zie ik precies wat relevant is voor de vraag.

Processen en gebruikers snel toewijzen

Als ik een servicenaam ken, geeft lsof -c nginx alle geopende bestanden van de webserver, inclusief Bibliotheken, configuraties en sockets. Voor een eenduidige analyse werk ik vaak met het PID: lsof -p 1234 toont alle handles van een specifiek proces. Gebruikersgerelateerde controles voer ik uit met lsof -u mysql of een ander account, om de geopende bronnen van een serviceaccount zichtbaar te maken. Bij uitgebreidere analyses vul ik het procesoverzicht aan met Procesboekhouding en zie zo hoe vaak en hoe lang programma’s bronnen gebruiken. Deze combinatie van proces-, gebruikers- en activiteitsoverzicht helpt me bij lastige verschijnselen snel tot de Oorzaak.

Bijzondere gevallen: verwijderde bestanden, Logrotate en bestanden die veel ruimte innemen

Als er „te weinig“ schijfruimte is, vind ik de oorzaak vaak met lsof +L1: Het geeft een overzicht van bestanden die al zijn verwijderd, maar nog door processen worden vastgehouden. Typische voorbeelden zijn logbestanden die zijn geroteerd, grote tijdelijke bestanden of debug-dumps. In plaats van de partitie overhaast te vergroten, beëindig ik doelgericht de weergegeven PID’s of stuur ik het gebruikelijke signaal om opnieuw te laden. Voor logdiensten geef ik de voorkeur aan een schone herlaadbeurt van de betreffende dienst, zodat descriptoren opnieuw worden geopend. Noodoplossingen zoals truncate of het direct verwijderen zonder het proces opnieuw te starten, stelt het probleem alleen maar uit.

Bij lange gegevensstromen controleer ik bovendien de kolom SIZE/UIT (afhankelijk van de build zichtbaar) om te zien of een proces aan een zeer grote offset vastzit. Dit verklaart waarom een handle zoveel geheugenruimte in beslag neemt, hoewel het bestand als verwijderd is gemarkeerd.

Typische foutenscenario's systematisch oplossen

Ik verwijder geblokkeerde bestanden nadat lsof mij het juiste proces heeft laten zien. In plaats van diensten lukraak te stoppen, beëindig ik gericht de PID of start ik precies die dienst opnieuw op. Poortconflicten los ik op met lsof -i:, bekijk ik de bindende PID en pas ik vervolgens de poort, de service of de firewall aan. Als een proces vastloopt, controleer ik de open descriptoren ervan met lsof -p en kijk of hij wacht op een bestand, een pipe of een socket. Voor diepgaande analyses vul ik het overzicht aan met strace gericht, om systeemaanroepen in realtime te volgen. Zo los ik terugkerende storingen op betrouwbare wijze op en leg ik de vaste stappen vast voor de toekomst Incidenten.

Rekening houden met containers en naamruimten

Uitgelegd in containeromgevingen (bijvoorbeeld met eigen netwerk-namespaces) lsof Ik zie inconsistenties tussen de host en de container. Ik roep lsof ofwel rechtstreeks vanuit de container op, ofwel ga ik vanaf de host naar de namespace van het doelproces. Zo kom ik erachter waarom een poort in de container de status LISTEN heeft, terwijl deze op de host „vrij“ lijkt: ze bevinden zich in verschillende namespaces. Op dezelfde manier ga ik te werk met mount-namespaces: bind-mounts en overlay-bestandssystemen verschijnen in de kolom NAME met hun werkelijke paden en helpen bij het opsporen van verkeerd ingestelde volumes. Ik sorteer open descriptoren bovendien per gebruiker en cgroup wanneer ik services via supervisors of orkestratieoplossingen beheer.

Netwerkanalyse met lsof -i

Met lsof -i registreer ik actieve verbindingen en luister ik mee naar bezette Poorten. Filters zoals lsof -iTCP -sTCP:LISTEN lijst specifiek diensten in de LISTEN-status op. Voor afzonderlijke protocollen werk ik met lsof -iUDP of specifieke poorten zoals lsof -i:25 voor mailservers. Ik controleer bovendien of een PID meerdere sockets openhoudt, wat kan duiden op lekken of eindeloze lussen. Bij beveiligingscontroles vergelijk ik de verwachte services met de uitvoer en detecteer ik onbekende of vergeten Diensten. Dit netwerkoverzicht bespaart tijd, omdat ik niet meerdere tools tegelijk hoef te raadplegen en alles op één plek kan zien.

Meer informatie over netwerkdetails

Voor bijzonder gerichte zoekopdrachten gebruik ik de adres- en poortsyntaxis van -i: Ik beperk de zoekopdracht tot bron- of doeladressen (lsof [email protected]) of combineer adres en poort (lsof [email protected]:443). Met -sTCP:ESTABLISHED zie ik productieve sessies, terwijl -sTCP:LISTEN alleen listeners weergeeft. Ik gebruik UDP-analyses om diensten met veel kortstondige sockets zichtbaar te maken (DNS, Syslog, NTP). Daarnaast controleer ik of processen meer dan nodig zijn blootgesteld aan het netwerk (bijvoorbeeld listeners op 0.0.0.0 (in plaats van een lokale interface). Dit vermindert de inspanningen die later nodig zijn voor het beveiligen van het systeem.

Tabeloverzicht: veelgebruikte opties

Ik gebruik een paar kernopties heel regelmatig en breid ze uit, afhankelijk van Scenario. In de volgende tabel staan de belangrijkste schakelaars op een rijtje, met een korte uitleg en een voorbeeld. Zo vind ik sneller de juiste vorm en hoef ik niet lang in de helpteksten te zoeken. Ik pas deze opties modulair toe en blijf daardoor flexibel. Wie deze basiskennis onder de knie heeft, lost veel opgaven op met slechts één oproep.

Optie Doel Voorbeeld
-i Netwerkverbindingen en bezette poorten weergeven lsof -i:443
-c NAAM Filteren op procesnaam (prefix-match) lsof -c nginx
-p PID Alle geopende bestanden van een PID lsof -p 1234
-u GEBRUIKER Beschikbare bronnen van een gebruiker lsof -u mysql
+d DIR Alleen de opgegeven map lsof +d /var/log
+D DIR Recursief door de map lsof +D /var/log
-nP Geen DNS- en poortnaam-lookup (sneller) lsof -nP -i
-t Alleen PID's weergeven (geschikt voor scripts) lsof -t -i:80
+L1 Verwijderde, maar nog openstaande bestanden weergeven lsof +L1

Ik gebruik -t vaak om PID’s rechtstreeks door te geven aan scripts, bijvoorbeeld aan kill of systemctl. Met +L1 vind ik processen die verwijderde bestanden nog steeds openhouden en zo opslagruimte blokkeren. In combinatie met -r (herhaal) merk ik veranderingen in korte Afstanden. Wie stapsgewijs test, voorkomt verkeerde interpretaties en werkt consistent. Zo blijft de diagnose reproduceerbaar en meetbaar duidelijk.

Uitvoer efficiënt verder verwerken

Ik ga direct verder met het opmaken van de uitvoer, zodat ik sneller resultaten krijg gebruik. Met lsof -t -i:80 | xargs -r kill -TERM sluit ik zo’n beetje alle processen af die poort 80 bezetten. Voor rapporten maak ik gebruik van lsof -nP -i | grep LISTEN terug en filter specifiek op statussen. Ook awk helpt: lsof -nP | awk '{print $1,$2,$3,$9}' beperkt het overzicht tot naam, PID, gebruiker en pad. Ik documenteer werkende éénregelige commando’s en bespaar mezelf later Zoek op volgens geschikte patronen. Kleine hulpjes zoals watch 'lsof -nP -i:443' tonen veranderingen in realtime en leiden sneller tot een beslissing.

Automatisering en parseerbare uitvoer

Voor terugkerende controles gebruik ik de machinaal leesbare vorm van lsof met -F. Ik selecteer alleen de velden die ik nodig heb (bijv. proces, commando, gebruiker, FD, naam) en parseer ze vervolgens op een stabiele manier verder. Voorbeelden:

  • lsof -Fn -Fp -Fc -Fu -t -i:443 – minimalistische velden voor scripts die alleen PID’s of namen nodig hebben.
  • lsof -Fpcun -a -iTCP -sTCP:LISTEN – Luisteraars registreren en gericht benaderen.

Met -r 2 Ik genereer om de twee seconden een „live“-weergave en vergelijk momentopnames. In pijplijnen voeg ik wijzigingen samen (sorteren, uniq, diff), om nieuwe of verdwijnende handles te detecteren. Ik bouw bewust time-outs in, zodat query’s bij hoge belasting niet vastlopen en monitoringtaken netjes worden afgerond.

Best practices en veiligheidsaspecten

Ik begin analyses met minimale rechten en breid deze pas uit als wortel, als ik bepaalde rechten mis. Zo beperk ik risico’s en houd ik de logbestanden overzichtelijk. Ik voer regelmatig scans uit met lsof -i in plaats van de diensten die ik had verwacht, om ongebruikelijke listeners of verbindingen te detecteren. Verdachte PID’s onderzoek ik vervolgens gericht aan de hand van bestanden, bibliotheken en Sockets. Tijdens onderhoudsvensters zorg ik ervoor dat er geen verwijderde, maar nog openstaande bestanden ruimte verspillen. Wie beveiliging serieus neemt, neemt lsof op in checklists en reageert op afwijkingen met vaste Stappen.

Veelvoorkomende struikelblokken en goede oplossingen

  • Niet alle vermeldingen zijn zichtbaar: Zonder root-toegang mis ik vaak processen van andere gebruikers of kernelgerelateerde handles. Ik gebruik doelgericht sudo.
  • Langzame uitvoer: Ik schakel resoluties uit met -nP, vermijd recursie en beperk met -a hard.
  • +D te duur: Recursieve mapdoorlopen kunnen enorm lang zijn. Ik begin met +d of specifieke paden en breid deze pas uit als dat nodig is.
  • Poort bezet, situatie onduidelijk: Ik combineer lsof -i: -nP met -t voor de PID en ga naar lsof -p dieper.
  • „Er is geen “vrije“ plek: lsof +L1 vindt geopende, maar verwijderde bestanden. Start daarna het proces gericht opnieuw op of sluit het af.
  • Containers/naamruimten: Ik controleer de query in de juiste naamruimte, anders zie ik verkeerde listeners of zie ik openstaande bestanden over het hoofd.

Prestaties en grenzen begrijpen

Op zeer grote systemen kost een volledige lsof-scan tijd en veroorzaakt deze merkbare Belasting. Daarom pas ik al vroeg filters toe en schakel ik met -nP alle resoluties. Bij enorme aantallen handelingen controleer ik tegelijkertijd de Beperkingen op bestandsdescriptoren en pas ze indien nodig aan. Scripts moeten rekening houden met time-outs en met -t alleen PID's doorgeven om de hoeveelheid gegevens beperkt te houden. Ik documenteer uitzonderingen en bouw terugkerende controles in automatiseringen in. Zo blijft de diagnose ook onder belasting betrouwbaar en duidelijk bestuurbaar.

Praktijkworkflow: van symptoom naar oorzaak

Ik begin met de vraag: gaat het om een bestand, een proces of Haven? Daarna kies ik de juiste inleiding, bijvoorbeeld lsof /pad/naar/bestand, lsof -p of lsof -i:. Ik controleer USER, FD, TYPE en NAME en noteer wat verwachtbaar lijkt en wat verrassend is. Vervolgens onderneem ik actie: het proces opnieuw starten, de configuratie aanpassen, de limiet verhogen of de poort vrijgeven. Bij onzekerheid leg ik de status vast, maak ik een back-up van de logbestanden en herhaal ik de meting na de wijziging. Deze werkwijze houdt me gefocust en levert een duidelijk Bewijsketen.

Checklist: snelle recepten voor elke dag

  • Wie blokkeert het bestand? lsof /pad/naar/bestand – PID aflezen, het proces gericht opnieuw starten of beëindigen.
  • Welke dienst gebruikt de poort? lsof -nP -i: – Het conflict oplossen, de poort of het bind-adres aanpassen.
  • Waar verdwijnt de parkeerplaats naartoe? lsof +L1 – openstaande en verwijderde bestanden opsporen, de betrokken PID’s opnieuw starten.
  • Loopt het proces vast bij de I/O? lsof -p – let op pipes, sockets of bestanden; voeg indien nodig strace toe.
  • Welke luisteraars zijn er daadwerkelijk? lsof -nP -iTCP -sTCP:LISTEN – vergelijken met de lijst met verwachtingen.
  • Welke bronnen gebruikt een serviceaccount? lsof -u – Afwijkingen per account herkennen.

Samenvatting voor het dagelijks leven

lsof laat me zien wie welk bestand, welke map of welke poort blokkeert. Met -c, -p, -u, +d/+D en -i beperk ik het zicht snel. Ik maak geblokkeerde bestanden weer toegankelijk, zoek poortconflicten op en ontdek ongebruikelijke Verbindingen. In combinatie met -nP Ik werk snel en houd de uitvoer overzichtelijk. Voor diepgaandere analyses voeg ik tools toe, documenteer ik werkende éénregelige commando’s en bouw ik terugkerende controles in automatiseringen in. Zo blijft de diagnose met lsof direct, betrouwbaar en meetbaar effectief.

Huidige artikelen