Det finns ett antal processer som körs i systemet hela tiden och får åtkomst till olika filer i systemet. Dessa filer kan vara diskfiler, skript, nätverksuttag, enheter, namngivna rör och andra. Med hjälp av “lsof” är det möjligt att utföra många saker, som felsökning. Det är också ganska användbart för systemadministratörer att ta reda på vilka filer som nås genom vilka processer. En av de mest användbara scenarierna jag har hittat är när du håller på att avmontera ett filsystem men det är fortfarande tillgängligt.
Utan vidare ado, låt oss komma igång med “lsof”! Jag antar att ditt nuvarande UNIX / Linux-system redan har "lsof" installerat.
Plats
vilken lsof
Detta rapporterar hela sökvägen för kommandot, i det här fallet "lsof".
”Lsof” -versionlsof -v
Detta kommer att rapportera djupgående version av ”lsof”, inklusive byggdatum för binär, kompilatorversion, kompilatorflaggor och andra.
Grundläggande “lsof” användning
Kör “lsof” av sig själv.
lsof
Detta rapporterar en STOR lista över alla filer som systemet nås när kommandot körs.
Medan alla fälten är självförklarande, blir du mestadels förvirrad över kolumnerna "FD" och "TYPE" och deras värden. Låt oss kolla in dem.
FD: Förkortning av "File Descriptor". Det kommer upp med följande värden.
- cwd: Aktuell arbetskatalog
- rtd: rotkatalog
- txt: Programtext (data, kod och andra)
- mem: Minnesmappad fil
- fel: FD-informationsfel
- mmap: Minneskartad enhet
- ltx: Delad bibliotekstext (data och kod)
- m86: DOS Merge mappad fil
Det finns också andra värden som du kommer att märka i kolumnen, som “1u” följt av u, r, w, etc. värde. Vad betyder det??
- r: Läsåtkomst
- w: Skrivåtkomst
- u: Läs- och skrivåtkomst
- - : Okänt läge och det innehåller ett låstecken
- ": Läget är okänt och det finns inget låstecken
TYP: Beskriver filtyp och dess identifikation. Värdena är som följer.
- DIR: Katalog
- CHR: Karaktär-specialfil
- REG: Vanlig fil
- FIFO: Först in, först ut
Användarspecifika öppnade filer
Linux är en lysande fleranvändarplattform. Flera användare kan komma åt systemet samtidigt och utföra åtgärder som de har behörighet för.
För att kolla in de filer som en viss användare använder, kör du följande kommando.
lsof -u
Men för att kolla in användare med högre rang behöver "lsof" privilegium "superanvändare".
sudo lsof -u
Vad sägs om att kolla in alla kommandon och filer som en viss användare har åtkomst till? Kör följande.
lsof -i -u
Återigen, för användare med högre rang behöver "lsof" privilegiet "superanvändare".
sudo lsof -i -u
Hamnsspecifika körprocesser
För att ta reda på alla processer som för närvarande använder en viss port, ring "lsof" med "-i" -flaggan följt av protokollet och portinformation.
lsof -i<46>:
Om du till exempel vill kolla in alla program som för närvarande har åtkomst till port 80 via TCP / IP-protokoll, kör du 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 tidigare med lite magi vid portnummerdelen.
lsof -i TCP: 1-1000
Protokollspecifika processer
Här är två exempel som visar de processer som för närvarande använder IPv4- och IPv6-protokollen.
lsof -i 4lsof -i 6
Listar nätverksanslutningar
Följande kommando rapporterar alla nätverksanslutningar från det aktuella systemet.
lsof -i
Exklusive med ^
Ja, vi kan utesluta specifik användare, port, FD och andra med tecknet “^”. Allt du behöver göra är att använda den med försiktighet så att du inte förstör hela produktionen.
I det här exemplet, låt oss utesluta alla processer från användarens "root".
lsof -u ^ root
Det finns andra sätt att använda denna uteslutande mekanism med “lsof”, till exempel med flaggor som “-c”, “-d” etc. Inte alla flaggor stöder denna mekanism. Det är därför jag rekommenderar att du testar en demo med den här metoden med vilken flagga som helst innan du implementerar den i vissa skript.
PID-sökning
PID är en viktig egenskap för alla processer som körs i systemet. Det gör det möjligt att finjustera en viss process. Processnamnet är inte riktigt bra i många situationer, eftersom samma binära kan skapa kopior av sig själv och utföra olika uppgifter parallellt.
Om du inte vet hur du får PID för en process, använd bara "ps" för att lista alla pågående processer och filtrera utdata med "grep" med processnamn och / eller kommandon.
ps -A
Utför nu filtreringen med "grep".
ps -A | grep
Kolla nu vilka filer som PID har åtkomst till.
lsof -pLista öppna filer för en viss enhet
Funktionen hos “lsof” är inte bara begränsad till dessa funktioner. Du kan också filtrera resultatet av “lsof” efter enhetsbasis. För detta ändamål ser kommandot ut ungefär så här.
lsof
Det här kommandot är mycket användbart för att ta reda på alla processer som körs med deras ägarinformation för åtkomst till ett visst filsystem. Om du har problem med att avmontera ett filsystem är det här det bästa sättet att gå.
lsofLista öppnade filer under en katalog
I likhet med föregående exempel, passera bara katalogvägen till “lsof” för att ta reda på om någon process har åtkomst till den.
Obs: “lsof” kommer att kontrollera katalogen rekursivt, så det kan ta tid.
= lsof + D
Bonus: avsluta all användaraktivitet
Var extremt försiktig med den här delen eftersom den helt enkelt kan klara sig med allt som en användare gör. Följande kommando dödar alla körningsprocesser för en användare.
sudo kill -9 'lsof -t -uFunktionerna i “lsof” stannar inte bara här. De som nämns här är de som vi behöver mest dagligen. Det finns många andra funktioner i "lsof" som kan vara till nytta (i specifika fall, naturligtvis).
För alla tillgängliga funktioner och deras användning, kolla in man- och infosidorna på “lsof”.
man lsofinfo lsof
lsof -?
Njut av!