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:
- /proc/cmdline - informacije o ukazni vrstici jedra.
- /proc/console - informacije o trenutnih konzolah, vključno s tty.
- /proc/devices - gonilniki naprav, trenutno konfigurirani za delujoče jedro.
- /proc/dma - Informacije o trenutnih kanalih DMA.
- /proc/fb - Naprave Framebuffer.
- /proc/filesystems - trenutni datotečni sistemi, ki jih podpira jedro.
- /proc/iomem - trenutna mapa sistemskega pomnilnika za naprave.
- /proc/ioports - Registrirana območja vrat za vhodno izhodno komunikacijo z napravo.
- /proc/loadavg - Povprečna obremenitev sistema.
- /proc/locks - datoteke, ki jih trenutno zaklene jedro.
- /proc/meminfo - Informacije o sistemskem pomnilniku (glej zgornji primer).
- /proc/misc - razni gonilniki, registrirani za različne glavne naprave.
- /proc/modules - trenutno naloženi moduli jedra.
- /proc/mounts - Seznam vseh nosilcev, ki jih sistem uporablja.
- /proc/particije - podrobne informacije o particijah, ki so na voljo sistemu.
- /proc/pci - Informacije o vsaki napravi PCI.
- /proc/stat - zapis ali različni statistični podatki, shranjeni od zadnjega ponovnega zagona.
- /proc/swap - Informacije o swap prostoru.
- /proc/uptime - informacije o neprekinjenem delovanju (v sekundah).
- /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:
- cmdline - ukazna vrstica postopka
- okolje - okoljske spremenljivke
- fd - deskriptorji datotek
- omejitve - vsebuje informacije o omejitvah postopka
- informacije, povezane z nosilci
V oštevilčenem imeniku boste opazili tudi številne povezave:
- cwd - povezava do trenutnega delovnega imenika procesa
- exe - povezava do izvedljivega postopka
- 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.