Linuxin lsof-komento

, Author

Linuxin ”lsof”-komentotyökalu on yksi monista sisäänrakennetuista työkaluista, joka on erittäin hyödyllinen ”avoimien tiedostojen luettelon” tarkistamiseen. Kyllä, termi ”lsof” on tehtävän lyhenne.

Järjestelmässä on koko ajan käynnissä useita prosesseja, jotka käyttävät järjestelmän eri tiedostoja. Nämä tiedostot voivat olla levytiedostoja, skriptejä, verkkopistorasioita, laitteita, nimettyjä putkia ja muita. Käyttämällä ”lsof”-ohjelmaa on mahdollista suorittaa monia asioita, kuten virheenkorjausta. Se on myös varsin hyödyllinen järjestelmän ylläpitäjille selvittääkseen, mitä tiedostoja mitkä prosessit käyttävät. Yksi hyödyllisimmistä tilanteista, jonka olen havainnut, on se, kun tiedostojärjestelmä aiotaan irrottaa, mutta sitä käytetään edelleen.

Lisäämättä, aloitetaan ”lsof”-ohjelmalla! Oletan, että nykyisessä UNIX/Linux-järjestelmässäsi on jo asennettuna ”lsof”.

joka lsof

Tämä ilmoittaa komennon, tässä tapauksessa ”lsof”, koko polun.

”lsof” versio
lsof -v

Tämä raportoi ”lsof”-komennon perusteelliset versiotiedot, mukaan lukien binääritiedoston rakentamispäivämäärän, kääntäjäversion, kääntäjän lipputunnukset ja muut.

Basic ”lsof” usage

Ajoita ”lsof” itsestään.

lsof

Tämä raportoi BIG-luettelon kaikista tiedostoista, joita järjestelmä käyttää komennon suoritushetkellä.

Vaikka kaikki kentät ovat itsestään selviä, useimmiten hämmennystä aiheuttavat sarakkeet ”FD” ja ”TYPE” ja niiden arvot. Tutustutaanpa niihin.

FD: Lyhenne sanoista ”File Descriptor”. Se antaa seuraavat arvot:

  • cwd: Nykyinen työhakemisto
  • rtd: Juurihakemisto
  • txt: Ohjelmateksti (data, koodi ja muut)
  • mem: Muistikartoitettu tiedosto
  • err: FD-tietovirhe
  • mmap: Memory-mapped device
  • ltx: Jaetun kirjaston teksti (data ja koodi)
  • m86: DOS Merge mapped file

Sarakkeessa on myös muita arvoja, jotka huomaat, kuten ”1u”, jota seuraa u, r, w jne. arvo. Mitä ne tarkoittavat?

  • r: Lukuoikeus
  • w: Kirjoitusoikeus
  • u: Luku- ja kirjoitusoikeus
  • – : Tuntematon tila ja siinä on lukitusmerkki
  • ’ ’: Tila on tuntematon eikä siinä ole lukitusmerkkiä

TYPE: Kuvaa tiedostotyypin ja sen tunnisteen. Arvot ovat seuraavat:

  • DIR: Hakemisto
  • CHR: Merkki-erityistiedosto
  • REG: Tavallinen tiedosto
  • FIFO: First in, first out

Käyttäjäkohtaisesti avatut tiedostot

Linux on loistava monikäyttäjäalusta. Useat käyttäjät voivat käyttää järjestelmää samanaikaisesti ja suorittaa toimintoja, joihin heillä on oikeudet.

Tarkistaaksesi tiedostot, joita tietty käyttäjä käyttää, suorita seuraava komento.

lsof -u <käyttäjätunnus>

Korkea-arvoisten käyttäjien tarkistamiseen ”lsof” tarvitsee kuitenkin ”superuser”-oikeudet.

sudo lsof -u <käyttäjätunnus>

Miten olisi, jos voisit tarkistaa kaikki komennot ja tiedostot, joita tietty käyttäjä käyttää? Suorita seuraava.

lsof -i -u <käyttäjätunnus>

Taas, korkeammassa asemassa oleville käyttäjille ”lsof” tarvitsee ”superuser”-oikeudet.

sudo lsof -i -u <käyttäjätunnus>

Porttikohtaiset käynnissä olevat prosessit

Kaikkien tiettyä porttia tällä hetkellä käyttävien prosessien selvittämiseksi kutsu komentoa ”lsof” ja käytä sen yhteydessä lipputunnusta ”-i” ja sen perässä protokolla- ja porttitietoja.

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

