GNU/Linux >> Znalost Linux >  >> Linux

Proč se zdá, že pevné odkazy zabírají stejné místo jako originály?

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.


Linux
  1. Vysvětlení pevných odkazů a měkkých odkazů v Linuxu

  2. Odkazovat na soubor ve stejném adresáři skriptu nalezeného v $path?

  3. Spustit stejný skript na několika serverech přes Ssh?

  1. Přesměrovat na stejný soubor jako zdrojový soubor zpracovaný příkazem?

  2. Proč se md5 hash dvou tarballů stejného souboru liší?

  3. Jak zaplnit pevný disk v linuxu

  1. Proč skript Bash nerozpozná aliasy?

  2. Proč PC zamrzne, když kopíruji soubor na Pendrive?

  3. Výstup do Stdout a zároveň Grep do souboru?