В системах в стиле Unix структура данных, которая представляет объекты файловой системы (другими словами, данные о файле), хранится в так называемом «inode».
Имя файла - это просто ссылка на этот индекс и называется «жесткой ссылкой». Нет разницы между именем файла и любой последующей ссылкой. Поэтому ответ «да»: жесткая ссылка - это обычный файл, и действительно, обычный файл - это жесткая ссылка.
Команда ls
покажет вам, сколько жестких ссылок существует на файл.
Например:
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
Здесь мы создали файл с именем /tmp/hello.txt
. В 1
выводе from ls -l
указывается, что существует 1 жесткая ссылка на этот файл. Эта жесткая ссылка - само имя файла /tmp/hello.txt
.
Если мы сейчас создадим еще одну жесткую ссылку на этот файл:
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
Теперь вы можете видеть, что оба имени файла указывают на наличие двух жестких ссылок на файл. Ни одно из них не является «правильным» именем файла, они оба одинаково действительны. Мы можем видеть, что они оба указывают на один и тот же индекс (в данном случае 5374043):
seumasmac@comp:~$ ls -i /tmp/hello*
5374043 /tmp/helloagain.txt 5374043 /tmp/hello.txt
Существует распространенное заблуждение, что это не так для каталогов. Я слышал, что люди говорят, что количество ссылок, возвращаемых ls
для каталога, равно количеству подкаталогов, в том числе .
и ..
является неправильным . Или, по крайней мере, хотя он даст вам правильный номер, это верно по неправильным причинам!
Если мы создадим каталог и сделаем, 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
Это показывает, что есть 2 жесткие ссылки на этот каталог. Эти:
/tmp/testdir
/tmp/testdir/.
Обратите внимание, что /tmp/testdir/..
это не ссылка на этот каталог, это ссылка на /tmp
. И это говорит вам, почему работает функция «количество подкаталогов». Когда мы создаем новый подкаталог:
seumasmac@comp:~$ mkdir /tmp/testdir/dir2
seumasmac@comp:~$ ls -ld /tmp/testdir
drwxrwxr-x 3 seumasmac seumasmac 4096 Oct 4 13:24 /tmp/testdir
you can now see there are 3 hard links to /tmp/testdir
directory. These are:
/tmp/testdir
/tmp/testdir/.
/tmp/testdir/dir2/..
Таким образом, каждый новый подкаталог будет увеличивать количество ссылок на единицу из-за ..
записи, которую он содержит.