Kommandot lsof är ett av de mest övertygande Linux-terminalkommandona för administratörer och avancerade användare. Namnet lsof står för “Lista över öppna filer” och det ger information om alla filer som öppnas av någon process. Öppna filer kan referera till flera filtyper, inklusive vanliga filer, kataloger, nätverksströmmar, exekverande referenser, blockfiler och så vidare.
Den vanligaste användningen av lsof är att felsöka systemproblem. Linux-nätverksadministratörer förlitar sig också på lsof vid felsökning av nätverksproblem. Våra redaktörer har valt ut 40 enkla men extremt användbara exempel på lsof för att hjälpa användare att lära sig detta kommando mer detaljerat.
Mest användbara “lsof Command” i Linux
Eftersom Linux-filsystemet betraktar allt i ditt system som en fil, är det obligatoriskt att ha bättre kontroll över dina filer. Verktyget lsof låter dig göra just detta och ger mycket mer ytterligare information som är användbar vid felsökning. Nätverksadministratörer kan använda lsof för att granska öppna nätverksuttag och stärka sin nätverkssäkerhet med hjälp av denna information.
1. Lista alla öppna filer
I sin enklaste användning skriver lsof ut alla för närvarande öppnade filer. Få inte panik när du ser ett gäng okända filer. De är systemfiler skapade av underliggande processer och Linux-kärnan. Utdatainformationen är uppdelad i flera kolumner, som COMMAND, PID, USER, FD och TYPE.
$ lsof $ lsof | less
COMMAND anger programmet som anropade filen, PID anger process-ID, TYPE representerar filtypen och FD är filbeskrivningen. Du kommer att veta mer om dem när du går vidare i den här guiden.
2. Dämpa kärnblock
Utdata från ovanstående kommando innehåller många blockfiler som öppnas av kärnan och är inte meningsfulla för de flesta icke-tekniska användare. Lyckligtvis tillåter lsof oss att undertrycka dessa filer med hjälp av -b alternativ.
$ lsof -b
Nu kommer lsof att undvika att lista kärnblocken och garantera att kommandon som stat, lstatoch läslänk fungera utan problem. Du bör använda det här alternativet när du arbetar med systemfiler på låg nivå och så vidare.
3. Lista filer baserat på användarnamn
Vi kan enkelt lista alla öppna filer för en specifik användare med kommandot lsof Linux. Lägg bara till -u alternativet, följt av användarnamnet.
—
$ lsof -u abc
Detta kommando kommer att lista filer som öppnats av användaren. Du kan också använda flera användarnamn samtidigt med en kommaseparerad lista. Det kommer dock att misslyckas om det finns mellanslag mellan användarnamnen.
$ lsof -u aaa,bbb,ccc
Det kommer nu att lista filer som öppnats av de tre hypotetiska användarna. Du kan också lägga till ^(negation) operatör framför ett användarnamn. Det kommer att få lsof att utelämna filer som öppnas av dessa användare.
$ lsof -u ^xyz
4. Lista nätverksfiler
Nätverksfiler är filer associerade med TCP/IP-stacken, nämligen sockets. Du kan använda -jag alternativet för att lista alla för närvarande öppnade nätverksfiler med lsof.
$ lsof -i
Det kommer att skriva ut alla nätverksfiler tillsammans med deras typ och tillhörande protokoll. Använda -i4 eller -i6 för att lista antingen IPv4- eller IPv6-filer.
$ lsof -i4 $ lsof -i6
5. Lista alla TCP/UDP-filer
Kommandon nedan visar hur man använder lsof för att skriva ut alla för närvarande öppnade TCP- och UDP-processer. TCP, eller Transmission Control Protocol, är det de facto kommunikationsprotokoll som används av moderna nätverk. För att lista alla TCP-processer, använd följande kommando.
$ lsof -i TCP
UDP eller User Datagram Protocol är ett tillståndslöst protokoll som används för dataöverföringar med låg latens. Du kan använda följande kommando för att lista alla UDP-processer som använder lsof.
$ lsof -i UDP
6. Lista processer som körs på specifika portar
De -jag alternativet tillåter även administratörer att lista alla filer som körs på en specifik port. Detta är användbart vid nätverksfelsökning och tillåter administratörer att definiera robusta Linux iptables-regler.
$ lsof -i TCP:22
Det här kommandot kommer att lista de processer som körs på TCP-port 22. Ssh-demonen körs vanligtvis på port 22. Du kan också söka efter andra portar. Kommandot nedan letar efter alla processer som körs på port 443.
$ lsof -i TCP:443
7. Lista processer som körs på en rad portar
Kommandot nedan listar alla filer som skapas av processer som körs på ett visst antal portar. Vi definierar helt enkelt intervallet, och lsof kommer att mata ut alla filer som den kan associera med något av dessa portnummer.
$ lsof -i TCP:1-1024
Nu kommer lsof att leta efter processer som körs på valfri TCP-port mellan 1-1024 och lista alla aktiva filer som skapats av dessa processer.
8. Lista filer med PID
Ett PID eller process-ID är en unik identifierare som används för att tagga operativsystemsprocesser. Kommandot lsof låter administratörer söka efter och lista filer baserat på deras PID. Kommandot nedan listar alla filer som är associerade med process-ID 1.
$ lsof -p 1
Du kan också ange flera PID:n med hjälp av en kommaseparerad lista. Se dock till att inte använda något blanksteg, annars kommer kommandot inte att fungera som förväntat.
$ lsof -p 1,2,3,^111
Detta kommando kommer att lista alla filer som öppnats av process 1, 2 och 3. Det kommer att utelämna de filer som öppnas av process 111.
9. Lista filer för ett specifikt filsystem
Linux-filsystemhierarkin är mycket robust och tillåter administratörer att utföra olika operationer på dem. Du kan använda lsof-kommandot i Linux för att skriva ut alla öppna filer i ett specifikt filsystem, som visas nedan.
$ lsof /proc $ lsof /run/ $ lsof /sys/
De /proc katalogen innehåller information om aktivt körande processer. Du kan enkelt inspektera denna information med lsof i Linux- och BSD-distributioner.
10. Lista Unix-domänsockets
Verktyget lsof låter oss lista alla Unix-socketfiler eller IPC (Inter-Process Communication)-sockets. Dessa filer gör det möjligt för värden att kommunicera med andra processer i maskinen. Ta en snabb titt på exemplet nedan för att se hur detta fungerar i verkligheten.
$ lsof -U
För att hitta alla Unix-socketfiler som har ett distinkt process-ID, använd följande lsof-kommando.
$ lsof -U -a -p 18250
Ersätt 18250 med PID för processen du vill titta på. Den kommer att presentera alla Unix-domänsockets som innehåller samma PID.
11. Lista alla aktiva PID
Verktyget lsof gör det också möjligt för administratörer att lista alla processer som körs för närvarande med deras PID. Detta är användbart i ett antal situationer, som att skicka resultatet till Linux kill-kommandot och så vidare.
$ lsof -t $ lsof -t -i
Det första kommandot utför helt enkelt en vanlig lsof och utelämnar sedan alla utdatafält utom PID:erna. Den andra varianten visar endast PID för nätverksprocesserna. Vi kan helt enkelt grep för en specifik PID och mata den till andra kommandon.
12. Lista filer baserat på enhet
Enhetsfiler är en speciell typ av fil i Linux- och BSD-system. De fungerar vanligtvis som ett gränssnitt till olika drivrutiner och beter sig inte som vanliga filer. Följande exempel visar oss hur man listar alla öppna filer för en specifik enhet.
$ lsof /dev/sda9 | less
Du kan lista dina blockerade enheter med hjälp av lsblk kommando. De flesta moderna Linux-distributioner håller dessa filer i /dev katalog.
13 Lista terminalfiler
De /dev katalogen innehåller också speciella enhetsfiler som /dev/tty. Dessa är unika enhetsfiler som ger åtkomst till terminalen för en given process. Du kan använda lsof för att lista alla öppna filer som är associerade med terminalen.
$ lsof /dev/tty* $ lsof /dev/tty2 $ lsof /dev/ttyS0
Det första kommandot listar öppna filer för alla styrande terminaler, medan det andra kommandot riktar sig till en specifik konsol. Det sista exemplet listar filerna som är associerade med din seriella port (/dev/ttyS0).
14. Lista öppna filer i kataloger
Du kan använda kommandot lsof för att lista alla öppna filer i en specifik katalog. Kommandot nedan illustrerar detta med ett enkelt men praktiskt exempel.
$ lsof +D Documents $ sudo lsof +D ~/
Det första kommandot listar alla öppna filer under dokumentkatalogen. Det andra kommandot listar alla öppna filer under hemkatalogen och dess underkataloger. Det andra kommandot fungerar även utan sudo men kommer att visa några varningar i utgången.
15. Lista öppna filer rekursivt i kataloger
Kommandot ovan visar endast filer som är öppnade i dokumentkatalogen. Det kommer inte att visa några öppna filer under underkatalogerna till Dokument. Lyckligtvis erbjuder lsof ett annat praktiskt alternativ för att aktivera detta. Titta på exemplet nedan för en bättre förståelse av detta alternativ.
$ lsof +d Documents $ sudo lsof +d ~/
Detta kommando kommer att visa alla öppna filer i dokumentkatalogen och sedan gå ner i underkatalogerna, om några. Observera att detta kan ta mycket lång tid om dokumentet är stort och har många underkataloger.
16. Lista öppna filer baserat på process
Tidigare har vi listat alla öppna filer med deras PID. Men vi kan också skriva ut listan över filer som är aktiva vid en given tidpunkt med hjälp av deras processnamn. Ta en titt på exemplet nedan och skriv detta i din favorit Linux-terminalemulator för att se hur de fungerar.
$ lsof -c chrome
Det här kommandot matar ut alla öppna filer som skapas av Chrome-processen. Observera att det kan finnas flera processer vars namn börjar med strängen chrome. Detta kommando kommer att presentera dem alla i utgången.
17. Lista överordnat process-ID (PPID)
Verktyget lsof tillåter administratörer att lista det överordnade processidentifieringsnumret (PPID) tillsammans med vanliga utdatafält. Du måste passera alternativet -R för att aktivera detta, som illustreras nedan.
$ lsof -R $ lsof -p [PID HERE] -R
Det första kommandot skriver ut alla för närvarande aktiva processer tillsammans med deras PPID-information. Det sista kommandot tar ett PID-nummer och visar PPID för den processen.
18. Lista PID:er som har öppnat en fil
Följande kommando listar alla process-ID som har öppnat en specifik fil. Här använder vi -t alternativ som införts tidigare.
$ lsof -t /usr/share/mime/mime.cache
Eftersom alternativet -t bara tillhandahåller PID:erna, använder vi det för att producera vår förväntade utdata. Detta kommando kommer att lista alla process-ID som har öppnat dokumentet.
19. Lista filer baserade på filbeskrivningar
Vi kan instruera lsof att lista öppna filer baserat på filbeskrivningar. Följande kommando illustrerar hur du hittar alla öppna filer som har FD(File Descriptor)-fältet inställt som cwd (Current Working Directory).
$ lsof -d cwd $ lsof -u xyz -d cwd -a
Det första kommandot matar ut alla öppna filer under den aktuella arbetskatalogen. Det andra kommandot listar filer som tillhör användaren xyz. De -a alternativet krävs för denna bit, och kommandot kommer inte att fungera som förväntat utan detta alternativ.
20. Visa utdata för andra program
Kommandot lsof tillåter administratörer att producera utdata för analys med externa verktyg som awk, Perl och programmeringsspråket C. Du måste klara -F alternativ bredvid teckenlistor för fältidentifiering.
$ lsof -F $ lsof -FucsS
Det första kommandot producerar en användbar utdata som kan sparas med hjälp av omdirigeringsoperatorn (>) och analyseras senare. Det andra exemplet modifierar utdata för att ta emot ytterligare data som processkommandonamn, användar-ID, strömidentifiering och storlek.
21. Lista misslyckade objekt
Ofta lyckas inte lsof hitta några objekt som användaren begärde. Det är ganska svårt att hitta dessa artiklar eftersom produktionen som produceras av lsof är mycket omfattande. Lyckligtvis -V alternativet gör att lsof kan skriva ut dessa artiklar mycket bekvämt.
$ lsof -V $ lsof -c ssh -c http -V $ lsof -p 12312312 -V
Det första exemplet kommer att lista alla sådana filer som inte lyckades hitta. Det andra exemplet kan användas för att ta reda på om det finns några processkommandon vars namn börjar med ssh eller http. Det sista exemplet illustrerar användningen av -V för process-ID.
22. Visa TCP/TPI-information
Som standard ger lsof lite information om TCP/TPI-anslutningar. Den ger bara rapporter om anslutningstillstånd. Vi kan dock utnyttja alternativet -T för att aktivera ytterligare rapporteringsfunktioner, som visas nedan.
$ lsof -i -Tq $ lsof -i -Tqs
Det första kommandot visar kölängden(q) i dess utdata. Det andra kommandot kommer att visa anslutningstillståndet/-erna vid sidan av kölängden. Standard är -Ts, och när du bara använder -Tkommer det att stänga av all TCP/TPI-rapportering.
23. Inaktivera portnummerkonvertering
De -P alternativet gör det möjligt för administratörer att inaktivera konverteringen av portnummer till namn när de letar efter nätverksfiler eller Unix-uttag. Det kan spara en hel del tid när det finns för många sådana filer.
$ lsof -i -Tqs -P
Du kan jämföra tiden det tar för detta kommando med tiden det tar för samma kommando men utan -P alternativ. Vi kommer att använda ett standard Linux-terminalverktyg som heter Time för detta ändamål.
$ time lsof -i -Tqs $ time lsof -i -Tqs -P
Utförandetiden har minskat till en och sex i min maskin.
24. Inaktivera värdnamnskonvertering
Liksom portnamn kan vi också inaktivera värdnamnskonverteringen från nätverksnummer. Det kommer också att resultera i en betydande ökning av prestanda, som du kommer att se. Linux-tidskommandot kommer att vara användbart igen för att bevisa detta.
$ lsof -i -n
Den här gången kommer lsof inte att konvertera nätverksnumren till värdnamn. Använd följande kommandon för att verifiera förändringen i körhastighet.
$ time lsof -i $ time lsof -i -n $ time lsof -i -n -P
25. Aktivera upprepningsläge
Kommandot lsof i Linux tillhandahåller ett bekvämt upprepningsläge för att övervaka liveoperationer utan att lämna utgångskonsolen. Ta en titt på exemplen nedan för att lära dig mer om detta.
$ lsof -r 5 -i UDP
Detta kommando kommer att mata ut alla pågående UDP-anslutningar var 5:e sekund tills du avslutar kommandot med Ctrl + C. Du kan också använda +r alternativet, som avslutas automatiskt om det inte finns några extra avgifter i utgången.
$ lsof +r 5 -i UDP
26. Lista alla processer som lyssnar på TCP-portar
Vi kan lista alla processer som lyssnar på TCP-portar med hjälp av verktyget lsof. Vi kommer att använda flera parametrar som redan har visat sig göra denna uppgift. Titta på exemplet nedan för att ta reda på hur detta fungerar.
$ lsof -nP -i TCP -s TCP:LISTEN
Det här kommandot inaktiverar konverteringen av värdnamn och portnamn med alternativen -n och -P, som slås samman. De -s option säger till lsof att vi bara är intresserade av processer som lyssnar på TCP-portar.
27. Lista processer baserade på protokoll
Vi kan också definiera specifika protokoll som vi är intresserade av. En snabb blick i kommandona nedan hjälper dig att förstå detta mycket bättre.
$ lsof -i TCP:https $ lsof -i UDP:ntp
Det första kommandot visar alla TCP-filer som använder https-porten, vilket är 443 som standard. Det senare kommandot visar alla UDP-filer som använder NTP-porten (Network Time Protocol). Nästa kommando visar alla sådana UDP-filer som använder IPv4-anslutningar.
$ lsof -i4 -a -i UDP:ntp
28. Visa det totala antalet TCP/UDP-anslutningar
Vi kan använda några traditionella terminalverktyg som grep och awk för att skriva ut det totala antalet aktiva TCP- eller UDP-anslutningar. Kommandot nedan visar detta lsof tillsammans med awk, sort och uniq.
$ lsof -i | awk '{print $8}' | sort | uniq -c | grep 'TCP\|UDP'
Här har vi använt flera kommandon för att utföra vår uppgift. awk-delen skriver ut NODE-delen av utdata som tillhandahålls av lsof, uniq räknar antalet rader och grep söker efter de givna mönstren. Besök vår guide om Linux grep-kommandot för att lära dig mer om att hitta mönster.
29. Lista etablerade nätverksanslutningar
Kommandot nedan visar hur du får alla etablerade nätverksanslutningar med vanliga Linux-verktyg. Vi kommer först att lista alla nätverksfiler och sedan extrahera specifika data från utdata från lsof med hjälp av awk och grep.
$ lsof -i -nP | grep ESTABLISHED | awk '{print $1, $9}' | sort -u
De -nP alternativet inaktiverar konverteringen av värd- och portnamn. Den används för att påskynda den övergripande processen och är inte obligatorisk.
30. Lista alla aktiva SSH-anslutningar
Vi kan också lista alla SSH-anslutningar som görs från/till vårt system med lsof och grep. Ta en snabb titt på nästa exempel för att se hur detta fungerar i realtid.
$ lsof -i TCP | grep ssh | grep ESTABLISHED $ lsof -nP -iTCP -sTCP:ESTABLISHED | grep SSH
Båda ovanstående kommandon fungerar ganska lika. Den senare är dock snabbare på grund av användningen av vissa hämningsflaggor som -n och -P.
31. Lista processer baserade på filåtkomst
Kommandot lsof tillåter också systemadministratörer att avgöra vilka processer som använder en specificerad fil. Kommandon nedan visar detta med Linux, som kommandon vid sidan av lsof.
$ lsof `which lsof` $ lsof `which kate`
Så, genom att helt enkelt skicka den specifika filen till lsof inom backticks, kan vi göra detta. Du kan ersätta något av ovanstående med filer som du vill inspektera och få en lista över de processer som har åtkomst till det. Använd -t alternativet för att endast hämta PID.
$ lsof -t `which chrome` $ lsof -t `which nmap`
32. Döda processer som ägs av användaren
Eftersom lsof tillhandahåller ägarinformation för öppna filer kan vi använda den för att döda en process från terminalen. Kommandot nedan illustrerar hur man skapar alla processer som ägs av användaren ABC med hjälp av kommandot kill tillsammans med lsof.
$ sudo kill -9 `lsof -t -u ABC`
Du bör ersätta ABC med ett faktiskt användarnamn för att framgångsrikt döda processerna som skapats av den användaren. De senaste Linux-distributionerna måste du ha sudo privilegier om du vill döda andra användares processer.
33. Visa filer med reguljära uttryck
Verktyget lsof tillåter administratörer att filtrera bort information med hjälp av reguljära uttrycksmönster. Du måste sätta det angivna mönstret inuti två snedstreck(/) för att detta ska fungera. Exempelvis kommer exemplet nedan att lista alla kommandon som har mer än sex tecken.
$ lsof -c /^......*/
Observera att snedstreck är obligatoriska när du använder reguljära uttryck med lsof. Var och en av de sex prickarna representerar ett enda tecken, medan asterisken
anger att allt efter dessa sex tecken är kvalificerat.
34. Lista vilka processer som använder NFS Vi kan enkelt lista alla processer som tar upp NFS (Network File System)-resurser på vår server. Kommandot lsof i Linux avslöjar -N
$ lsof -N
alternativ för denna uppgift. Se exemplet nedan för att förstå det mer detaljerat.
Utdata från detta kommando kommer att innehålla information som process-ID vid sidan av deras monteringspunkt. Dessa data är mycket lätta att extrahera med kommandot grep och hjälper till att minska problem med Linux NAS- och SAN-lösningar.
35. Lista använda men borttagna filer
$ lsof /var/log | grep -i "deleted"
Kommandot lsof låter oss avgöra vilka filer som har använts av vissa processer tidigare och som för närvarande är borttagna. Detta är praktiskt i ett antal situationer, som när du verifierar diskutrymme med kommandot Linux df.
Detta kommando kommer att lista PID för alla filer som nyligen har raderats av operativsystemets kärna men som fortfarande tar upp plats på din maskin. Du kan använda dessa PID för att döda dessa processer.
36. Räkna antal poster
$ lsof | wc -l $ lsof -t -i -nP | wc -l
Eftersom utdata som produceras av lsof innehåller många poster blir det ofta svårt att visualisera dem. Vi kan enkelt räkna antalet rader som finns i denna utdata genom att överföra denna data till ett praktiskt och användbart Linux-verktyg som heter wc. Ta en titt på exemplet nedan för att se hur detta fungerar.
Ovanstående kommandon matar utgången från lsof till wc och visar det totala antalet rader som finns i lsofs utgång.
37. Aktivera/avaktivera varningsmeddelanden
$ lsof -t -i -nP -w
Vissa av lsof-kommandona kan visa dig varningsmeddelanden när de körs. Lyckligtvis kan vi aktivera/inaktivera dessa varningar som vi anser lämpligt. För att inaktivera varningen i lsofs utdata, använd följande kommando. De -w alternativet kommer att undertrycka eventuella varningar. Du bör använda +w
$ lsof -t -i -nP +w
alternativ för att återaktivera den här funktionen.
Så på detta sätt kan vi ställa in varningsparametern efter behov. Det är ofta användbart när det används tillsammans med Linux-skalskript.
38. Visa versionsinformation
$ lsof -v
Verktyget lsof kan ha vissa variationer mellan Linux- och BSD-varianter. Vi kan lista versionsinformationen för lsof i dessa maskiner och se användbar information som revisionsnummer, kompileringsdatum, kompilatorversion och så vidare.
Den visar oss också alla konfigurationsparametrar som används för att bygga den binära slutprodukten. Dessutom är värdena för kompilator- och laddarflaggor användbara för systemutvecklare såväl som administratörer.
39. Visa hjälpsidan
$ lsof --help
Hjälpsidan för lsof innehåller sammanfattad information om alla tillgängliga kommandoradsalternativ och deras grundläggande användning. Du kan konsultera detta när du är osäker på ett visst alternativ.
Den här sidan returnerar alla möjliga kombinationer av lsofs parametrar och är användbar för både nybörjare och erfarna Linux-användare.
40. Visa manualsidan Manualen innehåller en djupgående diskussion om lsof-verktyget och förklarar de tillgängliga parametrarna i detalj. Det borde du definitivt konsultera denna manual
$ man lsof
om du är en ny Linux-användare utan tidigare erfarenhet av lsof eller liknande Linux-terminalkommandon.
Detta ger dig all information som krävs för att hantera lsof och använda den för dagliga systemövervakningsuppgifter. Det är extremt användbart för nya användare, och du bör alltid konsultera detta när du stöter på problem lsof.
Avslutande tankar
Kommandot lsof i Linux är ett övertygande övervakningsverktyg som tillåter administratörer att visualisera hur processer använder olika filer. Även om det verkar komplicerat för många är det inte annorlunda att använda det här verktyget än andra traditionella kommandoradsverktyg.
Våra redaktörer har valt ut dessa 40 enkla men praktiska Linux-exempel för att hjälpa dig kickstarta din resa med detta fantastiska verktyg. Förhoppningsvis har vi försett dig med den viktiga information du letade efter.
Du bör nu kunna hantera lsof på egen hand. Lämna oss en kommentar om du har några frågor angående lsof-verktyget, och besök oss regelbundet för fler guider om spännande Linux-kommandon.