Ext2: typy souborů
m (Přidána ukázka symbolického odkazu na flash disk.) |
(Přidány pevné a symbolické linky ve Windows.) |
||
(Není zobrazeno 5 mezilehlých verzí od 1 uživatele.) | |||
Řádka 2: | Řádka 2: | ||
Souborový systém ext2 (a souborové systémy z něj vycházející) rozlišují následující typy souborů. | Souborový systém ext2 (a souborové systémy z něj vycházející) rozlišují následující typy souborů. | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Běžný soubor (Regular File, -) == | == Běžný soubor (Regular File, -) == | ||
− | * Normální soubor (regular file) | + | * Normální soubor (regular file). |
+ | * Ve výpisu <code>ls -l</code> je označen znakem <code>-</code>. | ||
* je to klasický soubor, na který jsme zvyklí (dokument, aplikace, obrázek, nebo cokoli jiného). | * je to klasický soubor, na který jsme zvyklí (dokument, aplikace, obrázek, nebo cokoli jiného). | ||
== Adresář (Directory, d) == | == Adresář (Directory, d) == | ||
− | * Ve Windows se používá jako synonymum pojem složka (folder) | + | * Ve Windows se používá jako synonymum pojem složka (folder). |
− | * Ve výpisu <code>ls -l</code> ji označuje znak <code>d</code> | + | * Ve výpisu <code>ls -l</code> ji označuje znak <code>d</code>. |
* V unixovém pojetí je adresář speciálním druhem souboru. | * V unixovém pojetí je adresář speciálním druhem souboru. | ||
* Vysvětletní realizace adresáře v souborovém systému ext2 viz [[Ext2: adresáře]]. | * Vysvětletní realizace adresáře v souborovém systému ext2 viz [[Ext2: adresáře]]. | ||
Řádka 27: | Řádka 22: | ||
* Počet odkazů jmen daného souboru (počet odkazů) zjistíme ve výpisu <code>ls -l</code> (položka před jménem vlastníka). | * Počet odkazů jmen daného souboru (počet odkazů) zjistíme ve výpisu <code>ls -l</code> (položka před jménem vlastníka). | ||
* Vysvětletní realizace pevného linku v souborovém systému ext2 viz [[Ext2:_adresáře#Pevn.C3.A9_linky_.28hardlink.29|Ext2:_adresáře → Pevný link]]. | * Vysvětletní realizace pevného linku v souborovém systému ext2 viz [[Ext2:_adresáře#Pevn.C3.A9_linky_.28hardlink.29|Ext2:_adresáře → Pevný link]]. | ||
+ | <div class="Poznamka"> | ||
+ | ;Proč bych chtěl mít dva názvy pro stejný soubor? | ||
+ | * Hodí se to, když chci mít stejný soubor přístupný z více adresářů. | ||
+ | * Třeba soubor <code>BigBangTheory-Season1</code> chci mít v adresářích <code>it-serialy</code>, <code>poslat-frantovi</code> a <code>shledni-dnes-vecer</code>. Mohl bych vytvořit tři kopie souboru, ale zabíraly by mi trojnásobek místa. Je lepší vytvořit pevné linky na tentýž soubor. | ||
+ | * Nebo chci mít soubor <code>dokumentace.docx</code> v adresáři <code>maturitni-prace</code> i <code>to-do</code>. Přitom když změním obsah v jednom adresáři, chci, aby se změna promítla v obou souborech. | ||
+ | </div> | ||
== Symbolický odkaz (symbolic link, symlink l) == | == Symbolický odkaz (symbolic link, symlink l) == | ||
− | * | + | * Ve výpisu <code>ls -l</code> je označen znakem <code>l</code> a za názvem souboru má šipku a cestu k souboru, na který ukazuje. |
− | * Dá se přirovnat k hypertextovému odkazu na webu nebo k zástupci ve Windows. | + | * Dá se přirovnat k hypertextovému odkazu na webu nebo k zástupci ve Windows. |
− | ** V Unixu a GNU/Linuxu ale | + | ** V Unixu a GNU/Linuxu ale linky fungují i v příkazovém řádku. |
+ | ** Můžeme tedy psát například i: <code>cd ''linkname''</code>. | ||
* Ve výpisu <code>ls -l</code> vidíme, na který soubor odkaz ukazuje. | * Ve výpisu <code>ls -l</code> vidíme, na který soubor odkaz ukazuje. | ||
− | * Přejmenování či zrušení odkazovaného souboru způsobí nefunkčnost symbolického odkazu. | + | * Přejmenování či zrušení odkazovaného souboru způsobí nefunkčnost symbolického odkazu (''dangling link''). |
− | * Lze vytvořit symbolický odkaz odkazující na adresář či na soubor v jiném diskovém oddílu. | + | * Lze vytvořit symbolický odkaz odkazující na adresář či na soubor v jiném diskovém oddílu (to u pevných linků nelze). |
− | * Vytváříme příkazem: <code>ln -s</code> | + | * Vytváříme příkazem: <code>ln -s ''odkazovanySoubor'' ''nazevlinku''</code> |
<div class="Priklad"> | <div class="Priklad"> | ||
echo ahoj > ahoj.txt | echo ahoj > ahoj.txt | ||
Řádka 43: | Řádka 45: | ||
ln -s /media/flash/seznam.txt seznam.txt | ln -s /media/flash/seznam.txt seznam.txt | ||
</div> | </div> | ||
− | * Symbolický link si můžeme představit jako soubor, který má v i-node přiřazen speciální typ ''symbolický link'' a v jediném datovém bloku má zapsánu cestu k souboru, na který odkazuje. | + | * Symbolický link si můžeme představit jako soubor, který má v i-node přiřazen speciální typ ''symbolický link'' a v jediném datovém bloku má zapsánu cestu k souboru, na který odkazuje. |
<div class="Poznamka"> | <div class="Poznamka"> | ||
− | Všimněte si, že v souborových systémech ext2/3/4 odpovídá velikost souboru u symbolického linku délce cesty. | + | Všimněte si, že v souborových systémech ext2/3/4 odpovídá velikost souboru u symbolického linku délce cesty — „data souboru“ obsahují cestu k cílovému souboru. |
+ | |||
+ | Pokud je cesta k odkazovanému souboru krátká, uloží se cesta přímo v i-node a symbolický link nezabírá žádný datový blok. Pokud je cesta delší, uloží se cesta do datového bloku. Srovnete: | ||
+ | $ touch soubor | ||
+ | $ touch abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz | ||
+ | $ ln -s soubor s1 | ||
+ | $ ln -s abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz s2 | ||
+ | $ ls -lis | ||
+ | celkem 4 | ||
+ | 399148 0 -rw-r--r-- 1 student student 0 dub 27 09:09 abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz | ||
+ | 398178 0 -rw-r--r-- 1 student student 0 dub 27 09:08 soubor | ||
+ | 399152 <strong style="color:red">0</strong> lrwxrwxrwx 1 student student 6 dub 27 09:09 s1 -> soubor | ||
+ | 399154 <strong style="color:red">4</strong> lrwxrwxrwx 1 student student 78 dub 27 09:10 s2 -> abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz | ||
</div> | </div> | ||
== Blokové a znakové zařízení (Block device, character device, b resp. c) == | == Blokové a znakové zařízení (Block device, character device, b resp. c) == | ||
− | * | + | * Ve výpisu <code>ls -l</code> je označen znakem <code>b</code> resp. <code>c</code>. |
− | * | + | * Jedná se o virtuální soubory. Pomocí čtení či zápisu do těchto souborů ve skutečnosti čteme nebo zapisujeme přímo obsah pevného disku či dalších zařízení. |
− | * | + | * Například když si chceme zobrazit či zazálohovat obsah Master Boot Recordu (MBR) pevného disku, můžeme přečíst obsah odpovídajícího virtuálního souboru. |
+ | * Při čtení ze znakových zařízení se používá vyrovnávací paměť, můžeme tedy číst a zapisovat jednotlivé znaky (například zápis na obrazovku). | ||
+ | * Při práci s blokovými zařízeními je třeba vždy načíst celý blok dat (například u pevného disku jeden sektor). | ||
* Obvykle jsou v adresáři: <code>/dev</code> | * Obvykle jsou v adresáři: <code>/dev</code> | ||
<div class="Priklad"> | <div class="Priklad"> | ||
Řádka 77: | Řádka 93: | ||
* Jak zjistíte, jestli je soubor hard-link? | * Jak zjistíte, jestli je soubor hard-link? | ||
* Jak je v linuxových souborových systémech realizován adresář a jak pevný link (viz [[Ext2: adresáře]])? | * Jak je v linuxových souborových systémech realizován adresář a jak pevný link (viz [[Ext2: adresáře]])? | ||
+ | * Zkuste vytvořit soubor <code>pokus.txt</code> a pevný link na tento soubor. Ověřte ve výpisu, zda se jedná o pevný link. | ||
+ | * Zkuste vytvořit symbolický link na <code>pokus.txt</code>. Ověřte ve výpisu, zda se jedná o pevný link. | ||
+ | * Bude symbolický link fungovat, když smažete původní soubor? Bude fungovat pevný link? Jak se změní množství obsazeného místa na disku? | ||
+ | |||
+ | |||
+ | <div class="Poznamka"> | ||
+ | '''Upozornění:''' | ||
+ | |||
+ | Nepleťte si výše uvedené typy souborů s „typem souboru“ ve smyslu „jaká data soubor obsahuje“! | ||
+ | |||
+ | Například „typy souborů“ „obrázek JPEG“, „dokument OpenOffice“, „zvukový soubor OGG“ apod. určují pouze jaká data soubor obsahuje. Z pohledu výše uvedeného rozdělení se u všech těchto souborů jedná o „běžný soubor“. | ||
+ | </div> | ||
+ | |||
+ | |||
+ | == Pevné a symbolické linky ve Windows == | ||
+ | |||
+ | * Souborový systém NTFS ve Windows podporuje pevné a symbolické linky už dlouho, ale dříve neměl uživatel možnost linky vytvářet. | ||
+ | * V aktuálních verzích Windows (rok 2024) lze použít příkaz <code>mklink</code>. | ||
Aktuální verze z 11. 11. 2024, 15:44
Souborový systém ext2 (a souborové systémy z něj vycházející) rozlišují následující typy souborů.
Běžný soubor (Regular File, -)
- Normální soubor (regular file).
- Ve výpisu
ls -l
je označen znakem-
. - je to klasický soubor, na který jsme zvyklí (dokument, aplikace, obrázek, nebo cokoli jiného).
Adresář (Directory, d)
- Ve Windows se používá jako synonymum pojem složka (folder).
- Ve výpisu
ls -l
ji označuje znakd
. - V unixovém pojetí je adresář speciálním druhem souboru.
- Vysvětletní realizace adresáře v souborovém systému ext2 viz Ext2: adresáře.
Pevný odkaz (hardlink)
- Ve výpisu
ls
není nijak označen, resp. je označen jako běžný soubor. - Je to prostě jiné jméno pro soubor (který je na disku pouze jednou).
- Jedná se vlastně o druhé jméno pro existující i-node.
- Pevné odkazy lze vytvářet pouze v rámci jednoho souborového systému (číslo i-node je unikátní pouze v rámci jednoho FS).
- Vytvoříme příkazem:
ln
- Počet odkazů jmen daného souboru (počet odkazů) zjistíme ve výpisu
ls -l
(položka před jménem vlastníka). - Vysvětletní realizace pevného linku v souborovém systému ext2 viz Ext2:_adresáře → Pevný link.
- Proč bych chtěl mít dva názvy pro stejný soubor?
- Hodí se to, když chci mít stejný soubor přístupný z více adresářů.
- Třeba soubor
BigBangTheory-Season1
chci mít v adresáříchit-serialy
,poslat-frantovi
ashledni-dnes-vecer
. Mohl bych vytvořit tři kopie souboru, ale zabíraly by mi trojnásobek místa. Je lepší vytvořit pevné linky na tentýž soubor. - Nebo chci mít soubor
dokumentace.docx
v adresářimaturitni-prace
ito-do
. Přitom když změním obsah v jednom adresáři, chci, aby se změna promítla v obou souborech.
Symbolický odkaz (symbolic link, symlink l)
- Ve výpisu
ls -l
je označen znakeml
a za názvem souboru má šipku a cestu k souboru, na který ukazuje. - Dá se přirovnat k hypertextovému odkazu na webu nebo k zástupci ve Windows.
- V Unixu a GNU/Linuxu ale linky fungují i v příkazovém řádku.
- Můžeme tedy psát například i:
cd linkname
.
- Ve výpisu
ls -l
vidíme, na který soubor odkaz ukazuje. - Přejmenování či zrušení odkazovaného souboru způsobí nefunkčnost symbolického odkazu (dangling link).
- Lze vytvořit symbolický odkaz odkazující na adresář či na soubor v jiném diskovém oddílu (to u pevných linků nelze).
- Vytváříme příkazem:
ln -s odkazovanySoubor nazevlinku
echo ahoj > ahoj.txt ln -s ahoj.txt odkaz cp odkaz odkaz2 ln -s odkaz odkaz3 ln -s /media/flash/seznam.txt seznam.txt
- Symbolický link si můžeme představit jako soubor, který má v i-node přiřazen speciální typ symbolický link a v jediném datovém bloku má zapsánu cestu k souboru, na který odkazuje.
Všimněte si, že v souborových systémech ext2/3/4 odpovídá velikost souboru u symbolického linku délce cesty — „data souboru“ obsahují cestu k cílovému souboru.
Pokud je cesta k odkazovanému souboru krátká, uloží se cesta přímo v i-node a symbolický link nezabírá žádný datový blok. Pokud je cesta delší, uloží se cesta do datového bloku. Srovnete:
$ touch soubor $ touch abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz $ ln -s soubor s1 $ ln -s abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz s2 $ ls -lis celkem 4 399148 0 -rw-r--r-- 1 student student 0 dub 27 09:09 abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz 398178 0 -rw-r--r-- 1 student student 0 dub 27 09:08 soubor 399152 0 lrwxrwxrwx 1 student student 6 dub 27 09:09 s1 -> soubor 399154 4 lrwxrwxrwx 1 student student 78 dub 27 09:10 s2 -> abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
Blokové a znakové zařízení (Block device, character device, b resp. c)
- Ve výpisu
ls -l
je označen znakemb
resp.c
. - Jedná se o virtuální soubory. Pomocí čtení či zápisu do těchto souborů ve skutečnosti čteme nebo zapisujeme přímo obsah pevného disku či dalších zařízení.
- Například když si chceme zobrazit či zazálohovat obsah Master Boot Recordu (MBR) pevného disku, můžeme přečíst obsah odpovídajícího virtuálního souboru.
- Při čtení ze znakových zařízení se používá vyrovnávací paměť, můžeme tedy číst a zapisovat jednotlivé znaky (například zápis na obrazovku).
- Při práci s blokovými zařízeními je třeba vždy načíst celý blok dat (například u pevného disku jeden sektor).
- Obvykle jsou v adresáři:
/dev
Příklady:
-
/dev/stdin
-
/dev/null
-
/dev/sda1
Pojmenovaná roura (named pipe)
- Roura slouží k „propojení běžících procesů“.
- Běžně roury jsou pouze dočasné, můžeme jim však přiřadit jméno v souborovém systému.
- Vytváříme příkazem:
mkfifo
Socket (Socket)
- Slouží ke komunikaci mezi procesy a to buďto na lokálním stroji, nebo mezi vzdálenými stroji, po síti. Narozdíl od rour podporují oboustrannou komunikaci.
Zopakujte si
- Jaké jsou typy souborů v systému Unix?
- Jak zjistíte, na jaký soubor ukazuje sym-link?
- Jak zjistíte, jestli je soubor hard-link?
- Jak je v linuxových souborových systémech realizován adresář a jak pevný link (viz Ext2: adresáře)?
- Zkuste vytvořit soubor
pokus.txt
a pevný link na tento soubor. Ověřte ve výpisu, zda se jedná o pevný link. - Zkuste vytvořit symbolický link na
pokus.txt
. Ověřte ve výpisu, zda se jedná o pevný link. - Bude symbolický link fungovat, když smažete původní soubor? Bude fungovat pevný link? Jak se změní množství obsazeného místa na disku?
Upozornění:
Nepleťte si výše uvedené typy souborů s „typem souboru“ ve smyslu „jaká data soubor obsahuje“!
Například „typy souborů“ „obrázek JPEG“, „dokument OpenOffice“, „zvukový soubor OGG“ apod. určují pouze jaká data soubor obsahuje. Z pohledu výše uvedeného rozdělení se u všech těchto souborů jedná o „běžný soubor“.
Pevné a symbolické linky ve Windows
- Souborový systém NTFS ve Windows podporuje pevné a symbolické linky už dlouho, ale dříve neměl uživatel možnost linky vytvářet.
- V aktuálních verzích Windows (rok 2024) lze použít příkaz
mklink
.
Související stránky