ファイルをシンボリックリンクに chmod するにはどうすればいいですか?

ファイルをシンボリックリンクに chmod するにはどうすればいいですか?

Samba 共有上のあるポイントから別のポイント (同じドライブ上) へのシンボリック リンクを作成すると、シンボリック リンクを保持するファイルは他のクライアント上では混乱しますが、元のクライアントでは混乱しません。

たとえば、リンクを作成するクライアントでは、シンボリック リンクは完全に機能し、再マウントした後でも元の OS によって認識されます。

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 を使用して、元の意図されたシンボリック リンクに「meep」する方法はありますか? 非常に役立ちます。

答え1

いいえ、chmodを使用してファイルの基本タイプを変更することはできません。しかし、これはバグが原因でファイルになっているわけではありません。Sambaサーバーがファイルとして作成したためファイルになっているのです。これは単にクライアントが実際に尋ねた特定の内容を含むファイルを作成します。

通常の SMB はシンボリックリンクについて何も認識せず、最も一般的な SMB サーバー (Windows) も長い間シンボリックリンクをサポートしていませんでした。その結果、さまざまな SMB クライアントがシンボリックリンクを奇妙な形の通常のファイルとして保存する方法を考案しました。

あなたが持っている特定のフォーマットはミンシャル+フランス語macOSとLinuxの「cifs」カーネルモジュールで使用されるシンボリックリンク – 共有がオプションでマウントされている場合mfsymlinks、Linuxは「XSym」マーカーを認識し、ふりをするこれはクライアント側アプリケーションへのシンボリックリンクです。したがって、1 つのクライアントがこれを使用する場合、他のすべてのクライアントも同じオプションを使用する必要があります。

残念ながら、もしあなたが本物サーバー上のシンボリックリンクにはSMBを使用する必要がありますv1(別名「NT1」)で、サーバーとクライアントの両方が「CIFS Unix Extensions」をサポートしていることを確認してください。これはない今後の SMBv3 POSIX 拡張機能で動作する予定ですが、Samba 開発者は、サーバー側のシンボリック リンクを作成する機能を今後は存在させたくない (重大なセキュリティ上の問題のため) と明確に述べており、Samba が SMBv3 で POSIX 機能のサポートを取得しても、それらの「特別なファイル」を作成し続けることになります。


元の質問に対する別の答えとしては、技術的に「debugfs」タイプのツールを使用してファイルをシンボリックリンクに変換したり、その逆を行ったりすることは可能ですが、これは特定のファイルシステムの内部に大きく依存します。(一部のファイルシステムでは、シンボリックリンクが通常のファイルとまったく同じように保存され、タイプビットのみが異なる可能性があります...ただし、NTFS などの他のファイルシステムでは、完全に互換性のない形式になっている可能性があります。)

しかし、これは通常、ひどく破損したファイルシステムを修復するときにのみ行われ、通常の操作の一部として行われるものではありません。そしてもちろん、元の「疑似シンボリックリンク」ファイルにMF形式のデータが含まれている場合は、何も役に立ちません。ないファイルシステムが内部で使用するのと同じ形式です。

関連情報