Er zijn voortdurend een aantal processen in het systeem actief, die toegang hebben tot verschillende bestanden van het systeem. Deze bestanden kunnen schijfbestanden, scripts, netwerksockets, apparaten, named pipes en andere zijn. Met behulp van "lsof" is het mogelijk om veel dingen uit te voeren, zoals debuggen. Het is ook heel handig voor systeembeheerders om erachter te komen welke bestanden door welke processen worden geopend. Een van de handigste scenario's die ik heb gevonden, is wanneer je op het punt staat een bestandssysteem te ontkoppelen, maar het wordt nog steeds gebruikt.
Laten we zonder verder oponthoud beginnen met "lsof"! Ik neem aan dat je huidige UNIX/Linux-systeem al "lsof" heeft geïnstalleerd.
Plaats
welke lsof
Dit rapporteert het volledige pad van de opdracht, in dit geval "lsof".
"lsof" versielsof -v
Dit rapporteert diepgaande versie-informatie van "lsof", inclusief de builddatum van het binaire bestand, compilerversie, compilervlaggen en andere.
Basisgebruik van "lsof"
Voer zelf "lsof" uit.
lsof
Dit rapporteert een GROTE lijst van alle bestanden die door het systeem worden geopend op het moment dat de opdracht wordt uitgevoerd.
Hoewel alle velden voor zichzelf spreken, raak je meestal in de war over de kolommen "FD" en "TYPE" en hun waarden. Laten we ze eens bekijken.
FD: Afkorting van “File Descriptor”. Het komt met de volgende waarden:.
- cwd: Huidige werkmap
- rtd: Hoofdmap
- txt: programmatekst (gegevens, code en andere)
- mem: aan geheugen toegewezen bestand
- err: FD-informatiefout
- mmap: apparaat met geheugentoewijzing
- ltx: Gedeelde bibliotheektekst (gegevens en code)
- m86: DOS-toegewezen bestand samenvoegen
Er zijn ook andere waarden die u in de kolom zult opmerken, zoals "1u" gevolgd door u, r, w, enz. waarde. Wat betekenen die??
- r: Leestoegang
- w: Schrijftoegang
- u: lees- en schrijftoegang
- - : Onbekende modus en het bevat een slotteken
- ": Modus is onbekend en er is geen slotteken
TYPE: beschrijft het bestandstype en de identificatie ervan. De waarden zijn als volgt:.
- DIR: Directory
- CHR: speciaal tekenbestand
- REG: Normaal bestand
- FIFO: First in, first out
Gebruikersspecifieke geopende bestanden
Linux is een briljant platform voor meerdere gebruikers. Meerdere gebruikers hebben tegelijkertijd toegang tot het systeem en kunnen bewerkingen uitvoeren waarvoor ze toestemming hebben.
Voer de volgende opdracht uit om de bestanden te bekijken die door een bepaalde gebruiker worden geopend:.
lsof -u
Om de gebruikers met een hogere rang uit te checken, heeft "lsof" echter het "superuser"-privilege nodig.
sudo lsof -u
Hoe zit het met het bekijken van alle opdrachten en bestanden die een bepaalde gebruiker gebruikt?? Voer de volgende uit:.
lsof -i -u
Nogmaals, voor gebruikers met een hogere rang heeft "lsof" het recht "superuser" nodig.
sudo lsof -i -u
Poortspecifieke lopende processen
Voor het vinden van alle processen die momenteel een bepaalde poort gebruiken, roept u "lsof" aan met de vlag "-i", gevolgd door het protocol en de poortinformatie.
lsof -i<46>:
Als u bijvoorbeeld alle programma's wilt bekijken die momenteel toegang hebben tot poort 80 via het TCP/IP-protocol, voert u de volgende opdracht uit:.
lsof -i TCP:80
Deze methode kan ook worden gebruikt om alle processen weer te geven die poorten gebruiken binnen een bepaald bereik, bijvoorbeeld 1 tot 1000. De commandostructuur is vergelijkbaar met voorheen met een beetje magie bij het poortnummergedeelte.
lsof -i TCP:1-1000
Protocolspecifieke processen
Hier zijn 2 voorbeelden die de processen tonen die momenteel de IPv4- en IPv6-protocollen gebruiken.
lsof -i 4lsof -i 6
Netwerkverbindingen weergeven
De volgende opdracht rapporteert alle netwerkverbindingen van het huidige systeem:.
lsof -i
Exclusief met ^
Ja, we kunnen specifieke gebruiker, poort, FD en anderen uitsluiten met het teken "^". Het enige dat u hoeft te doen, is het met de nodige voorzichtigheid gebruiken, zodat u niet de hele uitvoer verknoeit.
Laten we in dit voorbeeld alle processen uitsluiten van de gebruiker "root".
lsof -u^root
Er zijn andere manieren om dit uitsluitingsmechanisme te gebruiken met "lsof", bijvoorbeeld met de vlaggen zoals "-c", "-d" enz. Niet alle vlaggen ondersteunen dit mechanisme. Daarom raad ik aan om een demo met deze methode uit te proberen met een willekeurige vlag voordat je het in sommige scripts implementeert.
PID zoeken
PID is een belangrijke eigenschap van elk lopend proces op het systeem. Het maakt een fijnere lokalisatie van een bepaald proces mogelijk. De procesnaam is in veel situaties niet erg handig, omdat hetzelfde binaire bestand kopieën van zichzelf kan maken en tegelijkertijd verschillende taken kan uitvoeren.
Als u niet weet hoe u de PID van een proces kunt krijgen, gebruikt u gewoon "ps" om alle lopende processen op te sommen en filtert u de uitvoer met "grep" met de procesnaam en/of opdrachten.
ps -A
Voer nu de filtering uit met "grep".
ps -A | grep
Bekijk nu welke bestanden die PID gebruikt.
lsof -pOpenstaande bestanden voor een specifiek apparaat weergeven
De functionaliteit van "lsof" is niet alleen beperkt tot deze functies. U kunt het resultaat van "lsof" ook filteren op apparaatbasis. Voor dit doel ziet het commando er ongeveer zo uit:.
lsof
Deze opdracht is super handig om alle lopende processen te achterhalen met hun eigenaarinformatie die toegang heeft tot een bepaald bestandssysteem. Als je problemen hebt met het ontkoppelen van een bestandssysteem, is dit de beste manier om te gaan.
lsofLijst geopende bestanden onder een map
Net als bij het vorige voorbeeld, geef je gewoon het mappad door aan "lsof" om te zien of een proces er toegang toe heeft.
Opmerking: "lsof" zal de map recursief controleren, dus het kan even duren.
=lsof +D
Bonus: beëindig alle gebruikersactiviteit
Wees uiterst voorzichtig met dit onderdeel, want het kan alles wat een gebruiker aan het doen is gewoon verknoeien. De volgende opdracht zal alle lopende processen van een gebruiker doden.
sudo kill -9 'lsof -t -uDe kenmerken van "lsof" stoppen hier niet alleen. Degene die hier worden genoemd, zijn degenen die we dagelijks het meest nodig hebben. Er zijn tal van andere functionaliteiten van "lsof" die van pas kunnen komen (in specifieke gevallen natuurlijk).
Voor alle beschikbare functies en hun gebruik, bekijk de man- en infopagina's van "lsof".
man lsofinfo lsof
lsof -?
Genieten!