...

Använd lsof effektivt: Analysera öppna filer och processer

Jag ställer in lsof Linux för att på några sekunder se vilken process som håller vilken fil, vilket socket eller vilken port öppen. På så sätt kan jag upptäcka blockerade loggar, upptagna Portar och låsta filer utan omvägar samt åtgärdar störningar på ett målinriktat sätt.

Centrala punkter

För att komma igång på bästa sätt sammanfattar jag de viktigaste Aspekter kortfattat.

  • Resurser Visa: processer, filer, kataloger, enheter, pipes, sockets.
  • Filter användning: efter processnamn (-c), PID (-p), användare (-u), fil, katalog (+d/+D), port (-i).
  • Fel begränsa: hitta spärrade filer, lösa portkonflikter, identifiera tjänster som har hängt sig.
  • Nätverk kontrollera: snabbt identifiera aktiva anslutningar och upptagna portar.
  • Arbetsflöde effektivisera: först avgränsa, sedan granska noggrant och därefter vidta åtgärder.

Varför lsof är viktigt i vardagen

Jag använder lsof, om en tjänst inte startar, en fil visar statusen „upptagen“ eller en port redan är upptagen. Verktyget kopplar samman fil, process, användare och nätverk på ett överskådligt sätt Utsikt. Jag ser omedelbart vilken PID som har åtkomsten och sedan när. På så sätt kan jag agera istället för att gissa och avsluta rätt process, istället för att av misstag stoppa fel tjänst. Särskilt på produktionsservrar sparar jag därmed allt från minuter till timmar, eftersom jag direkt kan koppla orsaken till processen. Denna metod minskar antalet supportärenden, reducerar driftstopp och skapar en stabil Resultat.

Förstå grundläggande syntax och utdata

Grundformen lyder lsof [alternativ] och returnerar alla aktuella öppna utan parametrar objekt. På system med hög belastning filtrerar jag utdata istället för att ta mig igenom tusentals rader. Det är viktigt att notera att begreppet „fil“ i Linux har en bred definition: det omfattar kataloger, enheter, bibliotek och nätverks-Socklar. I utdata är kolumner som COMMAND, PID, USER, FD, TYPE och NAME till hjälp. Jag tittar först på FD (fildeskriptor), TYPE (REG, DIR, IPv4/6) och NAME med sökväg eller portangivelse. Den som läser dessa kolumner förstår snabbt systemets aktuella tillstånd och kan ordna resurserna på ett överskådligt sätt Processer.

Installation och behörigheter i praktiken

I många distributioner är lsof är inte förinstallerat. Jag installerar det därför i god tid via pakethanteraren (apt install lsof, dnf install lsof, yum install lsof eller . pacman -S lsof), så att den är omedelbart tillgänglig vid en incident. För att få en fullständig överblick använder jag därför vanligtvis sudo eftersom många poster utan utökade behörigheter resulterar i „permission denied“ eller saknas helt. Jag börjar ändå medvetet utan root-behörighet, testar hur långt jag kommer och höjer behörigheterna endast om det är nödvändigt. På system med SELinux eller AppArmor är jag medveten om att säkerhetskontexter kan begränsa synfältet; beroende på build visar lsof Lägg till ytterligare sammanhang. Vid massfrågor undertrycker jag varningar med -w, så att skripten förblir stabila.

Läsa FD-fält och -typer på ett säkert sätt

Kolumnen FD är min nyckel till förståelse. Vanliga värden är:

  • cwd: processens aktuella arbetskatalog.
  • txt: processens körbara fil (textsegment).
  • mem: laddade delade bibliotek och mappade filer (minnesmappningar).
  • 0u,1w,2w: Standarddeskriptorer (stdin, stdout, stderr) med läge r (läs), w (skriv) eller u (läs/skriv).
  • högre siffror som 3u, 7r: vanliga öppna deskriptorer, ofta filer, socklar eller rörledningar.

Från TYP Jag läser objektklassen: REG (vanlig fil), DIR (katalog), CHR/BLK (rit-/blockenhet), FIFO (rör), IPv4/IPv6 (nätverk), UNIX (Unix-domän-socket). I NAMN här anges sökvägen eller, när det gäller socklar, slutpunkten, t.ex. TCP *:80 (LISTEN) eller . UDP 127.0.0.1:123. Om jag (borttaget) När jag tittar på slutet ser jag att en fil har tagits bort men fortfarande hålls kvar av en PID – en typisk orsak till „försvunnet“ diskutrymme.

Filtrera specifikt: filer, kataloger, portar

