Linux lsof Kommando

, Author

Kommandoværktøjet “lsof” i Linux er et af de mange indbyggede værktøjer, der er super nyttige til at tjekke “listen over åbne filer”. Ja, udtrykket “lsof” er forkortelsen for opgaven.

Der er en række processer, der kører i systemet hele tiden, og som har adgang til forskellige filer i systemet. Disse filer kan være diskfiler, scripts, netværkssoketter, enheder, navngivne pipes og andre. Ved hjælp af “lsof” er det muligt at udføre en masse ting, f.eks. debugging. Det er også ganske nyttigt for systemadministratorer til at finde ud af, hvilke filer der tilgås af hvilke processer. Et af de mest nyttige scenarier, som jeg har fundet, er, når man er ved at afmontere et filsystem, men der stadig er adgang til det.

Men lad os uden videre komme i gang med “lsof”! Jeg går ud fra, at dit nuværende UNIX/Linux-system allerede har “lsof” installeret.

som lsof

Dette rapporterer den fulde sti for kommandoen, i dette tilfælde “lsof”.

“lsof” version
lsof -v

Dette vil rapportere detaljerede versionsoplysninger om “lsof”, herunder builddatoen for den binære fil, compilerversion, compilerflag og andre.

Basisk brug af “lsof”

Kør “lsof” alene.

lsof

Dette rapporterer en STOR liste over alle de filer, som systemet har adgang til på det tidspunkt, hvor kommandoen køres.

Mens alle felter er selvforklarende, bliver de fleste forvirret over kolonnerne “FD” og “TYPE” og deres værdier. Lad os tjekke dem ud.

FD: Forkortelse for “File Descriptor”. Det kommer frem med følgende værdier:

  • cwd: Current working directory
  • rtd: Root directory
  • txt: Programtekst (data, kode og andet)
  • mem: Memory-mapped file
  • err: FD-informationsfejl
  • mmap: Memory-mapped device
  • ltx: Delte bibliotekstekster (data og kode)
  • m86: DOS Merge mapped file

Der er også andre værdier, som du vil bemærke i kolonnen, som “1u” efterfulgt af u, r, w, osv. værdi. Hvad betyder disse?

  • r: Læseadgang
  • w: Skriveadgang
  • u: Læse- og skriveadgang
  • – : Ukendt tilstand, og den indeholder et låst tegn
  • ‘ ‘ ‘: Tilstanden er ukendt, og der er ikke noget låst tegn

TYPE: Beskriver filtypen og dens identifikation. Værdierne er som følger:

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

Brugerspecifikke åbnede filer

Linux er en genial flerbrugerplatform. Flere brugere kan få adgang til systemet på samme tid og udføre operationer, som de har tilladelse til.

For at tjekke de filer, som en bestemt bruger har adgang til, skal du køre følgende kommando.

lsof -u <brugernavn>

For at tjekke brugere med højere rang skal “lsof” dog have “superbruger”-rettigheder for at tjekke brugere med højere rang.

sudo lsof -u <brugernavn>

Hvad med at tjekke alle de kommandoer og filer, som en bestemt bruger har adgang til? Kør følgende:

lsof -i -u <brugernavn>

For brugere med højere rang skal “lsof” igen have “superbruger”-rettighederne for “superbruger”.

sudo lsof -i -u <brugernavn>

Port-specifikke kørende processer

For at finde ud af alle de processer, der i øjeblikket bruger en bestemt port, skal du kalde “lsof” med “-i”-flaget efterfulgt af protokol- og portoplysningerne.

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

For eksempel skal du køre følgende kommando for at tjekke alle de programmer, der i øjeblikket har adgang til port 80 over TCP/IP-protokollen, for at se alle de programmer, der i øjeblikket har adgang til port 80 over TCP/IP-protokollen.

lsof -i TCP:80

Denne metode kan også bruges til at vise alle de processer, der bruger porte inden for et bestemt område, f.eks. fra 1 til 1000. Kommandostrukturen ligner den tidligere med lidt magi ved portnummerdelen.

lsof -i TCP:1-1000

Protokolspecifikke processer

Her er 2 eksempler, der viser de processer, der i øjeblikket bruger IPv4- og IPv6-protokollerne.

lsof -i 4

lsof -i 6

Liste over netværksforbindelser

Den følgende kommando viser alle netværksforbindelser fra det aktuelle system.

lsof -i

Udelukkelse med ^

Ja, vi kan udelukke specifik bruger, port, FD og andre ved hjælp af tegnet “^”. Det eneste du skal gøre er at bruge det med forsigtighed, så du ikke ødelægger hele output.

I dette eksempel udelukker vi alle processer fra brugeren “root”.

lsof -u^root

Der er andre måder at bruge denne udelukkelsesmekanisme med “lsof” på, f.eks. med flag som “-c”, “-d” osv. Ikke alle flag understøtter denne mekanisme. Derfor anbefaler jeg, at du prøver en demo med denne metode med et hvilket som helst flag, før du implementerer den i nogle scripts.

PID-søgning

PID er en vigtig egenskab for enhver kørende proces på systemet. Det giver mulighed for finere lokalisering til en bestemt proces. Procesnavnet er ikke helt nyttigt i mange situationer, da den samme binære fil kan oprette kopier af sig selv og udføre forskellige opgaver parallelt.

Hvis du ikke ved, hvordan du får PID’et på en proces, skal du blot bruge “ps” til at liste alle kørende processer og filtrere output ved hjælp af “grep” med procesnavnet og/eller kommandoer.

ps -A

Udfør nu filtreringen ved hjælp af “grep”.

ps -A | grep <process_or_command>

Nu skal du tjekke, hvilke filer det pågældende PID har adgang til.

lsof -p <PID >

Liste over åbne filer for en specifik enhed

Funktionaliteten af “lsof” er ikke kun begrænset til disse funktioner. Du kan også filtrere resultatet af “lsof” efter enhedsbasis. Til dette formål vil kommandoen se nogenlunde sådan ud:

lsof <device_mount_point>

Denne kommando er super nyttig til at finde ud af alle de kørende processer med deres ejerinformationer, der har adgang til et bestemt filsystem. Hvis du har problemer med at afmontere et filsystem, er dette den bedste måde at gøre det på.

lsof <busy_device_mount_point>

Liste over åbnede filer under en mappe

Som i det foregående eksempel skal du blot sende mappens sti til “lsof” for at finde ud af, om nogen proces har adgang til den.

Bemærk: “lsof” vil kontrollere mappen rekursivt, så det kan tage tid.

=lsof +D <directory_path>

Bonus: afslutter al brugeraktivitet

Vær yderst forsigtig med denne del, da den simpelthen kan ødelægge alt, hvad en bruger foretager sig. Følgende kommando vil dræbe alle de kørende processer for en bruger.

sudo kill -9 `lsof -t -u <brugernavn`

Sluttanker

Funktionerne i “lsof” stopper ikke bare her. De her nævnte er dem, som vi vil få mest brug for i dagligdagen. Der er masser af andre funktionaliteter i “lsof”, som kan være nyttige (i specifikke tilfælde, selvfølgelig).

For alle tilgængelige funktioner og deres brug, se man- og info-siderne for “lsof”.

man lsof

info lsof

lsof -?

Nyd!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.