web-dev-qa-db-ja.com

あるマシンから別のマシンにシンボリックリンクとしてシンボリックリンクをコピーする方法は?

2つの同一のシステムがあるとしましょう。最初のシステムでは、シンボリックリンクを作成しました。 sftpを介してそのシンボリックリンクをコピーしたい2番目の場合、シンボリックリンクは同じように機能します(つまり、シンボリックリンクが/etc/にリンクしている場合、それをコピーすると、シンボリックリンクのみがコピーされ、シンボリックリンクのみがコピーされます(リンクされたファイル))

これを行う方法に関するアイデア/これができるかどうか? I onlyシンボリックリンクをコピーしたいだけです。参照のみ。

13
TheHidden

シンボリックリンクをタール化​​すると、好きな方法でリモートマシンにターボールをコピーできます。解凍すると、シンボリックリンクのみをコピーしたことに気付くでしょう。例えば:

これをテストするには、まずテキストファイルを作成しました。

echo this is a test > file.txt

次に、ファイルへのシンボリックリンクを作成し、それをtar gzipに圧縮します。

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

このファイルを他のマシンに転送し、解凍します。

tar xzvf tarball.tar.gz

シンボリックリンクはあるが、それが指し示していた元のファイルはないことがわかります。

もちろん、関係を維持しながら元のファイルとシンボリックリンクの両方を転送したい場合は、両方をtarballに入れれば両方が転送されますが、解凍したときにシンボリックリンクが元のファイルを正しく指しているはずです。宛先の場所にあるtarball。

12
mkrufky

シンボリックリンクをどのように処理したいのかが少し不明確です。私が理解しているように、他のシステムでシンボリックリンクを再作成したいと考えています。シンボリックリンクはファイルシステムに依存し、ファイルのコピーに使用されるプロトコルはそれを認識している必要があります。良い例は rsync-aオプション。

より具体的には、-lオプション、ただし-aはおそらくあなたが欲しいものです。

ターゲットをプルする(リンクを逆参照する)ことなく、シンボリックリンクを再作成します。

5
polemon

非常に簡単な解決策(ホームディレクトリ用):

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

または

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

例えば.

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

シンボリックリンクされた.bashrcを別の(ネットワークなど)宛先に配置するため。

3
Paul Neuwirth

私は@polemonがすでにこれに答えていることを知っています。

しかし、迅速な解決のために少しだけやっています。

使用したいスイッチを知るために、man rsyncを実行する必要がありました...

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

ただし、あなたの場合、リンクが壊れていないことを確認する必要があります!

3
HarshaD

他の回答は、シンボリックリンクを別のマシンに転送する方法をすでに説明しています。ただし、シンボリックリンクの転送方法に関係なく、このシンボリックリンクを使用してFTP、SFTP、SCP、SSH、またはその他の方法で/etc/のファイルにアクセスすることはできません。これらのサービスは、特定のディレクトリにchrootされるか、明示的に共有されていないファイルへのアクセスを提供できない傾向があります。もちろん、古いシステムでこれを回避する方法は常にありますが、そのような脆弱性は発見され次第、パッチを当ててアップグレードする傾向があります。申し訳ありませんが、あなたのやりたいことが実現できるとは思いません。

0
mkrufky