Jag avgränsar först sammanhanget och börjar sedan med en lämplig Filter. För en katalog använder jag lsof +D /var/log (rekursivt) eller lsof +d /var/log (endast mappen i sig). Enskilda filer kontrollerar jag direkt, till exempel lsof /var/log/syslog, för att se skrivprocesser. För portar anger jag lsof -i:80, lsof -i:443 eller generiskt lsof -i . Jag kombinerar det gärna med -nP, så att lsof inte behöver lösa upp IP-adresser och portar och därmed fungerar snabbare. På så sätt förvandlas ett oöverskådligt systemtillstånd på nolltid till ett fokuserat Bild.

Kombinera och förfina filter

För att kunna utföra reproducerbara analyser kombinerar jag filter med -a logiskt kopplade. På så sätt får jag endast träffar som uppfyller alla villkor. Exempel:

  • lsof -a -p 1234 -d cwd,txt,mem – endast arbetskatalogen, binärfilen och de laddade biblioteken för en process.
  • lsof -a -iTCP -sTCP:ESTABLISHED -p 1234 – endast etablerade TCP-anslutningar för en viss PID.
  • lsof -a -u www-data +d /var/www – Filer i mappen /var/www som håller processer öppna för användaren www-data.

Med -d filtrerar jag efter deskriptorer (siffror eller namn som cwd, mem). -U visar specifikt Unix-domän-socklar i utdata när jag vill undersöka lokala IPC-problem. På så sätt minskar jag bruset och ser exakt det som är relevant för frågan.

Snabbt koppla ihop processer och användare

Om jag känner till ett tjänstnamn, ger lsof -c nginx alla öppna filer på webbservern, inklusive Bibliotek, konfigurationer och socklar. För att kunna göra en tydlig analys arbetar jag ofta med PID: lsof -p 1234 visar alla handtag för en viss process. Användarspecifika kontroller utför jag med lsof -u mysql eller ett annat konto för att synliggöra de resurser som ett tjänstekonto har öppnat. Vid mer omfattande analyser kompletterar jag processöversikten med Processredovisning och ser därmed hur ofta och hur länge programmen använder resurser. Denna kombination av process-, användar- och aktivitetsvyer hjälper mig att snabbt komma fram till lösningen när det gäller knepiga fenomen Orsak.

Särskilda fall: raderade filer, Logrotate och utrymmeskrävande filer

När det „saknas“ diskutrymme hittar jag ofta orsaken med lsof +L1: Den visar filer som redan har raderats men som fortfarande hålls öppna av processer. Typiska exempel är loggfiler som har roterats, stora temporära filer eller felsökningsdumpningar. I stället för att hastigt utöka partitionen avslutar jag de visade PID:erna eller skickar den vanliga signalen för omstart. För loggtjänster föredrar jag en ren omstart av respektive tjänst, så att deskriptorerna öppnas på nytt. Nödlösningar som truncate eller att ta bort det direkt utan att starta om processen skjuter bara upp problemet.

Vid långa dataströmmar kontrollerar jag dessutom kolumnen STORLEK/AV (synligt beroende på build) för att se om en process är kopplad till en mycket stor offset. Det förklarar varför ett handtag tar upp så mycket minnesutrymme, trots att filen är markerad som raderad.

Systematiskt lösa typiska felscenarier

Jag tar bort spärrade filer efter att lsof har visat mig vilken process som är ansvarig. Istället för att stänga av tjänster på måfå avslutar jag specifikt PID:et eller startar just den här tjänsten på nytt. Portkonflikter löser jag med lsof -i:, kolla upp den bindande PID:en och justera sedan port, tjänst eller brandvägg därefter. Om en process har hängt sig kontrollerar jag dess öppna deskriptorer med lsof -p och se om den väntar på en fil, en pipe eller en socket. För en mer ingående analys kompletterar jag vyn med strace på ett målinriktat sätt, för att övervaka systemanrop i realtid. På så sätt kan jag på ett tillförlitligt sätt lösa återkommande störningar och dokumentera de fasta stegen för framtida Incidenter.

Beakta containrar och namnutrymmen

Förklaras i containerbaserade miljöer (t.ex. med egna nätverksnamnrymder) lsof Jag upptäcker avvikelser mellan värddatorn och containern. Jag kör antingen lsof direkt i containern eller går in i målprocessens namnområde från värddatorn. På så sätt kan jag se varför en port i containern är i tillståndet LISTEN, men verkar vara „ledig“ på värddatorn: de ligger i olika namnområden. Jag gör på liknande sätt med mount-namnrymder: Bind-mounts och overlay-filsystem visas i kolumnen NAME med sina verkliga sökvägar och hjälper till att hitta felaktigt inställda volymer. Jag sorterar dessutom öppna deskriptorer efter användare och cgroup när jag styr tjänster via supervisorer eller orkestreringslösningar.

