Ссылки

Лучший способ понять что такое ссылка - рассмотреть пример. Давайте создадим обычный файл:

$ pwd
/home/queen/example
   $ ls
   $ touch a
   $ ls -il a
   32555 -rw-rw-r- -    1 queen     queen            0 Dec 10 08:12 a

Параметр -i для команды ls отображает номер inode первым значением в выводимой строке. Как вы можете видеть, до создания файла a, в каталоге не было никаких файлов. Для нас представляет интерес также и третье поле, которое показывает количество ссылок на данный файл (inode всегда ссылается - поэтому одна ссылка существует всегда).

Команда touch a выполняет два независимых действия:

  • Создает inode, которому операционная система дала номер 32555, и чей тип - обычный файл;

  • А также создает ссылку на этот inode, названную a, в текущем каталоге /home/queen/example. Поэтому файл /home/queen/example/a это ссылка на inode, с номером 32555, и поэтому верно количество ссылок 1 (одна ссылка).

а теперь, если мы напечатаем следующее:

   $ ln a b
   $ ls -il a b
   32555 -rw-rw-r- -    2 queen     queen            0 Dec 10 08:12 a
   32555 -rw-rw-r- -    2 queen     queen            0 Dec 10 08:12 b
   $

мы создадим другую ссылку на тот же самый inode. Как вы можете видеть, мы не создавали файл с названием b, но вместо этого мы только добавили другую ссылку на inode с номером 32555 в том же самом каталоге и присвоили этой новой ссылке имя b. Рассмотрим результаты работы команды ls -l, Теперь счетчик ссылок на inode с номером 32555 равен 2, так как на этот самый inode ссылаются два файла a и b.

Теперь, если мы сделаем следующее:

   $ rm a
   $ ls -il b
   32555 -rw-rw-r- -    1 queen     queen            0 Dec 10 08:12 b
   $

мы увидим, что даже когда мы удалили “оригинальный файл”, inode все еще существует. Но теперь единственная ссылка на этот inode - это файл с именем /home/queen/example/b.

Следовательно, файл под UNIX не имеет никакого названия; вместо этого, он имеет одну или более ссылок на себя в одном или более каталогах.

Сами каталоги также размещены в inodes, но количество ссылок на них, в отличие от всех других типов файлов, совпадает с числом подкаталогов. На каталог всегда есть по крайней мере две ссылки: каталог непосредственно (.) и его каталог предыдущего уровня (..).

Типичным примером файла, на который никто не ссылается, (то есть он не имеет имени) есть сетевое подключение: вы никогда не сможете увидеть на своем диске файл, соответствующий вашему сетевому подключению к web-сайту Linux Mandrake. Подобная ситуация возникает в случае, когда вы используете канал в shell. В этом случае существует inode, соответствующий этому каналу, но на этот inode никто не ссылается. То есть он не имеет имени.



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости