3.1.3. Ссылки
3.1.3. Ссылки
В вашей системе могут появиться документы для совместного использования. Рассмотрим эту ситуацию на примере. Допустим, что файл отчетности /home/report должен быть доступен нескольким пользователям. Было бы логично, если копия этого файла находилась бы в домашних директориях этих пользователей. Но создавать несколько копий неудобно, потому что затруднится синхронизация. Да и сложно собрать в одно целое модификации из нескольких файлов, особенно если корректировался один и тот же кусок. Кто будет оценивать, чьи изменения необходимо вносить в общий файл?
Проблема решается с помощью ссылок, которые бывают жесткими (Hard link) и символьными (Symbolic link). Для постижения самой сути ссылок необходимо понимать, что такое файл и какое место ему отводится операционной системой. При создании файла на диске выделяется пространство для хранения данных. Его имя — это всего лишь ссылка из директории на участок диска, где физически находится файл. Получается, что можно создать несколько ссылок на одни и те же данные, и ОС Linux позволяет делать это.
Когда мы выполняем команду ls -l, то на экране появляется подробная информация о файлах в текущей директории. Напомню ее вид:
-rw-r--r-- 1 Flenov FlenovG 118 Nov 26 16:10 1.txt
Если к директиве добавить ключ i (выполнить команду ls -il), то к выводимой информации добавится еще и дескриптор файла:
913021 -rw-r--r-- 1 Flenov FlenovG 118 Nov 26 16:10 l.txt
Первое число и есть дескриптор, по которому определяется физическое расположение файла.
Жесткая ссылка указывает непосредственно на данные и имеет такой же дескриптор. Таким образом, файл физически не удаляется из системы, пока не будут уничтожены все жесткие ссылки. По сути, каждое имя файла уже является жесткой ссылкой на данные.
Для создания таких ссылок используется команда ln, которая имеет следующий вид:
ln имя_файла имя_ссылки
В ответ на это программа создаст жесткую ссылку с именем имя_ссылки, которая будет указывать на те же данные, что и файл имя_файла.
Чтобы на практике проверять все, что будет рассматриваться дальше, создайте в своей системе файл 1.txt. Для этого можно выполнить команду:
cat > 1.txt
Нажмите клавишу <Enter> и введите несколько строк текста и нажмите клавиши <Ctr>+<D>. Теперь у вас есть необходимый файл для тестирования.
Создадим для файла 1.txt жесткую ссылку. Для этого выполните следующую команду:
ln 1.txt link.txt
С помощью команды cat link.txt выведите на экран содержимое файла link.txt и убедитесь, что оно идентично строкам в 1.txt. Теперь выполните команду ls -il, чтобы просмотреть содержимое каталога. В списке файлов должны быть две строки:
913021 -rw-r--r-- 2 root root 0 Feb 22 12:19 1.txt
913021 -rw-r--r-- 2 root root 0 Feb 22 12:19 link.txt
Обратите внимание, что первая колонка, в которой находится дескриптор для обоих файлов, содержит одинаковые значения. В третьей колонке стоит число 2, что говорит о наличии двух ссылок на данные.
Теперь попробуем изменить содержимое любого из этих файлов. Для этого выполним следующие команды:
ls > link.txt
cat 1.txt
В первой строке мы сохраняем в файле link.txt результат работы команды ls (список содержимого директории), а вторая — отображает документ 1.txt. Убедитесь, что содержимое обоих файлов изменилось и имеет одинаковые данные.
Давайте попробуем удалить файл 1.txt и посмотреть на каталог и содержимое файла link.txt. Для этого выполните следующие команды:
rm 1.txt
ls -il
cat link.txt
Файл 1.txt будет удачно удален. А вот содержимое жесткой ссылки link.txt никуда не денется. То есть данные на диске не были уничтожены, а исчезло только имя 1.txt. Обратите внимание, что у файла link.txt в третьей колонке уменьшилось значение счетчика ссылок до единицы.
Символьная ссылка указывает не на данные, а на имя файла. Это дает некоторые преимущества, но одновременно возникает большое количество проблем. Для создания символьной ссылки нужно использовать команду ln с ключом -s. Например:
ln -s link.txt symbol.txt
Посмотрим на результат с помощью команды ls -il:
913021 -rw-r--r-- 1 root root 519 Feb 22 12:19 link.txt
913193 lrwxrwxrwx 1 root root 8 Feb 22 12:40 symbol.txt -> link.txt
Теперь дескрипторы файлов разные, но для link.txt первый символ следующей колонки равен букве "l". Как раз она и указывает на то, что мы имеем дело с символьной ссылкой. Третий параметр равен единице, а последний — после знака "->" содержит имя файла, на который указывает ссылка.
Попробуем удалить основной файл и после этого просмотреть содержимое ссылки symbol.txt:
rm link.txt
ls -il
cat symbol.txt
В первой строке мы удаляем файл link.txt. Вторая команда отображает список директорий. Убедитесь, что файла link.txt нет. Если вы используете Red Hat- дистрибутив, то команда ls, скорей всего, имеет псевдоним, который, позволяет в зависимости от типа файла отображать его различными цветами. Если нет, то замените вторую команду на ls --color=tty -il.
Строка, содержащая информацию о ссылке symbol.txt, должна быть красного цвета, а текст — мигающий белый. Это говорит о том, что ссылка "битая", т.е. указывает на несуществующий файл. Команда cat symbol.txt пытается отобразить содержимое ссылки. Так как файла нет, мы увидим сообщение об ошибке.
Самое интересное, что если попытаться записать какие-либо данные в файл symbol.txt, то файл link.txt будет автоматически создан. Это огромный недостаток, поэтому вы должны следить за символьными ссылками перед удалением файлов.
Второй недостаток символьных ссылок кроется в правах доступа, но мы их будем рассматривать в гл. 4.
Еще один минус таится в блокировках. Если открыть на редактирование файл, для которого создана символьная или жесткая ссылка, то он блокируется. Представим себе, что существует ссылка на файл /etc/passwd или /etc/shadow. При блокировке одного из них вход в систему станет невозможным.
Чтобы взломщик не смог воспользоваться блокировками, его права на запись в системные каталоги должны быть ограничены. А пользователю в большинстве случаев надо давать разрешение писать только в свою домашнюю директорию и каталог /tmp. Иногда при разделении файлов может потребоваться работа с чужими каталогами, но все равно доступ ограничивается каталогом /home, где расположены пользовательские директории.
Глядя на все недостатки ссылок, возникает вопрос — а нужно ли действительно использовать их? Я рекомендую это делать только в крайнем случае, когда все остальные способы решения проблемы еще хуже. Но если нет другого выхода, то делайте это аккуратно.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
Ссылки
Ссылки Осталось рассмотреть еще один момент, связанный с организацией доступа к данным. Это так называемые ссылки — своего рода указатели на массивы и экземпляры объектов (о них будет рассказано далее), хранящиеся в соответствующих им переменных.Когда мы создаем массив,
4.3.Ссылки
4.3.Ссылки Иногда очень полезно, чтобы в каталоге находился один и тот же файл, но под разными именами. Можно просто скопировать этот файл в другой, но при этом неэффективно используется дисковое пространство. Для этих целей в ОС Linux существует специальный тип файлов —
19.6.11 Ссылки
19.6.11 Ссылки Чтобы включить в документ ссылку, нужно:? Использовать теги начала и конца ссылки? Указать URL связанного со ссылкой документа? Обеспечить метку для щелчка мышью (обычно выводится подчеркиванием или голубым цветом).Ниже показан пример ссылки. Символ А
Ссылки
Ссылки Как можно с одной страницы сайта попасть на другую? Ответ прост — при помощи ссылок. На любом сайте есть меню, нажатия на пункты которого обеспечивает переход в нужный раздел. Все пункты меню, как текстовые, так и в виде картинок, являются ссылками. Когда вы задаете
Ссылки
Ссылки На вкладке Ссылки собрано все, что касается расстановки по тексту различных ссылок и
Ссылки
Ссылки Ссылки на книги Джосаттиса и Остерна в предыдущем абзаце дают представление о том, как в этой книге оформляются библиографические ссылки. Как правило, я стараюсь включить в ссылку достаточно информации, чтобы ее узнали люди, уже знакомые с этим трудом. Если вы уже
Ссылки
Ссылки Разработчик Delphi Русскоязычные N Сервер Описание 1 http://www.inprise.ru Российское представительство Inprise Фирма – разработчик
5.7. Ссылки
5.7. Ссылки В Linux допускается, чтобы один и тот же файл существовал в системе под разными именами. Для этого используются ссылки двух типов: жесткие и символические. Первые жестко привязываются к файлу — вы не можете удалить файл, пока на него указывает хотя бы одна жесткая
8.6.3 Ссылки
8.6.3 Ссылки Когда переменная описана как T amp;, то есть «ссылка на тип T», она должна быть инициализирована или объектом типа T, или объектом объектом, который может быть преобразован в T. Ссыка становится другим именем объекта. Например:int i; int amp; r = i; r = 1; // значение i становится 1
2.5. Ссылки
2.5. Ссылки 2.5.1. В программных документах допускаются ссылки на стандарты (кроме стандартов предприятий), технические условия и другие документы (например, документы органов Государственного надзора, правила и нормы Госстроя СССР). При ссылках на стандарты и технические
Ссылки
Ссылки Вы, наверное, слышали о ссылках и гиперссылках? Чем же ссылка отличается от гиперссылки? Честно говоря, ничем. Просто гиперссылка звучит посолиднее. На самом деле, если из контекста понятно, о чем идет речь, то можно употребить слово «ссылка». Если существует некая