Разное

Создание символической ссылки linux: Символические и жесткие ссылки Linux

Содержание

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

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

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

Содержание статьи:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

mkdir test && cd test

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

echo "текст текст текст текст" > source
$ cat source

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

ln -s source softlink

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

cat softlink

Как видите, нет никакой разницы между ней и исходным файлом.

Но утилита ls покажет что это действительно ссылка:

ls -li

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

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

cat softlink

 

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

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

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

echo "текст текст текст текст" > source
$ cat source

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

ln source hardlink

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

cat hardlink

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

ls -li

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

rm source

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

cat hardlink

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

Выводы

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

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

Команды Linux для работы с файлами

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

В этой статье мы рассмотрим самые часто используемые команды Linux для работы с файлами и каталогами, после их освоения терминал больше не будет казаться таким непонятным и объемлемым. Вот какие команды будут нас сегодня интересовать:

  • ls — список файлов в директории;
  • cd — переход между директориями;
  • rm — удалить файл;
  • rmdir — удалить папку;
  • mv — переместить файл;
  • cp — скопировать файл;
  • mkdir — создать папку;
  • ln — создать ссылку;
  • chmod — изменить права файла;
  • touch — создать пустой файл.

А теперь перейдем к подробному рассмотрению всех этих команд.

1. ls — просмотр содержимого папки

Команда ls позволяет вывести список файлов заданной папки, по умолчанию, будет выведен список файлов текущей папки:

ls

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

ls -R

Чтобы вывести список файлов нужной папки, вы можете передать ее адрес утилите, например, /home:

ls /home

Чтобы получить больше информации и вывести все имена файлов в виде списка используйте опцию -l:

ls -l /home/

2. cd — изменить папку

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

cd Desktop

Вы также можете указать полный путь к папке:

cd /usr/share/

Команда cd . . переходит в папку, которая находится выше на одну в файловой системе:

cd ..

Вы также можете вернуться в предыдущую рабочую папку:

cd -

3. rm — удалить файлы

Команда rm позволяет удалить файл. Будьте очень осторожны с ней, она не будет спрашивать подтверждения:

rm file

Например, rm file удалит файл с именем file, который находится в текущей папке. Как и в предыдущих вариантах, вы можете указать полный путь к файлу linux. Например:

rm /usr/share/file

Если вы хотите удалить папку, то нужно использовать опцию -r. Она включает рекурсивное удаление всех файлов и папок на всех уровнях вложенности:

rm -r /home/user/photo/

Будьте осторожны, потому что эта команда удаляет файлы безвозвратно.

4. rmdir — удалить папку

Команда rmdir позволяет удалить пустую папку. Например, команда rmdir directory удалит папку directory, которая находится в текущей папке:

rmdir directory

Если вам нужно удалить папку с файлами, то нужно использовать утилиту rm вместе с опцией -r.

5. mv — перемещение файлов

Команда mv перемещает файл в новое место. Она также может использоваться для переименования файлов. Например, mv file newfile переименует файл file в newfile:

mv file newfile

Чтобы переместить файл в другую папку нужно указать путь к ней, например, переместим файл file в папку /home/user/tmp/

mv file /home/user/tmp/

6. cp — копирование файлов

Эта cp и mv — это похожие команды linux для работы с файлами. Они работают аналогичным образом, только исходный файл остается на своем месте.

cp file newfile

Вы также можете рекурсивно скопировать всю папку с помощью команды cp -r. Эта команда скопирует всю папку вместе со всеми файлами и вложенными папками в новое место. Например, скопируем папку /etc/:

cp -r /etc /etc_back

7. mkdir — создать папку

Команда mkdir позволяет создать новую папку

mkdir test создаст папку в текущем каталоге:

mkdir test

Если нужно создать папку в другом каталоге, укажите полный путь к нему:

mkdir /home/user/test

8. ln — создание ссылок

Утилита ln позволяет создавать жесткие и символические ссылки на файлы или папки. Для создания символической ссылки используется опция -s. Например, вы создадим ссылку на папку с загрузками:

ln -s /home/user/Downloads/ /home/user/test/

Для создания жесткой ссылки никаких опций задавать не нужно:

ln /home/user/Downloads/ /home/user/test/

9. chmod — изменить права

chmod позволяет изменить права доступа к файлам. Например, chmod +x script.sh добавляет флаг исполняемости к файлу script.sh:

chmod +x  script.sh

Чтобы убрать флаг исполняемый используйте опцию -x:

chmod -x script.sh

Подробнее о том, как работают разрешения для файлов смотрите в статье права доступа к файлам в Linux.

10. touch — создать файл

Команда touch создает пустой файл. Например, touch file создаст пустой файл в текущей папке с именем file:

touch file

Для создания файлов через терминал существует еще несколько команд, они рассмотрены в статье как создать файл в linux.

11. mc

Работа с файлами Linux через терминал может выполняться не только с помощью обычных консольных команд, каждая из которых выполняет только определенное действие. Вы можете использовать полнофункциональный файловый менеджер с псевдографическим интерфейсом на основе ncurses. Midnight Commander — это файловый менеджер, который можно использовать прямо в терминале. Для установки mc в Ubuntu выполните:

sudo apt install mc

После завершения установки достаточно выполнить команду mc:

mc

Используйте клавиши со стрелками для перемещения по файлах, Tab для перехода на другую панель, Alt+1 для просмотра справки и Alt+2 для вывода меню:

