Wie wandelt man eine Datei mit CHMOD in einen symbolischen Link um?

Wie wandelt man eine Datei mit CHMOD in einen symbolischen Link um?

Beim Erstellen eines symbolischen Links auf einer Samba-Freigabe von einem Punkt zu einem anderen Punkt (auf demselben Laufwerk) wird die Datei, die den symbolischen Link enthält, auf anderen Clients durcheinandergebracht, jedoch nicht auf dem ursprünglichen Client.

Beispielsweise funktionieren die symbolischen Links auf dem Client, der die Verknüpfung erstellt, einwandfrei und werden vom ursprünglichen Betriebssystem erkannt, sogar nach der erneuten Bereitstellung:

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

Auf dem Server oder anderen Clients ist der Link jedoch eine Datei mit Inhalt wie diesem:

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

... mit Berechtigungen:

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

Also... im Grunde genommen... handelt es sich um eine Art Mount-Fehler oder so etwas, aber gibt es eine Möglichkeit, es mit chmod in den ursprünglich beabsichtigten symbolischen Link einzufügen? Das würde sehr helfen.

Antwort1

Nein, Sie können chmod nicht verwenden, um den grundlegenden Typ der Datei zu ändern. Aber es ist keine Datei, weil es irgendwelche Fehler gibt – es ist eine Datei, weil der Samba-Server sie als Datei erstellt hat, und das wiederum könnte einfach daran liegen, dass der Client tatsächlichfragtees, eine Datei mit diesen spezifischen Inhalten zu erstellen.

Normales SMB kennt keine symbolischen Links, und auch der gängigste SMB-Server (Windows) unterstützte lange Zeit keine symbolischen Links. Daher entwickelten verschiedene SMB-Clients Möglichkeiten, symbolische Links als seltsam geformte normale Dateien zu speichern.

Das spezifische Format, das Sie haben, heißtMinshall+FranzösischSymlinks, die von macOS und dem Linux-Kernelmodul „cifs“ verwendet werden – wenn die Freigabe mit der mfsymlinksOption gemountet wird, erkennt Linux den Marker „XSym“ undgibt vordass es sich um einen symbolischen Link zu clientseitigen Anwendungen handelt. Wenn also ein Client dies verwendet, müssen alle anderen Clients dieselbe Option ebenfalls verwenden.

Leider, wenn Sie haben wollenrealSymlinks auf dem Server müssen Sie SMB verwendenVersion 1(auch bekannt als "NT1") und stellen Sie sicher, dass Server und Client beide "CIFS Unix Extensions" unterstützen. Und beachten Sie, dass diesnichtgeplant für die Zusammenarbeit mit den kommenden SMBv3-POSIX-Erweiterungen – die Samba-Entwickler haben ausdrücklich erklärt, dass sie die Möglichkeit zum Erstellen serverseitiger symbolischer Links nicht mehr beibehalten möchten (aufgrund schwerwiegender Sicherheitsprobleme) und dass Samba diese „speziellen Dateien“ auch weiterhin erstellen wird, wenn es in SMBv3 Unterstützung für POSIX-Funktionen erhält.


Als andere Antwort auf die ursprüngliche Frage könnte man sagen:technischEs ist möglich, Tools vom Typ „Debugfs“ zu verwenden, um eine Datei in einen Symlink und zurück zu ändern, aber das hängt stark von den internen Vorgängen des jeweiligen Dateisystems ab. (Einige von ihnen speichern Symlinks möglicherweise genau wie normale Dateien und unterscheiden sich nur in den Typbits ... aber andere wie NTFS haben möglicherweise ein völlig inkompatibles Format.)

Dies wird jedoch normalerweise nur durchgeführt, wenn ein stark beschädigtes Dateisystem repariert wird, und nicht als Teil des normalen Betriebs. Und natürlich nützt es nichts, wenn die ursprüngliche „Pseudo-Symlink“-Datei Daten im MF-Format enthält, da diesnichtdasselbe Format, das Ihr Dateisystem intern verwenden würde.

verwandte Informationen