W systemach uniksowych struktura danych reprezentująca obiekty systemu plików (innymi słowy dane o pliku) jest przechowywana w tak zwanym „i-węzle”.
Nazwa pliku jest tylko linkiem do tego i-węzła i jest nazywana „twardym łączem”. Nie ma różnicy między pierwszym imieniem pliku a dowolnym kolejnym linkiem. Odpowiedź brzmi: „tak”: twardy link to zwykły plik, a rzeczywiście zwykły plik to twardy link.
ls
Komenda pokaże ile trudno linki są do pliku.
Na przykład:
seumasmac@comp:~$ echo Hello > /tmp/hello.txt
seumasmac@comp:~$ ls -l /tmp/hello.txt
-rw-rw-r-- 1 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
Tutaj stworzyliśmy plik o nazwie /tmp/hello.txt
. Dane 1
wyjściowe z ls -l
wskazują, że istnieje 1 twardy link do tego pliku. Ten twardy link jest samą nazwą pliku /tmp/hello.txt
.
Jeśli teraz utworzymy kolejny twardy link do tego pliku:
seumasmac@comp:~$ ln /tmp/hello.txt /tmp/helloagain.txt
seumasmac@comp:~$ ls -l /tmp/hello*
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/helloagain.txt
-rw-rw-r-- 2 seumasmac seumasmac 6 Oct 4 13:05 /tmp/hello.txt
widać teraz, że obie nazwy plików wskazują, że istnieją 2 twarde linki do pliku. Żadna z tych nie jest „prawidłową” nazwą pliku, oba są jednakowo prawidłowe. Widzimy, że oba wskazują na tę samą i-węzeł (w tym przypadku 5374043):
seumasmac@comp:~$ ls -i /tmp/hello*
5374043 /tmp/helloagain.txt 5374043 /tmp/hello.txt
Istnieje powszechne nieporozumienie, że jest inaczej w przypadku katalogów. Słyszałem, jak ludzie mówią, że liczba odsyłaczy ls
do katalogu jest liczbą podkatalogów, w tym .
i ..
która jest niepoprawna . A przynajmniej, podając prawidłowy numer, jest odpowiedni z niewłaściwych powodów!
Jeśli tworzymy katalog i wykonujemy ls -ld
:
seumasmac@comp:~$ mkdir /tmp/testdir
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 2 seumasmac seumasmac 4096 Oct 4 13:20 /tmp/testdir
To pokazuje, że istnieją 2 twarde linki do tego katalogu. To są:
/tmp/testdir
/tmp/testdir/.
Pamiętaj, że /tmp/testdir/..
to nie jest link do tego katalogu, to link do /tmp
. A to mówi ci, dlaczego działa „liczba podkatalogów”. Kiedy tworzymy nowy podkatalog:
seumasmac@comp:~$ mkdir /tmp/testdir/dir2
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 3 seumasmac seumasmac 4096 Oct 4 13:24 /tmp/testdir
teraz możesz zobaczyć 3 twarde linki do /tmp/testdir
katalogu. To są:
/tmp/testdir
/tmp/testdir/.
/tmp/testdir/dir2/..
Tak więc każdy nowy podkatalog zwiększy liczbę linków o jeden, ze względu na ..
wpis, który zawiera.