Если терминальное окружение поддерживает мышь, то вы можете ее использовать в Midnight Commander.

Выводы

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

Команда ls Linux | Losst

Если вы часто используете терминал, то довольно часто возникает необходимость посмотреть содержимое той или иной папки. Автодополнение спасает во многих случаях, но если вы не знаете что искать и не хотите использовать файловый менеджер, то быстро посмотреть что находится в папке может быть очень полезно. Другое применение команды ls — посмотреть разрешения для файлов и папок.

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

Содержание статьи:

Команда ls linux

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

$ ls опции /путь/к/папке

Опции команды указывают как именно и в каком виде нужно выводить информацию на экран, а путь, это та папка, которую нужно отобразить. Рассмотрим основные опции утилиты:

  • -a — отображать все файлы, включая скрытые, это те, перед именем которых стоит точка;
  • -A — не отображать ссылку на текущую папку и корневую папку . и ..;
  • —author — выводить создателя файла в режиме подробного списка;
  • -b — выводить Escape последовательности вместо непечатаемых символов;
  • —block-size — выводить размер каталога или файла в определенной единице измерения, например, мегабайтах, гигабайтах или килобайтах;
  • -B — не выводить резервные копии, их имена начинаются с ~;
  • -c — сортировать файлы по времени модификации или создания, сначала будут выведены новые файлы;
  • -C — выводить колонками;
  • —color — включить цветной режим вывода, автоматически активирована во многих дистрибутивах;
  • -d — выводить только директории, без их содержимого, полезно при рекурсивном выводе;
  • -D — использовать режим вывода, совместимый с Emacs;
  • -f — не сортировать;
  • -F — показывать тип объекта, к каждому объекту будет добавлен один из специализированных символов */=>@|;
  • —full-time — показывать подробную информацию, плюс вся информация о времени в формате ISO;
  • -g — показывать подробную информацию, но кроме владельца файла;
  • —group-directories-first — сначала отображать директории, а уже потом файлы;
  • -G — не выводить имена групп;
  • -h — выводить размеры папок в удобном для чтения формате;
  • -H — открывать символические ссылки при рекурсивном использовании;
  • —hide — не отображать файлы, которые начинаются с указанного символа;
  • -i — отображать номер индекса inode, в которой хранится этот файл;
  • -l — выводить подробный список, в котором будет отображаться владелец, группа, дата создания, размер и другие параметры;
  • -L — для символических ссылок отображать информацию о файле, на который они ссылаются;
  • -m — разделять элементы списка запятой;
  • -n — выводить UID и GID вместо имени и группы пользователя;
  • -N — выводить имена как есть, не обрабатывать контролирующие последовательности;
  • -Q — брать имена папок и файлов в кавычки;
  • -r — обратный порядок сортировки;
  • -R — рекурсивно отображать содержимое поддиректорий;
  • -s — выводить размер файла в блоках;
  • -S — сортировать по размеру, сначала большие;
  • -t — сортировать по времени последней модификации;
  • -u — сортировать по времени последнего доступа;
  • -U — не сортировать;
  • -X — сортировать по алфавиту;
  • -Z — отображать информацию о расширениях SELinux;
  • -1 — отображать один файл на одну строку.

Это были все основные параметры команды ls, которые нам может когда-либо понадобиться использовать. Их очень много, но на деле будут нужны только некоторые из них, вы их быстро запомните, а все остальные сможете всегда найти в этой статье или на странице справки man ls. А теперь давайте рассмотрим несколько примеров использования команды ls linux.

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

Как вы уже поняли, ls — это сокращение от list, эта команда представляет из себя аналог команды dir для Linux. Самый простой способ использовать команду, запустить ее без параметров и посмотреть содержимое текущей папки:

ls

Чтобы посмотреть список файлов в папке linux для точно заданной папки, вам нужно указать путь к ней. Например, смотрим содержимое корневой папки:

ls /

Или папки /bin:

ls /bin/

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

ls -l

Тут вывод уже разделен на отдельные колонки, в первой колонке указаны права доступа к файлу в формате владелец группа остальные. Следующая колонка — это тип файла или папки, дальше владелец и группа, затем размер, дата создания и последний параметр — имя. Если вы еще хотите знать кто создал файл, можно использовать опцию author:

ls -l --author

Колонка создателя будет добавлена после группы. Дальше размер. Он выводится в байтах, килобайтах или еще в чем-то и нам не совсем понятно что там происходит, поэтому добавьте опцию -h чтобы выводить размер в более удобном виде:

ls -lh

 

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

ls -l Фото
ls -lh Фото

Если вы хотите видеть скрытые файлы, а в домашней папке их просто море, то используйте опцию -a:

ls -a

Или смотрим скрытые файлы без ссылок на текущую и родительскую папку:

ls -A

Теперь нас будет интересовать сортировка. Сначала отсортируем файлы по размеру:

ls -lSh Фото

 

 

 

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

ls -lShr

С помощью опции -r мы вывели файлы в обратном порядке. Теперь отсортируем по алфавиту:

ls -lX

Или сортируем по времени последней модификации:

ls -lt

 

Обратите внимание на колонку времени, действительно, самые новые файлы будут вверху списка. Если вы хотите посмотреть какие метки SELinux присвоены файлу, необходимо использовать опцию -Z:

ls -lZ

Но это возможно только в системах, где установлена надстройка SELinux. Если вы хотите рекурсивно вывести содержимое всех папок, используйте опцию -R:

