Faiga faila faila i Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue? Vaega 1

Talofa uma! O lo'o fa'aauau pea ona matou fa'alauiloa a'oa'oga fou mo kosi ua uma ona e alofa i ai ma o lea ua matou fa'anatinati e fa'ailoa atu o lo'o matou amataina se seti fou o kosi. "Linux Pule"lea e amatalia i le faaiuga o Aperila. O se lomiga fou o le a faia i le aso mo lenei fa'amoemoe. Faatasi ai ma mea muamua, e mafai faitau iinei.

O faiga faila faila e avea o se ituaiga o faʻamatalaga faʻapitoa e mafai ai e le filosofia o Linux ona fai mai "o mea uma o se faila."

Faiga faila faila i Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue? Vaega 1

O le a le faiga faila? Faʻavae i luga o upu a se tasi o sao muamua ma tusitala o Linux Roberta Lava, "O se faila faila o se teuina faʻatulagaina o faʻamaumauga faʻapipiʻi e tusa ai ma se fausaga faʻapitoa." Po o le a lava, o lenei faʻamatalaga e tutusa lelei ma le VFAT (Virtual File Allocation Table), Git ma Cassandra (NoSQL database). O le a le mea tonu e faʻamatalaina ai se mea o se "faiga faila"?

Fa'atonu Fa'atonu

O le fatu Linux e iai ni manaʻoga faapitoa mo se faʻalapotopotoga e mafai ona manatu o se faila faila. E tatau ona faʻatinoina metotia open(), read() и write() mo mea fa'aauau e iai igoa. Mai se vaaiga fa'atatau i mea polokalame, o le fatu o loʻo faʻamatalaina se faila faila lautele o se faʻamatalaga faʻapitoa, ma o nei galuega tetele e tolu e taʻua o le "virtual" ma e leai se faʻamatalaga mautu. E tusa ai ma lea, o le faʻaogaina o faila faila e taʻua o le faila faila faila (VFS).

Faiga faila faila i Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue? Vaega 1

Afai e mafai ona tatou tatalaina, faitau, ma tusi i se faalapotopotoga, ona avea lea o lena faalapotopotoga o se faila, e pei ona mafai ona tatou vaʻaia mai le faʻataʻitaʻiga i le faʻamafanafanaga i luga.
Ole fa'aaliga VFS e na'o le fa'amaninoina ole va'aiga pei ole Unix e fa'apea "o mea uma lava o se faila". Mafaufau i le uiga ese o lena faʻataʻitaʻiga / dev / console faʻataʻitaʻiga o loʻo i luga o loʻo faʻaalia ai le auala e galue ai le faʻamafanafanaga. O le ata o loʻo faʻaalia ai se fegalegaleaiga Bash session. O le lafoina o se manoa i le faʻamafanafanaga (mea faʻamafanafana faʻapolopolo) e faʻaalia i luga o se lau mata. VFS ei ai isi mea, e o'o lava i mea e le masani ai. Mo se faʻataʻitaʻiga, e faʻatagaina oe e suʻe e ala i ia.

O faiga masani e pei o le ext4, NFS, ma le / proc e tolu galuega taua i totonu o se fausaga faʻamaumauga C ua taʻua. faila_operations. E le gata i lea, o nisi o faila faila e faʻalautele ma toe faʻamalamalamaina galuega a le VFS i se auala masani masani. E pei ona taʻua e Robert Love, o le VFS abstraction e mafai ai e tagata faʻaoga Linux ona kopiina faila i pe mai le isi vaega o loʻo faʻaogaina faiga poʻo mea faʻapitoa e pei o paipa e aunoa ma le popole e uiga i la latou faʻamaumauga i totonu. I luga o le itu faʻaoga (userspace), faʻaaogaina se telefoni feaveaʻi, o se faagasologa e mafai ona kopi mai se faila i fausaga faʻamaumauga o fatu e faʻaaoga ai le metotia. read() tasi le faila faila ona faʻaaoga lea o le metotia write () se isi faiga faila mo fa'amaumauga.

