Tutki/proc-tiedostojärjestelmää Linuxissa


Tänään aiomme tarkastella/proc-hakemistoa ja tutustua siihen./Proc-hakemisto on kaikissa Linux-järjestelmissä mausta tai arkkitehtuurista riippumatta.

Yksi väärinkäsitys, joka meidän on heti selvitettävä, on se, että/proc-hakemisto EI ole todellinen tiedostojärjestelmä termin mielessä. Se on virtuaalinen tiedostojärjestelmä. Procfs sisältää tietoja prosesseista ja muuta järjestelmätiedot. Se on kartoitettu/proc ja asennettu käynnistyshetkellä.

Ensinnäkin päästään sisään/proc-hakemistoon ja katsotaan ympärilleen:

# cd /proc

Ensinnäkin huomaat, että on joitain tuttuja kuulostavia tiedostoja ja sitten koko joukko numeroituja hakemistoja. Numeroidut hakemistot edustavat prosesseja, jotka tunnetaan paremmin nimellä PID, ja niiden sisällä komento, joka käyttää niitä. Tiedostot sisältävät järjestelmätiedot, kuten muisti (meminfo), suorittimen tiedot (cpuinfo) ja käytettävissä olevat tiedostojärjestelmät.

Lue myös: Linuxin vapaa komento fyysisen muistin tarkistamiseksi ja muistin vaihtamiseksi

Katsotaanpa ensin yksi tiedostoista:

# cat /proc/meminfo

joka palauttaa jotain vastaavaa tähän:

MemTotal:         604340 kB
MemFree:           54240 kB
Buffers:           18700 kB
Cached:           369020 kB
SwapCached:            0 kB
Active:           312556 kB
Inactive:         164856 kB
Active(anon):      89744 kB
Inactive(anon):      360 kB
Active(file):     222812 kB
Inactive(file):   164496 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:         89724 kB
Mapped:            18012 kB
Shmem:               412 kB
Slab:              50104 kB
SReclaimable:      40224 kB
...

Kuten näette,/proc/meminfo sisältää joukon tietoja järjestelmän muistista, mukaan lukien käytettävissä oleva kokonaismäärä (kt) ja vapaa määrä kahdella ylimmällä rivillä.

Kissa-komennon suorittaminen missä tahansa/proc-tiedostossa tuottaa niiden sisällön. Tietoja tiedostoista on saatavilla man-sivulla suorittamalla:

# man 5 /proc/<filename>

Annan sinulle nopeasti luettelon/proc-tiedostoista:

  1. /proc/cmdline - Ytimen komentorivin tiedot.
  2. /proc/console - Tietoja nykyisistä konsoleista, mukaan lukien tty.
  3. /proc/devices - Laiteohjaimet, jotka on määritetty käynnissä olevalle ytimelle.
  4. /proc/dma - Tiedot nykyisistä DMA-kanavista.
  5. /proc/fb - kehyspuskurilaitteet.
  6. /proc/filesystems - Ytimen tukemat nykyiset tiedostojärjestelmät.
  7. /proc/iomem - Laitteiden nykyinen järjestelmän muistikartta.
  8. /proc/ioports - Rekisteröidyt porttialueet tulolähtöä varten laitteen kanssa.
  9. /proc/loadavg - järjestelmän kuormituksen keskiarvo.
  10. /proc/locks - Ytimen tällä hetkellä lukitsemat tiedostot.
  11. /proc/meminfo - Tietoja järjestelmämuistista (katso yllä oleva esimerkki).
  12. /proc/misc - erilaiset ohjaimet, jotka on rekisteröity erilaisille päälaitteille.
  13. /proc/modules - Tällä hetkellä ladatut ytimen moduulit.
  14. /proc/mounts - Luettelo kaikista järjestelmäkäytössä olevista kiinnikkeistä.
  15. /proc/partitions - Yksityiskohtaista tietoa järjestelmän käytettävissä olevista osioista.
  16. /proc/pci - Tietoja kaikista PCI-laitteista.
  17. /proc/swap - Tietoja vaihtotilasta.
  18. /proc/uptime - Uptime-tiedot (sekunteina).
  19. /proc/version - Kernel-versio, gcc-versio ja Linux-jakelu asennettuna.

/ Proc: n numeroiduista hakemistoista löydät muutaman tiedoston ja linkin. Muista, että näiden hakemistojen numerot korreloivat niiden sisällä suoritettavan komennon PID: n kanssa. Käytetään esimerkkiä. Järjestelmässäni on kansion nimi/proc/12:

# cd /proc/12
# ls
attr        coredump_filter  io         mounts      oom_score_adj  smaps    wchan
autogroup   cpuset           latency    mountstats  pagemap        stack
auxv        cwd              limits     net         personality    stat
cgroup      environ          loginuid   ns          root           statm
clear_refs  exe              maps       numa_maps   sched          status
cmdline     fd               mem        oom_adj     schedstat      syscall
comm        fdinfo           mountinfo  oom_score   sessionid      task

Jos juoksen:

# cat /proc/12/status

Saan seuraavat:

Name:	xenwatch
State:	S (sleeping)
Tgid:	12
Pid:	12
PPid:	2
TracerPid:	0
Uid:	0	0	0	0
Gid:	0	0	0	0
FDSize:	64
Groups:
Threads:	1
SigQ:	1/4592
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000000000000
SigIgn:	ffffffffffffffff
SigCgt:	0000000000000000
CapInh:	0000000000000000
CapPrm:	ffffffffffffffff
CapEff:	ffffffffffffffff
CapBnd:	ffffffffffffffff
Cpus_allowed:	1
Cpus_allowed_list:	0
Mems_allowed:	00000000,00000001
Mems_allowed_list:	0
voluntary_ctxt_switches:	84
nonvoluntary_ctxt_switches:	0

Joten mitä tämä tarkoittaa? Tärkeä osa on huipulla. Tilatiedostosta voidaan nähdä, että tämä prosessi kuuluu xenwatchille. Sen nykyinen tila nukkuu, ja sen prosessitunnus on tietysti 12. Voimme myös nähdä, kuka suorittaa tämän, koska UID ja GID ovat 0, mikä osoittaa, että tämä prosessi kuuluu pääkäyttäjälle.

Missä tahansa numeroidussa hakemistossa sinulla on samanlainen tiedostorakenne. Tärkeimmät ja niiden kuvaukset ovat seuraavat:

  1. cmdline - prosessin komentorivi
  2. ympäristö - ympäristömuuttujat
  3. fd - tiedostojen kuvaimet
  4. rajoitukset - sisältää tietoja prosessin rajoista
  5. kiinnitykseen liittyvät tiedot

Huomaa myös useita linkkejä numeroidussa hakemistossa:

  1. cwd - linkki prosessin nykyiseen työhakemistoon
  2. exe - linkki prosessin suoritettavaan tiedostoon
  3. juuri - linkki prosessin työhakemistoon

Tämän pitäisi auttaa sinua tutustumaan/proc-hakemistoon. Sen pitäisi myös antaa tietoa siitä, kuinka monet komennot hankkivat tietonsa, kuten käyttöaika, lsof, mount ja ps vain muutamia mainitakseni.