Ссылки на файлы и папки в Linux
# Создаем директорию для тестов и переходим в нее mkdir /tmp/tests && cd /tmp/tests # Создаем файл `src` и записываем в него "abc" echo "abc" > src # Создаем абсолютную символическую ссылку `link1` на файл `src` ln -s /tmp/tests/src /tmp/tests/link1 # Создаем относительную символическую ссылку `link2` на файл `src` ln -s src link2 # Создаем жесткую ссылку `link3` на файл `src` ln src link3
Первый столбик - inode - у файла и жестких ссылок он будет одинаков.
Второй столбик у символических ссылок начинается с l
.
Третий столбик - количество жестких ссылок на файл.
В последнем столбике выводится имя файла либо имя ссылки и путь куда она ссылается (для символических ссылок).
ls -li #< total 0 #< 44754521297123792 lrwxrwxrwx 1 alhames alhames 14 Jan 2 18:11 link1 -> /tmp/tests/src #< 14355223812434266 lrwxrwxrwx 1 alhames alhames 3 Jan 2 18:11 link2 -> src #< 13229323905596938 -rw-rw-rw- 2 alhames alhames 4 Jan 2 18:09 link3 #< 13229323905596938 -rw-rw-rw- 2 alhames alhames 4 Jan 2 18:09 src
# К ссылкам можно обращаться также как и к файлу cat link1 #< abc cat link2 #< abc cat link3 #< abc
# Изменения отражаются на всех echo "1" >> src echo "2" >> link1 echo "3" >> link2 echo "4" >> link3 cat src #< abc #< 1 #< 2 #< 3 #< 4
# Переименуем директорию в `tests1` mv ../tests ../tests1 # Абсолютная символическая ссылка стала битой (подсветится красным) # Относительная символическая и жесткая по-прежнему работают ls -li #< total 0 #< 44754521297123792 lrwxrwxrwx 1 alhames alhames 14 Jan 2 18:11 link1 -> /tmp/tests/src #< 14355223812434266 lrwxrwxrwx 1 alhames alhames 3 Jan 2 18:11 link2 -> src #< 13229323905596938 -rw-rw-rw- 2 alhames alhames 12 Jan 2 18:26 link3 #< 13229323905596938 -rw-rw-rw- 2 alhames alhames 12 Jan 2 18:26 src
# Удаляем символические ссылки rm link1 link2 # Если мы удалим источник, то все относительные ссылки сломаются, но жесткие по-прежнему будут работать rm src ls -li #< total 0 #< 13229323905596938 -rw-rw-rw- 1 alhames alhames 12 Jan 2 18:26 link3 cat link3 #< abc #< 1 #< 2 #< 3 #< 4
P.S. Символическая ссылка указывает на путь к файлу или директории, а жесткая - на дескриптор inode. Как следствие, жесткие ссылки можно создавать только на файлы и только в пределах одной файловой системы.