Ссылки в Linux

Содержание
Введение: Типы файлов в Linux
Жёсткие ссылки
Символические ссылки
Примеры применения
Похожие статьи

Введение: Типы файлов в Linux

В Linux всё является файлами и ссылки не исключение.

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

Выполните

ls -ld /etc

drwxr-xr-x. 85 root root 8192 Mar 29 17:42 /etc

85 в данном примере это значение hard link count - числа жёстких ссылок с таким же значеним метаданных.

-d значит показать сами директории а не их содержимое.

-l значит показывать в режиме long listing

Если добавить флаг -i (--inode), который показывает номер каждого файла - результат будет примерно следующим.

ls -ldi /etc

16777281 drwxr-xr-x. 85 root root 8192 Mar 29 17:423 /etc

К аналогичному результату приведёт команда

ls -ldi /etc/.

16777281 drwxr-xr-x. 85 root root 8192 Mar 29 17:42 /etc/.

ls -ldi /etc/. и ls -ldi /etc прилинкованы к одним и тем же метаданным

Таким образом минимальное число жёстких ссылок на диреторию равно двум.

По номеру inode можно найти путь до директории

sudo find / -inum 16777281

/etc

Если создать пустую директорию и изучить ссылки

mkdir d1
ls -ld d1

drwxr-xr-x 2 andrei users 4096 Mar 29 17:42 d1

ls -l d1

total 0

ls -la d1

total 8 drwxr-xr-x 2 andrei users 4096 Mar 29 17:42 . drwx------ 60 andrei users 4096 Mar 29 17:42 ..

ls -ldi d1 d1/.

582294 drwxr-xr-x 2 andrei users 4096 Mar 29 17:42 d1 582294 drwxr-xr-x 2 andrei users 4096 Mar 29 17:42 d1/.

Если создать в d1 поддиректорию - количество жёстких ссылок на d1 увеличится с 2 до 3 так как добавится ссылка из поддиректории.

mkdir d1/subd1
ls -la d1

total 12 drwxr-xr-x 3 andrei users 4096 Mar 29 17:42 . drwx------ 60 andrei users 4096 Mar 29 17:42 .. drwxr-xr-x 2 andrei users 4096 Mar 29 17:42 subd1

Можно сделать жёсткую ссылку на обычный файл

echo hi > file1
cat file1

hi

ls -l file1

-rw-rw-r--. 1 andrei andrei 3 Mar 29 17:42 file1

ln file1 file2
ls -l file1

-rw-rw-r--. 2 andrei andrei 3 Mar 29 17:42 file1

ls -li file1 file2

51314587 -rw-rw-r--. 2 andrei andrei 3 Mar 29 17:42 file1 51314587 -rw-rw-r--. 2 andrei andrei 3 Mar 29 17:42 file2

Как мы уже убедились file1 и file2 это один и тот же файл.

Жёсткие ссылки могут указывать на файлы только внутри своей файловой системы

ln /boot/vmlinuz-3.10.0-1160.49.1.el7.x86_64 ./link1

ln: failed to create hard link './link1' => '/boot/vmlinuz-3.10.0-1160.49.1.el7.x86_64': Invalid cross-device link

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

Помимо жёстких ссылок можно создавать символические ссылки (symbolic links)

ln -s file1 file3
ls -li file1 file2 file3

51314587 -rw-rw-r--. 2 andrei andrei 3 Mar 29 17:42 file1 51314587 -rw-rw-r--. 2 andrei andrei 3 Mar 29 17:42 file2 51314588 lrwxrwxrwx. 1 andrei andrei 5 Mar 29 17:42 file3 -> file1

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

Жёсткая ссылка при удалении цели потеряет 1 в графе ссылки.

rm file1
ls -l

-rw-rw-r--. 1 andrei andrei 0 Mar 29 17:42 file2
lrwxrwxrwx. 1 andrei andrei 5 Mar 29 17:42 file3 -> file1

Обратите внимание на то, что у символической ссылки перед правами доступа стоит l

Символические ссылки могут указывать на файлы другой файловой системы

ln -s /boot/vmlinuz-3.10.0-1160.49.1.el7.x86_64 ./link1
ls -l

… lrwxrwxrwx. 1 andrei andrei 41 Mar 29 17:42 link1 -> /boot/vmlinuz-3.10.0-1160.49.1.el7.x86_64

Изображение баннера

Практические примеры

Если система установлена на диск небольшого размера, например SSD диск, для хранения мультимедиа имеет смысл подключить более дешёвый HDD диск.

Допустим, сперва вы пользовались директорией /uploads на SSD чтобы не менять код в проекте, можно перекинуть содержимое старой /uploads на новый HDD и сделать символическую ссылку вида

ln -s /mnt/hdd /uploads

Пример из Nginx

В конфигурации Nginx есть такие директории как sites-available и sites-enabled чтобы «включить» сайт нужно добавить в sites-enabled ссылку на сайт из sites-available

ll /etc/nginx | grep sites

drwxr-xr-x 2 root root 4096 tammi 20 18:12 sites-available/ drwxr-xr-x 2 root root 4096 tammi 20 18:12 sites-enabled/

Похожие статьи
Файлы
Linux
Bash
Директории
Ссылки
Изучить свободное место на диске
Объединить файлы
Объединить .pdf файлы
diff: сравнение файлов
find: поиск файлов основы
find: продвинутый поиск файлов
wget: скачивание файлов
rename: переименовать файлы
SCP: обмен файлами;
Архивация/Распаковка
tree: просмотр директорий
convert
Изображение баннера

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящую по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: