Символические и жесткие ссылки в linux. команда ln

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

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

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

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

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

Несмотря на возможности, которые предоставляют жесткие ссылки, у них есть ограничения:

  • их можно создавать только на файлы, но не на каталоги;

  • жесткую ссылку нельзя создать на файл, находящийся на другом диске.

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

Поэтому в операционных системах GNU/Linux поддерживается также механизм мягких ссылок. Часто их называют символьными ссылками. Они представляют собой файлы, указывающие не на индексные дескрипторы, а на имена файлов, т. е. на жесткие ссылки. Мягкая ссылка в Linux аналог ярлыка в Windows.

Поскольку жесткая ссылка указывает непосредственно на индексный дескриптор, а мягкая – только на жесткую ссылку, то если удалить все жесткие ссылки файла, то символьная ссылка работать не будет. Она станет «битой».

На рисунке изображена связь между символьными ссылками и именами файла, а также между именами и индексными дескрипторами. Верхний квадрат соответствует индексному дескриптору файла, квадраты со скругленными углами – именам файла, а круги – символьным ссылкам. Индексный дескриптор файла всегда один, а имен может быть множество. Также может существовать неограниченное количество символьных ссылок на каждое имя файла.

При удалении жесткой ссылки, на имя которой ссылалась символьная, последняя не наследует связь с дескриптором и утрачивает свою работоспособность. Если в данном примере удалить жесткую ссылку с именем logotip, то файлы pic1 и tux станут бесполезны, так как открыть файл 555795 с их помощью уже будет нельзя.

Команды Linux, связанные со статистикой

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

mpstat

Команда Mpstat используется для показа статистики процессора и помогает отслеживать загрузку процессора в вашей системе. Это будет более полезно, если ваша система имеет несколько процессоров.

vmstat

Vmstat — это инструмент, который предоставляет отчеты о статистике виртуальной памяти. Он охватывает использование системной памяти, подкачки и процессоров в режиме реального времени.

По умолчанию vmstat работает следующим образом:

iostat

Команда Iostat — это команда, используемая для мониторинга загрузки устройств ввода-вывода (I/O). Путем наблюдения за временем активности устройств по отношению к их средним скоростям передачи.

tcpdump

Tcpdump — это команда устранения неполадок в сети, которая также известна как анализатор пакетов, используется для захвата и отображения пакетов из сети. Для выполнения команды tcpdump вам требуется root или пользователь с правами sudo.

lsof

Команда Lsof расшифровывается как «Список открытых файлов». Чрезвычайно полезно узнать подробную информацию об открытых файлах и соответствующих процессах.

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

Получение информации о системе

df

— отчет об использовании пространства дисковых накопителей.

df 

df -h
— вывод отчета в удобном виде.

du

— отображение дискового пространства, занятого файлами и каталогами.

du 

du -ah /home/janedoe
— отображение размера файлов и каталогов.

du -sh /home/janedoe
— отображение общего размера всех файлов и каталогов.

du -h -d0 *.txt /home/janedoe
— отображение размера только текстовых файлов без заглядывания в подкаталоги (-d0).

du —time -h /home/janedoe
— дополнить вывод временем последнего изменения файла.

free

— отображение занятого пространства оперативной памяти.

free 

free -mt
— занятая оперативная память в мегабайтах со строкой Total.

free -th -s1
— отображение результата каждую секунду.

watch free
— отображение занятой оперативной памяти в реальном времени.

hostname
— имя текущего хоста.

iostat

— статистика использования CPU и операций ввода/вывода.

iostat 

iostat -m
— выводить статистику в мегабайтах.

iostat -N
— вывод имен устройств в статистике.

iostat -p sda
— вывод статистики для группы блочных устройств.

iostat -x
— вывод расширенной статистики.

screenfetch
— информация о системе (не везде предустановлена).

uptime
— время прошедшее после запуска системы.

uname

— информация об ОС.

uname 

uname -a
— полная информация об ОС.

vmstat

— информация об использовании виртуальной памяти.

vmstat 

vmstat 2
— обновление данных каждые 2 секунды.

vmstat -d
— статистика использования дисков.

Использование команды ln

ln … TARGET LINK_NAME.