Tarkista esimerkiksi kaikki ohjelmat, jotka käyttävät tällä hetkellä porttia 80 TCP/IP-protokollan kautta, suorittamalla seuraava komento.

lsof -i TCP:80

Menetelmää voidaan käyttää myös kaikkien niiden prosessien näyttämiseen, jotka käyttävät portteja tietyllä alueella, esimerkiksi 1-1000. Komentorakenne on samanlainen kuin aiemminkin, mutta porttinumero-osassa on pieni taika.

lsof -i TCP:1-1000

Protokollakohtaiset prosessit

Tässä on kaksi esimerkkiä, joissa näytetään prosessit, jotka käyttävät tällä hetkellä IPv4- ja IPv6-protokollia.

lsof -i 4

lsof -i 6

Verkkoyhteyksien luettelointi

Seuraavalla komennolla ilmoitetaan kaikki nykyisen järjestelmän verkkoyhteydet.

lsof -i

Pois sulkeminen ^:llä

Voidaan sulkea pois tietyt käyttäjät, portit, FD:t ynnä muut käyttämällä merkkiä ”^”. Sitä on vain käytettävä varoen, jotta ei sotketa koko tulostetta.

Tässä esimerkissä suljetaan pois kaikki käyttäjän ”root” prosessit.

lsof -u^root

Tämän poissulkemismekanismin käyttämiseen ”lsof”-ohjelmalla on muitakin tapoja, esimerkiksi lippujen ”-c”, ”-d” jne. avulla. Kaikki liput eivät tue tätä mekanismia. Siksi suosittelen kokeilemaan demoa tällä menetelmällä millä tahansa lipulla ennen kuin otat sen käyttöön joihinkin skripteihin.

PID-haku

PID on kaikkien järjestelmässä käynnissä olevien prosessien tärkeä ominaisuus. Se mahdollistaa tietyn prosessin tarkemman paikantamisen. Prosessin nimi ei ole kovinkaan hyödyllinen monissa tilanteissa, koska sama binääri voi luoda itsestään kopioita ja suorittaa eri tehtäviä rinnakkain.

Jos et tiedä, miten saat prosessin PID-tunnuksen, käytä ”ps”-ohjelmaa kaikkien käynnissä olevien prosessien listaamiseen ja suodata tuotos ”grep”-ohjelmalla prosessin nimellä ja/tai komennoilla.

ps -A

Suorita nyt suodatus ”grep”-ohjelmalla.

ps -A | grep <process_or_command>

Tarkista nyt, mitä tiedostoja kyseinen PID käyttää.

lsof -p <PID >

Luettelo tietyn laitteen avoimista tiedostoista

”lsof”-ohjelman toiminnallisuus ei rajoitu vain näihin toimintoihin. Voit myös suodattaa ”lsof”-ohjelman tuloksen laitekohtaisesti. Tätä tarkoitusta varten komento näyttää jotakuinkin tältä.

lsof <device_mount_point>

Tämä komento on erittäin hyödyllinen, kun haluat selvittää kaikki käynnissä olevat prosessit omistajatietoineen, jotka käyttävät tiettyä tiedostojärjestelmää. Jos sinulla on ongelmia tiedostojärjestelmän irrottamisessa, tämä on paras tapa toimia.

lsof <busy_device_mount_point>

Luettelo hakemiston alla olevista avoinna olevista tiedostoista

Samankaltainen kuin edellisessä esimerkissä, välitä vain hakemiston polku ”lsof”-komennolle saadaksesi selville, käyttääkö jokin prosessi sitä.

Huomaa: ”lsof” tarkistaa hakemiston rekursiivisesti, joten se voi viedä aikaa.

=lsof +D <hakemistopolku>

Bonus: lopeta kaikki käyttäjän aktiviteetit

Ole erittäin varovainen tämän osion kanssa, sillä se voi yksinkertaisesti sotkea kaiken käyttäjän tekemän. Seuraava komento tappaa kaikki käyttäjän käynnissä olevat prosessit.

sudo kill -9 `lsof -t -u <käyttäjänimi`

Loppuajatuksia

”lsofin” ominaisuudet eivät lopu tähän. Tässä mainitut ovat niitä, joita tarvitsemme eniten päivittäin. On paljon muitakin ”lsofin” toiminnallisuuksia, jotka voivat tulla tarpeeseen (tietysti erityistapauksissa).

Kaikki käytettävissä olevat ominaisuudet ja niiden käyttö löytyvät ”lsofin” man- ja info-sivuilta.

man lsof

info lsof

lsof -?

Iloa!

Vastaa

Sähköpostiosoitettasi ei julkaista.