it-swarm-eu.dev

Porozumění / dev a jeho podoblasti a soubory

$ ls -l /dev/stdin /dev/fd/0
lrwx------ 1 tim tim 64 2011-08-07 09:53 /dev/fd/0 -> /dev/pts/2
lrwxrwxrwx 1 root root 15 2011-08-06 08:14 /dev/stdin -> /proc/self/fd/0
$ ls -l /dev/pts/2 /proc/self/fd/0
crw--w---- 1 tim tty  136, 2 2011-08-07 09:54 /dev/pts/2
lrwx------ 1 tim tim     64 2011-08-07 09:54 /proc/self/fd/0 -> /dev/pts/2
  1. Zajímalo by mě, jestli všechny soubory pod /dev a jeho podadresáře jsou všechny popisovače souborů zařízení?
  2. Proč existuje tolik odkazů od sebe navzájem? Například, /dev/fd/0, /dev/stdin, /proc/self/fd/0 jsou všechny odkazy na /dev/pts/2.
  3. Pokud l v lrwx------ znamená odkaz, co dělá c v crw--w---- znamenat?
55
Tim

Téměř všechny soubory pod /dev Jsou soubory zařízení . Zatímco čtení a zápis do běžného souboru ukládá data na disk nebo jiný souborový systém, přístup k souboru zařízení komunikuje s ovladačem v jádře, které obvykle zase komunikuje s hardwarem (hardwarové zařízení, odtud název).

Existují dva typy souborů zařízení: bloková zařízení (označená b jako první znak ve výstupu ls -l) A znaková zařízení (označená c). Rozdíl mezi blokovými a znakovými zařízeními není úplně univerzální. Bloková zařízení jsou věci jako disky, které se chovají jako velké soubory s pevnou velikostí: pokud zapíšete bajt na určitém ofsetu a později načtete ze zařízení na tomto ofsetu, dostanete tento bajt zpět. Znaková zařízení jsou téměř o něčem jiném, kde zápis bajtu má nějaký okamžitý účinek (např. Je vysílán na sériové lince) a čtení bajtu má také nějaký okamžitý účinek (např. Je načten ze sériového portu).

Význam souboru zařízení je určen jeho číslem, nikoli názvem (název záleží na aplikacích, ale ne na jádru). Číslo je ve skutečnosti dvě čísla: hlavní číslo označuje, který ovladač je za toto zařízení zodpovědný, a menší číslo umožňuje řidiči řídit několik zařízení¹. Tato čísla se objevují v seznamu ls -l, Kde byste normálně našli velikost souboru. Např. brw-rw---- 1 root disk 8, 0 Jul 12 15:54 /dev/sda → toto zařízení je hlavní 8, menší 0.

Některé soubory zařízení pod /dev Neodpovídají hardwarovým zařízením. Jeden, který existuje v každém unixovém systému, je /dev/null; zápis do něj nemá žádný účinek a čtení z něj nikdy nevrací žádná data. Ve skriptech Shell je to často výhodné, když chcete ignorovat výstup z příkazu (>/dev/null) Nebo spustit příkaz bez vstupu (</dev/null). Další běžné příklady jsou /dev/zero (Který vrací nulové bajty infinitum reklamy ) /dev/urandom ( který vrací náhodné bajty nekonečné množství reklamy ).

Několik souborů zařízení má význam, který závisí na procesu, který k němu přistupuje. Například /dev/stdin Označuje standardní vstup aktuálního procesu; otevření z má přibližně stejný účinek jako otevření původního souboru, který byl otevřen jako standardní vstup procesu. Podobně /dev/tty Označuje terminál, ke kterému je proces připojen. V Linuxu nejsou dnes /dev/stdin A přátelé implementováni jako znaková zařízení, ale místo toho jako symbolické odkazy na obecnější mechanismus, který umožňuje odkazovat na každý deskriptor souboru (na rozdíl od pouze 0, 1 a 2 pod tradiční metoda); například /dev/stdin je symbolický odkaz na /proc/self/fd/0. Viz Jak se/dev/fd týká/proc/self/fd /? .

Pod symbolem /dev Najdete několik symbolických odkazů. K tomu může dojít z historických důvodů: soubor zařízení byl přesunut z jednoho jména na druhé, ale některé aplikace stále používají staré jméno. Například /dev/scd0 Je symbolickým odkazem na /dev/sr0 V systému Linux; oba označují první CD zařízení. Dalším důvodem pro symbolické odkazy je organizace: pod Linuxem najdete své pevné disky a diskové oddíly na několika místech: /dev/sda A /dev/sda1 A přátelé (každý disk je označen libovolným písmenem a oddíly) podle rozložení oddílů), /dev/disk/by-id/* (disky označené jedinečným sériovým číslem), /dev/disk/by-label/* (oddíly se souborovým systémem, označeny štítkem zvoleným člověkem); a více. Symbolické odkazy se používají také tehdy, pokud může být obecný název zařízení jedním z několika; například /dev/dvd může být symbolickým odkazem na /dev/sr0, nebo by to mohl být odkaz na /dev/sr1, pokud máte dvě čtečky CD a druhým je výchozí DVD čtenář.

Nakonec existuje několik dalších souborů, které můžete najít pod /dev, Z tradičních důvodů. Na každém systému nenajdete totéž. Ve většině odvětví je /dev/logsoket , který programy používají k vysílání zpráv protokolu. /dev/MAKEDEV Je skript, který vytváří položky v /dev. V moderních systémech Linux jsou položky v /dev/ Vytvářeny automaticky pomocí dev , zastarávající MAKEDEV.

¹ Ve Linuxu to ve skutečnosti již neplatí, ale tento detail záleží pouze na spisovatelích ovladačů zařízení.

  1. Ano - buď přímo, nebo jako symbolické odkazy - to je to, pro co /dev/ Je.
  2. Pro různé účely: někdy pro kompatibilitu mezi schématy pojmenování, někdy je to nezbytné pro pracovní prostředí - jako v příkladu /dev/stdin. Toto neznamená bod staticky na /dev/pts/2 Nebo jakoukoli jiný - stačí přejít na jiný terminál a uvidíte. /dev/stdin Je standardní vstup vaší aktuální relace terminálu. To je také příklad, proč to musí být symbolický odkaz.
  3. Viz man mknod A info coreutils 'mknod invocation'. Obecně platí, že c znamená typ zařízení s charakteristickými znaky.
14
rozcietrzewiacz

Pro vaši první otázku nejde o popisovače souborů, ale o soubory zařízení. (a.k.a. „dev uzly“)

Tyto soubory jsou svázány s ovladačem, který pracuje se zařízením pomocí velkých a menších čísel. (Například „136, 2“ ve vašem výstupu ls odkazuje na ovladač zařízení vázaný na hlavní číslo 136 a určuje zařízení # 2 zpracované tímto ovladačem.)

První písmeno výstupu ls -l je typ zařízení v případě souborů zařízení. Pokud je to „c“, jedná se o znakové zařízení, nebo pokud je „b“, jedná se o blokové zařízení.

Pro vaši druhou otázku použijte výše uvedenou odpověď rozcietrzewiacz.

11
rulingminds