Как преобразовать файл в символическую ссылку?

Как преобразовать файл в символическую ссылку?

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

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

lrwxrwxrwx 1 g g       38 Mar 17 11:15 npm2 -> ../lib/node_modules/npm/bin/npm-cli.js

Но на сервере или других клиентах ссылка представляет собой файл с таким содержимым:

XSym
0038
36c91a46c3a5a86837deff259c6d0874
../lib/node_modules/npm/bin/npm-cli.js

... с разрешениями:

-rwxrw-r-- 1 z z     1067 Mar 17 11:15 npm2

Итак... в общем... это какая-то ошибка монтирования или что-то в этом роде, но есть ли способ использовать chmod, чтобы "вставить" его в изначально предполагаемую символическую ссылку? Это бы очень помогло.

решение1

Нет, вы не можете использовать chmod для изменения фундаментального типа файла. Но это файл не из-за каких-либо ошибок – это файл, потому что сервер Samba создал его как файл, и это само по себе может быть просто потому, что клиент на самом делеспросилдля создания файла с указанным содержимым.

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

Конкретный формат, который у вас есть, называетсяМиншалл+французскийсимволические ссылки, используемые macOS и модулем ядра Linux «cifs» — если общий ресурс смонтирован с этой mfsymlinksопцией, Linux распознает маркер «XSym» ипритворяетсячто это символическая ссылка на клиентские приложения. Так что если один клиент использует это, все остальные клиенты должны использовать ту же опцию.

К сожалению, если вы хотите иметьнастоящийсимволические ссылки на сервере, вам нужно будет использовать SMBверсия 1(он же "NT1") и убедитесь, что сервер и клиент поддерживают "CIFS Unix Extensions". И обратите внимание, что этонетпланируется работать с будущими расширениями SMBv3 POSIX — разработчики Samba прямо заявили, что они больше не хотят, чтобы существовала возможность создания символических ссылок на стороне сервера (из-за серьезных проблем безопасности), и что когда Samba получит поддержку функций POSIX в SMBv3, она продолжит создавать эти «специальные файлы».


В качестве другого ответа на первоначальный вопрос, это может бытьтехническиможно использовать инструменты типа «debugfs» для преобразования файла в символическую ссылку и обратно, но это сильно зависит от внутренних особенностей конкретной файловой системы. (Некоторые из них могут хранить символические ссылки точно так же, как обычные файлы, отличаясь только битами типа... но другие, такие как NTFS, могут иметь совершенно несовместимый формат.)

Но это обычно делается только при восстановлении сильно поврежденной файловой системы, а не в рамках нормальной работы. И, конечно, это не принесет ничего хорошего, если исходный файл "псевдо-символической ссылки" содержит данные в формате MF, так как этонеттот же формат, который будет использоваться внутри вашей файловой системы.

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