Linux где хранятся ссылки

Linux где хранятся ссылки

Библиотека сайта rus-linux.net

Для понимания концепции ссылок на файлы в рамках файловой системы следует в первую очередь разобраться со структурами inode .

Структуры inode

Содержимое структуры inode

Inode является структурой данных, содержащей относящиеся к файлу метаданные. При сохранении нового файла на диске в рамках файловой системы происходит сохранение не только самого содержимого файла (данных), но и таких дополнительных параметров файла, как имя, дата создания, права доступа и других. Вся эта информация (за исключением имени файла и его содержимого) сохраняется в рамках структуры inode , соответствующей данному файлу.

Как видно в следующем примере, при использовании команды ls -l выводятся некоторые данные, содержащиеся в структуре inode.

root@rhel53 ~# ls -ld /home/project42/ drwxr-xr-x 4 root pro42 4.0K мар 27 14:29 /home/project42/

Таблица структур inode

Таблица структур inode содержит информацию о всех структурах inode и создается в момент создания файловой системы (с помощью утилиты mkfs ). Вы можете использовать команду df -i для получения информации о количестве используемых и доступных для использования структур inode в рамках смонтированных файловых систем.

root@rhel53 ~# df -i Файловая система Iнодов IИспользовано IСвободно IИспользовано% Cмонтировано в /dev/mapper/VolGroup00-LogVol00 4947968 115326 4832642 3% / /dev/hda1 26104 45 26059 1% /boot tmpfs 64417 1 64416 1% /dev/shm /dev/sda1 262144 2207 259937 1% /home/project42 /dev/sdb1 74400 5519 68881 8% /home/project33 /dev/sdb5 0 0 0 - /home/sales /dev/sdb6 100744 11 100733 1% /home/research

В приведенном выше примере вывода команды df -i вы можете обнаружить процентные показатели использования структур inode для некоторых смонтированных файловых систем . Данный показатель не приводится для устройства /dev/sdb5 ввиду того, что на этом устройстве используется файловая система fat .

Идентификатор структуры inode

Каждая структура inode имеет уникальный идентификатор (идентификатор структуры inode). Вы можете увидеть идентификаторы структур inode в выводе команды ls -li .

paul@RHELv4u4:~/test$ touch file1 paul@RHELv4u4:~/test$ touch file2 paul@RHELv4u4:~/test$ touch file3 paul@RHELv4u4:~/test$ ls -li итого 12 817266 -rw-rw-r-- 1 paul paul 0 фев 5 15:38 file1 817267 -rw-rw-r-- 1 paul paul 0 фев 5 15:38 file2 817268 -rw-rw-r-- 1 paul paul 0 фев 5 15:38 file3 paul@RHELv4u4:~/test$

Три этих файла создавались последовательно, причем им соответствуют три различные структуры inode (идентификаторы которых выводятся в первом столбце). Вся информация из вывода данной команды ls , за исключением имен файлов (которые хранятся в файле директории), содержится в структурах inode .

Читайте также:  Запуск bash скрипта linux

Структуры inode и содержимое файлов

paul@RHELv4u4:~/test$ ls -li итого 16 817266 -rw-rw-r-- 1 paul paul 0 фев 5 15:38 file1 817270 -rw-rw-r-- 1 paul paul 147 фев 5 15:42 file2 817268 -rw-rw-r-- 1 paul paul 0 фев 5 15:38 file3 paul@RHELv4u4:~/test$ cat file2 Сейчас зима и очень холодно. Нам не нравится холод, мы предпочитаем летние ночи. paul@RHELv4u4:~/test$

Данные, выводимые при использовании команды cat , содержатся не в структуре inode , а где-то на диске. Структура inode содержит указатель на эти данные.

О директориях

Директория является таблицей

Директория является особым видом файла, который содержит таблицу соответствия между именами файлов и структурами inode. При выводе списка содержимого директории с помощью команды ls -ali на самом деле будет осуществляться вывод содержимого файла директории.

paul@RHELv4u4:~/test$ ls -ali итого 32 817262 drwxrwxr-x 2 paul paul 4096 фев 5 15:42 . 800768 drwx------ 16 paul paul 4096 фев 5 15:42 .. 817266 -rw-rw-r-- 1 paul paul 0 фев 5 15:38 file1 817270 -rw-rw-r-- 1 paul paul 147 фев 5 15:42 file2 817268 -rw-rw-r-- 1 paul paul 0 фев 5 15:38 file3 paul@RHELv4u4:~/test$

В выводе приведены пять имен файлов, а также информация об их соответствии пяти структурам inode. Имя файла, представленное символом точки ( . ), соответствует текущей директории, а имя файла, представленное двумя символами точки ( .. ) — родительской директории. Имена трех других файлов соответствуют различным структурам inode.

Жесткие ссылки

Создание жестких ссылок

В момент создания жесткой ссылки с помощью утилиты ln в файл директории добавляется дополнительная запись. Новое имя файла ставится в соответствие существующей структуре inode.

paul@RHELv4u4:~/test$ ln file2 hardlink_to_file2 paul@RHELv4u4:~/test$ ls -li итого 24 817266 -rw-rw-r-- 1 paul paul 0 фев 5 15:38 file1 817270 -rw-rw-r-- 2 paul paul 147 фев 5 15:42 file2 817268 -rw-rw-r-- 1 paul paul 0 фев 5 15:38 file3 817270 -rw-rw-r-- 2 paul paul 147 фев 5 15:42 hardlink_to_file2 paul@RHELv4u4:~/test$