ls -lR /usr/

Если же вам нужно список папок и файлов в директории через запятую, что можно использовать -m:

ls -m

Выводы

Как видите, команда ls linux достаточно сложная, но вам будет достаточно только несколько основных ее функций. А в плане — «Просто посмотреть что делается в папке», эта команда очень проста. Если у вас остались вопросы, спрашивайте в комментариях!

Оцените статью:

Загрузка…

Как создать символические ссылки в Linux с помощью команды ln

Символическая ссылка, также известная как symlink или soft link, представляет собой особый тип файла, который указывает на другой файл или каталог.

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

В системах Linux/UNIX существует два типа ссылок:

  • Жесткие ссылки. Вы можете считать жесткую ссылку в качестве дополнительного имени для существующего файла. Жесткие ссылки связывают два или более имени файла с тем же inode. Вы можете создать одну или несколько жестких ссылок для одного файла. Жесткие ссылки не могут быть созданы для каталогов и файлов в другой файловой системе или разделе.
  • Мягкие ссылки. Soft link – это что-то вроде ярлыка в Windows. Это косвенный указатель на файл или каталог. В отличие от жесткой ссылки, символическая ссылка может указывать на файл или каталог на другой файловой системе или разделе.

Утилита ln для создания связей между файлами. По умолчанию команда ln создает жесткие ссылки. Для создания символических ссылок используйте параметр -s--symbolic).

Синтаксис команды ln выглядит следующим образом :

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

ln -s source_file symbolic_link

 

Замените имя source_file существующего файла, для которого вы хотите создать символическую ссылку, и с именем symbolic_link символической ссылки.

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

 

В следующем примере мы создаем символическую ссылку, названную my_link.txt в файл с именем my_file.txt:

ln -s my_file.txt my_link.txt

 

Чтобы убедиться, что символическая ссылка была создана, используйте команду ls:

 

Результат будет выглядеть примерно так:

lrwxrwxrwx 1 linuxize users  4 Nov  2 23:03  my_link.txt -> my_file.txt

 

Символ l – это флаг типа файла, представляющий символическую ссылку. Символ -> показывает файл символическая ссылка указывает.

Команда создания символической ссылки на каталог такая же, как при создании символической ссылки на файл.  Укажите имя каталога как параметр firs и символическую ссылку в качестве второго параметра.

Например, если вы хотите создать символическую ссылку из каталога /mnt/my_drive/movies в каталог ~/my_movies, который вы запустили:

ln -s /mnt/my_drive/movies ~/my_movies

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

ln -s my_file.txt my_link.txt
ln: failed to create symbolic link 'my_link.txt': File exists

 

Чтобы переписать путь назначения символической ссылки, используйте опцию -f--force).

ln -sf my_file.txt my_link.txt

Вы можете удалить существующую символическую ссылку с помощью команды unlink или rm.

Синтаксис команды unlink очень прост:

 

Удаление символической ссылки с помощью команды rm аналогично удалению файла:

 

Вы должны использовать утилиту unlink для удаления символической ссылки.

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

К настоящему времени у вас должно быть хорошее представление о том, как использовать команду ln в Linux и как создавать символические ссылки.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Как создать символические ссылки в Linux

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

 

Что такое символическая ссылка в Linux и почему она используется?

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

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

Если вы используете команду ls с опцией -l, вот как выглядит символическая ссылка:

lrwxrwxrwx 1 andreyex andreyex 08 Jul  2 12:21 link_prog -> newdir/test_dir/prog.py

 

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

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

Теперь, когда вы немного знаете о символических ссылках, давайте посмотрим, как их создавать.

 

Как создать символическую ссылку в Linux

Чтобы создать символическую ссылку из источника на имя ссылки, вы можете использовать команду ln с опцией -s, например так:

ln -s source link_name

 

Опция -s здесь важна. Определяет, что ссылка является мягкой ссылкой. Если вы не используете его, он создаст жесткую ссылку. Мы объясним разницу между мягкими ссылками и жесткими ссылками в другой статье.

Что нужно помнить о символических ссылках

Символические ссылки иногда могут сбивать с толку, поэтому вам следует помнить о нескольких вещах.

 

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

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

У нас есть файл prog.py в newdir/test_dir. Он имеет следующие атрибуты:

-rw-r--r-- 1 andreyex andreyex 163 Apr 13 15:07 newdir/test_dir/prog. py

 

Теперь мы создадим мягкую ссылку на этот файл в моем текущем каталоге:

ln -s newdir/test_dir/prog.py link_prog

 

Вот атрибуты вновь созданной ссылки:

lrwxrwxrwx 1 andreyex andreyex 08 Jul  2 12:21 link_prog -> newdir/test_dir/prog.py

 

Заметьте l (это L, а не один) в начале строки? Если вы знакомы с правами доступа к файлам в Linux, вы должны знать, что «l» обозначает ссылку и, следовательно, говорит, что этот файл на самом деле является ссылкой. Чтобы обновить память, – означает файл, а d – каталог.

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

touch link_prog 

ls -l newdir/test_dir/prog.py 

-rw-r--r-- 1 andreyex andreyex 163 Jul  2 12:56 newdir/test_dir/prog.py

 

Это ссылка на файл или каталог? Вы можете не знать!

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

Вы можете создавать ссылки на несуществующий файл или каталог

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

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

ln -s non_existant_dir link_dir
less link_dir
link_dir: No such file or directory

 

