Ich habe einen Symlink mit diesen Berechtigungen:
lrwxrwxrwx 1 myuser myuser 38 Aug 18 00:36 npm -> ../lib/node_modules/npm/bin/npm-cli.js*
Der Symlink befindet sich in einem .tar.gz-Archiv. Wenn ich nun das tar.gz-Archiv mit maven entpacke, ist der Symlink nicht mehr gültig. Ich versuche daher, den Symlink zu rekonstruieren. Zuerst erstelle ich den Symlink mit ln, aber wie lege ich die gleichen Berechtigungen wie beim ursprünglichen Symlink fest?
Wenn Sie versuchen,
chmod
die Berechtigungen des Links festzulegen, müssen Sie tatsächlich die Berechtigungen des Ziels des Links festlegen. Die Berechtigungen des Links sind bedeutungslos.quelle
test
mit-rw-rw-r-- root root
, für dierm test
ich die Eingabeaufforderung erhalterm: remove write-protected regular empty file 'test'?
Die Lösung besteht darin, vertrauliche Dateien in Verzeichnissen abzulegen, für die Benutzer nur Lesezugriff haben.Wenn Sie einen Link haben wie:
und möchte es ändern in:
Es sind zwei Fälle zu berücksichtigen:
foo/bar
ist kein Verzeichnis oder existiert nicht oder Sie haben keinen Suchzugriff auffoo
. Dannwird scheitern, weil
link
bereits vorhanden, aber Sie können das mit dem Standard überwinden:foo/bar
ist ein Verzeichnis (und Sie haben die Suchberechtigungfoo
, um feststellen zu können, dassfoo/bar
es sich um ein Verzeichnis handelt). In diesem Fall tun Sie Folgendes:oder
Darunter versteht man das Erstellen eines neuen
target
Symlinks innerhalb deslink
Verzeichnisses (link
ist ein Verzeichnis, weil es ein Symlink zumfoo/bar
Verzeichnis ist). Sie erstellen also tatsächlich Folgendes:Um dies zu überwinden, hat GNU
ln
die-T
Option, dass der Linkname immer als Linkname und nicht als Verzeichnis zum Erstellen der Links betrachtet wird. Also mit GNUln
:wird funktionieren. Wie zuvor wird der ursprüngliche
link
Symlink entfernt und neunew/target
als Ziel erstellt (und der Prozess 'euid und egid als Eigentümer).GNU
ln
hat auch eine-n
Option. Es funktioniert so,-T
außer wennlink
es sich tatsächlich um ein echtes Verzeichnis handelt. In diesem Fall wird der Symlink immer noch in diesem Verzeichnis erstellt (anstatt mit einem Fehler fehlzuschlagen).Portabel ist es am besten, zuerst den Link zu entfernen und ihn dann neu zu erstellen:
Auf den meisten Systemen werden Berechtigungen für Symlinks ignoriert und im Allgemeinen auf festgelegt
rwxrwxrwx
.Auf Systemen, auf denen Symlink-Berechtigungen von Bedeutung sind (wie OS / X, auf denen Sie Leseberechtigungen für einen Symlink benötigen, um sein Ziel auflösen zu können), gibt es im Allgemeinen eine Möglichkeit, diese zu ändern (
chmod -h
unter OS / X).Der Besitz ist zwar wie oben für den Zugriff auf die Datei, auf die der Symlink verweist,
t
auf den meisten Systemen nicht relevant, kann jedoch für das Bit des übergeordneten Verzeichnisses oder der Kontingente eine andere Relevanz haben ... ) und es gibt einen Standardbefehl zum Ändern:quelle
Wenn Sie die Symlinks-Berechtigung wirklich ändern müssen (normalerweise bedeutungslos, wie in anderen Antworten beschrieben), konnte ich die folgenden
-R
Optionen erfolgreich verwendenchown
:Wenn
-R
nicht verwendet, wurden die Berechtigungen nicht geändert.quelle
chown
weil-R
es-P
dort impliziert ist, aber das ist nicht garantiert und wird in einigen anderen Chown-Implementierungen nicht funktionieren. Die Standardmethode zum Ändern der Symlink-Inhaberschaft ist die-h
Option. Ich habe gerade die akzeptierte Antwort aktualisiert, die falsch war.