Когда символическая ссылка рассматривается как вещь, на которую она ссылается, и как символическая ссылка?

Когда символическая ссылка рассматривается как вещь, на которую она ссылается, и как символическая ссылка?

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

 mv mylk ~ mv mylk/ ~ 

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

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

Программа, действующая на метаданные файла (метки времени, владелец, разрешения и т. Д.), Обычно действует на целевую аудиторию, но некоторые программы имеют возможность действовать вместо символической ссылки (например, chown -h , touch -h , … ).

Программа, действующая на запись в каталоге, обычно действует на символическую ссылку. Операции, такие как переименование и удаление, действуют в записи каталога, что бы это ни было. Существуют отдельные системные вызовы для доступа к метаданным (включая тип файла) файла в зависимости от того, желает ли программа следовать символическим ссылкам ( stat ) или нет ( lstat ). Некоторые программы, которые могут действовать в любом типе записи в каталоге, имеют опции, чтобы заставить их действовать на цель вместо ссылки, когда они находят ссылку. Например, многие утилиты, которые рекурсивно пересекают каталоги ( find , chown -R , cp -R , …), действуют по символическим ссылкам по умолчанию, но следуют всем символическим ссылкам, если вы передаете опцию -L и следуете символическим ссылкам в команде но не символические ссылки на каталоги, найденные во время рекурсивного обхода, если вы передадите параметр -H .

Если имя файла имеет завершающую косую черту, это заставляет имя файла интерпретироваться как каталог . Если имя является символической ссылкой, оно будет соблюдаться. Таким образом, mv mylk ~ перемещает любой mylk (символическая ссылка или иначе), в то время как mv mylk/ ~ перемещает mylk если это каталог, или цель, если mylk является символической ссылкой на каталог и жалуется, что mylk является ни каталогом, ни символическая ссылка на одну. Это общее поведение