Когда символическая ссылка рассматривается как объект, на который она ссылается, а когда как символическая ссылка?

Когда символическая ссылка рассматривается как объект, на который она ссылается, а когда как символическая ссылка?

Когда символическая ссылка рассматривается как объект, на который она ссылается, а когда как символическая ссылка?

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

mv mylk ~

mv mylk/ ~

Зависит ли то, рассматривается ли символ как то, что он связывает, или как сам по себе, от того, что от него ожидает команда, или от того, как он указан (независимо от команды, которая использует ссылку)? Спасибо.

решение1

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

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

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

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

Связанный контент