Символические ссылки создаются с разрешения 777, но это ничего не значит

Заметили ли вы разрешение файла на символическую ссылку? Символические ссылки всегда создаются с разрешением 777 (rwxrwxrwx). Для обычного файла это будет означать, что любой может получить доступ к файлу. Но это не относится к ссылкам.

lrwxrwxrwx 1 andreyex andreyex 08 Jul  2 12:56 link_prog -> newdir/test_dir/prog. py

 

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

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

 

Вы можете сделать ссылку на ссылку ссылки или символическую ссылку

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

Ну вот и все. Мы полагаем, что теперь вы лучше знакомы с программными ссылками и знаете, как создавать символические ссылки в Linux.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Команда ln в Linux. Создание мягких и жестких ссылок

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

Есть два типа ссылок:

  • Мягкая ссылка или символическая ссылка: это просто ярлык к исходному файлу.
  • Жесткая ссылка: указывает на место в памяти исходного файла.

Жесткие и программные ссылки создаются с помощью команды ln.

В этой статье мы покажем вам, как использовать команду ln для создания различных типов ссылок в Linux.

 

Примеры команды ln

Синтаксис команды ln прост:

 ln [option] target_file link_name

 

Позвольте нам показать вам несколько примеров использования команды ln для создания ссылок в Linux.

 

1. Создать жесткую ссылку на файл

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

 ln target_file link_name

 

2. Создать мягкую ссылку на файл

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

 ln -s target_file link_name

 

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

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

Даже если ваш терминал не отображает мягкие ссылки другого цвета, вы можете идентифицировать ссылки таким образом.

 

3. Создать мягкую ссылку на каталог

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

 ln -s target_directory link_name

 

Вы заметите, что цвет мягкой ссылки и жесткой ссылки обычно различается в терминале Linux. Жесткая ссылка на каталог невозможна (обычно).

 

4. Обновите существующую мягкую ссылку (или жесткую ссылку)

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

ln: failed to create symbolic link 'soft-link-to-file': File exists

 

Для этого команда ln имеет две опции:

  • -i: Интерактивный режим спросит вас, хотите ли вы перезаписать существующую ссылку.
  • -f: Принудительный режим просто обновляет существующую ссылку без какого-либо подтверждения.

Предположим, вы хотите принудительно обновить символическую ссылку. Вот что вы можете сделать:

ln -sf new_file existing_soft_link

 

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

 

Бонусный совет: получение оригинального файла по цепочке ссылок

Обычно, когда вы используете команду ls с опцией -l, она показывает файл, на который она указывает.

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

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

readlink -f soft_link

 

Параметр -f означает «следовать», как в «следовать цепочке».

 

Зачем нам нужны ссылки?

Теперь, когда вы знаете, как создавать ссылки, давайте вкратце, зачем нам ссылки? Какой практической цели они служат?

Там может быть несколько вариантов использования. Допустим, вы загрузили программное обеспечение, которое поставляется с его кодом и исполняемым файлом. Вы держите все это в /optкаталоге. Но чтобы запустить программу из любого места, вам нужно поместить ее исполняемый файл в каталог /usr/bin.

Если вы переместите исполняемый файл в этот каталог, он может не работать, поскольку ему необходим доступ к некоторому коду, и он не найдет путь к этим файлам из каталога /usr/bin. Здесь вы можете создать ссылку на этот исполняемый файл в каталоге /usr/bin.

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

Ссылки являются неотъемлемой частью Linux. Вы найдете их во многих местах в ваших системах. Просто посмотрите в каталог /lib, и вы увидите множество мягких ссылок.

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Linux by Exampleshow для создания символической ссылки?

12 августа 2006 г. mysurface Отправленный в Admin, ln | Просмотров: 533931 | 64 Комментарии »

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

Иногда нам нужно перейти в каталог, который очень длинный и трудный для запоминания, например / var / www / html / BLOG / Image / Archive / _icon. И вам нужно часто получать доступ к этому каталогу после входа в систему как root.Что вы делаете, чтобы облегчить себе жизнь? Вы можете создать символическую ссылку в корневом домашнем каталоге / root, например:

  ln -s / var / www / html / BLOG / Image / Archive / _icon / root / icon  

Вы создаете значок вызова символической ссылки в / root, который связывает вас с /var/…._icon. Теперь вы можете легко перейти в каталог _icon на

.
  # теперь вы в / root

значок компакт-диска  

Второй сценарий, в котором я создаю символическую ссылку на свой сценарий bash, где я сохраняю свою символическую ссылку на / usr / local / bin.

Я написал своего рода сценарии bash, чтобы помочь мне управлять своей работой, и сохраняю их в каталоге с вызовом sh. Поэтому каждый раз, когда я хочу запустить свой скрипт, мне нужно перейти в каталог sh и ./something.sh, что очень неэффективно. поэтому я создаю символическую ссылку и храню ее в / usr / local / bin

  ln -s /home/myname/sh/runme.sh / usr / local / bin / runme  

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


вкладок в vim 7

Это было потрясающе, когда я узнал, что vim может делать вкладки. Хорошо, сделать это легко, вам нужно нажать клавишу bindi …

несколько советов по изменению каталога

Не думайте, что вы знаете все о каталоге изменений (cd). Возможно, вы чего-то не знаете. Допустим, я …

vim с ctags

