Ndewo, unu niile! Anyị na-aga n'ihu na-ewepụta iyi ọhụrụ maka nkuzi ndị ị hụrụla n'anya ma ugbu a anyị na-eme ngwa ngwa ịkpọsa na anyị na-amalite usoro ọmụmụ ọhụrụ.
Sistemụ faịlụ mebere na-eje ozi dị ka ụdị abstraction anwansi na-enye ohere nkà ihe ọmụma nke Linux ikwu na "ihe niile bụ faịlụ."
Gịnị bụ usoro faịlụ? Dabere na okwu nke otu n'ime ndị mbụ nyere aka na ndị odee nke Linux
Ntọala sistemụ faịlụ
Linux kernel nwere ụfọdụ ihe achọrọ maka ụlọ ọrụ enwere ike iwere ya dị ka sistemụ faịlụ. Ọ ga-emerịrị usoro ndị ahụ open()
, read()
и write()
maka ihe na-adịgide adịgide nwere aha. Site n'echiche gbadoro ụkwụ na ihe
Ọ bụrụ na anyị nwere ike imeghe, gụọ, na degara otu ihe akwụkwọ, mgbe ahụ a na-ewere ụlọ ọrụ ahụ dị ka faịlụ, dịka anyị nwere ike ịhụ site na ihe atụ dị na njikwa n'elu.
Ihe omume VFS na-emesi nleba anya dị ka Unix na "ihe niile bụ faịlụ". Chee echiche ka ọ dị egwu na obere / dev/console atụ n'elu na-egosi ka njikwa ahụ si arụ ọrụ n'ezie. Foto a na-egosi nnọkọ Bash na-emekọrịta ihe. Izipu eriri na console (ngwaọrụ console mebere) na-egosipụta ya na ihuenyo mebere. VFS nwere ihe ndị ọzọ, ọbụlagodi ihe ndị ọbịa. Dịka ọmụmaatụ, ọ na-enye gị ohere ịchọ site na
Sistemu ndị ama ama dị ka ext4, NFS, na/proc nwere ọrụ atọ dị mkpa na nhazi data C a na-akpọ read()
Otu usoro faịlụ wee jiri usoro ahụ write ()
usoro faịlụ ọzọ maka mmepụta data.
Nkọwa ọrụ nke dị na ụdị VFS isi dị na faịlụ fs/
nwere ụfọdụ sistemụ faịlụ. Isi ahụ nwekwara ihe ndị dị ka cgroups
, /dev
и tmpfs
, nke a chọrọ n'oge usoro buut na ya mere akọwapụtara na kernel subdirectory init/
. Rịba ama nke ahụ cgroups
, /dev
и tmpfs
akpọla ọrụ "nnukwu atọ". file_operations
, mana gụọ ma dee na ebe nchekwa ozugbo.
Eserese dị n'okpuru na-egosi ka ohere ọrụ si enweta ụdị faịlụ dị iche iche a na-agbanyekarị na sistemụ Linux. Egosighị ihe owuwu pipes
, dmesg
и POSIX clocks
, nke mejuputa atumatu file_operations
, enweta site na oyi akwa VFS.
VFS bụ "akwa ihe mkpuchi" n'etiti oku sistemụ na mmejuputa ụfọdụ file_operations
, dika ext4
и procfs
. Ọrụ file_operations
nwere ike imekọrịta ihe na ndị ọkwọ ụgbọala ngwaọrụ ma ọ bụ ngwaọrụ ịnweta ebe nchekwa. tmpfs
, devtmpfs
и cgroups
ejila file_operations
, mana nweta ebe nchekwa ozugbo.
Ịdị adị nke VFS na-enye ohere iji koodu ọzọ mee ihe, ebe ọ bụ na ụzọ ndị bụ isi jikọtara na usoro faịlụ adịghị mkpa ka a na-emeghachi ya site na ụdị faịlụ ọ bụla. Ejigharị koodu bụ ihe a na-emekarị n'etiti ndị injinia ngwanrọ! Agbanyeghị, ọ bụrụ na koodu reusable nwere
/tmp: Ntuziaka dị mfe
Ụzọ dị mfe iji chọpụta na VFS dị na sistemụ bụ ịpịnye mount | grep -v sd | grep -v :/
, nke ga-egosi ihe niile agbakwunyere (mounted
) sistemụ faịlụ ndị na-abụghị diski-bi na ndị na-abụghị NFS, nke bụ eziokwu na ọtụtụ kọmputa. Otu n'ime ihe ndị e depụtara (mounts
) VFS ga-enweghị mgbagha /tmp
, nri?
Onye ọ bụla maara ebe nchekwa ahụ / tmp
on a anụ ahụ ọkara - ara!
Gịnị mere na ọ dịghị mma na-echekwa /tmp
na mgbasa ozi anụ ahụ? N'ihi na faịlụ n'ime /tmp
bụ nwa oge na ngwaọrụ nchekwa dị nwayọ karịa ebe nchekwa ebe emepụtara tmpfs. Ọzọkwa, mgbasa ozi anụ ahụ na-enwekarị ike iyi mgbe edere ya karịa ebe nchekwa. N'ikpeazụ, faịlụ dị na /tmp nwere ike ịnwe ozi dị nro, yabụ ime ka ha pụọ na nrụgharị ọ bụla bụ ihe dị mkpa.
Ọ dị nwute, ụfọdụ script nwụnye Linux na-emepụta /tmp na ngwaọrụ nchekwa na ndabara. Enwela nkụda mmụọ ma ọ bụrụ na nke a emeekwa na sistemụ gị. Soro ntuziaka dị mfe ole na ole tmpfs
agaghị adị maka ebumnuche ndị ọzọ. N'ikwu ya n'ụzọ ọzọ, usoro nwere nnukwu tmpfs na faịlụ buru ibu na ya nwere ike ịpụ na ebe nchekwa na okuku. Ntụle ọzọ: mgbe ị na-edezi faịlụ /etc/fstab
, cheta na ọ ga-ejedebe na ọhụrụ ahịrị, ma ọ bụghị ya, usoro gị agaghị buut.
/proc na /sys
e wezụga /tmp
, VFS (sistemụ faịlụ mebere) nke ndị ọrụ Linux maara nke ọma /proc
и /sys
. (/dev
bi na òkè ebe nchekwa na-enweghị file_operations
). Gịnị kpatara akụkụ abụọ a? Ka anyị leba anya n'okwu a.
procfs
na-emepụta foto nke kernel na usoro ọ na-enyocha userspace
. The /proc
kernel na-ebipụta ozi gbasara ihe ọ dị, dị ka nkwụsịtụ, ebe nchekwa mebere, na onye nhazi oge. E wezụga nke ahụ, /proc/sys
bụ ebe a na-ahazi paramita na iwu sysctl
, dị maka userspace
. A na-egosipụta ọkwa na ọnụ ọgụgụ nke usoro onye ọ bụla na akwụkwọ ndekọ aha /proc/
.
ọ bụ /proc/meminfo
bụ faịlụ efu nke nwere ozi bara uru.
Àgwà /proc
faịlụ na-egosi ka usoro faịlụ diski VFS dị iche iche nwere ike isi dị. N'otu akụkụ, /proc/meminfo
nwere ozi enwere ike ile ya na iwu free
. N'aka nke ọzọ, ọ bụ ihe efu! Kedu ka ọ si arụ ọrụ? Ọnọdụ ahụ na-echetara akụkọ a ma ama aha ya /proc
, na n'ezie na faịlụ /proc
ọ dịghị ihe ọ bụla mgbe ọ dịghị onye na-ele anya. Dị ka e kwuru
Ọ dị ka ihe efu procfs
na-eme uche n'ihi na ozi e nwere ike. Ọnọdụ dịtụ iche na sysfs
. Ka anyị tulee faịlụ ole ma ọ dịkarịa ala otu byte n'ogo dị na ya /proc
na na /sys
.
Procfs
nwere otu faịlụ, ya bụ nhazi kernel na-ebupụ, nke bụ ihe dị iche n'ihi na ọ dị mkpa ka ịmepụta otu ugboro n'otu buut. N'aka nke ọzọ, in /sys
enwere ọtụtụ faịlụ buru ibu, ọtụtụ n'ime ha na-eburu ibe ebe nchekwa dum. Ọtụtụ mgbe faịlụ sysfs
nwere kpọmkwem otu nọmba ma ọ bụ ahịrị, n'adịghị ka tebụl ozi enwetara site na ịgụ faịlụ dịka /proc/meminfo
.
Mgbalị sysfs
- nye akụrụngwa ọgụgụ / dee ihe kernel na-akpọ «kobjects»
na ebe ọrụ. Naanị ihe mgbaru ọsọ kobjects
bụ njikọ agụta: mgbe a na-ewepụ njikọ ikpeazụ na kobject, usoro ahụ ga-eweghachi ihe ndị metụtara ya. Ka o sina dị, /sys
na-eme ka ọtụtụ n'ime ndị ama ama
ABI kwụsiri ike nke kernel na-amachi ihe nwere ike ịpụta na ya /sys
, ọ bụghị ihe dị ugbu a n'oge ahụ. Ikike faịlụ edepụta na sysfs na-enye nghọta n'ime ka ntọala ahazi maka ngwaọrụ, modul, sistemụ faịlụ, wdg. enwere ike ịhazi ma ọ bụ gụọ. Nkwubi okwu ezi uche dị na ya bụ na procfs bụkwa akụkụ nke ABI siri ike nke kernel, n'agbanyeghị na ekwughị nke a n'ụzọ doro anya na.
Faịlụ na sysfs
kọwapụta otu akụrụngwa maka ụlọ ọrụ ọ bụla ma nwee ike ịgụ ya, dee, ma ọ bụ ha abụọ. "0" na faịlụ ahụ pụtara na enweghị ike iwepụ SSD.
Ka anyị bido akụkụ nke abụọ nke ntụgharị asụsụ otu esi eleba anya na VFS site na iji eBPF na bcc ngwaọrụ, ma ugbu a, anyị na-eche okwu gị ma na-akpọ gị oku ka ị bịa.
isi: www.habr.com