3

Я немного запутался с жесткими / мягкими ссылками здесь. У меня OSX, есть папка '4' и две ссылки, указывающие на нее:

drwxr-xr-x  4 imm  staff  136 14 Jun 21:24 4
lrwxr-xr-x  1 imm  staff    1 14 Jun 16:56 4.0 -> 4
lrwxr-xr-x  1 507  wheel    1 14 Jun 16:56 Current -> 4

Когда я следую «Текущим» в папке, это приводит к совершенно другому местоположению (путь, из которого я скопировал все вещи). Я бы хотел, чтобы «Current» указывал на папку «4» в новом месте.

Как мне этого добиться?

2 ответа2

10

Вам необходимо удалить и воссоздать ссылку. Вы можете сделать это с

rm Current

И затем воссоздайте это:

ln -s /path/to/the/new/location Current

Вы можете использовать абсолютный путь (для простоты).

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

Изменить: так как вы упоминаете жесткие ссылки, я пойду дальше и представлю их здесь.

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

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

Файловая система автоматически отслеживает количество жестких ссылок, указывающих на конкретный индекс, и просто удаляет индекс, когда этот счет достигает 0.

7

Вы можете просто сделать это:

ln -nfs /path/to/the/new/location Current

где «Текущий» - текущая символическая ссылка. Опции -n и -f отменяют связь и удаляют исходный «Текущий» и позволяют создавать новый (-s для мягкой ссылки).

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .