Размер жесткой ссылки linux

Символические и жесткие ссылки Linux

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

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

Символические ссылки

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

Вот основные особенности символических ссылок:

  • Могут ссылаться на файлы и каталоги;
  • После удаления, перемещения или переименования файла становятся недействительными;
  • Права доступа и номер inode отличаются от исходного файла;
  • При изменении прав доступа для исходного файла, права на ссылку останутся неизменными;
  • Можно ссылаться на другие разделы диска;
  • Содержат только имя файла, а не его содержимое.

Теперь давайте рассмотрим жесткие ссылки.

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

Этот тип ссылок реализован на более низком уровне файловой системы. Файл размещен только в определенном месте жесткого диска. Но на это место могут ссылаться несколько ссылок из файловой системы. Каждая из ссылок — это отдельный файл, но ведут они к одному участку жесткого диска. Файл можно перемещать между каталогами, и все ссылки останутся рабочими, поскольку для них неважно имя. Рассмотрим особенности:

  • Работают только в пределах одной файловой системы;
  • Нельзя ссылаться на каталоги;
  • Имеют ту же информацию inode и набор разрешений что и у исходного файла;
  • Разрешения на ссылку изменяться при изменении разрешений файла;
  • Можно перемещать и переименовывать и даже удалять файл без вреда ссылке.

Использование ссылок в Linux

Теоретические отличия вы знаете, но осталось закрепить все это на практике, поэтому давайте приведем несколько примеров работы со ссылками в Linux. Для создания символических ссылок существует утилита ln. Ее синтаксис очень прост:

$ ln опции файл_источник файл_ссылки

  • -d — разрешить создавать жесткие ссылки для директорий суперпользователю;
  • -f — удалять существующие ссылки;
  • -i — спрашивать нужно ли удалять существующие ссылки;
  • -P — создать жесткую ссылку;
  • -r — создать символическую ссылку с относительным путем к файлу;
  • -s — создать символическую ссылку.
Читайте также:  Build boost for linux

Создание символических ссылок

Сначала создайте папку test и перейдите в нее:

Затем создайте файл с именем source с каким-либо текстом:

echo «текст текст текст текст» > source
$ cat source

Файл готов, дальше создадим символическую ссылку Linux, для этого используется команда ln с опцией -s:

Попробуем посмотреть содержимое файла по ссылке:

Как видите, нет никакой разницы между ней и исходным файлом. Но утилита ls покажет что это действительно ссылка:

Несмотря на то, что содержимое одинаковое, здесь мы видим, что адрес иноды и права доступа к файлам отличаются, кроме того, явно показано что это символическая ссылка Linux.

Теперь удалите исходный файл и посмотрите что будет:

Вы получите ошибку, что такого файла не существует, потому что мы действительно удалили исходный файл. Если вы удалите ссылку, то исходный файл останется на месте.

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

Снова создайте файл source с произвольным текстом:

echo «текст текст текст текст» > source
$ cat source

Теперь создадим жесткую ссылку Linux. Для этого достаточно вызвать утилиту без параметров:

Посмотрите содержимое файла:

Данные те же самые, а если мы посмотрим вывод утилиты ls, то увидим что inode и права доступа тоже совпадают:

Если для одного из файлов поменять разрешения, то они изменяться и у другого. Теперь удалите исходный файл:

Затем посмотрите содержимое:

Как видите, ничего не произошло и ссылка по-прежнему указывает на нужный участок диска, это главное отличие жесткой ссылки от символической. Мы можем сделать вывод, что жесткая ссылка linux это обычный файл. Каждый файл имеет как минимум одну ссылку, но для некоторых мы можем создать несколько ссылок.

Выводы

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

На завершение видео про ссылки в Linux:

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Размер файла жесткой ссылки

Читал статью, в которой было написано следующее, цитирую:

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

Пруф. Так вот решил проверить правда это или нет. Взял для наглядности mp3-файл и сделал жесткую ссылку на него в другой папке. Изначально файл весил 14 Мб, а при указании ссылки два эти файла в сумме стали весить 28 Мб. Так вот противоречие получается в указанной выше цитате, файл с жесткой ссылкой занимает тот же объем, что и оригинальный файл.