Nätverksanalys med lsof -i

Med lsof -i registrerar jag aktiva anslutningar och lyssnar efter upptagna Portar. Filter som lsof -iTCP -sTCP:LISTEN listar specifika tjänster i LISTEN-tillstånd. För enskilda protokoll arbetar jag med lsof -iUDP eller specifika portar som lsof -i:25 för e-postservrar. Jag kontrollerar dessutom om en PID håller flera socklar öppna, vilket kan tyda på läckor eller oändliga loopar. Vid säkerhetskontroller jämför jag förväntade tjänster med utdata och upptäcker främmande eller glömda Tjänster. Denna nätverksöversikt sparar tid eftersom jag slipper söka i flera verktyg samtidigt och istället kan se allt på ett och samma ställe.

Fördjupa dig i nätverksdetaljerna

För särskilt riktade sökningar använder jag adress- och port-syntaxen från -i: Jag begränsar sökningen till käll- eller måladresser (lsof [email protected]) eller kombinera adress och port (lsof [email protected]:443). Med -sTCP:ESTABLISHED ser jag produktiva sessioner, medan -sTCP:LISTEN endast visar lyssnare. Jag använder UDP-analyser för att synliggöra tjänster med många kortlivade socklar (DNS, Syslog, NTP). Jag kontrollerar dessutom om processer är mer exponerade i nätverket än nödvändigt (t.ex. lyssnare på 0.0.0.0 (i stället för ett lokalt gränssnitt). Detta minskar den senare arbetsinsatsen för säkerhetsanpassning.

Tabellöversikt: Vanliga alternativ

Jag använder några få grundläggande alternativ väldigt ofta och utökar dem beroende på Scenario. I tabellen nedan sammanfattas de viktigaste operatörerna med en kort förklaring och ett exempel. På så sätt hittar jag snabbare rätt form och slipper läsa igenom långa hjälptexter. Jag använder dessa alternativ modulärt och behåller därmed min flexibilitet. Den som behärskar denna grunduppsättning kan lösa många uppgifter med en enda uppmaning.

Alternativ Syfte Exempel
-i Visa nätverksanslutningar och upptagna portar lsof -i:443
-c NAMN Filtrera efter processnamn (prefixmatchning) lsof -c nginx
-p PID Alla öppna filer för en PID lsof -p 1234
-u ANVÄNDARE En användares tillgängliga resurser lsof -u mysql
+d DIR Endast den angivna katalogen lsof +d /var/log
+D DIR Rekursivt genom katalogen lsof +D /var/log
-nP Ingen DNS- och portnamnsuppslagning (snabbare) lsof -nP -i
-t Visa endast PID:er (skriptvänligt) lsof -t -i:80
+L1 Visa raderade men fortfarande öppna filer lsof +L1

Jag använder -t ofta för att skicka PID:er direkt till skript, till exempel till döda eller . systemctl. Med +L1 hittar jag processer som håller raderade filer öppna och därmed upptar lagringsutrymme. I kombination med -r (upprepa) jag observerar förändringar under korta Avstånd. Genom att testa steg för steg undviker man felaktiga tolkningar och arbetar konsekvent. På så sätt förblir diagnosen reproducerbar och mätbar klar.

Bearbeta utskriften på ett effektivt sätt

Jag fortsätter att formatera utdata direkt så att jag får resultaten snabbare användning. Med lsof -t -i:80 | xargs -r kill -TERM avslutar jag ungefär alla processer som använder port 80. För rapporter använder jag lsof -nP -i | grep LISTEN tillbaka och filtrera fram specifika tillstånd. Även awk hjälper: lsof -nP | awk '{print $1,$2,$3,$9}' begränsar visningen till namn, PID, användare och sökväg. Jag dokumenterar fungerande enradare och sparar mig besväret senare Sök enligt lämpliga mönster. Små hjälpmedel som watch 'lsof -nP -i:443' visar förändringar i realtid och leder till snabbare beslut.

Automatisering och analyserbara utdata

För återkommande kontroller använder jag den maskinläsbara versionen av lsof med -F. Jag väljer bara de fält som jag behöver (t.ex. process, kommando, användare, FD, namn) och fortsätter att analysera dem på ett stabilt sätt. Exempel:

  • lsof -Fn -Fp -Fc -Fu -t -i:443 – minimalistiska fält för skript som endast kräver PID:er eller namn.
  • lsof -Fpcun -a -iTCP -sTCP:LISTEN – Samla in lyssnaruppgifter och bearbeta dem på ett målinriktat sätt.

Med -r 2 skapar jag en „live“-vy varannan sekund och jämför ögonblicksbilder. I pipelines sammanför jag ändringarna (sortering, uniq, diff), för att upptäcka nya eller försvinnande handtag. Jag planerar medvetet in tidsgränser så att förfrågningar inte fastnar vid hög belastning och så att övervakningsuppgifterna avslutas på ett korrekt sätt.

Bästa praxis och säkerhetsaspekter

Jag inleder analyserna med minimala behörigheter och utökar dem först när rot, om jag saknar behörigheter. På så sätt minskar jag riskerna och håller loggarna överskådliga. Jag kontrollerar regelbundna skanningar med lsof -i i stället för de tjänster jag förväntade mig, för att upptäcka ovanliga lyssnare eller anslutningar. Misstänkta PID:er undersöker jag därefter noggrant genom att granska filer, bibliotek och Socklar. Under underhållsfönstren ser jag till att inga raderade men fortfarande öppna filer tar upp onödigt utrymme. Den som tar säkerheten på allvar integrerar lsof i sina checklistor och reagerar på avvikelser med fasta Steg.

Vanliga hinder och smidiga lösningar

  • Inte alla poster visas: Utan root saknar jag ofta processer från andra användare eller handtag som är nära kopplade till kärnan. Jag använder specifikt sudo.
  • Långsam utmatning: Jag inaktiverar upplösningar med -nP, undvik rekursion och begränsa med -a hårt.
  • +D för dyrt: Rekursiva kataloggenomgångar kan bli enormt stora. Jag börjar med +d eller specifika vägar och utökar dem först vid behov.
  • Porten är upptagen, processen är oklar: Jag kombinerar lsof -i: -nP med -t för PID och gå vidare till lsof -p djupare.
  • „Det saknas “ledigt” utrymme: lsof +L1 Hittar öppna men raderade filer. Starta sedan om eller avsluta processen på ett målinriktat sätt.
  • Containrar/namnrymder: Jag kontrollerar sökningen i rätt namnområde, annars ser jag felaktiga lyssnare eller missar öppna filer.

Att förstå prestanda och gränser

På mycket stora system tar en fullständig lsof-avläsning tid och medför märkbara Last. Därför sätter jag in filter tidigt och växlar med -nP alla upplösningar. Vid stora antal handtag kontrollerar jag samtidigt Begränsningar för filbeskrivare och lyft upp dem vid behov. Skript bör ta hänsyn till tidsgränser och använda -t Jag vidarebefordrar endast PID:er för att hålla datamängderna små. Jag dokumenterar undantag och bygger in återkommande kontroller i automatiseringarna. På så sätt förblir diagnosen tillförlitlig och tydlig även under hög belastning. kontrollerbar.

Praktisk arbetsflöde: Från symptom till orsak

Jag börjar med frågan: Handlar det om en fil, en process eller Port? Därefter väljer jag en lämplig inledning, till exempel lsof /sökväg/till/filen, lsof -p eller . lsof -i:. Jag kontrollerar USER, FD, TYPE och NAME och noterar vad som verkar förväntat och vad som överraskar. Sedan vidtar jag åtgärder: startar om processen, justerar konfigurationen, höjer gränsen eller frigör porten. Vid osäkerhet dokumenterar jag läget, sparar loggarna och upprepar mätningen efter ändringen. Denna process hjälper mig att hålla fokus och ger ett tydligt Beviskedja.

Checklista: snabba recept för vardagen

  • Vem blockerar filen? lsof /sökväg/till/filen – Avläsa PID, starta om eller avsluta processen på ett målinriktat sätt.
  • Vilken tjänst använder porten? lsof -nP -i: – Lös konflikten genom att justera porten eller bind-adressen.
  • Vart tar skivplatsen vägen? lsof +L1 – hitta öppna och raderade filer, starta om berörda PID:er.
  • Hänger processen på I/O? lsof -p – Kontrollera pipor, socklar eller filer; komplettera vid behov med strace.
  • Vilka lyssnare är verkligen aktiva? lsof -nP -iTCP -sTCP:LISTEN – jämföra med förväntningslistan.
  • Vilka resurser använder ett tjänstekonto? lsof -u – Identifiera avvikelser per konto.

Sammanfattning för vardagen

lsof visar mig vem som blockerar vilken fil, vilken katalog eller vilken port. Med -c, -p, -u, +d/+D och -i begränsar jag snabbt synfältet. Jag låser upp spärrade filer, hittar portkonflikter och upptäcker ovanliga Anslutningar. I kombination med -nP Jag arbetar snabbt och ser till att utdata förblir överskådlig. För mer ingående analyser kompletterar jag med verktyg, dokumenterar fungerande enradskommandon och bygger in återkommande kontroller i automatiseringarna. På så sätt förblir diagnosen med lsof direkt, säker och mätbar effektiv.

Aktuella artiklar