Если вы программист c / c ++ и пользователь vim, возможно, вы знаете ctags. В большинстве случаев исходный код распространяется во многие папки …

символическая ссылка (7) — страница руководства Linux

символическая ссылка (7) — страница руководства Linux
SYMLINK (7) Руководство программиста Linux SYMLINK (7)
 

НАЗВАНИЕ сверху

       symlink - обработка символических ссылок
 

ОПИСАНИЕ вверху

       Символические ссылки - это файлы, которые действуют как указатели на другие файлы.Чтобы
       понять их поведение, вы должны сначала понять, как жесткие ссылки
       Работа.

       Жесткая ссылка на файл неотличима от исходного файла
       потому что это ссылка на объект, лежащий в основе оригинала
       имя файла. (Чтобы быть точным: каждая жесткая ссылка на файл - это
       ссылка на тот же индекс , номер , где номер индекса - это индекс
       в таблицу inode, которая содержит метаданные обо всех файлах на
       файловая система. См. Stat (2).) Изменения в файле не зависят от
       имя, используемое для ссылки на файл. Жесткие ссылки могут не относиться к
       каталоги (чтобы предотвратить возможность зацикливания внутри
       дерево файловой системы, которое сбивает с толку многие программы) и может не относиться к
       к файлам в разных файловых системах (поскольку номера inode не
       уникальный для файловых систем).

       Символьная ссылка - это особый тип файла, содержимое которого представляет собой строку
       это путь к другому файлу, файл, на который ссылка
       ссылается.(Содержимое символической ссылки можно прочитать с помощью
       readlink (2). Другими словами, символическая ссылка - это указатель на
       другое имя, а не нижележащий объект. По этой причине,
       символические ссылки могут относиться к каталогам и могут пересекать файловую систему
       границы.

       Нет требования, чтобы имя пути, на которое ссылается символический
       ссылка должна существовать. Символьная ссылка, указывающая на путь, который
       не существует, называется  висячим звеном .Поскольку символическая ссылка и связанный объект сосуществуют в
       пространство имен файловой системы, может возникнуть путаница при различении
       сама ссылка и указанный объект. По историческим системам,
       команды и системные вызовы приняли собственное отслеживание ссылок
       условности в несколько разовой форме. Правила для более униформы
       подход, реализованный в Linux и других системах,
       изложены здесь. Важно, чтобы локальные приложения также
       соответствуют этим правилам, так что пользовательский интерфейс может быть таким же
       насколько это возможно. Магические ссылки 
       Существует особый класс объектов, подобных символическим ссылкам, известный как
       «магические ссылки», которые можно найти в некоторых псевдофайловых системах, таких
       как proc (5) (примеры включают  / proc / [pid] / exe  и  / proc / [pid] / fd / * ).
       В отличие от обычных символических ссылок, магические ссылки не разрешаются через
       расширение пути, но вместо этого действуют как прямые ссылки на
       собственное представление ядра файла дескриптора. Таким образом, эта магия
       ссылки позволяют пользователям получать доступ к файлам, на которые нельзя ссылаться
       обычные пути (например, несвязанные файлы, на которые все еще ссылается запущенный
       программа).Потому что они могут обойти обычные mount_namespaces (7) -based
       ограничений, магические ссылки использовались в качестве векторов атак в различных
       подвиги.

     Владение символической ссылкой, разрешения и временные метки 
       Владелец и группу существующей символической ссылки можно изменить с помощью
       lchown (2). Единственный раз, когда владение символической ссылкой
       имеет значение, когда ссылка удаляется или переименовывается в каталоге
       для которого установлен липкий бит (см. stat (2)).Отметки времени последнего доступа и последнего изменения символической ссылки
       можно изменить с помощью utimensat (2) или lutimes (3).

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

       Однако магические ссылки не подчиняются этому правилу. Они могут иметь
       не-0777 режим, хотя этот режим в настоящее время не используется ни в одном
       проверки разрешений. Получение дескриптора файла, который ссылается на символическую ссылку 
       Использование комбинации флагов  O_PATH  и  O_NOFOLLOW  для открытия (2)
       дает дескриптор файла, который можно передать как аргумент  dirfd  в
       системные вызовы, такие как fstatat (2), fchownat (2), fchmodat (2), linkat (2),
       и readlinkat (2), чтобы работать с самой символической ссылкой
       (а не файл, на который он ссылается).

       По умолчанию (т.е. если флаг  AT_SYMLINK_FOLLOW  не указан), если
       name_to_handle_at (2) применяется к символической ссылке, это дает
       дескриптор символьной ссылки (а не файла, к которому она
       ссылается).Затем можно получить файловый дескриптор для символической ссылки
       (а не файл, к которому он относится), указав  O_PATH 
       flag в последующем вызове open_by_handle_at (2). Опять же, этот файл
       дескриптор может использоваться в вышеупомянутых системных вызовах для работы
       на самой символической ссылке.

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

       Необходимо обсудить три отдельные области. Они есть
       следующим образом:

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

       2. Символические ссылки, указанные в качестве аргументов командной строки для служебных программ.
          которые не обходят файловое дерево.

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

       Прежде чем описывать обработку символических ссылок системными вызовами и
       команд, нам потребуется некоторая терминология.Учитывая путь в форме
         a / b / c , часть перед последней косой чертой (т. Е.  a / b ) называется
         dirname  компонент и часть после последней косой черты (т. Е.  c )
       называется компонентом  basename .

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

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

       1.В компоненте dirname имени пути символические ссылки
          всегда следует почти в каждом системном вызове. (Это тоже верно
          для команд.) Единственное исключение - openat2 (2), который предоставляет
          флаги, которые можно использовать для явного предотвращения следования за символическими
          ссылки в компоненте dirname.

       2. За исключением случаев, указанных ниже, все системные вызовы выполняются по символическим ссылкам в
          компонент базового имени пути. Например, если бы были
          символическая ссылка  slink , указывающая на файл с именем , файл ,
          системный вызов  open ("крадущийся"...)  вернет дескриптор файла
          ссылаясь на файл , файл .

       Различные системные вызовы не переходят по ссылкам в компоненте базового имени
       имя пути и работать с самой символической ссылкой. Они есть:
       lchown (2), lgetxattr (2), llistxattr (2), lremovexattr (2),
       lsetxattr (2), lstat (2), readlink (2), rename (2), rmdir (2) и
       разъединить (2).

       Некоторые другие системные вызовы могут следовать по символическим ссылкам в
       компонент базового имени пути.Это: faccessat (2),
       fchownat (2), fstatat (2), linkat (2), name_to_handle_at (2), open (2),
       openat (2), open_by_handle_at (2) и utimensat (2); см их руководство
       страницы для деталей. Поскольку remove (3) является псевдонимом для unlink (2), это
       Библиотечная функция также не переходит по символическим ссылкам. Когда rmdir (2)
       применяется к символической ссылке, происходит сбой с ошибкой  ENOTDIR .

       ссылка (2) требует специального обсуждения. POSIX.1-2001 определяет, что
       ссылка (2) должна разыменовать  oldpath , если это символическая ссылка.Однако Linux этого не делает. (По умолчанию Solaris такой же,
       но указанное в POSIX.1-2001 поведение может быть получено с помощью подходящего
       параметры компилятора.) POSIX.1-2008 изменил спецификацию, чтобы разрешить
       либо поведение в реализации.

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

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

       Важно понимать, что это правило включает команды, которые могут
       необязательно перемещаться по деревьям файлов; например, команда  chown file 
       входит в это правило, а команда  chown -R file , которая
       выполняет обход дерева, нет.(Последний описан в
       третья область ниже.)

       Если явно предполагается, что команда работает с символическим
       ссылку вместо перехода по символической ссылке - например, это
       хотел, чтобы  chown slink  сменил владельца файла, который  slink 
       является ли это символической ссылкой или нет, тогда параметр  -h  должен быть
       используемый. В приведенном выше примере  chown root slink  изменит
       право собственности на файл, на который ссылается  slink , а  chown -h root slink 
       поменял бы собственника  на сам слинк .Из этого правила есть некоторые исключения:

       * Команды mv (1) и rm (1) не переходят по символическим ссылкам с именами
         аргументы, но, соответственно, попытаться переименовать и удалить их.
         (Обратите внимание: если символическая ссылка ссылается на файл по относительному пути,
         перемещение его в другой каталог может привести к его остановке
         работает, так как путь может быть неправильным.)

       * Команда ls (1) также является исключением из этого правила. За
         совместимость с историческими системами (когда ls (1) не выполняет дерево
         walk - то есть опция  -R  не указана), команда ls (1)
         следует по символическим ссылкам, названным в качестве аргументов, если опция  -H  или  -L 
         или если не указаны параметры  -F ,  -d  или  -l .(The
         ls (1) - единственная команда, в которой используются параметры  -H  и  -L .
         повлиять на его поведение, даже если он не выполняет обход файла
         дерево.)

       * Команда file (1) также является исключением из этого правила. Файл (1)
         команда не следует по символическим ссылкам, указанным в качестве аргумента
         по умолчанию. Команда file (1) переходит по символическим ссылкам с именем
         аргумент, если указана опция  -L .

     Команды обхода файлового дерева 
       Следующие команды либо необязательно, либо всегда просматривают файл
       деревья: chgrp (1), chmod (1), chown (1), cp (1), du (1), find (1), ls (1),
         pax  (1), rm (1) и tar (1).Важно понимать, что следующие правила в равной степени применимы к
       символические ссылки, обнаруженные при обходе дерева файлов и
       символические ссылки, перечисленные как аргументы командной строки.

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

       Команда  rm -r slink directory  удалит  slink , а также любые
       символические ссылки, обнаруженные при обходе дерева каталога  ,
       потому что символические ссылки могут быть удалены.Ни в коем случае не повлияет rm (1)
       файл, на который ссылается  slink .

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

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

       * Можно сделать команду для перехода по любым символическим ссылкам, указанным в
         в командной строке, независимо от типа файла, на который они ссылаются, с помощью
         с указанием флага  -H  (для «полулогического»).Этот флаг предназначен
         чтобы пространство имен командной строки выглядело как логическое имя
         пространство. (Обратите внимание, что для команд, которые не всегда выполняются
         traversals, флаг  -H  будет проигнорирован, если флаг  -R  также не
         указано.)

         Например, команда  chown -HR user slink  будет проходить через
         Иерархия файлов основана на файле, на который указывает  slink . Обратите внимание
           -H  не совпадает с ранее обсуждавшимся флагом  -h .Модель  -H 
         флаг заставляет символические ссылки, указанные в командной строке, быть
         разыменован для обоих действий, которые должны быть выполнены
         и обход дерева, и это как если бы пользователь указал имя
         файла, на который указывает символическая ссылка.

       * Можно сделать команду для перехода по любым символическим ссылкам, указанным в
         командную строку, а также любые символические ссылки, обнаруженные во время
         обход, независимо от типа файла, на который они ссылаются, путем
         с указанием флага  -L  (для «логического»).Этот флаг предназначен для
         сделать все пространство имен похожим на логическое пространство имен.
         (Обратите внимание: для команд, которые не всегда выполняют обход дерева файлов,
           -L  флаг будет проигнорирован, если также не указан флаг  -R .)

         Например, команда  chown -LR user slink  изменит владельца
         файла, на который ссылается  slink . Если  slink  относится к каталогу,
           chown  будет перемещаться по файловой иерархии с корнем в каталоге, который
         это ссылки.Кроме того, если встречаются какие-либо символические ссылки
         в любом дереве файлов, которое проходит  chown , они будут обрабатываться в
         такая же мода как  slink .

       * Можно создать команду для обеспечения поведения по умолчанию, указав
         флаг  -P  (для «физического»). Этот флаг предназначен для того, чтобы
         все пространство имен выглядит как физическое пространство имен.

       Для команд, которые по умолчанию не выполняют обход дерева файлов,  -H ,
        Флаги  -L  и  -P  игнорируются, если также не указан флаг  -R .Кроме того, вы можете указать варианты  -H ,  -L  и  -P  более чем
       один раз; последний указанный определяет поведение команды. Этот
       предназначен для того, чтобы позволить вам настраивать псевдонимы команд, чтобы они вели себя так, или
       другое, а затем переопределите это поведение в командной строке.

       Команды ls (1) и rm (1) имеют исключения из этих правил:

       * Команда rm (1) работает с символической ссылкой, а не с файлом
         он ссылается, и, следовательно, никогда не следует по символической ссылке.В
         Команда rm (1) не поддерживает параметры  -H ,  -L  или  -P .

       * Для обеспечения совместимости с историческими системами команда ls (1)
         действует немного иначе. Если вы не укажете  -F ,  -d  или  -l 
         options, ls (1) будет следовать по символическим ссылкам, указанным в команде
         линия. Если указан флаг  -L , ls (1) следует за всеми символическими
         ссылки, независимо от их типа, независимо от того, указаны ли они в команде
         линии или встречающиеся в прогулке по дереву.

СМОТРИТЕ ТАКЖЕ top

       chgrp (1), chmod (1), найти (1), ln (1), ls (1), mv (1), namei (1), rm (1),
       lchown (2), ссылка (2), lstat (2), readlink (2), переименование (2), символическая ссылка (2),
       unlink (2), utimensat (2), lutimes (3), path_resolution (7)
 

COLOPHON верх

       Эта страница является частью версии 5.09 проекта Linux  man-pages . А
       описание проекта, информация о сообщениях об ошибках и
       последнюю версию этой страницы можно найти по адресу
       https: // www.kernel.org/doc/man-pages/.


 

Страницы, которые относятся к этой странице: namei (1), смола (1), доступ (2), chmod (2), чоун (2), chown32 (2), creat (2), фасад (2), fchmod (2), fchmodat (2), fchown (2), fchown32 (2), fchownat (2), fgetxattr (2), flistxattr (2), fremovexattr (2), fsetxattr (2), fstat (2), fstat64 (2), fstatat (2), fstatat64 (2), getxattr (2), введение (2), Ичоун (2), lchown32 (2), lgetxattr (2), ссылка (2), линкат (2), listxattr (2), llistxattr (2), lremovexattr (2), lsetxattr (2), lstat (2), lstat64 (2), newfstatat (2), oldfstat (2), oldlstat (2), oldstat (2), открытый (2), openat2 (2), openat (2), readlink (2), readlinkat (2), removexattr (2), переименовать (2), renameat2 (2), переименовать (2), setxattr (2), stat (2), stat64 (2), statx (2), символическая ссылка (2), символическая ссылка (2), разорвать связь (2), unlinkat (2), utimensat (2), футименс (3), futimes (3), lutimes (3), удалить (3), индекс (7), path_resolution (7)


Авторские права и лицензия на это руководство, страница

Руководство пользователя по ссылкам в файловой системе Linux

В статьях я писал о различных аспектах файловых систем Linux для Opensource.com, включая Введение в файловую систему Linux EXT4; Управление устройствами в Linux; Введение в файловые системы Linux; и «Руководство пользователя Linux по управлению логическими томами», я вкратце упомянул интересную особенность файловых систем Linux, которая может упростить некоторые задачи, предоставляя доступ к файлам из разных мест в дереве каталогов файловой системы.

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

Я обнаружил, например, что для некоторых программ требуется определенная версия библиотеки. Когда обновление библиотеки заменяло старую версию, программа вылетала из строя с ошибкой с указанием имени старой, теперь отсутствующей библиотеки. Обычно единственным изменением в имени библиотеки был номер версии.Руководствуясь догадками, я просто добавил ссылку на новую библиотеку, но назвал ссылку по имени старой библиотеки. Я попробовал программу еще раз, и она отлично работала. И, хорошо, программа была игрой, и всем известно, на что геймеры готовы пойти, чтобы их игры продолжали работать.

Фактически, почти все приложения связаны с библиотеками с использованием общего имени с только основным номером версии в имени ссылки, в то время как ссылка указывает на фактический файл библиотеки, который также имеет дополнительный номер версии.В других случаях необходимые файлы были перемещены из одного каталога в другой, чтобы соответствовать спецификации файлов Linux, и в старых каталогах есть ссылки для обратной совместимости с теми программами, которые еще не достигли новых местоположений. Если вы составите длинный список каталога / lib64 , вы можете найти множество примеров того и другого.

  

lrwxrwxrwx. 1 root root 36 8 декабря 2016 cracklib_dict.hwm -> ../../usr/share/cracklib/pw_dict.hwm
lrwxrwxrwx. 1 корень root 36 8 декабря 2016 cracklib_dict.pwd -> ../../usr/share/cracklib/pw_dict.pwd
lrwxrwxrwx. 1 корень root 36 8 декабря 2016 cracklib_dict.pwi -> ../../usr/share/cracklib/pw_dict.pwi
lrwxrwxrwx. 1 root root 27 9 июня 2016 libaccountsservice.so.0 -> libaccountsservice.so.0.0.0
-rwxr-xr-x. 1 root root 288456 9 июня 2016 libaccountsservice.so.0.0.0
lrwxrwxrwx 1 root root 15 мая 17 11:47 libacl.so.1 -> libacl.so.1.1.0
-rwxr-xr-x 1 корень root 36472 17 мая, 11:47 libacl.so.1.1.0
lrwxrwxrwx. 1 root root 15 4 февраля 2016 libaio.so.1 -> libaio.so.1.0.1
-rwxr-xr-x. 1 корень root 6224 4 февраля 2016 libaio.so.1.0.0
-rwxr-xr-x. 1 root root 6224 4 февраля 2016 libaio.so.1.0.1
lrwxrwxrwx. 1 корневой корень 30 января 16 16:39 libakonadi-calendar.so.4 -> libakonadi-calendar.so.4.14.26
-rwxr-xr-x. 1 корень root 816160 16 января 16:39 libakonadi-calendar.so.4.14.26
lrwxrwxrwx. 1 root root 29 16 января 16:39 libakonadi-contact.so.4 -> libakonadi-contact.so.4.14.26

Несколько ссылок в каталоге / lib64

Длинный список каталога / lib64 выше показывает, что первым символом в файловом режиме является буква «l», что означает, что каждый из них является мягкой или символьной ссылкой.

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

Во введении к файловой системе EXT4 Linux я обсуждал тот факт, что каждый файл имеет один индексный дескриптор, содержащий информацию об этом файле, включая расположение данных, принадлежащих этому файлу.На рисунке 2 в этой статье показана единственная запись каталога, указывающая на индексный дескриптор. Каждый файл должен иметь хотя бы одну запись в каталоге, указывающую на индексный дескриптор, описывающий файл. Запись в каталоге — это жесткая ссылка, поэтому каждый файл имеет хотя бы одну жесткую ссылку.

На рисунке 1 ниже несколько записей каталога указывают на один индексный дескриптор. Это все жесткие ссылки. Я сократил расположение трех записей каталога, используя условное обозначение тильды ( ~ ) для домашнего каталога, так что ~ эквивалентно / home / user в этом примере.Обратите внимание, что четвертая запись каталога находится в совершенно другом каталоге, / home / shared , который может быть местом для обмена файлами между пользователями компьютера.

Рисунок 1

Жесткие ссылки ограничены файлами, содержащимися в одной файловой системе. «Файловая система» используется здесь в смысле раздела или логического тома (LV), который монтируется в указанной точке монтирования, в данном случае / home . Это связано с тем, что номера inode уникальны только в каждой файловой системе, а другая файловая система, например, / var или / opt , будет иметь индексные дескрипторы с тем же номером, что и индекс для нашего файла.

Поскольку все жесткие ссылки указывают на единственный индексный дескриптор, который содержит метаданные о файле, все эти атрибуты являются частью файла, например права собственности, разрешения и общее количество жестких ссылок на индексный дескриптор, и не могут быть разными. для каждой жесткой ссылки. Это один файл с одним набором атрибутов. Единственный атрибут, который может отличаться, — это имя файла, которого нет в inode. Жесткие ссылки на один файл / индекс , расположенный в одном каталоге, должны иметь разные имена из-за того, что в одном каталоге не может быть повторяющихся имен файлов.

Количество жестких ссылок для файла отображается с помощью команды ls -l . Если вы хотите отобразить фактические номера inode, то это сделает команда ls -li .

Символьные (программные) ссылки

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

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

Проект

Lab: экспериментирование со ссылками

Я думаю, что самый простой способ понять использование и различия между жесткими и программными ссылками — это лабораторный проект, который вы можете выполнить.Этот проект должен быть выполнен в пустом каталоге как пользователь без полномочий root . Я создал каталог ~ / temp для этого проекта, и вы тоже должны это сделать. Он создает безопасное место для выполнения проекта и предоставляет новый пустой каталог для работы, так что там будут находиться только файлы, связанные с этим проектом.

Первоначальная настройка

Сначала создайте временный каталог, в котором вы будете выполнять задачи, необходимые для этого проекта. Убедитесь, что текущий рабочий каталог (PWD) является вашим домашним каталогом, затем введите следующую команду.

  мкдир темп  

Измените на ~ / temp , чтобы сделать его PWD с помощью этой команды.

  Температура компакт-диска  

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

  du -h> main.file.txt  

Используйте длинный список ls -l , чтобы убедиться, что файл был создан правильно. Это должно быть похоже на мои результаты.

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

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