วิธีการคัดลอก symlink เป็น symlink จากเครื่องหนึ่งไปยังอีกเครื่องหนึ่ง?


13

สมมติว่าฉันมีสองระบบเหมือนกัน ในระบบแรกฉันได้สร้างลิงค์สัญลักษณ์ ในอันที่สองฉันต้องการคัดลอก symlink ผ่าน sftp และ symlink จะทำงานเหมือนกัน (เช่นถ้า symlink ลิงก์ไปยัง/etc/หลังจากคัดลอกไปแล้วเฉพาะ symlink เท่านั้นที่จะถูกคัดลอกและ symlink เท่านั้น (ไม่ใช่ไฟล์ที่เชื่อมโยง))

ความคิดเห็นใด ๆ เกี่ยวกับวิธีที่ฉันสามารถทำได้ / หากฉันสามารถทำได้ ฉันเพียงต้องการคัดลอกการเชื่อมโยงสัญลักษณ์อะไรอย่างอื่น; เพียงการอ้างอิง


มันไม่ทำงานเหมือนที่คุณอธิบายไปแล้วใช่ไหม
mikeserv

1
sftpจะไม่ปล่อยให้คุณทำอย่างนั้น rsyncสามารถ, สามารถssh cp ...
roaima

สิ่งที่ฉันพยายามทำให้สำเร็จคือการคัดลอกไปที่แผนที่สัญลักษณ์ ... ฉันไม่ต้องการไฟล์ .. ฉันแค่ต้องการโค้ดที่บอกว่า FOLDER> ETC ... ฉันแค่ต้องการสร้าง symlink จากเซิร์ฟเวอร์และย้าย ไปยังเซิร์ฟเวอร์ที่ต้องการ ... ฉันกำลังพยายามแฮ็คไฟล์ที่แนบมาด้วย
TheHidden

1
@roaima ssh cp? เช่นเดียวกับใน SCP? อย่างไร
technical_difficulty

คำตอบ:


12

หากคุณ tar symlink จากนั้นคุณสามารถคัดลอก tarball ไปยังเครื่องระยะไกลได้ตามที่คุณต้องการ เมื่อคุณปลดล็อคมันคุณจะพบว่าคุณได้คัดลอกลิงค์สัญลักษณ์และไม่มีอะไรอื่นอีกแล้ว ตัวอย่างเช่น:

เพื่อทดสอบสิ่งนี้อันดับแรกฉันสร้างไฟล์ข้อความ

echo this is a test > file.txt

จากนั้นสร้าง symlink ไปยังไฟล์และบีบอัดลงใน tar gzip

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

ถ่ายโอนไฟล์นี้ไปยังเครื่องอื่นของคุณแล้วยกเลิกการบีบอัดมัน:

tar xzvf tarball.tar.gz

คุณจะพบว่า symlink อยู่ที่นั่น แต่ไม่ใช่ไฟล์ต้นฉบับที่ชี้ไป

แน่นอนถ้าคุณต้องการถ่ายโอนทั้งไฟล์ต้นฉบับและ symlink ในขณะที่รักษาความสัมพันธ์ไว้คุณสามารถใส่ทั้งใน tarball และทั้งคู่จะถูกถ่ายโอนและ symlink ควรชี้ไปยังไฟล์ต้นฉบับอย่างถูกต้องเมื่อคุณคลายการบีบอัด tarball ในตำแหน่งปลายทาง


