Использование жестких связей

Жесткая связь имеет место между несколькими именами файла, указываю- щими на одни и те же метаданные (inode). Наличие у файла другого имени, т. е. наличие жесткой связи, можно обнаружить, изучив вывод команды ls –l


 

(пример 4.25). Эта команда в третьем столбце показывает количество имен у файла (link count). Если у файла link count имеет значение, большее едини- цы, значит, файл жестко связан.

 

Пример 4.25. Жесткая связь

 

$ ls -li /bin/*grep

13598 -rwxr-xr-x 3 root root 85228 Sep 11 2009 /bin/grep

13598 -rwxr-xr-x 3 root root 85228 Sep 11 2009 /bin/egrep

13598 -rwxr-xr-x 3 root root 85228 Sep 11 2009 /bin/fgrep

 

Листинг, выводимый командой ls –li /bin/*grep, показывает, что имена

/bin/grep, /bin/egrep и /bin/fgrep принадлежат одному и тому же файлу с тремя именами. Номер inode у всех этих файлов одинаков, следовательно, они эк- вивалентны.

Поскольку метаданные у файлов, между которыми установлена жесткая связь, одинаковы, то и блоки данных тоже одинаковы. Следовательно, любые изменения, производимые с одним файлом, зеркально отразятся на файле, жестко связанном с ним.

Для создания жесткой связи с файлом применяется команда ln. Первый аргумент команды — имя файла, а второй — имя жесткой связи с ним (при- мер 4.26).

 

Пример 4.26. Создание жесткой связи

 

$ ln file1 newname

$ ls -li file1

4676 -rw-rw-r-- 2 user1 users 0 Dec 14 20:43 file1

$ ls -li newname

4676 -rw-rw-r-- 2 user1 users 0 Dec 14 20:43 newname

 

В примере 4.26 создано новое имя для файла file1 — newname. Команда ls -li

демонстрирует, что inode у этих файлов одинаковые.

Следует помнить, что жесткие связи могут быть установлены только в пре- делах одной файловой системы, т. е. нельзя установить жесткую связь между файлом на жестком диске и, например, дискете. Это вызвано тем, что у жестко связанных файлов должен быть один и тот же индексный дескриптор.


 

Пример 4.27. Эквивалентность имен жестко связанных файлов

 

$ echo 'This is a hard link' > file1

$ cat newname

This is a hard link

 

В примере 4.27 информация в файл была записана с использованием имени файла file1, а чтение информации было произведено из newname.

Удаление одной жесткой связи с файлом уменьшает количество имен (link count) на единицу (пример 4.28), однако реально файл удаляется только то- гда, когда счетчик количества имен уменьшается до нуля.

 

Пример 4.28. Количество имен файла

 

$ ls -l file1 newname

-rw-rw-r-- 2 user1 user1 20 Dec 14 20:43 file1

-rw-rw-r-- 2 user1 user1 20 Dec 14 20:43 newname

$ rm -f file1

$ ls -l file1 newname

ls: file1: No such file or directory

-rw-rw-r-- 1 user1 user1 20 Dec 14 20:43 newname

 

Пример 4.28 демонстрирует, что при удалении одного из имен файла счетчик имен уменьшился на единицу.

Установить жесткую связь с каталогом с помощью команды ln нельзя, т. к. для каталогов жесткие связи имеют особый смысл (пример 4.29).

 

Пример 4.29. Попытка создания жесткой связи для каталога

 

$ ls -ld LPI

drwxrwx--- 10 prof users 544 May 2 10:15 LPI

$ ln LPI l1

ln: `LPI': не допускается создавать жесткие ссылки на каталоги

 

У каждого каталога имеются как минимум два имени — имя каталога, запи- санное в его родительском каталоге, и имя "точка". Таким образом, у вновь созданного каталога существуют сразу два имени. А у его родительского ка- талога после создания нового каталога количество имен увеличивается на единицу, т. к. в дочернем каталоге имеется имя "две точки", являющееся же- сткой связью с именем родительского каталога (пример 4.30).


 

Пример 4.30. Жесткая связь каталога с подкаталогами

 

$ ls -ldi

3555 drwx------ 16 user1 users 1120 Dec 15 22:15 .

$ mkdir dir1

$ ls -ild dir1

1598 drwxr-x--- 2 user1 users 48 Dec 15 23:03 dir1

$ ls -ial dir1

 

total  
drwxr-x--- 2 user1 users Dec 23:03 .
drwx------ 17 user1 users Dec 23:03 ..

$ ls -ldi

3555 drwx------ 17 user1 users 1144 Dec 15 23:03 .

 

В примере 4.30 был создан каталог dir1, inode которого — 1598. Имя "точка", находящееся в каталоге dir1, — имя текущего каталога, имеет тот же индекс- ный дескриптор 1598. Таким образом, у нового каталога dir1 существуют два имени. Имя родительского каталога — "две точки", находящиеся в каталоге dir1, имеет inode 3555, значение которого совпадает с inode родительского каталога. При сравнении выводов первой и последней команд становится за- метно, что после создания каталога dir1 количество имен у его родительского каталога увеличилось на единицу.

Команда cp имеет специальную опцию -l, которая позволяет (в пределах од- ной файловой системы) вместо копирования создавать жесткие связи с ис- ходными файлами (пример 4.31).

 

Пример 4.31. Команда cp -l

 

$ ls -li f???

 

-rw-r--r-- 1 user1 users 0 Dec 12:30 f112
-rw-r--r-- 1 user1 users 0 Dec 12:30 f113
-rw-r--r-- 1 user1 users 0 Dec 12:30 f117

$ cp -l f??? dir1

$ ls -li dir1

 

total  
-rw-r--r-- 2 user1 users 0 Dec 12:30 f112
-rw-r--r-- 2 user1 users 0 Dec 12:30 f113
-rw-r--r-- 2 user1 users 0 Dec 12:30 f117

 

В примере 4.31 показано, что при использовании команды cp с опцией -l для исходных файлов были созданы жесткие связи с такими же именами в ката- логе dir1.

 








Дата добавления: 2015-06-12; просмотров: 780;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.013 сек.