В данном случае ln создает ссылку на файл TARGET с именем LINK_NAME. Для примера создадим простой текстовый файл:

Чтобы на файл test.txt создать ссылку с именем test.txt.link необходимо выполнить:

Проверим, что у нас получилось:

Если теперь посмотреть содержимое файла test.txt.link, то увидим, что оно аналогично исходному:

Надо отметить, что по умолчанию ln создает жесткие ссылки – это ссылки на файл (создавать жесткие ссылки на директории нельзя), которые обладают следующими особенностями:

  • имеют такие же права и разрешения, что и у исходного файла
  • права и разрешения у жесткой ссылки изменяются вместе с правами и разрешениями исходного файла
  • переименование, перемещение и удаление файла не влияют на жесткие ссылки

ln … TARGET

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

ln … TARGET … DIRECTORYln … -t DIRECTORY TARGET …

В последних двух случаях Linux утилита ln создаст ссылки для каждой TARGET в DIRECTORY. Для примера создадим директорию include в текущем каталоге:

У нас получится следующая структура:

Теперь мы можем создать для обоих файлов test.txt и test.txt.link ссылки в директории include одной командой:

Проверим содержимое этой директории:

Ссылки на файл в Linux

Большая часть юзеров компов хотя бы раз сталкивались с работой в платформе Windows. Там указателями на файлы выступают ярлычки. После воззвания к такому объекту происходит автоматическое перенаправление на уникальный файл. В Linux это делают особые ссылки, создающиеся пользователем вручную. Было создано два типа таких частей — символические и жесткие. Они имеют значимые отличия, потому стоит разглядеть каждый тип более детально.

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

Символическая ссылка — файл определенного типа, который выступает в роли линка на другой объект — файл хоть какого формата либо определенный каталог. Обычно такие объекты именуют мотивированными. Время от времени вы сможете увидеть, что таковой тип ссылок именуют soft links либо sym-link. Таковой элемент не содержит внутри себя данных цели, а только выступает указателем, другими словами является полной копией ярлычка из Виндовс. Снутри symbolic link находится только путь. Никто не воспрещает вам сделать огромное количество схожих линков с различными именами, но одним и этим же мотивированным объектом. Связь меж 2-мя составляющими именуется мягенькой, так как при удалении ссылки мотивированной файл никаким образом не мучается. Но при удалении файла ссылка становится нерабочей. Она сохраняется на диске, но обозначенный в ней путь ведет уже к несуществующему объекту.

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

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

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

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

Как использовать команду ln в Linux

http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>style=»clear:both;»>

Функция команды ln — создать соединение, аналогично ярлыку под окнами.

Синтаксис следующий:

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

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

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

1. Вы можете использовать файл плюс как соединение

2. Вы можете соединять файлы в сети через файловые системы.

Жесткая ссылка: операционная система linux присваивает каждому файлу номер, который называется индексом inode. Создание жесткой ссылки фактически создает несколько «имен / путей» для одного и того же файла, то есть жестко связанный файл удаляется или его имя После изменения подключенный файл все еще может получить доступ к этому файлу.

eg:

Сначала создайте файл 1.txt

Затем создайте 3 жестких ссылки и используйте ls -li для просмотра, вы увидите, что индекс предыдущего узла (первое красное поле) такой же, а количество жестких ссылок равно 4

Жесткая ссылка предотвращает случайное удаление, поскольку сам файл также является жесткой ссылкой. Когда файл 1.txt удален, доступ к 1_bak1.txt все еще возможен, то есть к файлу 1.txt в это время (точнее, к файлу с номером узла 67190165) Он не удалялся физически, но соответствующее этому файлу имя 1.txt было удалено! При удалении 3 файлов 1_bak1.txt, 1_bak2.txt и 1_bak3.txt файл с номером узла 67190165 будет удален физически!

Интеллектуальная рекомендация

1: Что такое среда Python? Для запуска программы на Python в системе, вам необходимо установить интерпретатор Python, чтобы объяснить программу Python, все мы знаем, что Python используется для создан…