นี่ค่อนข้างน่าสนใจ แต่น่าเสียดายที่ฉันไม่คิดว่ามันจะช่วยฉันฉันไม่สามารถควบคุมทาสทั้งหมด SFTPs เหล่านี้จะทำผ่าน APIs เพื่อล็อคโฟลเดอร์ แต่ฉันพยายามแฮ็คกล่องโดยใช้ symlinks เพราะมีบิตของ ฉุกเฉินและฉันต้องได้รับการเข้าถึงจากต้นแบบที่ผลักดันการปรับปรุงที่เลือกไว้ด้วยเหตุผลด้านความปลอดภัยไฟล์ที่ฉันส่งไม่ทำงาน แต่ถ้าฉันสามารถ symlink ฉันสามารถฉีดรหัสเป็นกระบวนการที่มีอยู่แล้ว (ในทางทฤษฎี) โดยการแทนที่ไฟล์ผ่าน symlink ... แต่เพื่อทำฉันต้องคัดลอก symlink มากกว่า 100% raw :(
TheHidden

@ user1779617 ยังคงไม่ชัดเจนว่าคุณหมายถึงอะไรกับ "slave" และ "master" เพราะคุณดูเหมือนจะใช้คำทั้งสองสำหรับทั้งเซิร์ฟเวอร์และไคลเอนต์แทนกัน หากคุณต้องการสร้าง symlink บนเซิร์ฟเวอร์คุณสามารถทำได้ด้วย SFTP อย่างไรก็ตามขึ้นอยู่กับการกำหนดค่าคุณอาจไม่สามารถมองออกไปนอกอาณาจักรที่ chrooted ของ SFTP-daemon โปรดดูหน้าคนของsftp( linux.die.net/man/1/sftp )! มีคำสั่งsymlinkเฉพาะสำหรับสิ่งที่คุณต้องการ
polemon

5

มันค่อนข้างชัดเจนว่าคุณต้องการจัดการกับ symlink อย่างไร ตามที่ฉันเข้าใจคุณต้องการสร้าง symlink บนระบบอื่น Symlinks ขึ้นอยู่กับระบบไฟล์โปรโตคอลที่ใช้ในการคัดลอกไฟล์จะต้องตระหนักถึงสิ่งนั้น ตัวอย่างที่ดีคือการใช้rsyncกับ-aตัวเลือก

โดยเฉพาะอย่างยิ่ง-lตัวเลือก แต่-aอาจเป็นสิ่งที่คุณต้องการ

มันจะสร้าง symlink ขึ้นมาใหม่โดยไม่ต้องดึงเป้าหมายทับ (ยกเลิกการอ้างอิงลิงก์)


ฉันเห็นอืมดังนั้นจะไม่มีวิธีการคัดลอกมันเหมือนไฟล์และเก็บลิงค์หรือไม่ ฉันมีความสามารถในการย้ายไฟล์โดยตรงที่ฉันหวังว่าจะสร้าง symlink ในระบบที่เหมือนกันและคัดลอกมันไปหรือฉันแค่หวัง
TheHidden

@ user1779617 ก่อนอื่น: เมื่อคุณพูดว่า "ย้าย" คุณหมายถึง "ย้าย" หรือ "คัดลอก" จริงหรือไม่? เนื่องจาก "ย้าย" แสดงถึงการลบไฟล์ต้นฉบับ (นี่เป็นเหตุผลว่าทำไมฉันจึงแก้ไขคำถามของคุณ) สิ่งที่สอง: คุณ จำกัด โปรโตคอลการถ่ายโอนไฟล์เฉพาะ (เช่น FTP เท่านั้น) หรือไม่ ถ้าเป็นเช่นนั้นเราควรพูดคุยกันภายในขอบเขตของสิ่งนั้นและระบบไฟล์ที่เรากำลังพูดถึง
polemon

SFTP เท่านั้นดาวน์โหลดจากเครื่องที่ต้องการ symlink เท่านั้นดังนั้นฉันหมายถึงการคัดลอกจากต้นแบบไปยัง SFTP สลาฟเท่านั้นและการเชื่อมต่อ sftp นั้นมาจากสลาฟเท่านั้น
TheHidden

@ user1779617 ฉันถือว่าคุณหมายถึง "ลูกค้า" (ทาส) และ "เซิร์ฟเวอร์" (หลัก) sftpจะสำรวจไดเรกทอรีย่อยด้วย-rสวิตช์ แต่ไม่ติดตาม symlink เนื่องจากเป็นนามธรรมระบบไฟล์ sftpรองรับการสร้าง symlink บนโฮสต์ อย่างน้อยคุณควรลองดาวน์โหลดเพียงแค่ symlink (เมื่อ symlink คือ~/etc-> /etc/ทำget etcโดยไม่มีการติดตาม/) และดูว่าเกิดอะไรขึ้น ขึ้นอยู่กับ FS ของเซิร์ฟเวอร์และไคลเอนต์ โปรดแก้ไขคำถามเดิมของคุณตาม!
polemon

3

ทางออกที่ง่ายมาก (สำหรับโฮมไดเรกทอรี):

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

ฉันรู้ว่า @polemon ได้ตอบไปแล้ว

แต่การทำบิตของฉันเพื่อแก้ปัญหาอย่างรวดเร็ว

ฉันต้องทำ rsync ของมนุษย์เพื่อทราบว่าฉันต้องการใช้สวิตช์ใด ...

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

ถึงแม้ว่าในกรณีของคุณคุณต้องแน่ใจว่าลิงก์ไม่เสียหาย!


0

คำตอบอื่น ๆ ได้อธิบายวิธีการโอนลิงค์สัญลักษณ์ไปยังเครื่องอื่นแล้ว อย่างไรก็ตามไม่ว่าคุณจะถ่ายโอน symlink อย่างไรคุณจะไม่สามารถใช้ symlink นี้เพื่อเข้าถึงไฟล์/etc/ผ่าน FTP, SFTP, SCP, SSH หรือวิธีอื่นใด บริการเหล่านี้มีแนวโน้มที่จะ chrooted ไปยังไดเรกทอรีที่กำหนดหรือป้องกันมิให้การเข้าถึงไฟล์ที่ไม่ได้ใช้ร่วมกันอย่างชัดเจน แน่นอนว่ามีวิธีการแฮ็กข้อมูลในระบบเก่าอยู่เสมอ แต่ช่องโหว่ดังกล่าวมีแนวโน้มที่จะได้รับการติดตั้งและอัปเกรดทันทีที่พบ ฉันขอโทษฉันไม่คิดว่าสิ่งที่คุณต้องการจะเป็นไปได้


ยุติธรรมพอฉันพยายามอย่างน้อยฉันเดา :(
TheHidden
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.