Читайте также:  Amd pro driver linux

ну-ка, сюда свой эксперимент давай. как мерял, всё с точностью до команды.

гы-гы, а еще можно у каждого из трех единокровных братьев спросить: «сколько у тебя отцов?», и когда каждый ответит: «один», просуммировать их, и сказать, что в семье три отца

Если ты на одной бумажке запишешь что у тебя в банке есть 14M$ и на другой бумажке запишешь тоже самое, то в сумме по этим бумажкам у тебя 28M$, а на деле как было 14, так и осталось.

➜ hard ln ../origin/sound.m4a ➜ hard ls -lahi ../origin/sound.m4a 10959401 -rw-r--r--@ 3 skyboy staff 13M 19 апр 16:41 ../origin/sound.m4a ➜ hard ls -lahi sound.m4a 10959401 -rw-r--r--@ 3 skyboy staff 13M 19 апр 16:41 sound.m4a 

Сижу я на OS X, но это в данном случае не должно иметь какого-либо значения.

Понятно, что цитата не корректная. Не файл остаётся в единственном числе, а его данные. И не размер файлов надо смотреть, а свободное место в файловой системе, до и после создания hard link.

при создании жестких ссылок расходуются иноды. камент про бумажки близок к истине 🙂

т.е. вы хотите сказать, что цифры отображающие размер файл, это все лишь фикция?

Не надо играть словами. Нет у файла «его данных» — данные это и есть файл (inode как начальный указатель). У файла есть имена (указывающие на inode) — вот о них речь как об доп. указателях (ссылках)

sdio ★★★★★ ( 30.04.14 16:52:26 MSK )
Последнее исправление: sdio 30.04.14 16:54:21 MSK (всего исправлений: 1)

Сделай 100 хардлинков на один большой файл и посмотри df на эту ФС, увидишь что место на диске не расходуется.

sdio ★★★★★ ( 30.04.14 16:53:21 MSK )
Последнее исправление: sdio 30.04.14 16:55:26 MSK (всего исправлений: 2)

Нет. Только запись в директории.

skyboy , читай тута: http://teaching.idallen.com/dat2330/04f/notes/links_and_inodes.html

For each inode, no matter whether the inode is a directory or a file inode, a link count in the inode keeps track of how many directories contain a name-number mapping for that inode. If an inode has only one name-number map (only one name), its link count is one. If the inode has two name-number maps (two names), its link count is two.

Действительно вы правы. Ради эксперимента, взял фильм весящий 3 Гб, и после создания ссылки, размер доступного пространства не изменился. Спасибо за помощь.

А теперь посмотри вывод du -s и df до и после создания ссылки.

при создании жестких ссылок расходуются иноды

еще один. нет, не расходуются. в inode есть поле «количество ссылок», оно просто инкриментируется и все.

Читайте также:  Linux mint xfce rebecca

спакуха. прочитай мой ответ выше.

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

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

При обращении к файлу по имени драйвер файловой системы знает какие сектора на жёстком диске нужно прочитать, что бы получить файл.

При создании символьной ссылки создаётся запись в таблице, в которой есть имя файла символьной ссылки и есть запись о том, на какой файл (какую запись в таблице) эта ссылка ссылается.

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

Т.е. физически сам файл на диске не копируется, а копируются лишь структуры, описывающие информацию о размещении файла на диске.

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

С точки зрения операционной системы и утилит, которые считают размер файлов жёсткая ссылка это точно такой же файл.

Цифра, отображающая размер файла в вводе ls показывает сколько байт из него может быть прочитано. Эта цифра не показывает сколько байт занимают метаданные файла, кроме того, сующествуют «разряженные» файлы, в которых часть блоков пустые (как бы заполнены нулями) и они не занимают места на файловой системе.

Да как угодно, не надо, так надо. Уже и в техразделах словами играть запрещают 🙂

Если относить содержимое инода к файловой системе, то у файла дейстивтельно нет ничего, кроме данных, а если считать, что содержимое инода это метаданные файла, то получается, что у файла есть метаданные и данные.

вот о них речь как об доп. указателях (ссылках)

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

Источник

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