Nyob zoo sawv daws! Peb tseem tab tom nthuav tawm cov kwj tshiab rau cov kev kawm uas koj twb tau poob rau hauv kev hlub thiab tam sim no peb tau nrawm tshaj tawm tias peb tab tom pib txheej txheem tshiab
Cov ntaub ntawv virtual ua haujlwm ua ib hom kev paub txog tej yam yees siv uas tso cai rau lub tswv yim ntawm Linux hais tias "txhua yam yog cov ntaub ntawv."
Cov ntaub ntawv system yog dab tsi? Raws li cov lus ntawm ib qho ntawm thawj tus neeg txhawb nqa thiab sau ntawv ntawm Linux
Filesystem Basics
Linux kernel muaj qee qhov kev xav tau rau ib lub koom haum uas tuaj yeem suav tias yog cov ntaub ntawv kaw lus. Nws yuav tsum siv cov txheej txheem open()
, read()
ΠΈ write()
rau cov khoom tsis tu ncua uas muaj npe. Los ntawm cov khoom-oriented point of view
Yog tias peb tuaj yeem qhib, nyeem, thiab sau rau ib qho chaw, ces qhov chaw ntawd raug suav tias yog cov ntaub ntawv, raws li peb tuaj yeem pom los ntawm qhov piv txwv hauv console saum toj no.
Qhov tshwm sim ntawm VFS tsuas yog qhia txog qhov kev soj ntsuam ntau rau Unix-zoo li cov tshuab uas "txhua yam yog cov ntaub ntawv." Xav txog qhov txawv npaum li cas nws yog qhov piv txwv me me saum toj no nrog / dev / console qhia tias lub console ua haujlwm li cas. Daim duab qhia txog kev sib tham sib tham Bash. Xa ib txoj hlua mus rau console (virtual console device) qhia nws ntawm lub vijtsam virtual. VFS muaj lwm yam, txawm tias txawv txawv. Piv txwv li, nws tso cai rau koj mus nrhiav los ntawm
Cov kab ke paub zoo xws li ext4, NFS, thiab / proc muaj peb txoj haujlwm tseem ceeb hauv C cov ntaub ntawv hu ua read()
ib cov ntaub ntawv system thiab ces siv txoj kev write ()
lwm cov ntaub ntawv system rau cov ntaub ntawv tso zis.
Cov kev txhais cov ntsiab lus uas muaj nyob rau hauv lub hauv paus VFS hom yog nyob rau hauv cov ntaub ntawv fs/
muaj tej yam ntaub ntawv systems. Lub hauv paus tseem muaj cov chaw xws li cgroups
, /dev
ΠΈ tmpfs
, uas yuav tsum tau thaum lub sij hawm khau raj thiab yog li ntawd txhais tau tias nyob rau hauv lub kernel subdirectory init/
. Nco ntsoov tias cgroups
, /dev
ΠΈ tmpfs
tsis txhob hu ua "loj peb" functions file_operations
, tab sis ncaj qha nyeem thiab sau rau kev nco.
Daim duab hauv qab no qhia tau hais tias userspace nkag mus rau ntau hom filesystems feem ntau mounted ntawm Linux systems. Cov qauv tsis qhia pipes
, dmesg
ΠΈ POSIX clocks
, uas kuj siv cov qauv file_operations
, nkag los ntawm VFS txheej.
VFS yog "wrapper txheej" ntawm kev hu xov tooj thiab kev siv ntawm qee yam file_operations
, zoo li ext4
ΠΈ procfs
. Muaj nuj nqi file_operations
tuaj yeem cuam tshuam nrog cov cuab yeej tsav tsheb lossis cov khoom siv nco nkag. tmpfs
, devtmpfs
ΠΈ cgroups
tsis txhob siv file_operations
, tab sis ncaj qha mus rau lub cim xeeb.
Lub hav zoov ntawm VFS muab lub peev xwm los rov siv cov cai, txij li cov txheej txheem yooj yim cuam tshuam nrog cov ntaub ntawv kaw lus tsis tas yuav rov ua dua los ntawm txhua hom ntaub ntawv. Code rov siv dua yog ib qho kev coj ua ntawm cov software engineers! Txawm li cas los xij, yog tias cov lej rov siv tau muaj
/tmp: Cov lus qhia yooj yim
Ib txoj hauv kev yooj yim los txheeb xyuas tias VFS muaj nyob rau ntawm lub kaw lus yog ntaus ntawv mount | grep -v sd | grep -v :/
, uas yuav qhia tag nrho cov mounted (mounted
) filesystems uas tsis yog disk-neeg nyob thiab tsis-NFS, uas yog muaj tseeb nyob rau hauv feem ntau cov computers. Ib qho ntawm cov npe mounts (mounts
) VFS yuav undoubtedly /tmp
, txoj cai?
Txhua tus paub qhov chaw khaws cia / tmp
ntawm lub cev nruab nrab - vwm!
Vim li cas ho tsis pom zoo khaws cia /tmp
ntawm lub cev xov xwm? Raws li cov ntaub ntawv hauv /tmp
yog ib ntus thiab cov khoom siv khaws cia qeeb dua lub cim xeeb uas tsim tmpfs. Ntxiv mus, cov xov xwm lub cev muaj kev cuam tshuam ntau dua rau hnav thiab tsim kua muag thaum sau overwritten dua li nco. Thaum kawg, cov ntaub ntawv hauv / tmp yuav muaj cov ntaub ntawv rhiab, yog li ua rau lawv ploj ntawm txhua qhov kev rov pib dua yog qhov tseem ceeb.
Hmoov tsis zoo, qee qhov Linux faib kev teeb tsa cov ntawv tsim / tmp ntawm lub cuab yeej cia los ntawm lub neej ntawd. Tsis txhob poob siab yog tias qhov no tshwm sim rau koj lub cev thiab. Ua raws li ob peb cov lus qhia yooj yim nrog tmpfs
ua tsis tau rau lwm lub hom phiaj. Hauv lwm lo lus, lub kaw lus nrog tmpfs loj heev thiab cov ntaub ntawv loj ntawm nws tuaj yeem khiav tawm ntawm kev nco thiab poob. Lwm cov lus qhia: thaum kho cov ntaub ntawv /etc/fstab
, nco ntsoov tias nws yuav tsum xaus nrog cov kab tshiab, txwv tsis pub koj lub kaw lus yuav tsis khau raj.
/proc thiab /sys
dua li /tmp
, VFS (virtual file systems) uas paub zoo tshaj plaws rau cov neeg siv Linux /proc
ΠΈ /sys
. (/dev
nyob hauv kev sib koom nco thiab tsis muaj file_operations
). Vim li cas ob lub ntsiab lus no? Cia peb saib rau qhov teeb meem no.
procfs
tsim ib qho snapshot ntawm lub kernel thiab cov txheej txheem nws saib rau userspace
. Cov /proc
lub kernel luam tawm cov ntaub ntawv hais txog yam nws muaj, xws li cuam tshuam, nco virtual, thiab lub sijhawm teem sijhawm. Tsis tas li ntawd, /proc/sys
yog qhov chaw uas cov parameter configured nrog cov lus txib sysctl
, muaj rau userspace
. Cov xwm txheej thiab kev txheeb cais ntawm cov txheej txheem ntawm tus kheej raug tso tawm hauv cov npe /proc/
.
nws yog /proc/meminfo
yog cov ntaub ntawv khoob uas tseem muaj cov ntaub ntawv tseem ceeb.
Cwj pwm /proc
cov ntaub ntawv qhia tias VFS disk cov ntaub ntawv sib txawv yuav ua tau li cas. Ntawm ib sab, /proc/meminfo
muaj cov ntaub ntawv uas tuaj yeem pom nrog cov lus txib free
. Ntawm qhov tod tes, nws yog qhov khoob! Nws ua haujlwm li cas? Qhov xwm txheej yog nco txog zaj lus nto moo hu ua /proc
, thiab ua tau nyob rau hauv cov ntaub ntawv /proc
tsis muaj dab tsi thaum tsis muaj leej twg saib. Raws li hais
Pom qhov khoob procfs
ua rau kev nkag siab vim cov ntaub ntawv muaj dynamic. Me ntsis txawv qhov teeb meem nrog sysfs
. Cia peb sib piv pes tsawg cov ntaub ntawv tsawg kawg ib byte nyob rau hauv /proc
thiab nyob rau hauv /sys
.
Procfs
muaj ib cov ntaub ntawv, uas yog lub exported kernel configuration, uas yog ib qho kev zam vim hais tias nws tsuas yog yuav tsum tau generated ib zaug ib lub khau raj. Ntawm qhov tod tes, hauv /sys
muaj ntau ntau cov ntaub ntawv loj, ntau yam uas siv tag nrho nplooj ntawv nco. Feem ntau cov ntaub ntawv sysfs
muaj raws nraim ib tug xov tooj los yog kab, tsis zoo li cov ntxhuav ntawm cov ntaub ntawv tau los ntawm kev nyeem cov ntaub ntawv xws li /proc/meminfo
.
Lub hom phiaj sysfs
- muab cov ntawv nyeem / sau cov khoom ntawm cov kernel hu li cas Β«kobjectsΒ»
hauv userspace. Lub hom phiaj nkaus xwb kobjects
yog txuas suav: thaum kawg txuas mus rau kobject raug tshem tawm, lub kaw lus yuav rov qab cov peev txheej cuam tshuam nrog nws. Txawm li cas los xij, /sys
ua rau feem ntau ntawm cov nto moo
Lub kernel ruaj khov ABI txwv qhov tuaj yeem tshwm sim hauv /sys
, tsis yog qhov tseeb tam sim no nyob rau lub sijhawm ntawd. Sau cov ntaub ntawv tso cai hauv sysfs muab kev nkag siab txog yuav ua li cas teeb tsa rau cov khoom siv, modules, filesystems, thiab lwm yam. tuaj yeem teeb tsa lossis nyeem. Qhov kev txiav txim siab yog tias procfs kuj yog ib feem ntawm cov kernel ruaj khov ABI, txawm hais tias qhov no tsis tau hais meej meej hauv
Cov ntaub ntawv hauv sysfs
piav txog ib qho khoom tshwj xeeb rau txhua qhov chaw thiab tuaj yeem nyeem tau, sau tau, lossis ob qho tib si. "0" hauv cov ntaub ntawv txhais tau tias SSD tsis tuaj yeem raug tshem tawm.
Cia peb pib qhov thib ob ntawm kev txhais lus nrog yuav ua li cas saib xyuas VFS siv eBPF thiab bcc cov cuab yeej, thiab tam sim no peb tab tom tos koj cov lus thiab ib txwm caw koj mus
Tau qhov twg los: www.hab.com