Почему Linux допускает символическую ссылку на себя?

Вы также можете использовать find и grep с обратными кавычками для выбора файлов для команды move. Передайте их в mv.

Например, для скрытых файлов

find Foo -maxdepth 1 | egrep '^Foo/[.]' # Output: .hidden

So

mv `find Foo -maxdepth 1 | egrep '^Foo/[.]'` Bar # mv Foo/.hidden Bar

Перемещает только выбранные скрытые файлы в Bar:

mv `find Foo -maxdepth 1 | egrep '^Foo/.'` Bar # mv Foo/.hidden Foo/notHidden Bar

Перемещает все файлы в Foo в Bar, поскольку символ '.' в команде egrep действует как подстановочный знак без квадратных скобок.

Символ ^ гарантирует, что совпадение начинается с начала строки.

Некоторые подробности о egrep сопоставлении шаблонов можно найти здесь.

Использование maxdepth 1 останавливает find от перехода в подкаталоги.

0
25.02.2019, 23:11
2 ответа

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

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

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

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

1
28.01.2020, 02:40

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

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

Может выглядеть примерно так:

#!/bin/bash
if [ "$1" == "$2" ]
then 
echo "ERROR pointing to self!"
else
ln "$1" "$2"
fi
0
28.01.2020, 02:40

Теги

Похожие вопросы