Soubor je inode s metadaty, mezi nimiž je seznam ukazatelů, kde lze data najít.
Abyste měli přístup k souboru, musíte propojit do adresáře (přemýšlejte o adresářích jako o telefonních seznamech, nikoli o složkách), což znamená přidání jednoho nebo více záznamů do jednoho nebo více adresářů pro přiřazení jména s tímto souborem.
Všechny ty odkazy, ty názvy souborů ukazují na stejný soubor. Není tam ani jeden originál a druhý odkaz. Všechny jsou přístupovými body ke stejnému souboru (stejnému inodu) ve stromu adresářů. Když získáte velikost souboru (lstat
systémové volání), získáváte informace (tato metadata uvedená výše) uložená v inode, nezáleží na tom, jaký název souboru, jaký odkaz používáte k odkazování na tento soubor.
Naproti tomu symbolické odkazy jsou jiný soubor (jiný inode), jehož obsahem je cesta do cílového souboru. Jako každý jiný soubor musí být tyto symbolické odkazy propojeny s adresářem (musí mít název), abyste k nim měli přístup. Můžete mít také několik odkazů na symbolické odkazy, jinými slovy, symbolické odkazy mohou mít několik jmen (v jednom nebo více adresářích).
$ touch a
$ ln a b
$ ln -s a c
$ ln c d
$ ls -li [a-d]
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 a
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 b
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 c -> a
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 d -> a
Nad číslem souboru 10486707 je běžný soubor. Dvě položky v aktuálním adresáři (jedna s názvem a
, jeden s názvem b
) odkaz na něj. Protože počet odkazů je 2, víme, že v aktuálním adresáři ani v žádném jiném adresáři není žádný jiný název tohoto souboru. Číslo souboru 10502404 je další soubor, tentokrát typu symbolický odkaz propojený dvakrát s aktuálním adresářem. Jeho obsahem (cílem) je relativní cesta "a".
Všimněte si, že pokud byl 10502404 propojen s jiným adresářem, než je aktuální, obvykle by ukazoval na jiný soubor v závislosti na tom, jak byl přístupný.
$ mkdir 1 2
$ echo foo > 1/a
$ echo bar > 2/a
$ ln -s a 1/b
$ ln 1/b 2/b
$ ls -lia 1 2
1:
total 92
10608644 drwxr-xr-x 2 stephane stephane 4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10504186 -rw-r--r-- 1 stephane stephane 4 Aug 27 17:24 a
10539259 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:26 b -> a
2:
total 92
10608674 drwxr-xr-x 2 stephane stephane 4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10539044 -rw-r--r-- 1 stephane stephane 4 Aug 27 17:24 a
10539259 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:26 b -> a
$ cat 1/b
foo
$ cat 2/b
bar
K souborům nejsou přiřazena žádná jména kromě adresářů, které je propojují. Prostor zabraný jejich jmény je položkami v těchto adresářích, je zohledněn ve velikosti souboru / využití disku v adresářích.
Všimnete si, že systémové volání k odstranění souboru je unlink
. To znamená, že soubory neodstraníte, ale odpojíte je od adresářů, ve kterých jsou odkazovány. Po odpojení od posledního adresáře, který měl záznam k danému souboru, je tento soubor zničen (pokud jej žádný proces nemá otevřeno).
Pevný odkaz je v podstatě původní soubor. Velikost, kterou vidíte nahlášenou, je tedy velikost souboru, na který je odkazováno. Je měkký odkazy, které zabírají pouze místo jejich jmen (tak trochu).
Pokud jde o souborový systém, pevný odkaz a originál jsou to samé, ukazují na stejný inode, takže je hlášena stejná velikost.