Ссылки в Linux

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

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

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

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

Выполните

ls -ld /etc

drwxr-xr-x. 85 root root 8192 Mar 15 21:01 /etc

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

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

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

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

ls -ldi /etc

16777281 drwxr-xr-x. 85 root root 8192 Mar 15 21:013 /etc

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

ls -ldi /etc/.

16777281 drwxr-xr-x. 85 root root 8192 Mar 15 21:01 /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 15 21:01 d1

ls -l d1

total 0

ls -la d1

total 8 drwxr-xr-x 2 andrei users 4096 Mar 15 21:01 . drwx------ 60 andrei users 4096 Mar 15 21:01 ..

ls -ldi d1 d1/.

582294 drwxr-xr-x 2 andrei users 4096 Mar 15 21:01 d1 582294 drwxr-xr-x 2 andrei users 4096 Mar 15 21:01 d1/.

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

mkdir d1/subd1
ls -la d1

total 12 drwxr-xr-x 3 andrei users 4096 Mar 15 21:01 . drwx------ 60 andrei users 4096 Mar 15 21:01 .. drwxr-xr-x 2 andrei users 4096 Mar 15 21:01 subd1

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

echo hi > file1
cat file1

hi

ls -l file1

-rw-rw-r--. 1 andrei andrei 3 Mar 15 21:01 file1

ln file1 file2
ls -l file1

-rw-rw-r--. 2 andrei andrei 3 Mar 15 21:01 file1

ls -li file1 file2

51314587 -rw-rw-r--. 2 andrei andrei 3 Mar 15 21:01 file1 51314587 -rw-rw-r--. 2 andrei andrei 3 Mar 15 21:01 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 15 21:01 file1 51314587 -rw-rw-r--. 2 andrei andrei 3 Mar 15 21:01 file2 51314588 lrwxrwxrwx. 1 andrei andrei 5 Mar 15 21:01 file3 -> file1

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

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

rm file1
ls -l

-rw-rw-r--. 1 andrei andrei 0 Mar 15 21:01 file2
lrwxrwxrwx. 1 andrei andrei 5 Mar 15 21:01 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 15 21:01 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