Wie kopiere ich Symlinks als Symlinks von einem Computer auf einen anderen?

12

Nehmen wir an, ich habe zwei identische Systeme. Auf dem ersten System habe ich einen symbolischen Link erstellt. Beim zweiten möchte ich diesen Symlink über SFTP kopieren und der Symlink soll genauso funktionieren (dh wenn der Symlink /etc/nach dem Kopieren auf ihn verweist, wird nur der Symlink und nur der Symlink (nicht die verknüpften Dateien) kopiert).

Irgendwelche Ideen, wie ich das machen kann / ob ich das kann? Ich möchte nur den symbolischen Link kopieren, sonst nichts; nur die Referenz.

Der Versteckte
quelle
es funktioniert nicht so wie du es schon beschreibst?
Mikeserv
1
sftpIch werde dich das nicht tun lassen. rsynccan, as canssh cp ...
Roaima
Das, was ich erreichen möchte, ist das Kopieren über die symbolische Karte ... Ich möchte nicht die Dateien ... Ich möchte nur den Code, der FOLDER> ETC sagt ... Ich möchte nur einen Symlink vom Server erstellen und verschieben es auf den Server sein benötigt auf ...
Ich
1
@roaima ssh cp? wie in scp? Wie?
Technical_difficulty

Antworten:

11

Wenn Sie den Symlink tarieren, können Sie den Tarball nach Belieben auf den Remote-Computer kopieren. Wenn Sie es entpacken, werden Sie feststellen, dass Sie nur den symbolischen Link kopiert haben und sonst nichts. Beispielsweise:

Um dies zu testen, habe ich zuerst eine Textdatei erstellt.

echo this is a test > file.txt

Erstellen Sie dann einen Symlink zur Datei und komprimieren Sie ihn zu einem tar gzip.

ln -s file.txt link.lnk
tar czvf tarball.tar.gz link.lnk

Übertragen Sie diese Datei auf Ihren anderen Computer und dekomprimieren Sie sie dann:

tar xzvf tarball.tar.gz

Sie werden feststellen, dass der Symlink vorhanden ist, jedoch nicht die Originaldatei, auf die er verwiesen hat.

Wenn Sie sowohl die Originaldatei als auch den Symlink übertragen möchten, während ihre Beziehung erhalten bleibt, können Sie beide in den Tarball einfügen, und beide werden übertragen, und der Symlink sollte beim Dekomprimieren immer noch korrekt auf die Originaldatei verweisen der Tarball am Zielort.

mkrufky
quelle
Das ist ziemlich interessant, aber leider glaube ich nicht, dass es mir helfen wird. Ich habe keine Kontrolle über den Slave. Alle diese SFTPs werden über APIs ausgeführt, um Ordner zu sperren, aber ich versuche, die Box mit Symlinks zu hacken, weil es ein bisschen gibt Im Notfall muss ich vom Master Zugriff erhalten, der ausgewählte Aktualisierungen überträgt. Aus Sicherheitsgründen werden die von mir gesendeten Dateien nicht ausgeführt. Wenn ich jedoch einen Symlink erstellen kann, kann ich (theoretisch) Code in einen bereits vorhandenen Prozess einfügen, indem ich die Datei über den Symlink ersetze ... aber dazu muss ich einen Symlink über 100% roh kopieren :(
TheHidden
@ user1779617 Es ist immer noch unklar, was Sie mit "Slave" und "Master" meinen, da Sie beide Begriffe für Server und Client austauschbar zu verwenden scheinen. Wenn Sie einen Symlink auf dem Server erstellen müssen , können Sie dies mit SFTP tun. Abhängig von der Konfiguration können Sie jedoch möglicherweise nicht außerhalb des Chroot-Bereichs des SFTP-Daemons suchen. Bitte beziehen Sie sich auf die Manpage von sftp( linux.die.net/man/1/sftp )! Es gibt den Befehl symlinkspeziell für das, was Sie zu brauchen scheinen.
Polemon
5

Es ist ein wenig unklar, wie genau Sie mit dem Symlink umgehen möchten. Soweit ich weiß, möchten Sie den Symlink auf dem anderen System neu erstellen. Symlinks sind vom Dateisystem abhängig. Das zum Kopieren von Dateien verwendete Protokoll muss dies berücksichtigen. Ein gutes Beispiel ist die Verwendung rsyncmit der -aOption.

Genauer gesagt, die -lOption, ist aber -awahrscheinlich das, was Sie wollen.

Es werden Symlinks neu erstellt, ohne dass die Ziele überfahren werden (Dereferenzierung der Links).

Polemon
quelle
Ich sehe hm, also gibt es keine Möglichkeit, es wie eine Datei zu kopieren und den Link beizubehalten? Ich habe nur die Möglichkeit, Dateien direkt zu verschieben. Ich hatte gehofft, den Symlink auf dem identischen System zu erstellen und zu kopieren, oder bin ich nur zu hoffnungsvoll?
TheHidden
@ user1779617 zuallererst: Wenn du "verschieben" sagst, meinst du dann tatsächlich "verschieben" oder "kopieren"? Weil "Verschieben" das Löschen der Originaldatei bedeutet (dies war auch der Grund, warum ich Ihre Frage bearbeitet habe). Zweitens: Sind Sie auf ein bestimmtes Dateiübertragungsprotokoll beschränkt (wie nur FTP)? Wenn ja, sollten wir es im Rahmen dieses Themas und der Dateisysteme, über die wir sprechen, diskutieren.
Polemon
Nur SFTP, nur von dem Computer herunterladen, der den Symlink benötigt, also meine ich, kopiere nur vom Master auf den Slave SFTP und die SFTP-Verbindung ist nur vom Slave.
TheHidden
@ user1779617 Ich gehe davon aus, dass Sie "Client" (Slave) und "Server" (Master) meinen. sftpDurchläuft mit dem -rSwitch Unterverzeichnisse , folgt jedoch keinen Symlinks, da Dateisysteme abstrahiert werden. sftpunterstützt das Erstellen von Symlinks auf dem Host. Sie sollten zumindest versuchen, nur den Symlink herunterzuladen (wenn der Symlink ist ~/etc-> verzichten /etc/Sie get etcauf das Trailing /) und sehen, was passiert. Dies hängt vom FS des Servers und des Clients ab. Bitte bearbeiten Sie Ihre ursprüngliche Frage entsprechend!
Polemon
2

Eine sehr einfache Lösung (für das Home-Verzeichnis):

tar -c SYMLINKFILE | ssh machine 'tar -x'

oder

tar -c SYMLINKFILE | ssh machine 'tar -xC /some/other/location  '

z.B

tar -c .bashrc | ssh another_machine 'tar -x'

um eine symlinked .bashrc-Platzierung an einem anderen (z. B. Netzwerk-) Ziel bereitzustellen.

Paul Neuwirth
quelle
2

Ich weiß, dass @polemon dies bereits beantwortet hat.

Aber ich tue mein bisschen für eine schnelle Lösung.

Ich musste man rsync machen, um zu wissen, welchen Schalter ich verwenden möchte ...

rsync -avz -e ssh /file or sym link/to/copy/ user@ip:/dest/path/

In Ihrem Fall müssen Sie jedoch sicherstellen, dass die Links nicht beschädigt werden!

HarshaD
quelle
0

In den anderen Antworten wird bereits erläutert, wie eine symbolische Verknüpfung auf eine andere Maschine übertragen wird. Unabhängig davon, wie Sie den Symlink übertragen, können Sie diesen Symlink jedoch nicht verwenden, um /etc/über FTP, SFTP, SCP, SSH oder auf andere Weise auf eine Datei zuzugreifen . Diese Dienste werden in der Regel in ein bestimmtes Verzeichnis verschoben oder auf andere Weise daran gehindert, Zugriff auf Dateien zu gewähren, die nicht explizit freigegeben wurden. Natürlich gibt es auf älteren Systemen immer Möglichkeiten, dies zu umgehen, aber solche Schwachstellen werden in der Regel behoben und aktualisiert, sobald sie gefunden werden. Es tut mir leid, ich glaube nicht, dass das, was Sie tun möchten, möglich sein wird.

mkrufky
quelle
fair genug, zumindest habe ich versucht, denke ich :(
TheHidden