Использование жестких связей
Жесткая связь имеет место между несколькими именами файла, указываю- щими на одни и те же метаданные (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;