В этой лекции мы обсудим inodes и жесткие ссылки. Каждый файл на диске имеет структуру данных, называемую
индексным узлом или связанным с ним индексным узлом, которая имеет фиксированную длину.
Эта структура хранит информацию метаданных о файле, такую ​​как тип, разрешение файла, владелец и
группа файла, информация о временной метке, размер файла и так далее.
Вы можете увидеть большую часть информации, хранящейся в индексном дескрипторе файла, в выводе команды ls -l.
Структура индексного дескриптора содержит всю информацию о файле, за исключением его содержимого и имени. Каждый индексный дескриптор
уникально идентифицируется целым числом, называемым номером индексного дескриптора. Чтобы увидеть его, запустите ls с параметром -i.
Вы также можете комбинировать его с другими параметрами.
Да, вы меня правильно поняли, имя файла и его содержимое не являются частью Inode. В структуре
inode
есть только некоторые указатели на блоки данных, в которых сохраняется содержимое файла.
Но где имя файла, если его нет в
структуре inode файла ? Имя файла - это запись в каталоге.
Обычно каталоги представляют собой таблицы с двумя столбцами, где первый столбец - это имя файла, а второй
- номер Inode.
Примерно так, это столбец, а это другой.
Это упрощенный подход, но я думаю, вам стоит его понять. Я создаю новый
файл с помощью сенсорной команды.
Когда я обратился к файлу, например, cat a.txt, он будет искать в текущем каталоге
соответствующий номер Inode a.txt для этого номера.
Имея этот номер, ядро ​​может идентифицировать файл и всю информацию о нем. Итак, в
заключение,
имя файла не принадлежит файловой структуре.
Это просто строка, и указание между файловой структурой и именем файла происходит через
структуру данных каталога, содержащего имя файла.
Связь между файловой структурой и именем файла называется жесткой связью.
На самом деле это жесткая ссылка. В текущем каталоге с этим номером
был связан файл a.txt . Кстати, вот что означает эта 1.
Значит 1 жесткая ссылка.
У вас может быть больше ассоциаций, и я имею в виду имена одной и той же файловой структуры на диске, поэтому к одному и тому же файлу
можно получить доступ через множество имен в одном и том же каталоге или разных. Чтобы увидеть количество жестких ссылок,
выполните команду ls -l или stat.
Этот обычный файл имеет одну жесткую ссылку.
Вы можете создать новую жесткую ссылку, выполнив команду ln.
ln взято из ссылки.
На данный момент файл с именем a.txt имеет только одну жесткую ссылку, потому что есть одно имя, указывающее
на структуру inode. Чтобы создать новую ссылку на ту же файловую структуру,
я запускаю ln, существующее имя и новое имя: ln a.txt b.txt
Итак, фактически я создал новое имя файла для той же файловой структуры.
Мы видим, что оба файла имеют одинаковый номер inode и количество жестких ссылок теперь равно 2.
Обратите внимание, что b.txt не является копией a.txt.
Информация на диске сохраняется только один раз, и оба файла указывают на одни и те же данные.
Если я изменю один из них, другой тоже будет изменен.
Например, я использую направление: ifconfig> a.txt
Я меняю a.txt
Я перенаправил вывод команды в файл.
Другое имя файла той же структуры имеет такое же содержимое.
Это то же самое.
Вы также можете напрямую создать жесткую ссылку в другом.
Например, ln, существующий файл, b.txt, а затем вы жестко связываете mybackup / c.
txt
Теперь есть 3 жесткие ссылки или 3 имени на одну и ту же файловую структуру на диске.
Понимаете, есть 3 ссылки.
И это тот же номер Inode.
Если вы удаляете файл с помощью rm, то удаляется только запись из каталога, содержащего файл,
а счетчик ссылок индексного дескриптора уменьшается.
Только когда он достигает нуля, дисковое пространство, связанное с inode и сам inode, освобождается
для дальнейшего повторного использования.
Я удаляю a.txt
У них одинаковый номер Inode по количеству жестких ссылок
2. Вы знаете, что есть две жесткие ссылки для файла, на который указывает .txt, и хотите узнать
вторую. Предположим, вы не знаете, что
c.txt в mybackup - жесткая ссылка. Для этого
используйте команду find с параметром
-inum: например.
Найдите текущего директора Inum и
номер Inode.
И нашел все ссылки.
Также обратите внимание, что вы не можете создать жесткую ссылку на каталог или жесткую ссылку на файл в другом разделе
или на другом диске. Жесткая ссылка не может пересекать границы файловой системы.
Давайте попробуем создать жесткую ссылку на / etc жесткую ссылку,
не разрешенную для каталога.
Однако, если вы запустите команду ls -l в таком каталоге, вы заметите очень большое
количество ссылок.
В каталоге / etc 130 жестких ссылок.
Может быть, вам интересно, как это возможно.
И ответ в том, что есть 130 имен одной и той же структуры, каталога / etc.
Одна - это и т.д.,
другая ссылка - это DOT, которая принадлежит каждому каталогу, и ее ссылка на себя, эта
.
Это вторая ссылка.
Кроме того, есть 128 подкаталогов, и каждый из них содержит двойную точку, которая является ссылкой
на своего родителя.
Итак, в данном случае, в и т. Д.
Если я возьму что-то прямо из / etc, например, этот, и я запустил ls-lia
и каталог, вы заметите там двойную точку, вот этот; это по факту и т.д.
Так что еще одна жесткая ссылка.
Это номер inode, который равен номеру inode файла / etc.
Это тот же номер.
Одним из полезных применений жестких ссылок является обеспечение простого доступа к файлам, программам и сценариям
в другом каталоге без создания копий одного и того же файла.
А если вы хотите найти файлы по количеству жестких ссылок, используйте команду find с опцией
t-links .
Давайте найдем все файлы в / usr с более чем одной ссылкой:
find / usr -type f -links +1
Все эти файлы имеют более одной ссылки.
Добавим параметр -ls.
5 жестких ссылок 10 жестких ссылок 3 и так далее.
Число всегда больше 1. Помимо жестких ссылок существует еще один тип ссылки, называемый softlink,
символическая ссылка или символическая ссылка.
Мы сделаем небольшой перерыв и в следующей лекции обсудим символические ссылки.