strok ekrana #24 #24 (number of lines per screen) nd - nestirayushchij probel ^\\ \EC (nondestructive space) nl - simvol perevoda stroki ^J ^J (newline character) pt - nalichie apparatnoj tabulyacii net da (has hardware tabs) se - obychnyj ekran ^O net (end stand out mode (normal)) so - inversnyj ekran ^N net (begin stand out mode (inverse)) sr - prokrutka net \EI (scroll reverse) ta - simvol tabulyacii ^I ^I (tab) up - sdvig vverh na stroku net ^_ (up a line) ------------------------------------------------------------- Samoe interesnoe zdes', navernoe, to, chto terminaly vt52 i Apple imeyut vzaimno obratnyj poryadok ukazaniya koordinat v komande dvizheniya kursora. Terminal vt52 vosprinimaet znacheniya x i y v poryadke YX, chto yavlyaetsya umolchaniem dlya fajla termcap. Apple vosprinimaet ih v poryadke XY, poetomu v zapisi fajla termcap trebuetsya pomenyat' koordinaty mestami, chto ukazano oboznacheniem %r v funkcii cm. Fajl termcap pozvolyaet vam spryatat' osnovnuyu informaciyu o speci- ficheskih harakteristikah terminala (za isklyucheniem harakteristik, ko- torye mogut otsutstvovat' u terminala, ili special'nyh vozmozhnostej, kotorye ne opisany v termcap). |to znachit, chto vy mozhete sozdavat' terminal'no-nezavisimye programmy. Pri etom vam net neobhodimosti iz- menyat' vse specificheskie obrashcheniya k terminalu, takie kak ESC-posledo- vatel'nosti (simvoly, ukazyvayushchie terminalu, chto peredavaemye posle nih simvoly (simvol) dolzhny interpretirovat'sya kak upravlyayushchie kody). |to simvoly (\E) dlya terminala vt52 i (^) dlya Apple. Nailuchshij primer - sposob ispol'zovaniya fajla termcap redaktorom vi. On nachinaet vypolnyat' ukazannuyu emu funkciyu, naprimer dvizhenie kursora, posle chego stavit vopros: "Kakoj kod funkcii, kotoruyu my ho- tim vypolnit'?". Zatem on ishchet sootvetstvuyushchuyu posledovatel'nost' v toj informacii, kotoruyu predostavlyaet termcap. S drugoj storony, inogda vam neobhodimo optimizirovat' kakuyu-libo funkciyu po skorosti, zastaviv ee posylat' kody neposredstvenno na op- redelennyj terminal. V etom sluchae vam opyat'-taki polezen fajl termcap, poskol'ku vy mozhete najti neobhodimuyu informaciyu v soot- vetstvuyushchem fajle termcap, posle chego zakodirovat' etu informaciyu v vashej programme. |to my i delaem v pervoj instrumental'noj programme dannoj glavy - programme 'c'. -------------------------------------------------------- IMYA: c -------------------------------------------------------- c Bystraya ochistka ekrana NAZNACHENIE Vyvodit posledovatel'nost' simvolov ochistki ekrana s ispol'zova- niem bystroj programmy na yazyke Si. Kod ochistki, ukazannyj v tekste programmy, sleduet izmenit' v sootvetstvii s ispol'zuemym terminalom. FORMAT VYZOVA c PRIMER VYZOVA c Ochistka ekrana TEKST PROGRAMMY 1 char id[] = "@(#) c v1.0 Fast clear screen Author: Russ Sage"; Bystraya ochistka ekrana 3 #define FF "\014" 5 main() 6 { 7 if (write(1, FF, 1) == -1) 8 write(2,"c: write error to stdout\n",25); oshibka zapisi v standartnyj vyvod 9 } OPISANIE ZACHEM NAM NUZHNA PROGRAMMA c? V System V uzhe imeetsya komanda dlya ochistki ekrana terminala - eto komanda clear. Ona rabotaet putem opredeleniya tipa vashego terminala i zatem vyvoda na ekran simvola ochistki dlya dannogo terminala. Vse prek- rasno, no est' odin sushchestvennyj nedostatok: ona ochen' MEDLENNAYA! My zhe hotim kak mozhno bystree vypolnit' ochistku ekrana. Samoj bystroj operaciej vvoda-vyvoda v sisteme yavlyaetsya pryamoj sistemnyj vy- zov dlya chteniya ili zapisi. My primenyaem etot vyzov, a takzhe vypolnyaem nebol'shuyu proverku oshibok dlya opredeleniya dostupnosti standartnogo ustrojstva vyvoda. CHTO DELAET c? Programma 'c' vyvodit na ekran simvol ochistki nastol'ko bystro, naskol'ko bystro mozhet vypolnyat'sya operaciya vvoda-vyvoda v UNIX. Pri- menyaya pryamoj sistemnyj vyzov, my izbavlyaemsya ot neobhodimosti za- puskat' druguyu programmu. Poetomu programma 'c' rabotaet ochen' bystro. My uvereny, chto tochno takuyu zhe funkciyu mozhno vyzyvat' kak komandu Si-shell (pomestit' v csh alias), poetomu dannaya programma naibolee polezna tem, kto rabotaet v System V. Dlya togo chtoby opredelit', kakoj simvol ochistki sootvetstvuet va- shemu terminalu, najdite stroku s oboznacheniem cl v fajle termcap. |to i est' to znachenie, kotoroe vy dolzhny vruchnuyu vstavit' v dannuyu prog- rammu. Esli vy rabotaete ne na takom terminale, dlya kotorogo eta prog- ramma napisana, to dannaya komanda budet rabotat' neverno. POYASNENIYA Pervym delom my dolzhny najti v fajle termcap kod ochistki ekrana. Dlya terminala Apple eto kod ^L, a dlya vt52 eto \EH\EJ. Kak tol'ko vy najdete etot kod, vstav'te ego v operator define v stroke 3 ili srazu v operator write v stroke 7. V privedennom primere v kachestve simvola ochistki ekrana ispol'zuetsya ^L. Naibolee bystrym sposobom peredachi simvola v fajl yavlyaetsya ne- posredstvennoe vypolnenie operatora write. Poskol'ku terminaly yavlya- yutsya fajlami, my mozhem vypolnyat' zapis' neposredstvenno v nih, pol'zu- yas' preimushchestvom predopredelennyh deskriptorov fajla 0,1 i 2. Sistemnyj vyzov write v stroke 7 posylaet simvol ochistki v fajl s deskriptorom 1, kotoryj yavlyaetsya standartnym ustrojstvom vyvoda. Esli operaciya zapisi neudachna (po ryadu prichin), to v fajl s deskriptorom 2, t.e. na standartnoe ustrojstvo registracii oshibok, vyvoditsya soobshchenie ob oshibke. Zdes' ne proveryaetsya, uspeshno li zavershilas' zapis' na standartnoe ustrojstvo registracii oshibok. Esli oshibka vse-taki voz- niknet, to my ee uvidim. Programma ne ispol'zuet NIKAKIH vozmozhnostej standartnogo vvo- da-vyvoda (stdio). NIKOGDA nel'zya smeshivat' sistemnye vyzovy vvoda-vy- voda (t.e. vyzovy iz razdela (2) dokumentacii po sistemnym funkciyam, naprimer read ili write) so standartnymi vyzovami vvoda-vyvoda (t.e. vyzovami iz razdela (3), takimi kak getchar i printf). Dopolnitel'nyj bufer, kotoryj sozdaetsya pri vypolnenii funkcij stdio, ne soglasovan vo vremeni s sistemnymi vyzovami, poetomu vse vyhodnye soobshcheniya pere- meshivayutsya. Eshche odin aspekt, o kotorom my dolzhny pomnit', prinimaya reshenie ob ispol'zovanii sistemnyh vyzovov, eto preimushchestvo polucheniya kak mozhno bolee korotkogo ob容ktnogo koda. Nebol'shaya programma zagruzhaetsya i ra- botaet bystree. Dlya togo, chtoby nenuzhnye podprogrammy standartnogo vvoda-vyvoda ne vklyuchalis' v nash ob容ktnyj modul', v ishodnom tekste programmy ne delaetsya nikakih ssylok na podprogrammy stdio. Tem ne me- nee, vasha sistema mogla ih kakim-to obrazom vklyuchit'. Tak postupaet XENIX, a vmeste s stdio vyzyvaetsya malloc i vse ostal'noe. Vy mozhete prosmotret' tablicu simvolov vashego ob容ktnogo modulya s pomoshch'yu nm(1) ili nlist(2). Vy uvidite ves' musor, kotoryj byl dobavlen v vash ob容k- tnyj modul'. Ne tak redko my poluchaem 6 Kb koda vsego lish' dlya odnogo operatora printf! Priuchajtes' programmirovat' neposredstvenno na assemblere, chtoby dostich' togo, chto vam nuzhno. ISSLEDOVANIYA Kogda eta programma byla napisana, voznik vopros: "Kakim obrazom my mozhem proverit' neudachu zapisi na standartnoe ustrojstvo vyvoda?". Ran'she takoj vopros ne stoyal, no pokazalos', chto neploho bylo by eto sdelat'. Reshenie bylo najdeno na stranicah opisaniya sh(1). Sposob, ko- torym mozhno vyzvat' oshibku vypolneniya zapisi na standartnoe ustrojstvo vyvoda, zaklyuchaetsya v tom, chto nuzhno zakryt' deskriptor fajla stan- dartnogo ustrojstva vyvoda. |to legko delaetsya s pomoshch'yu komandy exec, kotoraya yavlyaetsya vnutrennej po otnosheniyu k shell: $ exec >&- |ta komanda perenaznachaet fajlovyj deskriptor 1 standartnogo vy- voda (oboznachenie >) na deskriptor fajla (&) zakrytogo ustrojstva (-). Takoj eksperiment mozhet okazat'sya poleznym dlya bolee polnoj otladki vashih programm. DISKOVYE USTROJSTVA K diskovym ustrojstvam otnosyatsya gibkie i zhestkie diski. Kazhdyj disk mozhet byt' razdelen na odnu ili neskol'ko chastej, kazhdaya iz koto- ryh svyazana s fajlom ustrojstva. Osnovnoe otlichie mezhdu diskami i terminalami zaklyuchaetsya v tom, chto diski yavlyayutsya blochnymi ustrojstvami, a terminaly - simvol'nymi. Vmesto togo, chtoby vypolnyat' obmen informaciej po odnomu simvolu, diski obmenivayutsya blokami po 512 ili 1024 simvola. Imeyutsya komandy, kotorye upravlyayut razbieniem na bloki i buferizaciej, chto delaet voz- mozhnym vypolnenie blochnyh operacij vvoda-vyvoda. RAZBIENIE DISKOV NA RAZDELY CHasti, ili oblasti diska, izvestny kak razdely. Razdel mozhet so- derzhat' fajlovuyu sistemu, kotoraya sgenerirovana komandoj mkfs(1), ili zhe mozhet soderzhat' nestrukturirovannye dannye, dostup k kotorym vypol- nyaetsya s pomoshch'yu komandy 'cpio -o'. V sisteme XENIX upravlenie razdelami osushchestvlyaetsya programmoj fdisk, kotoraya konceptual'no podobna svoej tezke v sisteme MS-DOS. V drugih sistemah UNIX ispol'zuyutsya drugie imena. Naprimer, v sisteme AT&T 7300 UNIX PC ispol'zuetsya programma iv, chto znachit "format" (ho- tite ver'te, hotite net). Kak upominalos' ranee, obychno razdely soder- zhat odnu fajlovuyu sistemu. V nastoyashchee vremya v sistemah XENIX i SCO XENIX u vas est' vozmozhnost' "razdelit' razdel" na bolee melkie chasti dlya polucheniya bol'shego kolichestva fajlovyh sistem. |to sdelano po toj prichine, chto mashiny s sistemami DOS i XENIX ogranicheny chetyr'mya disko- vymi razdelami, a u vas mozhet vozniknut' zhelanie imet' bol'she fajlovyh sistem, chem chislo dostupnyh razdelov. V sisteme AT&T 7300 UNIX PC up- ravlenie razdelami diska osushchestvlyaetsya po spisku nachal'nyh nomerov dorozhek. Vy mozhete sozdat' stol'ko razdelov, skol'ko hotite. Kazhdyj komp'yuter imeet svoi preimushchestva i nedostatki. V kataloge /dev nahodyatsya imena kak blochnyh ustrojstv, tak i sim- vol'nyh. Po etim imenam vyzyvayutsya razlichnye drajvery ustrojstv. Nizhe privoditsya primer spiska interfejsov zhestkih diskov. ------------------------- | | brw------- 1 sysinfo sysinfo 1, 0 Feb 18 17:07 /dev/hd00 | brw------- 1 sysinfo sysinfo 1, 15 Feb 18 16:59 /dev/hd01 | brw------- 1 sysinfo sysinfo 1, 23 Feb 18 16:59 /dev/hd02 | brw------- 1 sysinfo sysinfo 1, 31 Feb 18 16:59 /dev/hd03 | brw------- 1 sysinfo sysinfo 1, 39 Feb 18 16:59 /dev/hd04 | brw------- 1 sysinfo sysinfo 1, 47 Feb 18 17:07 /dev/hd0a | brw------- 1 sysinfo sysinfo 1, 55 Feb 18 17:09 /dev/hd0d | crw------- 1 sysinfo sysinfo 1, 0 Feb 18 16:59 /dev/rhd00 | crw------- 1 sysinfo sysinfo 1, 15 Feb 18 16:59 /dev/rhd01 | crw------- 1 sysinfo sysinfo 1, 23 Feb 18 16:59 /dev/rhd02 | crw------- 1 sysinfo sysinfo 1, 31 Feb 18 16:59 /dev/rhd03 | crw------- 1 sysinfo sysinfo 1, 39 Feb 18 16:59 /dev/rhd04 | crw------- 1 sysinfo sysinfo 1, 47 Feb 18 16:59 /dev/rhd0a | crw------- 1 sysinfo sysinfo 1, 55 Feb 18 17:09 /dev/rhd0d | Imena fajlov s prefiksom hd ukazyvayut blochnye ustrojstva, a s prefiksom rhd - "nestrukturirovannye" simvol'nye ustrojstva. Ne vse simvol'nye ustrojstva yavlyayutsya nestrukturirovannymi blochnymi ust- rojstvami. Terminaly yavlyayutsya simvol'nymi ustrojstvami, kak my uzhe vi- deli ranee v dannoj glave. V tabl. 7-2 pokazany razlichnye harakte- ristiki etih dvuh tipov ustrojstv. Tablica 7-2 Sravnenie blochnyh i simvol'nyh ustrojstv ------------------------------------------------------------- Blochnoe ustrojstvo Simvol'noe ustrojstvo ------------------------------------------------------------- /dev/hd0, /dev/fd0 /dev/rhd0, /dev/rfd0 bufer upravlyaetsya yadrom buferizaciya otsutstvuet, sistemy, medlennoe ustrojstvo bystroe ustrojstvo proizvol'noe razmeshchenie posledovatel'noe razmeshchenie blokov dannyh blokov dannyh dostup cherez fajlovuyu dostup neposredstvenno sistemu na disk cpio -p cpio -o, -i mkfs, mount, df, du tar fsck, fsdb ------------------------------------------------------------ Kak vidite, sushchestvuet mnogo sposobov raboty s ustrojstvami. Davajte rassmotrim ustrojstvo /dev/hd01 iz privedennogo vyshe spiska. Esli vy hotite adresovat'sya k fizicheskomu razdelu na diske kak k blochnomu ustrojstvu, vy mozhete sozdat' na nem fajlovuyu sistemu. Dlya etogo vam nuzhno vypolnit' sleduyushchuyu komandu, kotoraya sozdast fajlovuyu sistemu razmerom 5000 Kb (5 Mb) na zhestkom diske: # mkfs /dev/hd01 5000 Vnutri razdela (razmerom ne menee 5000 Kb) razmeshchaetsya fajlovaya sistema. Fajlovaya sistema soderzhit superblok, spiski svobodnyh blokov i t.p., to est' vse, chto neobhodimo dlya hraneniya fajlov, kotorye raz- meshchayutsya zdes'. Odnako, sozdanie fajlovoj sistemy sovsem NE oznachaet, chto vy srazu zhe mozhete poluchit' k nej dostup. Snachala vam neobhodimo smontirovat' fajlovuyu sistemu. Komanda dlya vypolneniya etoj operacii mozhet imet' takoj vid: # mount /dev/hd01 /mount_pt Fajly mogut byt' pomeshcheny v diskovyj razdel komandami mv ili cp, putem pereadresacii vyvoda v katalog s etim imenem, naprimer, >/mount_pt/file. Dlya ispol'zovaniya razdela diska v kachestve oblasti nestrukturiro- vannyh dannyh, a ne blochnogo ustrojstva, primenyajte fajl s imenem sim- vol'nogo ustrojstva, kotoroe nachinaetsya s bukvy r. Naprimer, dlya ispol'zovaniya togo zhe ustrojstva, chto i v predydushchem primere, v ka- chestve nestrukturirovannogo ustrojstva, ukazhite imya /dev/rhd01. (Iz spiska ustrojstv vy vidite, chto eto simvol'noe ustrojstvo, tak kak prava dostupa v pervoj kolonke nachinayutsya s simvolov crw, a ne brw). |to ustrojstvo (i sootvetstvuyushchij razdel) v dannyj moment ne imeet fajlovoj sistemy i yavlyaetsya prosto naborom bajtov. Edinstvennym ogra- nicheniem yavlyaetsya to, chto vy mozhete zapisat' v etot razdel ne bolee 5 Mb dannyh. Vot primer komandy, ispol'zuyushchej nestrukturirovannoe ustrojstvo: $ find . -print | cpio -ocBv > /dev/rhd01 IZUCHENIE DANNYH Kogda dannye nahodyatsya na diske, ih mozhno izuchit' bolee tshchatel'- no, chem s pomoshch'yu komand cat, more i drugih. Delaetsya eto komandoj od(1), kotoraya vydaet damp fajla ustrojstva, kak pokazano v sleduyushchem primere: $ od -c /dev/hd01 Esli by vy poluchali damp fajla NESTRUKTURIROVANNOGO ustrojstva (/dev/rhd01), to eto vyglyadelo by tochno tak zhe. Edinstvennoe otlichie zaklyuchaetsya v tom, kak drajver osushchestvlyaet dostup k dannym. Format, v kotorom budut vyvodit'sya dannye, zavisit ot togo, kakoj komandoj pro- izvodilos' kopirovanie: cpio, tar, mkfs ili kakoj-to inoj. Nekotorye drugie sposoby polucheniya dannyh s ustrojstva: $ cat /dev/hd01 $ cat < /dev/hd01 $ tail /dev/fd0 Esli vy dampiruete fajl ustrojstva, soderzhashchego fajlovuyu sistemu, to dannye budut predstavlyat' soboj neuporyadochennye bloki po 512 bajt. V odnom meste vy mozhete uvidet' spiski katalogov. Drugimi slovami, od- no i to zhe ustrojstvo mozhet rassmatrivat'sya dvumya sovershenno raznymi sposobami: kak fajlovaya sistema i kak nabor nestrukturirovannyh bitov. Hotya vypolnenie chteniya dvumya etimi sposobami mozhet byt' pouchitel'nym, v bol'shinstve sluchaev u vas ne vozniknet zhelaniya vypolnit' ZAPISX in- formacii na odno i to zhe ustrojstvo dvumya sposobami, poskol'ku, napri- mer, nestrukturirovannoe ustrojstvo ne budet nichego znat' o fajlovoj sisteme v dannom razdele i mozhet zateret' dannye, otnosyashchiesya k fajlo- voj sisteme. Teper', kogda vy znaete, kak osushchestvit' dostup k disku, myslenno vernemsya k glave 2 i programmam kopirovaniya. Komandnyj fajl cpiobr ispol'zuet dlya kopirovaniya fajlov nestrukturirovannoe diskovoe ust- rojstvo /dev/rfd0, v to vremya kak autobkp ispol'zuet fajlovuyu sistemu. Bol'shinstvo iz etih sposobov raboty s ustrojstvami mogut poka- zat'sya neskol'ko ekzotichnymi i prednaznachennymi v osnovnom dlya shutki i obucheniya. Odnako chasto shutka pomogaet produktivno rabotat'. Ved' pyta- yas' zastavit' sistemu sdelat' to ili inoe, vy mozhete otkryt' dlya sebya novye vozmozhnosti sistemy. Situaciya s apparaturoj ochen' pohozha. Poyav- lyayutsya novye ustrojstva, i trebuyutsya gody dlya razrabotchikov programm- nogo obespecheniya, chtoby obnaruzhit' vse vozmozhnosti mashiny. Sistema UNIX sushchestvuet v tom ili inom vide uzhe bolee desyati let, no pol'zova- teli do sih por otkryvayut ee novye i udivitel'nye sposobnosti. Itak, poskol'ku vy obychno dolzhny vybrat' tot ili inoj metod ispol'zovaniya razdela diska, to nichto ne meshaet vam zavesti na ust- rojstve vse razdely odinakovogo tipa. Obychnym podhodom yavlyaetsya sozda- nie fajlovyh sistem vo vseh vozmozhnyh razdelah, chtoby oni mogli soder- zhat' fajly. Tem ne menee, vy mozhete sochetat' fajlovuyu sistemu s "nest- rukturirovannymi" razdelami lyubym sposobom, kotoryj vam nravitsya. Od- noj iz vozmozhnyh shem yavlyaetsya ispol'zovanie odnogo razdela (fd01) v kachestve nestrukturirovannogo ustrojstva dlya kopirovaniya fajlov koman- doj "cpio -o". |tot razdel zanimaet pochti ves' disk, no kakaya-to chast' otvoditsya dlya razmeshcheniya vtorogo razdela s fajlovoj sistemoj (fd02). Raspredelennoe prostranstvo soderzhit nekotorye spravochnye (help) fajly i tekstovyj fajl s imenami fajlov, nahodyashchihsya v nestrukturirovannom razdele. Takoe razbienie na razdely ispol'zuet preimushchestva oboih sposobov. Dlya togo chtoby poluchit' dannye, skopirovannye komandoj cpio, vy vvodite komandu "cpio -i < /dev/rfd01". Dlya polucheniya dannyh iz vtorogo razdela, vy vvodite komandu "mount /dev/fd02 /mnt", a zatem ispol'zuete komandy ls, file, grep i drugie, kotorye otnosyatsya k faj- lovoj sisteme. V etom sluchae razdel s fajlovoj sistemoj sluzhit dlya do- kumentirovaniya nestrukturirovannogo razdela. ZAGRUZHAEMYJ DISK I AVTONOMNYJ shell (SASH) Installyaciya sistemy UNIX na zhestkij disk obychno vypolnyaetsya s po- moshch'yu avtonomnogo shell (SASH, standalone shell). Inogda eta operaciya vypolnyaetsya s magnitnoj lenty, no legche vsego ispol'zovat' gibkij disk. Voznikaet vopros: "Kak zagruzit' UNIX s gibkogo diska?" Kartina sleduyushchaya: gibkij disk imeet odin razdel ili dazhe mozhet byt' razdelen na kornevoj razdel i razdel pol'zovatelej. V lyubom slu- chae gibkij disk imeet fajlovuyu sistemu, sozdannuyu drugoj sistemoj i pomeshchennuyu na disk. Pervyj blok fajlovoj sistemy yavlyaetsya zagruzhaemoj zapis'yu, kotoraya razmeshchaetsya na nositele s pomoshch'yu komandy dd. Komanda dd kopiruet bajty, nachinaya s samogo nachala ustrojstva. Zagruzochnaya za- pis' soderzhit kod, neobhodimyj dlya zapuska sistemy UNIX s diska. Vtoroj blok - eto superblok, svoego roda glavnyj katalog fajlovoj sistemy. V nem nahodyatsya indeksnye deskriptooy fajlov, soderzhashchie in- formaciyu o kazhdom fajle, a takzhe spisok dostupnyh svobodnyh blokov. Kornevaya fajlovaya sistema imeet takzhe variant yadra dlya gibkogo diska, kotoryj zagruzhaetsya i zapuskaet shell tochno tak zhe, kak eto delaet ego starshij brat (yadro sistemy dlya zhestkogo diska) dlya vsej sistemy v ce- lom. Vy dazhe mozhete smontirovat' installyacionnyj disk na zhestkij disk s drugoj sistemoj i vypolnyat' komandy kopirovaniya. Ogranichivayushchim fak- torom yavlyaetsya razmer odnogo installyacionnogo diska. Samyj bol'shoj ob容m gibkogo diska na mashinah PC - 1.2 Mb (ispol'zuetsya na PC AT), chto vpolne dostatochno. Mozhno umestit' pochti vsyu programmu zagruzki, kotoraya neobhodima dlya zapuska mnogopol'zovatel'skoj sistemy s gibkogo diska. Kak tol'ko yadro sistemy s gibkogo diska zagruzheno, imeetsya polnaya fajlovaya sistema so vsemi fajlami ustrojstv. YAdro montiruet razdel zhestkogo diska (predpolagaetsya, chto zhestkij disk byl razbit na razde- ly) i kopiruet na nego fajly v formate fajlovoj sistemy. Vot kak eto vyglyadit: # mount /dev/hd01 /mnt <-vyzov s gibkogo diska dlya montirovaniya pervogo razdela zhestkogo diska # copy /unix /mnt <-kopirovanie yadra zhestkogo diska v razdel zhestkogo diska OBNOVLENIE FAJLOVOJ SISTEMY My opisali superblok kak zapis' s klyuchevoj informaciej o razmere i soderzhimom fajlovoj sistemy. Prichinoj razrusheniya fajlovoj sistemy obychno yavlyayutsya problemy, voznikayushchie v superbloke. Komanda sync(1) vypolnyaet zapis' obraza superbloka na disk, tem samym obnovlyaya ego. Inogda eta operaciya dolzhna vypolnyat'sya avtomaticheski i postoyanno dlya togo, chtoby obrazy superbloka na diske i v pamyati byli odinakovy. V nastoyashchee vremya v System V vklyuchena programma update, kotoraya zapuska- etsya iz zagruzochnogo fajla /etc/rc. Ona zhivet v sisteme i ispolnyaet komandy sync i sleep. V rezul'tate informaciya o sostoyanii fajlovoj sistemy na diske hranitsya so vsemi tekushchimi izmeneniyami, proizvedenny- mi s samoj fajlovoj sistemoj. Esli u vas net takoj programmy, vy mozhe- te napisat' komandnyj fajl na yazyke shell, kotoraya rabotaet v cikle, vyzyvaya komandu sync cherez sootvetstvuyushchie intervaly komandy sleep. Zapustite etot komandnyj fajl v fonovom rezhime, chtoby podderzhivat' ce- lostnost' fajlovoj sistemy. MONTIROVANIE FAJLOVYH SISTEM Davajte rassmotrim, chto proishodit, kogda fajlovaya sistema monti- ruetsya v drevovidnoj strukture sistemy. Na ris. 7 -3 pokazano, kak vzaimodejstvuyut mezhdu soboj indeksnye deskriptory (inodes) dvuh fajlo- vyh sistem. Ris. 7-3 Montirovanie odnoj fajlovoj sistemy v druguyu ------------------------------------------------------------- +------------------------------+ |Razdel| Fizicheskoe| Logicheskoe| |diska | imya | imya | |------------------------------| | 1 | /dev/hd01 |/dev/root | | 2 | /dev/hd02 |/dev/usr | +------------------------------+ +----+ | | Razdel 1 | / |inode 2 (ls -lia /) / / | | \ \ \ / / +----+ \ \ \ / / / | \ \ \ \ / / / | \ \ \ \ / / / | \ \ \ \ +---+ +---+ +---+ +---+ +-----+ +---+ +---+ +---+ |bin| |dev| |etc| |lib| |lost+| |mnt| |tmp| |usr| inode 245 | | | | | | | | |found| | | | | | +---+ +---+ +---+ +---+ +---+ +-----+ +---+ +---+ +-| | / | \ / | \ / |\ / | \ / | | \ | | / | \ +---+ /|\ /|\ /|\ /|\ | /----------------+ / KOMANDA / # /etc/mount /dev/hd02 /usr / +-----+ | | Razdel 2 | / | inode 2 (ls -lia /usr) | | +-----+ \ \ \ / / / | \ \ \ \ \ / / / | \ \ \ \ \ / / / | \ \ \ \ \ / / / | \ \ \ \ \ / / / | \ \ \ \ \ +---+ +---+ +-------+ +---+ +-----+ +-----+ +-----+ +---+ +---+ |adm| |bin| |include| |lib| |lost+| |pre- | |spool| |sys| |tmp| | | | | | | | | |found| |serve| | | | | | | +---+ +---+ +-------+ +---+ +-----+ +-----+ +-----+ +---+ +---+ / | \ / | \ / | | \ / | \ /|\ / || \ / | \ / / | \ / | \ \ / / | \ / | \ \ /|\ /|\ /|\ /|\ / | \ /|\ /|\ /|\ -------------------------------------------------------------------- V primere, pokazannom na ris. 7-3, fajlovaya sistema iz razdela 2 montiruetsya v kornevoj fajlovoj sisteme (razdel 1) v katalog /usr. Od- nako my pomnim, chto kazhdaya fajlovaya sistema imeet svoj sobstvennyj kornevoj katalog. V kazhdoj fajlovoj sisteme numeraciya indeksnyh desk- riptorov fajla nachinaetsya s chisla 2, poetomu nomera indeksnyh deskrip- torov dubliruyutsya v dvuh fajlovyh sistemah. |to i yavlyaetsya prichinoj, po kotoroj ne mogut byt' obrazovany svyazi mezhdu fajlami, nahodyashchimisya v raznyh fajlovyh si brazovany svyazi mezhdu fajlami, nahodyashchimisya Odnim iz atributov kornevogo kataloga yavlyaetsya to, chto nomer ego indeksnogo deskriptora raven 2. |to znachenie mozhet byt' provereno v kornevom kataloge komandoj "ls -lid /". Katalog /usr - eto prosto eshche odin fajl (a imenno katalog) v kornevoj fajlovoj sisteme. |tot katalog mozhet soderzhat' fajly i podchinennye katalogi, kotorye hranyatsya v raz- dele 1. Posle vypolneniya komandy "mount /dev/hd02 /usr" kornevoj kata- log razdela 2 (indeksnyj deskriptor 2) pomeshchaetsya v katalog /usr (in- deksnyj deskriptor 245). Esli kakie-libo fajly sushchestvuyut v kataloge /usr v razdele 1, oni ostayutsya tam, no poluchit' dostup k nim vy ne mo- zhete. Edinstvennym sposobom uvidet' ih yavlyaetsya razmontirovanie fajlo- voj sistemy, kotoraya byla smontirovana na ih mesto. Hitrost' komandy mount zaklyuchaetsya v tom, chto ona predstavlyaet novyj razdel kak by pri- nadlezhashchim real'nomu kornevomu razdelu. V sushchnosti, eto pozvolyaet imet' bezgranichnuyu fajlovuyu sistemu. Mehanizmom, kotoryj pozvolyaet proizvodit' eto, yavlyaetsya tablica smontirovannyh ustrojstv, nahodyashchayasya vnutri yadra sistemy. Kogda vy- polnyaetsya obrashchenie k fajlu, ego indeksnyj deskriptor opredelyaet marsh- rut, po kotoromu nahoditsya dannyj fajl. Esli v tablice smontirovannyh ustrojstv imeetsya zapis', to etot marshrut vedet na drugoj razdel diska ili v druguyu fajlovuyu sistemu. Dlya togo chtoby ubedit'sya, chto vnov' smontirovannaya fajlovaya sistema unikal'na, posmotrite indeksnyj desk- riptor kataloga /usr snachala iz kornevogo kataloga (komandoj "ls -li /", indeksnyj deskriptor 245), a zatem iz drugoj fajlovoj sistemy (ls -ldi /usr, indeksnyj deskriptor 2). KAK POLUCHITX POBOLXSHE INFORMACII O FAJLOVOJ SISTEME? Kak ukazyvalos' ranee, fajlovaya sistema razmeshchaetsya vnutri razde- la na diske. Fajlovye sistemy sozdayutsya komandoj mkfs(1), podderzhiva- yutsya komandoj fsck(1), otlazhivayutsya komandoj fsdb(1), a pervyj dostup k nim osushchestvlyaetsya komandoj mount(1). Katalog /usr/include soderzhit vse vklyuchaemye fajly dlya ispol'zovaniya v programmah na yazyke Si, rea- lizuyushchih eti komandy. Takim obrazom, etot katalog predstavlyaet soboj prekrasnuyu vozmozhnost' dlya poiska informacii o fajlovoj sisteme, poskol'ku vklyuchaemye fajly soderzhat global'nye opredeleniya, ispol'zue- mye podprogrammami fajlovoj sistemy. V dokumentacii Bell Labs (v ruko- vodstve programmista) takzhe opisany nekotorye vnutrennie tablicy, ispol'zuemye fajlovoj sistemoj. Teper' my gotovy rassmotret' programmnye sredstva dlya avtomatiza- cii rutinnoj raboty s fajlovoj sistemoj. ---------------------------------------------------- IMYA: mntf ---------------------------------------------------- mntf Montirovanie i razmontirovanie gibkogo diska NAZNACHENIE Montiruet i razmontiruet ustrojstvo gibkogo diska v kataloge kak fajlovuyu sistemu s vozmozhnost'yu zapisi/chteniya ili tol'ko chteniya. FORMAT VYZOVA mntf [-d] [-h] [-l] [-r] [-s] Opcii: -d razmontirovanie gibkogo diska iz kornevoj fajlovoj sistemy -h ispol'zovanie ustrojstva s vysokoj plotnost'yu zapisi (a ne s nizkoj) -1 ispol'zovanie ustrojstva 1, a ne ustrojstva 0 -r montirovanie gibkogo ustrojstva kak fajlovoj sistemy s vozmozhnost'yu tol'ko chteniya -s ispol'zovanie imen ustrojstv, prinyatyh v System V Po umolchaniyu vypolnyaetsya montirovanie gibkogo diska 0 v katalog /mnt. PRIMER VYZOVA mntf -d -1 Razmontirovanie gibkogo diska na ustrojstve 1. TEKST PROGRAMMY 1 : 2 # @(#) mntf v1.0 Mount floppies Author: Russ Sage Montirovanie gibkih diskov 4 CMD="/etc/mount" 5 DIR="/mnt" 6 DRIVE="0" 7 DENSITY="48ds9" 8 SYSTEM="xenix" 10 if [ $# -gt 0 ] 11 then for ARG in $* 12 do 13 case $ARG in 14 -d) CMD="/etc/umount" 15 DIR="";; 16 -h) DENSITY="96ds15";; 17 -1) DRIVE="1" 18 if [ -d /mnt1 ] 19 then DIR="/mnt1" 20 else echo "the directory /mnt1 does not exist" >&2 net kataloga /mnt1 21 echo "using the directory /mnt instead" >&2 ispol'zuetsya katalog /mnt 22 fi;; 23 -r) DIR="$DIR -r";; 24 -s) SYSTEM="sysv";; 25 *) echo "mntf: invalid argument $ARG" >&2 26 echo "usage: mntf [-d] [-h] [-1] [-r] [-s]" >&2 27 echo " -d dismount" >&2 28 echo " -h high density" >&2 29 echo " -1 use drive 1" >&2 30 echo " -r read only" >&2 31 echo " -s System V device" >&2 32 echo " default: mount XENIX drive 0 48 tpi to " >&2 33 echo " /mnt as a read/write filesystem" >&2 34 exit 1;; 35 esac 36 done 37 fi 39 case $SYSTEM in 40 sysv) $CMD /dev/fp${DRIVE}21 $DIR;; 41 xenix) $CMD /dev/fd${DRIVE}${DENSITY} $DIR;; 42 esac PEREMENNYE SREDY VYPOLNENIYA CMD Osnovnaya komanda, podlezhashchaya vypolneniyu DIR Katalog, v kotorom proizvoditsya montirovanie ustrojstva DENSITY Plotnost' zapisi v vide, ukazannom v imeni ustrojstva DRIVE Nomer ustrojstva, nachinaya s 0 SYSTEM Tip imeni ustrojstva, prinyatyj v UNIX'e OPISANIE ZACHEM NAM NUZHEN KOMANDNYJ FAJL mntf? V mashinah s gibkim diskom eto ustrojstvo chasto ispol'zuetsya v povsednevnyh operaciyah. Ono primenyaetsya v kachestve istochnika pri installyacii sistemy i kak obychnyj nositel' dlya operacij kopirovaniya. Gibkie diski mozhno ispol'zovat' v sisteme UNIX dvumya sposobami. Pervyj yavlyaetsya nestrukturirovannoj posledovatel'nost'yu bajtov, chto polezno dlya kopirovaniya magnitnyh lent i hraneniya arhivov. Vtoroj sposob - poblochnyj, orientirovan na podderzhku fajlovoj struktury. Dlya vtorogo sposoba sushchestvuet moshchnaya podderzhka na urovne fajlovoj siste- my, no nekotorye funkcii my dolzhny realizovat' samostoyatel'no. Dlya togo chtoby ispol'zovat' gibkij disk kak fajlovuyu sistemu v UNIX, vam neobhodimo podgotovit' disk i smontirovat' ego kak fajlovuyu sistemu. Kogda vy zakonchite rabotu, vy dolzhny razmontirovat' gibkij disk. |to otlichaetsya ot sistemy DOS, v kotoroj gibkie diski mozhno vstavlyat' i vynimat' kogda ugodno, esli tol'ko v etot moment na nih ne idet zapis'. Poskol'ku ispol'zovanie gibkih diskov vklyuchaet v sebya vzaimosvya- zannye shagi montirovaniya i razmontirovaniya, to bylo by vpolne estest- vennym primenyat' odnu komandu s sootvetstvuyushchimi opciyami dlya vypolne- niya montirovaniya i razmontirovaniya. Odnako UNIX tak ne delaet. Nash ko- mandnyj fajl mntf ob容dinyaet eti dve funkcii v odnoj komande dlya upro- shcheniya raboty s gibkim diskom. Dlya togo chtoby sdelat' nashu programmu bolee nezavisimoj, my predusmotreli v nej podderzhku ustrojstv sistemy XENIX naravne s ustrojstvami System V. (Sistemy Berkeley (BSD) ne tak chasto ispol'zuyut gibkie diski, poetomu my ne pytalis' imet' s nimi de- lo.) CHTO DELAET mntf? |ta programma obespechivaet podderzhku vseh vozmozhnostej dlya monti- rovaniya i razmontirovaniya gibkih diskov. Ona predostavlyaet vse opcii, neobhodimye komande mount, akcentiruet vnimanie na teh aspektah fajlo- voj sistemy, kotorye otnosyatsya k gibkim diskam, i umen'shaet kolichestvo nazhatij na klavishi, neobhodimyh dlya vypolneniya etoj raboty. Dejstvie programmy po umolchaniyu zaklyuchaetsya v montirovanii gibko- go diska nizkoj plotnosti zapisi, nahodyashchegosya v ustrojstve 0, v kata- log /mnt. Imeetsya mnogo opcij, chtoby poprosit' programmu mntf sdelat' to, chto vam nuzhno. Opciya -h podderzhivaet disk vysokoj plotnosti (1.2 Mb). V mashinah PC AT pervoe iz ustrojstv gibkih diskov imeet 96 doro- zhek na dyujm, ob容m 1.2 megabajta, no mozhet takzhe chitat' i pisat' gib- kie diski s bolee nizkoj plotnost'yu. Vtoroj gibkij disk yavlyaetsya ust- rojstvom nizkoj plotnosti s 48 dorozhkami na dyujm i ob容mom 360 kilo- bajt. Opciya -1 (cifra odin, a ne bukva l) vypolnyaet montirovanie gibko- go diska v ustrojstve 1, a ne 0. Opciya -r montiruet fajlovuyu sistemu s vozmozhnost'yu TOLXKO CHTENIYA. Dlya RAZMONTIROVANIYA diska vmesto montiro- vaniya ispol'zuetsya opciya -d. Esli primenyaetsya opciya -s, imya ustrojstva izmenyaetsya takim obrazom, chtoby ono sootvetstvovalo sisteme System V, a ne XENIX. |to neznachitel'naya problema, poskol'ku shemy imenovaniya ne ochen' otlichayutsya. Dannaya programma sozdana dlya sistemy XENIX i obespe- chivaet nailuchshie vozmozhnosti imenno v nej. Ne vse opcii sovmestimy drug s drugom, no proverka na sovmesti- most' ne vypolnyaetsya. Naprimer, komanda "mntf -d -r" pytaetsya razmon- tirovat' fajlovuyu sistemu s vozmozhnost'yu tol'ko chteniya, a komanda UNIX unmount, kotoraya vypolnyaet etu operaciyu, otbrasyvaet ee, vydavaya soob- shchenie ob oshibke. V celyah uproshcheniya my otkazalis' ot proverki soot- vetstviya opcij, a vmesto etogo predostavili UNIX'u pravo vydavat' soobshcheniya ob oshibkah dlya informirovaniya pol'zovatelya o voznikshih prob- lemah. Esli vy hotite, chtoby etu programmu mog primenyat' otnositel'no neopytnyj pol'zovatel', vam nuzhno vstavit' v nee vypolnenie takih pro- verok. PRIMERY 1. $ mntf -s Montirovanie gibkogo diska kak fajlovoj sistemy s vozmozhnost'yu zapisi-chteniya i s ispol'zovaniem imen ustrojstv, prinyatyh v System V. 2. $ mntf -h -1 -r Montirovanie gibkogo diska vysokoj plotnosti zapisi na ustrojstve 1 kak fajlovoj sistemy s vozmozhnost'yu tol'ko chteniya i s ispol'zovaniem formata imen ustrojstv, prinyatogo v XENIX. |ta komanda dolzhna zakon- chit'sya neudachej (ustrojstvo 1 imeet nizkuyu plotnost'). 3. $ mntf -d -h Razmontirovanie fajlovoj sistemy na ustrojstve 0 s vysokoj plot- nost'yu zapisi i s ispol'zovaniem imen ustrojstv, prinyatyh v XENIX. POYASNENIYA Dlya togo chtoby maksimal'no uprostit' programmu, vse fakticheski vypolnyaemye komandy pomeshcheny v tekstovye stroki. |to pozvolyaet dostich' bol'shej gibkosti pri napisanii programmy. Rezul'tatom analiza komand- noj stroki yavlyaetsya formirovanie komandy, kotoraya vypolnyaetsya v konce programmy mntf. V strokah 4-8 inicializiruyutsya ustanovki po umolchaniyu. Peremennaya CMD soderzhit komandu UNIX, kotoraya v itoge dolzhna byt' vypolnena, po umolchaniyu eto komanda mount. Peremennaya DIR ukazyvaet katalog, v koto- ryj dolzhno byt' smontirovano ustrojstvo, po umolchaniyu eto katalog /mnt. Peremennaya DRIVE yavlyaetsya nomerom ustrojstva (po umolchaniyu 0) i ispol'zuetsya dlya formirovaniya korrektnogo imeni ustrojstva. Peremennaya DENSITY po umolchaniyu ustanovlena dlya nositelya nizkoj plotnosti, t.e. 48 dorozhek na dyujm, dvustoronnyaya disketa s 9 sektorami na dorozhku (48ds9). V stroke 10 proveryaetsya, ukazany li v komandnoj stroke kakie-libo argumenty. Esli kolichestvo argumentov bol'she nulya, posledovatel'no proveryaetsya kazhdyj argument. Esli kakoj-libo iz argumentov soot- vetstvuet obrazcam v strokah 13-35, to on izmenyaet soderzhimoe komand- noj stroki. Stroka 14 upravlyaet opciej -d dlya razmontirovaniya gibkogo diska. Peremennaya CMD izmenyaetsya na umount vmesto mount. Posle etogo peremen- noj DIR prisvaivaetsya nulevoe znachenie, poskol'ku komande umount tre- buetsya ne katalog, a tol'ko imya ustrojstva. Peremennaya DIR dolzhna byt' chast'yu stroki s komandoj dlya togo, chtoby my mogli ispol'zovat' odnu i tu zhe "zagotovlennuyu" komandnuyu stroku dlya vseh variantov. V dannom sluchae my ustanavlivaem etu peremennuyu v nul', a shell pri sintaksi- cheskom razbore udalyaet ee iz komandnoj stroki. V stroke 16 vypolnyaetsya izmenenie plotnosti zapisi ispol'zuemogo nositelya. Obrashchenie k razlichnym tipam nositelej vypolnyaetsya po imenam fajlov ustrojstv. Kazhdoe imya ukazyvaet drajver ustrojstva, kotoryj ra- botaet s sootvetstvuyushchej apparaturoj. Ustrojstvo vysokoj plotnosti mo- zhet rabotat' v rezhimah kak vysokoj, tak i nizkoj plotnosti zapisi. Od- nako esli vy ukazhete imya ustrojstva s vysokoj plotnost'yu zapisi, a na samom dele ono imeet nizkuyu plotnost', to drajver rabotat' ne budet iz-za oshibok chteniya. DOPOLNITELXNAYA INFORMACIYA OB IMENAH USTROJSTV Nizhe privoditsya spisok, poluchennyj komandoj ls v kataloge dev dlya mashiny XT, v kotoroj net ustrojstv vysokoj plotnosti zapisi. |tot spisok pozvolyaet proillyustrirovat', kakim obrazom osushchestvlyaetsya obra- shchenie k imenam ustrojstv: ------------------------------ | | 32 brw-rw-rw- 3 bin bin 2, 4 Jun 25 09:25 /dev/fd0 | 32 brw-rw-rw- 3 bin bin 2, 4 Jun 25 09:25 /dev/fd048 | 126 brw-rw-rw- 1 root root 2, 12 Feb 18 17:09 /dev/fd048ds8 | 32 brw-rw-rw- 3 bin bin 2, 4 Jun 25 09:25 /dev/fd048ds9 | 125 brw-rw-rw- 1 root root 2, 8 Feb 18 17:09 /dev/fd048ss8 | 127 brw-rw-rw- 1 root root 2, 0 Feb 18 17:09 /dev/fd048ss9 | 131 brw-rw-rw- 3 root root 2, 5 Feb 18 17:09 /dev/fd1 | 131 brw-rw-rw- 3 root root 2, 5 Feb 18 17:09 /dev/fd148 | 129 brw-rw-rw- 1 root root 2, 13 Feb 18 17:09 /dev/fd148ds8 | 131 brw-rw-rw- 3 root root 2, 5 Feb 18 17:09 /dev/fd148ds9 | 128 brw-rw-rw- 1 root root 2, 9 Feb 18 17:09 /dev/fd148ss8 | 130 brw-rw-rw- 1 root root 2, 1 Feb 18 17:09 /dev/fd148ss9 | Krajnee sleva chislo predstavlyaet soboj nomer indeksnogo deskrip- tora. My ispol'zuem ego kak ssylku dlya opredeleniya unikal'nogo imeni fajla. Kak my uzhe otmechali ranee, neskol'ko imen ustrojstv mogut ot- nosit'sya k odnomu i tomu zhe fajlu, rassmatrivaemomu s razlichnyh tochek zreniya. Naprimer, v dannom spiske vy vidite, chto tri ustrojstva imeyut indeksnyj deskriptor 32. Vtoroe chislo sleva predstavlyaet soboj koli- chestvo svyazej. Kogda ono bol'she edinicy, to eto takzhe ukazyvaet, chto neskol'ko ustrojstv yavlyayutsya na samom dele odnim fajlom, a sledova- tel'no ispol'zuyut odin i tot zhe indeksnyj deskriptor. Sleduyushchie dva chisla yavlyayutsya starshim i mladshim nomerom. Starshij nomer otnositsya k drajveru ustrojstva, a mladshij yavlyaetsya unikal'nym nomerom odnogo iz ustrojstv, upravlyaemyh odnim i tem zhe drajverom. Bol'shinstvo iz etih imen ustrojstv sootvetstvuyut opredelennomu shablonu. Oni sostoyat iz simvolov fd (floppy disk - gibkij disk), cifry 0 ili 1 (nomer ustrojstva), chisla 48 (plotnost', vyrazhennaya v vide ko- lichestva dorozhek na dyujm), simvolov ss ili ds (single-sided - odnosto- ronnyaya ili double-sided - dvustoronnyaya disketa) i cifry 8 ili 9 (chislo sektorov). My vidim po indeksnym deskriptoram, chto ustrojstvo fd0 svyazano s ustrojstvami fd048 i fd048ds9. Samym informativnym imenem (i samym trudnym pri vvode s klaviatury) yavlyaetsya imya fd048ds9. Ono tochno vyra- zhaet, k kakomu ustrojstvu i tipu nositelya my obrashchaemsya. Dlya togo chto- by uprostit' ukazanie etogo imeni, ustrojstvo fd048ds9 svyazyvaetsya s bolee korotkimi imenami. Vse tri imeni fajla yavlyayutsya korrektnymi. Sleduyushchij spisok poluchen na mashine AT, v kotoroj imeetsya ust- rojstvo vysokoj plotnosti: ---------------------------------- | | 102 brw-rw-rw- 3 bin bin 2, 7 Jun 17 14:28 /dev/fd0 | 95 br--r--r-- 2 bin bin 2, 3 Jun 6 09:23 /dev/fd048 | 93 br--r--r-- 1 bin bin 2, 2 Jun 6 09:23 /dev/fd048ds8 | 95 br--r--r-- 2 bin bin 2, 3 Jun 6 09:23 /dev/fd048ds9 | 92 br--r--r-- 1 bin bin 2, 0 Jun 6 09:23 /dev/fd048ss8 | 94 br--r--r-- 1 bin bin 2, 1 Jun 6 09:23 /dev/fd048ss9 | 102 brw-rw-rw- 3 bin bin 2, 7 Jun 17 14:28 /dev/fd096 | 102 brw-rw-rw- 3 bin bin 2, 7 Jun 17 14:28 /dev/fd096ds15 | 99 brw-rw-rw- 3 bin bin 2, 11 Jun 26 19:34 /dev/fd1 | 99 brw-rw-rw- 3 bin bin 2, 11 Jun 26 19:34 /dev/fd148 | 97 br--r--r-- 1 bin bin 2, 10 Jun 6 09:23 /dev/fd148ds8 | 99 brw-rw-rw- 3 bin bin 2, 11 Jun 26 19:34 /dev/fd148ds9 | 96 br--r--r-- 1 bin bin 2, 8 Jun 6 09:23 /dev/fd148ss8 | 98 br--r--r-- 1 bin bin 2, 9 Jun 6 09:23 /dev/fd148ss9 | 103 brw-rw-rw- 2 bin bin 2, 15 Jun 6 09:23 /dev/fd196 | 103 brw-rw-rw- 2 bin bin 2, 15 Jun 6 09:23 /dev/fd196ds15 | Esli my posmotrim na zapisi s indeksnym deskriptorom 102, nachinaya s serediny spiska