Bagaimana cara menyalin symlink sebagai symlink dari satu mesin ke mesin lainnya?

13

Anggaplah saya memiliki dua sistem yang identik. Pada sistem pertama saya telah membuat tautan simbolik. Pada yang kedua saya ingin menyalin symlink itu melalui sftp dan symlink akan berfungsi sama (yaitu jika symlink terhubung ke /etc/, setelah menyalinnya, hanya symlink yang akan disalin dan hanya symlink (bukan file yang ditautkan))

Ada ide tentang bagaimana saya bisa melakukan ini / jika saya bisa melakukan ini? Saya hanya ingin menyalin tautan simbolis, tidak ada yang lain; hanya referensi.

Yang Tersembunyi
sumber
itu tidak berfungsi seperti yang sudah Anda jelaskan?
mikeserv
1
sftptidak akan membiarkan kamu melakukan itu. rsyncbisa, seperti yang bisassh cp ...
roaima
Hal yang saya coba capai adalah menyalin di atas peta simbolis ... Saya tidak ingin file .. Saya hanya ingin sedikit kode yang mengatakan FOLDER> DLL ... Saya hanya ingin membuat symlink dari server dan memindahkan ke server yang diperlukan pada ... saya mencoba untuk meretas file terlampir
TheHidden
1
@roaima ssh cp? seperti di scp? bagaimana?
technical_difficulty

Jawaban:

12

Jika Anda memasang symlink, maka Anda dapat menyalin tarball ke mesin jarak jauh dengan cara apa pun yang Anda suka. Saat Anda membukanya, Anda akan menemukan bahwa Anda hanya menyalin tautan simbolis dan tidak ada yang lain. Sebagai contoh:

Untuk mengujinya, pertama-tama saya membuat file teks.

echo this is a test > file.txt

Kemudian buat symlink ke file dan kompres menjadi tar gzip.

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

Transfer file ini ke komputer Anda yang lain dan kemudian kompres:

tar xzvf tarball.tar.gz

Anda akan menemukan bahwa symlink ada di sana, tetapi bukan file asli yang ditunjuknya.

Tentu saja, jika Anda ingin mentransfer file asli dan symlink sambil mempertahankan hubungan mereka, Anda dapat menempatkan keduanya di tarball dan keduanya akan ditransfer, dan symlink masih harus diarahkan dengan benar ke file asli ketika Anda membuka kompres tarball di lokasi tujuan.

mkrufky
sumber
ini agak menarik tetapi sayangnya saya tidak berpikir itu akan membantu saya, saya tidak punya kendali atas budak semua SFTP ini dilakukan melalui API untuk mengunci folder, tapi saya mencoba untuk meretas kotak menggunakan symlink karena ada sedikit darurat dan saya perlu mendapatkan akses dari master yang mendorong pembaruan yang dipilih, untuk alasan keamanan file yang saya kirim tidak dieksekusi, tetapi jika saya dapat symlink saya dapat menyuntikkan kode ke dalam proses yang sudah ada (secara teoritis) dengan mengganti file melalui symlink ... tetapi untuk melakukannya saya perlu menyalin symlink lebih dari 100% mentah :(
TheHidden
@ user1779617 Masih agak tidak jelas apa yang Anda maksud dengan "slave" dan "master", karena Anda tampaknya menggunakan kedua istilah untuk server dan klien secara bergantian. Jika Anda perlu membuat symlink di server , Anda dapat melakukannya dengan SFTP, namun tergantung pada konfigurasi, Anda mungkin tidak dapat melihat di luar ranah chroot dari daemon SFTP. Silakan merujuk ke halaman manual sftp( linux.die.net/man/1/sftp )! Ada perintah symlinkkhusus untuk apa yang tampaknya Anda butuhkan.
polemon
5

Agak tidak jelas bagaimana tepatnya Anda ingin berurusan dengan symlink. Seperti yang saya pahami, Anda ingin membuat ulang symlink di sistem lain. Symlink bergantung pada sistem file, protokol yang digunakan untuk menyalin file harus menyadari hal itu. Sebuah contoh yang baik adalah menggunakan rsyncdengan -apilihan.

lebih khusus, -lopsi, tetapi -amungkin apa yang Anda inginkan.

Ini akan membuat ulang symlinks tanpa menarik target lebih dari (mendeferensikan tautan).

polemon
sumber
Saya melihat hm, jadi tidak ada cara untuk menyalinnya seperti file dan mempertahankan tautannya? Saya hanya memiliki kemampuan untuk memindahkan file secara langsung, saya berharap untuk membangun symlink pada sistem yang sama dan menyalinnya atau apakah saya hanya berharap?
TheHidden
@ user1779617 pertama-tama: ketika Anda mengatakan "pindah", apakah Anda benar-benar berarti "pindah" atau "salin"? Karena "pindah" berarti menghapus file asli (ini juga alasan mengapa saya mengedit pertanyaan Anda). Hal kedua: apakah Anda terbatas pada protokol transfer file tertentu (seperti FTP saja)? Jika demikian, kita harus membahasnya dalam lingkup itu, dan sistem file yang sedang kita bicarakan.
polemon
Hanya SFTP, unduh hanya dari mesin yang membutuhkan symlink, jadi maksud saya salin dari master ke slave SFTP saja dan koneksi sftp dari slave saja.
TheHidden
@ user1779617 Saya anggap Anda maksud "klien" (budak) dan "server" (master). sftpakan melintasi subdirektori dengan -rsakelar, tetapi tidak mengikuti symlink, karena abstrak sistem file. sftpmendukung pembuatan symlink di host. Anda setidaknya harus mencoba mengunduh hanya symlink (ketika symlink adalah ~/etc-> /etc/lakukan get etctanpa trailing /) dan lihat apa yang terjadi. Itu tergantung pada FS dari server dan klien. Harap edit pertanyaan awal Anda sesuai!
polemon
3

Saya tahu @polemon telah menjawab ini.

Tetapi melakukan sedikit tad untuk solusi cepat.

Saya harus melakukan man rsync untuk mengetahui saklar mana yang ingin saya gunakan ...

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

Meskipun, dalam kasus Anda, Anda perlu memastikan bahwa tautan tidak rusak!

HarshaD
sumber
2

Solusi yang sangat mudah (untuk direktori home):

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

atau

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

misalnya

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

untuk memberikan penempatan .bashrc yang disinkronkan ke tujuan (misalnya jaringan) lain.

Paul Neuwirth
sumber
0

Jawaban lain sudah menjelaskan cara mentransfer tautan simbolis ke komputer lain. Namun, terlepas dari bagaimana Anda mentransfer symlink, Anda tidak akan dapat menggunakan symlink ini untuk mengakses file /etc/melalui FTP, SFTP, SCP, SSH atau cara lainnya. Layanan ini cenderung chroot ke direktori yang diberikan atau dicegah dari memberikan akses ke file yang tidak dibagikan secara eksplisit. Tentu saja, selalu ada cara untuk meretas ini pada sistem yang lebih lama, tetapi kerentanan seperti itu cenderung ditambal dan ditingkatkan segera setelah ditemukan. Maaf, saya tidak berpikir apa yang ingin Anda lakukan akan mungkin terjadi.

mkrufky
sumber
cukup adil, setidaknya saya mencoba kurasa :(
TheHidden