O faʻamatalaga o galuega e aofia i ituaiga VFS faavae o loʻo i totonu o faila fs/*.c kernel source code, ae o subdirectories fs/ e iai nisi faiga faila. O lo'o iai fo'i fa'alapotopotoga e pei o cgroups, /dev и tmpfs, lea e manaʻomia i le faagasologa o le taʻavale ma o lea e faʻamatalaina i le kernel subdirectory init/. Matauina lena mea cgroups, /dev и tmpfs aua le ta'ua o le "tolu tele" galuega file_operations, ae faitau saʻo ma tusi e manatua.
O le ata o loʻo i lalo o loʻo faʻaalia ai pe faʻafefea ona faʻaogaina e le userspace ituaiga eseese o faila faila e masani ona faʻapipiʻi i luga o Linux. Fauga e le o fa'aalia pipes, dmesg и POSIX clocks, lea e faʻatinoina foʻi le fausaga file_operations, maua e ala ile VFS layer.

Faiga faila faila i Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue? Vaega 1

O le VFS o se "papa afifi" i le va o telefoni feaveaʻi ma faʻatinoga o nisi file_operationse pei o ext4 и procfs. Galuega file_operations e mafai ona fegalegaleai ma aveta'avale masini po'o masini e mafai ona manatua. tmpfs, devtmpfs и cgroups aua le faaaogaina file_operations, ae maua sa'o le manatua.
O le i ai o le VFS e maua ai le avanoa e toe faʻaaoga ai le code, talu ai o auala autu e fesoʻotaʻi ma faila faila e le tatau ona toe faʻaaogaina e ituaiga taʻitasi faila faila. O le toe fa'aogaina o tulafono ose faiga masani lea i le va o inisinia software! Ae peitaʻi, afai o loʻo i ai i le code reusable mea sese matuia, o faʻatinoga uma e maua ai auala masani e afaina mai ia i latou.

/tmp: Fa'ailoga faigofie

O se auala faigofie e iloa ai o loʻo i ai le VFS i luga o se faiga o le taina mount | grep -v sd | grep -v :/, lea o le a faʻaalia uma faʻapipiʻi (mounted) faila faila e le o nofo-tisiki ma e le-NFS, lea e moni i le tele o komepiuta. O se tasi o lisi lisi (mounts) VFS o le a le masalomia /tmp, tauagavale?

Faiga faila faila i Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue? Vaega 1

E iloa e tagata uma lena teuina / tmp i se faiga fa'aletino - valea! Punaoa.

Aisea e le manaomia ai le teuina /tmp i luga o ala o faasalalauga faaletino? Ona o faila i totonu /tmp e le tumau ma le teuina o masini e sili atu lemu nai lo le manatua lea na faia ai tmpfs. E le gata i lea, o ala o faasalalauga faaletino e sili atu ona faigofie ona ofuina pe a toe tusi nai lo le manatua. Ma le mea mulimuli, faila i /tmp e mafai ona i ai faʻamatalaga maaleale, o le faʻaumatiaina o latou i luga o le toe faʻafouina o se mea taua.

Ae paga lea, o nisi faʻasalalauga faʻapipiʻi Linux e fatuina / tmp i luga o le masini teu oloa e ala i le faaletonu. Aua e te faʻavaivai pe a tupu foi lenei mea i lau masini. Mulimuli i nai faatonuga faigofie ma Faʻasologa o Wikie faʻaleleia lenei mea, ma ia e nofouta o le manatua e tuʻuina atu mo tmpfs ua le avanoa mo isi faamoemoega. I se isi faaupuga, o se faiga e iai le tele tmpfs ma faila tetele i luga e mafai ona leai se manatua ma faʻalavelave. O le isi faʻamatalaga: aʻo faʻasaʻo se faila /etc/fstab, manatua e tatau ona fa'ai'u i se laina fou, a leai o le a le ta'a lau faiga.

/proc ma /sys

e ese mai /tmp, VFS (virtual file system) e sili ona masani ai tagata fa'aoga Linux /proc и /sys. (/dev nofo i le manatu fa'asoa ma e leai file_operations). Aisea e lua nei vaega? Sei o tatou vaavaai i lenei mataupu.

procfs faia se ata o le fatu ma faiga e mata'ituina ai userspace. le /proc e lolomi e le fatu faʻamatalaga e uiga i mea o loʻo avanoa, e pei o faʻalavelave, mafaufauga faʻapitoa, ma le faʻatulagaina. E lē gata i lea, /proc/sys o le nofoaga lea e fa'atulaga ai le fa'atonuga sysctl, avanoa mo userspace. O le tulaga ma fa'amaumauga o fa'agasologa ta'itasi o lo'o fa'aalia i totonu o fa'atonuga /proc/.

Faiga faila faila i Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue? Vaega 1

o /proc/meminfo ose faila gaogao lea e iai fa'amatalaga taua.

Amioga /proc faila o loʻo faʻaalia ai le eseʻese o faiga faila faila VFS. I le tasi itu, /proc/meminfo e iai fa'amatalaga e mafai ona va'aia ma le fa'atonuga free. I le isi itu, ua gaogao! E faapefea ona aoga? O le tulaga e faamanatu mai ai le tala lauiloa ua faaulutalaina E iai ea le masina pe a leai se tasi e tilotilo i ai? Mea moni ma Quantum Theory"tusia e le polofesa o le fisiki a le Iunivesite o Cornell David Mermin i le 1985. O le mea moni o le fatu e aoina fuainumera manatua pe a faia se talosaga i /proc, ma moni lava i faila /proc e leai se mea pe a leai se tasi e vaavaai. E pei ona fai mai Mermin, "Fai mai aʻoaʻoga faʻavae faʻavae o le fuaina e masani lava e le faʻaalia ai se tau o loʻo i ai muamua o le meatotino o loʻo fuaina." (Ma mafaufau i le fesili e uiga i le masina e fai ma meaaoga!)
E foliga gaogao procfs e talafeagai ona o faamatalaga iina e malosi. Se tulaga ese teisi ma sysfs. Se'i o tatou fa'atusatusa pe fia faila o lo'o iai a itiiti ifo ma le tasi le paita /proc ma i totonu /sys.

Faiga faila faila i Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue? Vaega 1

Procfs e tasi le faila, e taʻua o le faʻapipiʻi kernel faʻatau atu, o se tuusaunoaga ona e naʻo le tasi e manaʻomia ona gaosia i le seevae. I le isi itu, i /sys e tele faila tetele, o le tele o ia mea e alu uma ai le itulau o manatua. E masani lava faila sysfs o lo'o i ai tonu le numera e tasi po'o le laina, e le pei o laulau o fa'amatalaga e maua mai le faitau faila e pei o /proc/meminfo.

Manulauti sysfs - tu'uina atu mea faitau/tusi mea o lo'o ta'ua e le fatu «kobjects» i le userspace. Pau lava le sini kobjects o lo'o faitauina le feso'ota'iga: pe a 'ave'esea le so'otaga mulimuli i se kobject, o le a toe fa'afo'isia fo'i e le faiga mea e feso'ota'i ma ia. Ae ui i lea, /sys faia ai le tele o ta'uta'ua "ABI mautu mo tagata fa'aoga" autu, lea e le mafai e se tasi, i lalo o soo se tulaga "malo". E le o lona uiga o faila i sysfs e tumau, lea o le a le ogatasi ma faʻamatalaga faitau o mea le mautu.
Ole kernel's stable ABI fa'atapula'a mea e mafai ona fa'aalia i totonu /sys, e le o le mea moni o loo i ai i lena taimi faapitoa. Lisi fa'atagaga faila ile sysfs e maua ai fa'amatalaga ile fa'aogaina o fa'atonuga mo masini, modules, filesystems, etc. e mafai ona configured pe faitau. O le faaiuga talafeagai o le procfs o se vaega foi o le kernel's stable ABI, e ui lava e le o taʻua manino i totonu. fa'amaumauga.

Faiga faila faila i Linux: aisea e manaʻomia ai ma faʻafefea ona latou galulue? Vaega 1

Faila i totonu sysfs fa'amatala se meatotino fa'apitoa mo fa'alapotopotoga ta'itasi ma e mafai ona faitau, tusi, po'o mea uma e lua. "0" i le faila o lona uiga e le mafai ona aveese le SSD.

Sei o tatou amata le vaega lona lua o le faaliliuga i le auala e mataʻituina ai le VFS e faʻaaoga ai meafaigaluega eBPF ma bcc, ma o lea ua matou faʻatali mo au faʻamatalaga ma masani ona valaaulia oe e tatala webinar, lea o le a faia e lo matou faiaoga ia Aperila 9 - Vladimir Drozdetsky.

puna: www.habr.com

Faaopoopo i ai se faamatalaga