Strange fuction Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11746 Accepted Submission(s): 7841 Problem Description Now, here is a fuction: F(x…

1, установить CentOS 7 скачать монтаж Изменить статическое, переходное или гибкое имя хоста в Node1 Изменить / etc / sysconfig / network следующим образом: Изменение / etc / sysconfig / сетевые сценар…

Установить артефакт: https://www.lfd.uci.edu/~gohlke/pythonlibs/ Например, установка mysql-python напрямую через pip install mysql-python часто приводит к ошибкам.   Найдите «mysql-python&qu…

Использование строк и классических примеров PAT Уровень B 1033 1. Найдите целевую строку в известной строке, найдите строку в строковой операции имеет в строковом классеstring.find()Метод предоставляе…

Вам также может понравиться

1. Установите svn на сервер Если он установлен, проверьте версию командой 2. Создайте склад Здесь мы создадим репозиторий с именем svn (здесь я назван в честь проекта компании) в / home. Все будущие к…

Вход Анализ с точки зрения использования, начиная с LivePagedListBuilder Пример кода создания LivePagedListBuilder: -> Введите метод build () Создать и вернуть вызов .getLiveData () в ComputableLiv…

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

Node.js Версия: 12.15.0.   Плагин установки и перезагрузить его.     Конфигурация пользователя второй добавки и выводит результаты выполнения в терминале.   Настройки -> Настрой…

Рисование мини-программы эффект js рисовать плакат…

Жесткая ссылка – не копия!

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

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

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

В случае мягких ссылок, хоть и создается новый файл (с собственным индексным дескриптором), но он не содержит данных файла-оригинала, а лишь содержит запись адреса другого файла. Символьная ссылка – особый тип файла Linux.

створення посилань

Перейдемо від теорії до практики і поговоримо про головну тему статті — команді ln. Як ви вже знаєте, вона використовується для створення двох типів посилань. Однак варто зауважити, що деякі файлові менеджери мають вбудовану функцію по додаванню символічного линка. Для цього потрібно клацнути ПКМ по файлу або папці і вибрати пункт «Створити посилання», «Create Link» або «Make Link». Тоді soft link буде поміщений в цей же каталог, а ви можете перемістити його в будь-яке інше місце на накопичувачі.

Для початку варто згадати додаткові дії, які часто стають корисними при здійсненні різних дій з файлами. Важливо знати шлях до цільового об’єкту або вміти його визначити. Що стосується визначення, відбувається воно так:

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

Тут знайдете в каталогах необхідний файл або папку, через правий клік миші виберіть пункт «Властивості».

У розділі «Основні» ви знайдете розташування батьківської папки, додайте до нього назву елемента, щоб отримати повний шлях, наприклад, .

Якщо ви збираєтеся створювати кілька лінків для файлів з однієї директорії, радимо перейти до неї через «Термінал». Робиться це шляхом введення . Така дія дозволить вказувати тільки відносний шлях до об’єкта.

символічна посилання

Розглянемо утиліту ln в дії. Почнемо зі створення символічного посилання на файл. Для цього скористайтеся стандартною консоллю і виконайте такі дії:

  1. Впишіть , де file — ім’я або повний шлях до файлу або директорії, а slink — назва посилання. Вона буде поміщена в той же каталог, де і знаходиться цільовий об’єкт.

Введіть і активуйте , щоб побачити інформацію з приводу знаходяться в каталозі об’єктів. Символічна посилання виділена окремим кольором, а через -> вказана її мета. Як бачите, файл і лінк мають різні ідентифікатори і права.

Для наочності видалимо цільової елемент через .

Після повторного перегляду списку вмісту, ви побачите, що символічний лінк тепер зіпсований і не працює, оскільки цільовий об’єкт був видалений.

Вище ви могли помітити, що для перегляду вмісту папок використовувалася стандартна команда ls. Якщо є бажання ознайомитися з її дією більш детально, зверніть увагу на наш окремий матеріал нижче.

Читайте також: Приклади команди ls в Linux

жорстка посилання

Створення жорсткої посилання багато в чому схоже з тим типом, який ми розглянули вище. Єдина відмінність полягає у відсутності опції -s. Тоді вся процедура буде мати приблизно такий вигляд:

  1. Введіть і активуйте .

Знову використовуйте , щоб переконатися в наявності зв’язки жорсткого линка і файлу. Як бачите, вони мають однаковий ідентифікатор, права і інші метадані. Різні лише імена.

При видаленні самого файлу і перегляді вмісту ви побачите, що посилання залишилася робочої, але при цьому пропала зв’язка.

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

Інформація буде доступна до тих пір, поки не втечуть всі покажчики на неї (вихідний файл і все жорсткі посилання). Команда cat, яка використовується в останньому пункті, відповідає за перегляд вмісту файлів. Детальний опис всіх її можливостей шукайте в статті далі.

Читайте також: Приклади команди cat в Linux

Вище ви були ознайомлені не тільки зі стандартною командою ln, а й дізналися про двох типах доступних посилань на об’єкти в Linux. Звичайно, частіше бувають задіяні символічні лінки, але жорсткі теж іноді стають корисними. Про інших популярних командах в Лінукс можете дізнатися з нашого окремого матеріалу.

Читайте також: Часто використовувані команди в «Терміналі» Linux

Теория

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

А имя файла это всего лишь понятное для человека наименование которое относится к определенному inode.

Каталог — это файл особого типа в котором содержится список имен файлов или других каталогов и указатели на inode для этих файлов.

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

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

Чтобы было понятнее посмотрите на следующий рисунок:

Жесткие и символьные ссылки в Linux

Есть файл с именем test1.txt и он имеет свой уникальный индексный дескриптор (inode 234), который ссылается на набор блоков (набор блоков 1) на жестком диске.

Файл test2.txt это жесткая ссылка. То есть, просто, дополнительное имя файла, которое ссылается на тот же inode что и test1.txt.

Файл test3.txt это символьная ссылка. Этот файл имеет свой индексный дескриптор (inode 465), и обращается к своему набору блоков (набор блоков 2). Этот файл является файлом отдельного типа (символьная ссылка / symbolic link) и в наборе данных у таких файлов записан путь к файлу на который она ссылается. То есть, в файле test3.txt указано что ссылаться нужно на test2.txt. При этом, если удалить файл test2.txt и попробовать прочитать test3.txt то увидим ошибку, так как ссылка не найдет файл на который она ссылается.

Жесткие ссылки в Linux имеют свои ограничения, их можно:

  • создавать только для файлов, а для каталогов нельзя;
  • использовать только в пределах одной файловой системы.

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

Особенность символьных ссылок:

  • удаление ссылки не приведет к удалению файла на который она ссылается;
  • их можно создавать на объекты других файловых систем;
  • их можно создавать и на файлы и на каталоги.

Creating soft links (symlinks) with ln

Let’s start with a really simple example. We create a text file, and then use soft link to reference it.

This shows how the file is created. It’s called file1, and has a line of text data in it which we confirm using cat command:

Now let’s use ln command to create a soft link. The newly created symlink will be a file called file2, and ls command will show you that it points to file1:

If you try accessing the file2, you will ultimately access file1, that’s why the following example shows you the contents of file1:

Now, if you remove file1, this will make file2 symlink invalid, and any attempts to use it will return a “file not found” type of error:

Creating hard links with ln
Now, let’s look at creation of hard links in Unix. For this example, we’ll recreate the file1:

If you use ls to look at file1, you can see that the link counter (second field from the left) is set to 1 – which means that there is only one file name pointing to the data with our “Text file #1” text:

And now we use ln command to create a hard link called file3, which points to the same data as file1:

If we use ls command once again, you can see that the link counter has been increased and is now 2:

Notice, how the file1 and file3 files look like absolutely normal files, and there’s nothing showing a logical link between them.

To confirm that both filenames are actually referring to the same area on the disk, you can use -i option for the ls command, which will show you an i-node value.

i-nodes

i-nodes are data structures of a filesystem used to store all the important properties of each file: size, owner’s user id and group id, access permission and more. The important thing is that each named data area on your disk must have an inode, and when you create a new data file this means creating an i-node. But when you’re using hard links, you’re effectively creating filesystem directory entry, which references an already existing data, so the hard link gets the same i-node number pointing to the same data.

The first number in each line of the output is the i-node number, and since we’re referencing the same data, the i-node numbers are also the same.

Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
IP-файл
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: