как посмотреть символьные ссылки linux

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

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

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

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

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

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

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

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

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

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

Рассмотрим опции утилиты:

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

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

mkdir test && cd test

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

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

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

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

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

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

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

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

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

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

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

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

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

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

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

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

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

ln source hardlink

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

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

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

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

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

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

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

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

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

Выводы

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

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

Источник

Как вывести список всех символических ссылок в каталоге Linux

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

Из пары способов перечислить все символические ссылки в каталоге Linux, мы рассмотрим самый надежный и лучший способ, используя команду find.

Список всех символических ссылок с помощью команды поиска

Команда «Найти» пригодится при поиске любого типа файла или папки в операционной системе Linux.

Синтаксис

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

В приведенной выше команде

— это место или имя каталога, в котором вы хотите искать символическую ссылку,

-type ссылается на тип файла,

while l представляет тип файла ссылки.

Хорошо, давайте посмотрим на примеры и посмотрим, как мы можем получить список символических ссылок по-разному, рассмотрев пару примеров:

Примеры

Используя команду find, мы можем перечислить символические ссылки из всей файловой системы или в определенном каталоге. Давайте посмотрим на каждый пример:

Список всех символических ссылок из всей файловой системы

Чтобы вывести список всех символических ссылок из всей файловой системы, вы можете выполнить следующую команду поиска, указав «/» в качестве пути:

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

Символ «/» в приведенной выше команде представляет всю файловую систему, а команда find будет искать символические ссылки по всей системе и выводить их список в терминале.

Список всех символических ссылок в текущем рабочем каталоге

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

В приведенной выше команде символ «.» сообщает команде find найти символические ссылки в текущем рабочем каталоге.

Список всех символических ссылок в любом каталоге

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

Команда find будет искать символические ссылки только в каталоге / var / www / и перечислять все символические ссылки в этом каталоге.

Список всех символических ссылок в каталоге с помощью флага Maxdepth

Вы могли заметить, что все вышеперечисленные команды отображали символические ссылки в нужном каталоге. А также отображали все символические ссылки из подкаталогов.

Итак, что, если вы не хотите вдаваться в подробности? Вы просто хотите иметь символические ссылки в указанном каталоге. Решение этой проблемы не в ракетостроении, и мы можем быстро указать глубину, используя флаг maxdepth.

Например, чтобы установить глубину поиска на один уровень, команда find будет выглядеть так:

Вы можете увидеть результат, показанный на скриншоте выше. Команда find показала только символические ссылки текущего рабочего каталога вместо всех подкаталогов.

Заключение

В этом посте представлено несколько способов и дается краткое объяснение того, как перечислить все символические ссылки в файловой системе Linux или в конкретном каталоге Linux. Используя команду find, мы научились находить и перечислять все символические ссылки и устанавливать максимальный уровень глубины с помощью флага maxdepth. Если вы хотите узнать больше о команде find, не стесняйтесь читать справочную страницу find с помощью команды «man find».

Источник

IT Blog. Code Inside

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

Создание, просмотр и удаление символьных (символических) ссылок в Linux

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

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

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

Создание символьной ссылки

Просмотр символьной ссылки

Посмотреть, куда ведет символьная ссылка можно командой:

В результате выполнения команды в поле stat будет показан символ l (link).

как посмотреть символьные ссылки linux. Смотреть фото как посмотреть символьные ссылки linux. Смотреть картинку как посмотреть символьные ссылки linux. Картинка про как посмотреть символьные ссылки linux. Фото как посмотреть символьные ссылки linux

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

Удаление символьной ссылки

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

При удалении символьной ссылки на каталог следует учитывать, что записывать команду без слеша в конце, иначе bash выдаст ошибку «невозможно удалить ссылку: Это не каталог».

Источник

Основы Linux от основателя Gentoo. Часть 1 (3/4): Ссылки, а также удаление файлов и директорий

Третий отрывок из перевода первой части руководства. Предыдущие: первый, второй.

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

Создание ссылок и удаление файлов

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

Мы уже упоминали термин «ссылка», когда рассказывали о взаимоотношениях между директориями (их именами) и инодами (индексным номерами, лежащими в основе файловой системы, которых мы не замечаем). Вообще в Linux существует два типа ссылок. Тип, о котором мы уже говорили ранее, называется «жесткие ссылки». Каждый инод может иметь произвольное число жестких ссылок. Когда уничтожается последняя жесткая ссылка, и не одна программа не держит файл открытым, то Linux автоматически удаляет его. Новые жесткие ссылки можно создать воспользовавшись командой ln:

Как видите, жесткие ссылки работают на уровне инодов, для указания конкретного файла. В Linux системах, для жестких ссылок есть несколько ограничений. В частности, можно создавать жесткие ссылки только на файлы, не на директории. Да-да, именно так; хотя «.» и «..» являются созданными системой жесткими ссылками на директории, вам (даже от имени пользователя «root») не разрешается создавать любые свои собственные. Второе ограничение жестких ссылок состоит в том, что нельзя связать ими несколько файловых систем. Это значит, что у вас не получится создать жесткую ссылку с /usr/bin/bash на /bin/bash и если ваши директории / и /usr находятся в разных файловых системах (разделах — прим. пер.).

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

В практике, символьные ссылки (или символические, иногда «симлинки» — от англ.) используются гораздо чаще, чем жесткие. Симлинки — это файлы особого типа, которые ссылаются на другие файлы по имени, а не прямо по номеру инода. Они не спасают файлы от удаления; если файл, на который указывает ссылка, исчезает, то симлинк перестает работать, ломается.

Симлинки детально

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

Предположим, что мы хотим создать ссылку в /tmp, которая указывает на /usr/local/bin. Нам следует набрать:

Либо, альтернативный вариант:

Как вы видите, обе символические ссылки указывают на одну директорию. Однако, если наша вторая символьная ссылка когда-нибудь будет перемещена в другую директорию, то она может «поломаться» из-за относительности пути:

$ mkdir mynewdir
$ mv bin2 mynewdir
$ cd mynewdir
$ cd bin2
bash: cd: bin2: No such file or directory

Потому, что директории /tmp/usr/local/bin не существует, мы больше не можем переместиться в bin2; другими словами, bin2 сейчас сломана.

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

От имени суперпользователя мы хотим короткий синоним для keychain, такой, как kc. В этом примере у нас есть root-доступ, о чем свидетельствует измененное на «#» приветствие bash. Нам нужен root-доступ потому, что обычные пользователи не имеют прав создавать файлы в /usr/bin. От имени суперпользователя мы можем создать альтернативное имя для keychain следующим образом:

В этом примере мы создали символьную ссылку под названием kc, которая указывает на файл /usr/bin/keychain.

Пока это решение будет работать, но создаст проблему, если мы решим переместить оба файла, /usr/bin/keychain и /usr/bin/kc в /usr/local/bin:

Поскольку мы использовали абсолютный путь для символической ссылки kc, то она все еще ссылается на /usr/bin/keychain, которого не существует с тех пор как мы переместили /usr/bin/keychain в /usr/local/bin.

Это привело к тому, что симлинк kc сейчас не работает. Как относительные, так и абсолютные пути в символьных ссылках имеют свои достоинства, и, в зависимости от вашей задачи, нужно использовать соответствующий тип пути. Часто, и относительный, и абсолютный путь, будут работать одинаково хорошо. Пример ниже будет работать, даже после перемещения обоих файлов:

Теперь, мы можем запустить программу keychain набрав /usr/local/bin/kc. /usr/local/bin/kc указывает на программу keychain в той же директории, где находится kc.

Итак, мы знаем как использовать cp, mv и ln, настало время узнать о том, как можно удалять объекты из файловой системы. Обычно это делается с помощью команды rm. Чтобы удалить файлы, просто укажите их в командной строке:

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

rmdir

Для удаления директорий у вас имеется два варианта. Вы можете удалить все объекты внутри директории и затем воспользоваться rmdir для удаления самой директории:

$ mkdir mydir
$ touch mydir/file1
$ rm mydir/file1
$ rmdir mydir

Самый лучший способ удалить директорию состоит в использовании опций «рекурсивного принуждения» (recursive force) команды rm, чтобы приказать ей удалять указанную директорию, также как и объекты содержащиеся внутри:

Об авторах

Daniel Robbins

Дэниэль Роббинс — основатель сообщества Gentoo и создатель операционной системы Gentoo Linux. Дэниэль проживает в Нью-Мехико со свой женой Мэри и двумя энергичными дочерьми. Он также основатель и глава Funtoo, написал множество технических статей для IBM developerWorks, Intel Developer Services и C/C++ Users Journal.

Chris Houser

Крис Хаусер был сторонником UNIX c 1994 года, когда присоединился к команде администраторов университета Тэйлора (Индиана, США), где получил степень бакалавра в компьютерных науках и математике. После он работал во множестве областей, включая веб-приложения, редактирование видео, драйвера для UNIX и криптографическую защиту. В настоящий момент работает в Sentry Data Systems. Крис также сделал вклад во множество свободных проектов, таких как Gentoo Linux и Clojure, стал соавтором книги The Joy of Clojure.

Aron Griffis

Эйрон Гриффис живет на территории Бостона, где провел последнее десятилетие работая в Hewlett-Packard над такими проектами, как сетевые UNIX-драйвера для Tru64, сертификация безопасности Linux, Xen и KVM виртуализация, и самое последнее — платформа HP ePrint. В свободное от программирования время Эйрон предпочитает размыщлять над проблемами программирования катаясь на своем велосипеде, жонглируя битами, или болея за бостонскую профессиональную бейсбольную команду «Красные Носки».

Источник

Фундаментальные основы Linux. Часть VIII. Механизмы безопасной работы с файлами

Глава 33. Ссылки на файлы

Структуры inode

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

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

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

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

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

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

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

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

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

Поиск жестких ссылок

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *