Raziskovanje/proc datotečnega sistema v Linuxu


Danes si bomo ogledali imenik/proc in se z njim seznanili. Imenik/proc je prisoten v vseh sistemih Linux, ne glede na okus ali arhitekturo.

Napačna predstava, ki jo moramo takoj razjasniti, je, da imenik/proc NI pravi datotečni sistem v smislu tega izraza. Je navidezni datotečni sistem. V okviru procfs so informacije o procesih in druge sistemske informacije. Preslika se v/proc in se namesti ob zagonu.

Najprej pojdimo v imenik/proc in si oglejte:

# cd /proc

Prva stvar, ki jo boste opazili, je, da obstaja nekaj znanih zvočnih datotek in nato cel kup oštevilčenih imenikov. Oštevilčeni imeniki predstavljajo procese, bolj znane kot PID, in znotraj njih ukaz, ki jih zaseda. Datoteke vsebujejo sistemske informacije, kot so pomnilnik (meminfo), informacije o CPE (cpuinfo) in razpoložljivi datotečni sistemi.

Preberite tudi: Linux Free Command za preverjanje fizičnega pomnilnika in zamenjavo pomnilnika

Najprej si oglejmo eno od datotek:

# cat /proc/meminfo

ki vrne nekaj podobnega temu:

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
...

Kot lahko vidite,/proc/meminfo vsebuje kup informacij o pomnilniku vašega sistema, vključno s skupno razpoložljivo količino (v kb) in brezplačno količino v zgornjih dveh vrsticah.

Če zaženete ukaz cat na kateri koli datoteki v/proc, bo prikazana njihova vsebina. Informacije o vseh datotekah so na voljo na priročni strani z zagonom:

# man 5 /proc/<filename>

Dal vam bom hiter pregled datotek/proc:

  1. /proc/cmdline - informacije o ukazni vrstici jedra.
  2. /proc/console - informacije o trenutnih konzolah, vključno s tty.
  3. /proc/devices - gonilniki naprav, trenutno konfigurirani za delujoče jedro.
  4. /proc/dma - Informacije o trenutnih kanalih DMA.
  5. /proc/fb - Naprave Framebuffer.
  6. /proc/filesystems - trenutni datotečni sistemi, ki jih podpira jedro.
  7. /proc/iomem - trenutna mapa sistemskega pomnilnika za naprave.
  8. /proc/ioports - Registrirana območja vrat za vhodno izhodno komunikacijo z napravo.
  9. /proc/loadavg - Povprečna obremenitev sistema.
  10. /proc/locks - datoteke, ki jih trenutno zaklene jedro.
  11. /proc/meminfo - Informacije o sistemskem pomnilniku (glej zgornji primer).
  12. /proc/misc - razni gonilniki, registrirani za različne glavne naprave.
  13. /proc/modules - trenutno naloženi moduli jedra.
  14. /proc/mounts - Seznam vseh nosilcev, ki jih sistem uporablja.
  15. /proc/particije - podrobne informacije o particijah, ki so na voljo sistemu.
  16. /proc/pci - Informacije o vsaki napravi PCI.
  17. /proc/stat - zapis ali različni statistični podatki, shranjeni od zadnjega ponovnega zagona.
  18. /proc/swap - Informacije o swap prostoru.
  19. /proc/uptime - informacije o neprekinjenem delovanju (v sekundah).
  20. /proc/version - nameščena je različica jedra, različica gcc in distribucija Linuxa.

V oštevilčenih imenikih/proc boste našli nekaj datotek in povezav. Ne pozabite, da so številke teh imenikov povezane s PID ukaza, ki se izvaja v njih. Uporabimo primer. V mojem sistemu je ime mape/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

Če tečem:

# cat /proc/12/status

Dobim naslednje:

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

Torej, kaj to pomeni? No, pomemben del je na vrhu. Iz datoteke s stanjem lahko vidimo, da ta postopek pripada xenwatchu. Trenutno stanje je v stanju spanja in ID procesa je očitno 12. Prav tako lahko vidimo, kdo to izvaja, saj sta UID in GID 0, kar pomeni, da ta postopek pripada korenskemu uporabniku.

V katerem koli oštevilčenem imeniku boste imeli podobno strukturo datotek. Najpomembnejši in njihovi opisi so naslednji:

  1. cmdline - ukazna vrstica postopka
  2. okolje - okoljske spremenljivke
  3. fd - deskriptorji datotek
  4. omejitve - vsebuje informacije o omejitvah postopka
  5. informacije, povezane z nosilci

V oštevilčenem imeniku boste opazili tudi številne povezave:

  1. cwd - povezava do trenutnega delovnega imenika procesa
  2. exe - povezava do izvedljivega postopka
  3. root - povezava do delovnega imenika procesa

S tem bi morali začeti s seznanjanjem z imenikom/proc. Zagotoviti mora tudi vpogled v to, kako številni ukazi pridobijo svoje podatke, na primer uptime, lsof, mount in ps, če jih le naštejemo.