Jeg sætter lsof Linux for på få sekunder at se, hvilken proces der holder hvilken fil, hvilket socket eller hvilken port åben. På den måde kan jeg opdage blokerede logfiler, optagede Havne og blokerede filer uden omveje og løser problemer målrettet.
Centrale punkter
For at komme godt i gang vil jeg sammenfatte de vigtigste Aspekter kort sagt.
- Ressourcer Gøre synlige: processer, filer, mapper, enheder, pipes, sockets.
- Filtre anvendelse: efter procesnavn (-c), PID (-p), bruger (-u), fil, mappe (+d/+D), port (-i).
- Fejl indsnævre: finde blokerede filer, løse portkonflikter, identificere tjenester, der er gået i stå.
- Netværk Kontrollere: Hurtigt identificere aktive forbindelser og optagede porte.
- Arbejdsgang stramme op: først indsnævre omfanget, derefter foretage en målrettet gennemgang og til sidst handle.
Hvorfor lsof er vigtigt i hverdagen
Jeg bruger lsof, hvis en tjeneste ikke starter, en fil viser status „busy“, eller en port allerede er optaget. Værktøjet sammenkæder fil, proces, bruger og netværk i en overskuelig Udsigt. Jeg kan straks se, hvilken PID der har adgang, og hvor længe den har haft det. På den måde handler jeg i stedet for at gætte og afslutter den rigtige proces, i stedet for ved en fejl at stoppe den forkerte tjeneste. Især på produktive servere sparer jeg dermed minutter til timer, fordi jeg kan spore årsagen direkte til processen. Denne tilgang sparer supportanmodninger, reducerer nedbrud og skaber pålidelige Resultater.
Forståelse af grundlæggende syntaks og output
Grundformen er lsof [indstillinger] og returnerer alle aktuelt åbne uden parametre Objekter. På systemer med stor belastning filtrerer jeg udskriften i stedet for at arbejde mig igennem tusindvis af linjer. Det er vigtigt at bemærke, at Linux har en bred definition af „fil“: dette omfatter mapper, enheder, biblioteker og netværks-Stik. I udskriften er kolonner som COMMAND, PID, USER, FD, TYPE og NAME nyttige. Jeg kigger først på FD (fildeskriptor), TYPE (REG, DIR, IPv4/6) og NAME med angivelse af sti eller port. Hvis man læser disse kolonner, får man hurtigt et overblik over systemets aktuelle tilstand og kan fordele ressourcerne på en overskuelig måde Processer.
Installation og rettigheder i praksis
I mange distributioner er lsof er ikke forudinstalleret. Jeg installerer det derfor i god tid via pakkehåndteringen (apt install lsof, dnf install lsof, yum install lsof eller pacman -S lsof), så den er tilgængelig med det samme, hvis der opstår en hændelse. For at få et fuldstændigt overblik kører jeg derfor som regel lsof med sudo fordi mange poster uden udvidede rettigheder ender med „permission denied“ eller mangler helt. Jeg starter alligevel bevidst uden root, tjekker, hvor langt jeg kommer, og udvider rettighederne kun, hvis det er nødvendigt. På systemer med SELinux eller AppArmor er jeg opmærksom på, at sikkerhedskontekster kan begrænse overblikket; afhængigt af buildet viser lsof Jeg tilføjer yderligere kontekster. Ved masseforespørgsler undertrykker jeg advarsler med -w, så scripts forbliver robuste.
Sikker læsning af FD-felter og -typer
Kolonnen FD er min nøgle til forståelse. Typiske værdier er:
cwd: procesens aktuelle arbejdsmappe.txt: procesens eksekverbare fil (tekstsegment).mem: indlæste delte biblioteker og kortlagte filer (hukommelseskortlægninger).0u,1w,2w: Standarddeskriptorer (stdin, stdout, stderr) med tilstandr(læs),w(skriv) elleru(læs/skriv).- højere tal som
3u,7r: almindelige åbne deskriptorer, ofte filer, sockets eller pipes.
Fra TYPE læser jeg objektklassen: REG (almindelig fil), DIR (Katalog), CHR/BLK (tegne-/blokapparat), FIFO (rør), IPv4/IPv6 (netværk), UNIX (Unix-domæne-socket). I NAVN her angives stien eller, i tilfælde af sockets, endepunktet, f.eks. TCP *:80 (LISTEN) eller UDP 127.0.0.1:123. Når jeg (slettet) Når jeg ser det til sidst, ved jeg, at en fil er blevet slettet, men stadig holdes tilbage af en PID – en typisk årsag til „forsvundet“ diskplads.
Målrettet filtrering: Filer, mapper, porte
Jeg afgrænser først konteksten og begynder derefter med et passende Filtre. Til en mappe bruger jeg lsof +D /var/log (rekursivt) eller lsof +d /var/log (kun selve mappen). De enkelte filer tjekker jeg direkte, for eksempel lsof /var/log/syslog, for at se de kørende processer. For porte indstiller jeg lsof -i:80, lsof -i:443 eller generisk lsof -i . Det kombinerer jeg gerne med -nP, så lsof ikke skal opslå IP-adresser og porte og dermed arbejder hurtigere. På den måde skabes der på kortest mulig tid et overskueligt billede af systemtilstanden ud fra en uoverskuelig situation Billede.
Kombinere og præcisere filtre
For at sikre gentagelige analyser kombinerer jeg filtre med -a logisk forbundet. På den måde får jeg kun resultater, der opfylder alle betingelser. Eksempler:
lsof -a -p 1234 -d cwd,txt,mem– kun en process’ arbejdsmappe, binærfil og indlæste biblioteker.lsof -a -iTCP -sTCP:ESTABLISHED -p 1234– kun etablerede TCP-forbindelser for en bestemt PID.lsof -a -u www-data +d /var/www– Filer under /var/www, som holder processer tilhørende brugeren www-data åbne.
Med -d filtrerer jeg efter deskriptorer (tal eller navne som cwd, mem). -U viser mig specifikt Unix-domænesockets i udskriften, når jeg vil undersøge lokale IPC-problemer. På den måde reducerer jeg støj og ser præcis det, der er relevant for spørgsmålet.
Hurtig tildeling af processer og brugere
Hvis jeg kender et tjenestenavn, giver lsof -c nginx alle åbne filer på webserveren, herunder Biblioteker, konfigurationer og sockets. For at kunne foretage en entydig analyse arbejder jeg ofte med PID'en: lsof -p 1234 viser alle håndtag for en bestemt proces. Brugerrelaterede kontroller udfører jeg med lsof -u mysql eller en anden konto for at gøre en servicekontos åbne ressourcer synlige. I længere analyser supplerer jeg procesoversigten med Procesregnskab og kan dermed se, hvor ofte og hvor længe programmerne bruger ressourcer. Denne kombination af proces-, bruger- og aktivitetsoversigt hjælper mig med hurtigt at finde frem til løsningen på komplicerede fænomener Årsag.
Særlige tilfælde: slettede filer, logrotate og pladsrøvere
Når der „mangler“ plads på disken, finder jeg ofte årsagen ved hjælp af lsof +L1: Den viser filer, der allerede er slettet, men som stadig holdes åbne af processer. Typiske eksempler er logfiler, der er blevet roteret, store midlertidige filer eller debug-dumps. I stedet for at forhaste mig med at udvide partitionen afslutter jeg målrettet de viste PID’er eller sender det sædvanlige signal til genindlæsning. For logtjenester foretrækker jeg en ren genindlæsning af den pågældende tjeneste, så deskriptorer genåbnes. Midlertidige løsninger som truncate eller direkte fjernelse uden genstart af processen udskyder blot problemet.
Ved lange datastrømme tjekker jeg desuden kolonnen STØRRELSE/SLUKKET (synlig afhængigt af build) for at se, om en proces er knyttet til en meget stor offset. Det forklarer, hvorfor et handle optager så meget hukommelse, selvom filen er markeret som slettet.
Systematisk løsning af typiske fejlscenarier
Jeg sletter de spærrede filer, efter at lsof har vist mig den relevante proces. I stedet for at stoppe tjenester på må og få, afslutter jeg målrettet PID’en eller genstarter netop denne tjeneste. Portkonflikter løser jeg ved at lsof -i:, se den bindende PID og tilpas derefter port, tjeneste eller firewall. Hvis en proces hænger, tjekker jeg dens åbne deskriptorer med lsof -p og se, om den venter på en fil, en pipe eller en socket. Til dybdegående analyser supplerer jeg visningen med målrettet strace, for at overvåge systemkald i realtid. På den måde løser jeg tilbagevendende fejl på en pålidelig måde og dokumenterer de faste trin til fremtiden Hændelser.
Tag højde for containere og navnerum
Forklaret i containerbaserede opsætninger (f.eks. med egne netværksnavneområder) lsof der opstår uoverensstemmelser mellem værten og containeren. Jeg kører enten lsof direkte i containeren eller går ind i målprocessens navnerum fra værten. På den måde kan jeg se, hvorfor en port i containeren er i tilstanden LISTEN, mens den på værten ser ud til at være „ledig“: De befinder sig i forskellige navnerum. Jeg gør på samme måde med mount-namespaces: Bind-mounts og overlay-filsystemer vises i kolonnen NAME med deres reelle stier og hjælper med at finde forkert indstillede volumener. Jeg sorterer desuden åbne deskriptorer efter bruger og cgroup, når jeg styrer tjenester via supervisorer eller orkestreringsløsninger.
Netværksanalyse med lsof -i
Med lsof -i registrerer jeg aktive forbindelser og aflytter jeg de besatte Havne. Filtrer efter lsof -iTCP -sTCP:LISTEN viser specifikt tjenester i LISTEN-tilstand. For de enkelte protokoller arbejder jeg med lsof -iUDP eller bestemte porte som lsof -i:25 til mail-servere. Jeg kontrollerer desuden, om en PID holder flere sockets åbne, hvilket kan være tegn på lækager eller uendelige sløjfer. I sikkerhedskontroller sammenligner jeg forventede tjenester med udskriften og opdager fremmede eller glemte Tjenester. Denne netværksoversigt sparer tid, fordi jeg ikke behøver at tjekke flere værktøjer samtidigt og kan se det hele på ét sted.
Få mere at vide om netværksdetaljer
Til særligt målrettede forespørgsler bruger jeg adresse- og port-syntaksen fra -i: Jeg begrænser søgningen til kilde- eller måladresser (lsof [email protected]) eller kombiner adresse og port (lsof [email protected]:443). Med -sTCP:ESTABLISHED ser jeg produktive sessioner, mens -sTCP:LISTEN kun viser lyttere. Jeg bruger UDP-analyser til at synliggøre tjenester med mange kortvarige sockets (DNS, Syslog, NTP). Desuden tjekker jeg, om processer er mere eksponerede i netværket end nødvendigt (f.eks. lyttere på 0.0.0.0 (i stedet for en lokal grænseflade). Det mindsker den senere indsats i forbindelse med hardening.
Tabeloversigt: Almindelige indstillinger
Jeg bruger nogle få kerneindstillinger meget regelmæssigt og udvider dem alt efter Scenarie. Den følgende tabel samler de vigtigste kommandoer med en kort forklaring og et eksempel. På den måde kan jeg hurtigere finde den rigtige form og undgå lange hjælpetekster. Jeg bruger disse indstillinger modulært og forbliver dermed fleksibel. Hvis man mestrer dette grundlæggende sæt, kan man løse mange opgaver med en enkelt opfordring.
| Mulighed | Formål | Eksempel |
|---|---|---|
| -i | Vis netværksforbindelser og optagede porte | lsof -i:443 |
| -c NAVN | Filtrer efter procesnavn (præfiks-match) | lsof -c nginx |
| -p PID | Alle åbne filer for en PID | lsof -p 1234 |
| -u BRUGER | En brugers åbne ressourcer | lsof -u mysql |
| +d DIR | Kun den angivne mappe | lsof +d /var/log |
| +D DIR | Rekursivt gennem mappen | lsof +D /var/log |
| -nP | Ingen DNS- og portnavnsopslag (hurtigere) | lsof -nP -i |
| -t | Vis kun PID'er (skriptvenligt) | lsof -t -i:80 |
| +L1 | Vis slettede, men stadig åbne filer | lsof +L1 |
Jeg bruger -t ofte for at overføre PID’er direkte til scripts, f.eks. til kill eller systemctl. Med +L1 finder jeg processer, der holder slettede filer åbne og dermed optager lagerplads. I kombination med -r (igen) bemærker jeg ændringer i korte Afstande. Ved at teste trin for trin undgår man fejlagtige fortolkninger og arbejder konsekvent. På den måde forbliver diagnosen reproducerbar og målbar klar.
Effektiv viderebehandling af udskrifter
Jeg formaterer udskriften med det samme, så jeg får resultaterne hurtigere brug. Med lsof -t -i:80 | xargs -r kill -TERM afslutter jeg for eksempel alle processer, der bruger port 80. Til rapporter bruger jeg lsof -nP -i | grep LISTEN tilbage og filtrer specifikt efter tilstande. Også awk hjælper: lsof -nP | awk '{print $1,$2,$3,$9}' begrænser visningen til navn, PID, bruger og sti. Jeg dokumenterer velfungerende enkeltlinjers kommandoer og sparer mig selv for senere Søgning efter passende mønstre. Små hjælpere som watch 'lsof -nP -i:443' viser ændringer i realtid og fører hurtigere til en beslutning.
Automatisering og parsebar output
Til tilbagevendende prøver bruger jeg den maskinlæsbare version af lsof med -F. Jeg vælger kun de felter, jeg har brug for (f.eks. proces, kommando, bruger, FD, navn), og fortsætter med at parse dem på en stabil måde. Eksempler:
lsof -Fn -Fp -Fc -Fu -t -i:443– minimalistiske felter til scripts, der kun kræver PID’er eller navne.lsof -Fpcun -a -iTCP -sTCP:LISTEN– Indsamle lytterdata og bearbejde dem målrettet.
Med -r 2 genererer jeg en „Live“-visning hvert andet sekund og sammenligner øjebliksbilleder. I pipelines samler jeg ændringerne (sorter, uniq, diff), for at opdage nye eller forsvindende håndtag. Jeg indstiller bevidst timeouts, så forespørgsler ikke hænger sig fast under høj belastning, og overvågningsopgaver afsluttes korrekt.
Bedste praksis og sikkerhedsaspekter
Jeg starter analyser med minimale rettigheder og udvider dem kun, hvis rod, hvis jeg mangler tilladelser. På den måde mindsker jeg risici og holder logfilerne overskuelige. Jeg kontrollerer regelmæssige scanninger med lsof -i i modsætning til de tjenester, jeg havde forventet, for at opdage usædvanlige lyttere eller forbindelser. Mistænkelige PID’er undersøger jeg derefter målrettet ved hjælp af filer, biblioteker og Stik. I vedligeholdelsesvinduer sørger jeg for, at der ikke er slettede, men stadig åbne filer, der spilder plads. Den, der tager sikkerhed alvorligt, integrerer lsof i tjeklister og reagerer på afvigelser med faste Trin.
Almindelige forhindringer og gode løsninger
- Ikke alle poster er synlige: Uden root mangler jeg ofte processer fra andre brugere eller kernel-relaterede håndtag. Jeg bruger målrettet
sudo. - Langsom udskrivning: Jeg deaktiverer opløsninger med
-nP, undgå rekursion og begræns med-ahårdt. - +D er for dyrt: Rekursive gennemløb af mapper kan være meget omfattende. Jeg begynder med
+deller konkrete stier og udvider først, når det er nødvendigt. - Porten er optaget, processen er uklar: Jeg kombinerer
lsof -i: -nPmed-ttil PID og gå videre tillsof -pdybere. - „Der mangler “ledig« plads:
lsof +L1finder åbne, men slettede filer. Genstart eller afslut derefter processen målrettet. - Containere/navneområder: Jeg kontrollerer forespørgslen i det relevante navneområde, ellers ser jeg forkerte lyttere eller overser åbne filer.
At forstå ydeevne og grænser
På meget store systemer tager en komplet lsof-registrering tid og medfører mærkbar Belastning. Derfor sætter jeg filtre ind tidligt og skifter med -nP alle opløsninger. Når der er tale om meget store tal, tjekker jeg samtidig Begrænsninger for filbeskrivere og hæv dem om nødvendigt. Skripter bør tage højde for timeouts og bruge -t Jeg videregiver kun PID’er for at holde datamængderne på et lavt niveau. Jeg dokumenterer undtagelser og indbygger tilbagevendende kontroller i automatiseringerne. På den måde forbliver diagnosen pålidelig og overskuelig, selv under belastning kontrollerbar.
Praksis-workflow: Fra symptom til årsag
Jeg vil starte med spørgsmålet: Handler det om en fil, en proces eller Havn? Derefter vælger jeg den passende indledning, for eksempel lsof /sti/til/filen, lsof -p eller lsof -i:. Jeg tjekker USER, FD, TYPE og NAME og noterer, hvad der virker forventeligt, og hvad der overrasker. Derefter handler jeg: Genstarter processen, justerer konfigurationen, hæver grænsen eller frigiver porten. Hvis jeg er i tvivl, fastlåser jeg tilstanden, sikkerhedskopierer logfilerne og gentager målingen efter ændringen. Denne fremgangsmåde holder mig fokuseret og giver et klart Beviskæde.
Tjekliste: hurtige opskrifter til hverdagen
- Hvem blokerer filen?
lsof /sti/til/filen– Aflæse PID, genstarte eller afslutte processen målrettet. - Hvilken tjeneste optager porten?
lsof -nP -i:– Løs konflikten ved at justere porten eller bind-adressen. - Hvor forsvinder pladsen hen?
lsof +L1– finde åbne og slettede filer, genstarte de relevante PID'er. - Hænger processen fast i I/O?
lsof -p– Vær opmærksom på pipes, sockets eller filer; brug om nødvendigt strace som supplement. - Hvilke lyttere er der egentlig?
lsof -nP -iTCP -sTCP:LISTEN– sammenligne med listen over forventninger. - Hvilke ressourcer bruger en servicekonto?
lsof -u– Identificere afvigelser pr. konto.
Kortfattet oversigt til hverdagen
lsof viser mig, hvem der blokerer hvilken fil, hvilket bibliotek eller hvilken port. Med -c, -p, -u, +d/+D og -i begrænser jeg hurtigt udsynet. Jeg låser blokerede filer op, finder portkonflikter og opdager usædvanlige Forbindelser. I kombination med -nP Jeg arbejder hurtigt og holder udskriften overskuelig. Til mere dybdegående analyser supplerer jeg med værktøjer, dokumenterer velfungerende enkeltlinjers kommandoer og indbygger tilbagevendende kontroller i automatiseringerne. På den måde forbliver diagnosen med lsof direkte, sikker og målbar effektiv.


