Linux lsof Kommando

, Author

Kommandoverktyget ”lsof” i Linux är ett av de många inbyggda verktygen som är mycket användbart för att kontrollera ”listan över öppna filer”. Ja, termen ”lsof” är en förkortning av uppgiften.

Det finns ett antal processer som körs i systemet hela tiden och som har tillgång till olika filer i systemet. Dessa filer kan vara diskfiler, skript, nätverksuttag, enheter, namngivna pipes och andra. Med hjälp av ”lsof” är det möjligt att utföra många saker, till exempel felsökning. Det är också ganska användbart för systemadministratörer för att ta reda på vilka filer som nås av vilka processer. Ett av de mest användbara scenarierna som jag har funnit är när du är på väg att avmontera ett filsystem men det fortfarande nås.

Och låt oss utan vidare komma igång med ”lsof”! Jag antar att ditt nuvarande UNIX/Linux-system redan har ”lsof” installerat.

vilket lsof

Detta rapporterar den fullständiga sökvägen för kommandot, i det här fallet ”lsof”.

”lsof” version
lsof -v

Detta kommer att rapportera ingående versionsuppgifter om ”lsof”, inklusive byggdatum för binärfilen, kompilatorversion, kompilatorflaggor och annat.

Basisk användning av ”lsof”

Kör ”lsof” själv.

lsof

Detta rapporterar en STOR lista över alla filer som systemet har tillgång till vid tidpunkten då kommandot körs.

Alla fält är självförklarande, men de flesta blir förvirrade över kolumnerna ”FD” och ”TYPE” och deras värden. Låt oss kolla upp dem.

FD: Förkortning för ”File Descriptor”. Det kommer fram följande värden:

  • cwd: Current working directory
  • rtd: Root directory
  • txt: Programtext (data, kod och annat)
  • mem: Programtext: Minnesmappad fil
  • err: FD-informationsfel
  • mmap: Minnesmappad enhet
  • ltx: Delad bibliotekstext (data och kod)
  • m86: DOS Merge mapped file

Det finns även andra värden som du kommer att märka i kolumnen, som ”1u” följt av u, r, w, etc. värde. Vad betyder dessa?

  • r: Läsåtkomst
  • w: Skrivåtkomst
  • u: Läs- och skrivåtkomst
  • – : Okänt läge och innehåller ett låstecken
  • ’ ’ ’: Läget är okänt och det finns inget låstecken

TYPE: Beskriver filtypen och dess identifiering. Värdena är följande:

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

Användarspecifika öppnade filer

Linux är en lysande plattform för flera användare. Flera användare kan komma åt systemet samtidigt och utföra operationer som de har behörighet för.

För att kontrollera vilka filer som en viss användare har tillgång till kör du följande kommando.

lsof -u <användarnamn>

För att checka ut användare med högre rang behöver ”lsof” dock ”superuser”-behörighet.

sudo lsof -u <användarnamn>

Hur skulle det vara att kolla alla kommandon och filer som en viss användare har tillgång till? Kör följande:

lsof -i -u <användarnamn>

För användare med högre rang behöver ”lsof” privilegiet ”superuser”.

sudo lsof -i -u <användarnamn>

Portspecifika processer som körs

För att få reda på alla processer som för närvarande använder en viss port, anropar du ”lsof” med flaggan ”-i” följt av information om protokoll och port.

lsof -i<46><protocol><@hostname|host_address>
:<service|port>

För att till exempel kontrollera alla program som för närvarande har åtkomst till port 80 över TCP/IP-protokollet, kör följande kommando.

lsof -i TCP:80

Denna metod kan också användas för att visa alla processer som använder portar inom ett visst intervall, till exempel 1 till 1000. Kommandostrukturen liknar den tidigare med lite magi i portnummerdelen.

lsof -i TCP:1-1000

Protokollspecifika processer

Här är 2 exempel som visar de processer som för närvarande använder protokollen IPv4 och IPv6.

lsof -i 4

lsof -i 6

Lista över nätverksanslutningar

Följande kommando rapporterar alla nätverksanslutningar från det aktuella systemet.

lsof -i

Exkludering med ^

Ja, vi kan exkludera specifik användare, port, FD och andra med hjälp av tecknet ”^”. Allt du behöver göra är att använda det med försiktighet så att du inte förstör hela utmatningen.

I det här exemplet ska vi utesluta alla processer från användaren ”root”.

lsof -u^root

Det finns andra sätt att använda den här uteslutningsmekanismen med ”lsof”, till exempel med flaggor som ”-c”, ”-d” osv. Alla flaggor har inte stöd för denna mekanism. Därför rekommenderar jag att man provar en demo med denna metod med någon flagga innan man implementerar den i några skript.

PID-sökning

PID är en viktig egenskap för alla processer som körs i systemet. Den gör det möjligt att finare peka ut en viss process. Processnamnet är inte helt användbart i många situationer eftersom samma binärfil kan skapa kopior av sig själv och utföra olika uppgifter parallellt.

Om du inte vet hur du ska få fram PID för en process, använd bara ”ps” för att lista alla processer som körs och filtrera utmatningen med hjälp av ”grep” med processnamn och/eller kommandon.

ps -A

Nu kan du utföra filtreringen med ”grep”.

ps -A | grep <process_eller_kommando>

Nu kan du kontrollera vilka filer som den PID:n har tillgång till.

lsof -p <PID >

Lista över öppna filer för en specifik enhet

Funktionaliteten hos ”lsof” är inte bara begränsad till dessa funktioner. Du kan också filtrera resultatet av ”lsof” efter enhetsbasis också. För detta ändamål kommer kommandot att se ut ungefär så här:

lsof <device_mount_point>

Det här kommandot är supernyttigt för att ta reda på alla processer som körs med information om ägaren och som har tillgång till ett visst filsystem. Om du har problem med att avmontera ett filsystem är detta det bästa sättet.

lsof <busy_device_mount_point>

Lista över öppnade filer under en katalog

Som i det föregående exemplet är det bara att skicka katalogsökvägen till ”lsof” för att ta reda på om någon process har tillgång till den.

Notera: ”lsof” kommer att kontrollera katalogen rekursivt, så det kan ta tid.

=lsof +D <directory_path>

Bonus: Avsluta all användaraktivitet

Var ytterst försiktig med den här delen, eftersom den helt enkelt kan ställa till det för allt en användare gör. Följande kommando kommer att döda alla processer som körs av en användare.

sudo kill -9 `lsof -t -u <användarnamn`

Sluttliga tankar

Funktionerna i ”lsof” slutar inte bara här. De som nämns här är de som vi kommer att behöva mest på daglig basis. Det finns många andra funktioner i ”lsof” som kan komma till nytta (i specifika fall, förstås).

För alla tillgängliga funktioner och deras användning, kolla in man- och infosidorna för ”lsof”.

man lsof

info lsof

lsof -?

Njut!

Lämna ett svar

Din e-postadress kommer inte publiceras.