Оба файла будут использовать одну и ту же структуру inode, поэтому они в любом случае будут иметь одни и те же права доступа, а также одного и того же владельца. Оба этих файла также будут иметь одно и то же содержимое. На самом деле, оба этих файла будут идентичными и это означает, что вы можете безопасно удалить оригинальный файл и это никак не повлияет на существование файла, являющегося жесткой ссылкой. Структура inode содержит счетчик, использующийся для подсчета количества жестких ссылок на нее. В момент, когда значение счетчика уменьшается до нуля, содержимое структуры inode очищается.

Читайте также:  Set echo on linux

Вы можете использовать утилиту find для поиска файлов с определенными идентификаторами структур inode. В примере ниже показана методика поиска всех имен файлов, которые соответствуют структуре inode с идентификатором 817270. Помните о том, что идентификатор структуры inode является уникальным для используемого раздела диска.

paul@RHELv4u4:~/test$ find / -inum 817270 2> /dev/null /home/paul/test/file2 /home/paul/test/hardlink_to_file2

Символьные ссылки

Символьные ссылки (иногда называемые мягкими ссылками ) не указывают на структуры inode, а являются соответствиями между именами файлов. Символьные ссылки создаются с помощью команды ln -s . Как вы можете увидеть в примере ниже, символьная ссылка имеет собственную структуру inode.

paul@RHELv4u4:~/test$ ln -s file2 symlink_to_file2 paul@RHELv4u4:~/test$ ls -li итого 32 817273 -rw-rw-r-- 1 paul paul 13 фев 5 17:06 file1 817270 -rw-rw-r-- 2 paul paul 147 фев 5 17:04 file2 817268 -rw-rw-r-- 1 paul paul 0 фев 5 15:38 file3 817270 -rw-rw-r-- 2 paul paul 147 фев 5 17:04 hardlink_to_file2 817267 lrwxrwxrwx 1 paul paul 5 фев 5 16:55 symlink_to_file2 -> file2 paul@RHELv4u4:~/test$

Права доступа к символьной ссылке не имеют значения, так как в итоге будут учитываться права доступа к целевому файлу. Жесткие ссылки ограничены своими разделами дисков (ввиду того, что они указывают на структуры inode), в то время, как символьные ссылки могут указывать на какие угодно файлы (из других файловых систем, даже сетевых).

Удаление ссылок

paul@laika:~$ touch data.txt paul@laika:~$ ln -s data.txt sl_data.txt paul@laika:~$ ln data.txt hl_data.txt paul@laika:~$ rm sl_data.txt paul@laika:~$ rm hl_data.txt

Практическое задание: ссылки на файлы

1. Создайте два файла с именами winter.txt и summer.txt, поместите какие-либо текстовые данные в них.

2. Создайте жесткую ссылку на файл winter.txt с именем hlwinter.txt.

3. Выведите информацию об идентификаторах структур inode, соответствующих этим трем файлам, жесткие ссылки должны использовать структуры inode файлов, на которые они ссылаются.

4. Используйте утилиту find для вывода информации о файлах, на которые установлены жесткие ссылки.

Читайте также:  Узнать свой пароль linux mint

5. Все данные файла, помимо двух типов данных, хранятся в соответствующей структуре inode. Назовите эти два типа данных!

6. Создайте символьную ссылку на файл summer.txt с именем slsummer.txt.

7. Найдите все файлы с идентификатором структуры inode, равным 2. Какой вывод вы можете сделать на основе полученной информации?

8. Исследуйте директории /etc/init.d/ /etc/rc.d/ /etc/rc3.d/ . обнаружили ли вы ссылки на файлы в них?

9. Выведите список файлов директории /lib с помощью команды ls -l.

10. Используйте утилиту find для поиска в вашей домашней директории обычных файлов, на которые не установлено (!) ни одной жесткой ссылки.

Корректная процедура выполнения практического задания: ссылки на файлы

1. Создайте два файла с именами winter.txt и summer.txt, поместите какие-либо текстовые данные в них.

echo холодно > winter.txt ; echo жарко > summer.txt

2. Создайте жесткую ссылку на файл winter.txt с именем hlwinter.txt.

3. Выведите информацию об идентификаторах структур inode, соответствующих этим трем файлам, жесткие ссылки должны использовать структуры inode файлов, на которые они ссылаются.

ls -li winter.txt summer.txt hlwinter.txt

4. Используйте утилиту find для вывода информации о файлах, на которые установлены жесткие ссылки.

5. Все данные файла, помимо двух типов данных, хранятся в соответствующей структуре inode. Назовите эти два типа данных!

Имя файла, которое хранится в файле директории и данные файла, которые хранятся где-либо на диске.

6. Создайте символьную ссылку на файл summer.txt с именем slsummer.txt.

ln -s summer.txt slsummer.txt

7. Найдите все файлы с идентификатором структуры inode, равным 2. Какой вывод вы можете сделать на основе полученной информации?

Можно сделать вывод о том, что в рамках системы существует более одной таблицы структур inode (по одной для каждого отформатированного раздела + виртуальные файловые системы).

8. Исследуйте директории /etc/init.d/ /etc/rc.d/ /etc/rc3.d/ . обнаружили ли вы ссылки на файлы в них?

ls -l /etc/init.d ls -l /etc/rc.d ls -l /etc/rc3.d

9. Выведите список файлов директории /lib с помощью команды ls -l.

10. Используйте утилиту find для поиска в вашей домашней директории обычных файлов, на которые не установлено (!) ни одной жесткой ссылки.

Предыдущий раздел: Оглавление Следующий раздел:
Глава 32. Списки контроля доступа Приложение A. Раскладки клавиатуры

Источник

Оцените статью
Adblock
detector