Plik to i-węzeł z meta danymi, wśród których znajduje się lista wskaźników wskazujących, gdzie znaleźć dane.
Aby uzyskać dostęp do pliku, musisz połączyć go z katalogiem (traktuj katalogi jak katalogi telefonu, a nie foldery), czyli dodaj jeden lub więcej wpisów do jednego lub więcej katalogów, aby powiązać nazwę z tym plikiem.
Wszystkie te linki, nazwy plików wskazują na ten sam plik. Nie ma jednego, który jest oryginalny, a innych, które są linkami. Wszystkie są punktami dostępu do tego samego pliku (tego samego i-węzła) w drzewie katalogów. Gdy uzyskasz rozmiar pliku ( lstat
wywołanie systemowe), pobierasz informacje (o których mowa powyżej) przechowywane w i-węzle, nie ma znaczenia, której nazwy pliku i linku używasz w celu odniesienia do tego pliku .
Natomiast dowiązania symboliczne to inny plik (inny i-węzeł), którego treść jest ścieżką do pliku docelowego. Jak każdy inny plik, te dowiązania symboliczne muszą być połączone z katalogiem (muszą mieć nazwę), abyś mógł uzyskać do nich dostęp. Możesz także mieć kilka linków do dowiązań symbolicznych, innymi słowy, dowiązaniom symbolicznym można nadać kilka nazw (w jednym lub kilku katalogach).
$ 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 numerem pliku 10486707 znajduje się zwykły plik. Dwa wpisy w bieżącym katalogu (jeden z imieniem a
, drugi z imieniem b
) prowadzą do niego. Ponieważ liczba linków wynosi 2, wiemy, że nie ma innej nazwy tego pliku w bieżącym katalogu ani w żadnym innym katalogu. Plik o numerze 10502404 to kolejny plik, tym razem typu dowiązanie symboliczne dwukrotnie połączone z bieżącym katalogiem. Jego zawartość (cel) jest ścieżką względną „a”.
Zauważ, że jeśli 10502404 był połączony z innym katalogiem niż bieżący, zwykle wskazywałby na inny plik w zależności od sposobu dostępu.
$ 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
Pliki nie mają powiązanych z nimi nazw innych niż w katalogach, które je łączą. Miejsce zajmowane przez ich nazwy to wpisy w tych katalogach, jest to uwzględnione w wielkości pliku / wykorzystaniu dysku przez katalogi.
Zauważysz, że wywołanie systemowe w celu usunięcia pliku to unlink
. Oznacza to, że nie usuwasz plików, odłączasz je od katalogów, do których się odnoszą. Po odłączeniu od ostatniego katalogu, w którym znajdował się wpis do danego pliku, plik ten jest następnie niszczony (dopóki nie ma go żaden proces otwierany).
lstat
wywołania systemowego, które dostaje ich rozmiar.