Sembolleri bir makineden diğerine sembolik olarak nasıl kopyalarım?


13

İki özdeş sistemim olduğunu varsayalım. İlk sistemde sembolik bir bağ oluşturdum. İkincisinde, bu symlink'i sftp yoluyla kopyalamak istiyorum ve symlink aynı şekilde çalışacaktır (yani, syinkink /etc/kopyalandığında, sadece symlink kopyalanacak ve sadece syinkink (bağlı dosyalar değil))

Bunu nasıl yapabileceğim hakkında bir fikrim var mı / bunu yapabilir miyim? Ben sadece sembolik bağlantıyı kopyalamak istediğiniz, başka bir şey; sadece referans.


daha önce açıkladığınız gibi çalışmıyor mu?
mikeserv

1
sftpbunu yapmana izin vermeyeceğim. rsyncolabilir, olduğu gibissh cp ...
roaima

Ulaşmaya çalıştığım şey sembolik haritayı kopyalamak ... Dosyaları istemiyorum .. Sadece FOLDER> VB yazan kodun biraz olmasını istiyorum ... Sadece sunucudan bir sembolik bağlantı oluşturmak ve hareket etmek istiyorum sunucuya gerekli ... im kapalı bir dosyadan kesmek için çalışıyor
TheHidden

1
@roaima ssh cp? scp gibi? Nasıl?
technical_difficulty

Yanıtlar:


12

Symlink'i katlarsanız, tarball'ı uzaktaki makineye istediğiniz şekilde kopyalayabilirsiniz. Yıldız işaretini kaldırdığınızda, yalnızca sembolik bağlantıyı kopyaladığınızı ve başka hiçbir şeyin kopyalanmadığını göreceksiniz. Örneğin:

Bunu test etmek için önce bir metin dosyası oluşturdum.

echo this is a test > file.txt

Ardından dosyaya bir sembolik bağlantı oluşturun ve bir tar gzip'e sıkıştırın.

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

Bu dosyayı diğer makinenize aktarın ve ardından açın:

tar xzvf tarball.tar.gz

Symlink'in orada olduğunu, ancak işaret ettiği orijinal dosyanın olmadığını göreceksiniz.

Tabii ki, ilişkilerini korurken hem orijinal dosyayı hem de symlink'i aktarmak isterseniz, bunları hem tarball'a koyabilirsiniz hem de her ikisi de aktarılır ve sıkıştırmayı açtığınızda symlink yine de orijinal dosyaya doğru şekilde yönlendirilmelidir. hedef konumda tarball.


Bu oldukça ilginç ama ne yazık ki bana yardımcı olacağını sanmıyorum, tüm bu SFTP'lerin klasörleri kilitlemek için API'ler aracılığıyla yapıldığı için köle üzerinde herhangi bir kontrole sahip değilim, ancak kutularını kullanarak kutuyu hacklemeye çalışıyorum çünkü biraz bir acil durum ve ben seçtiğim güncellemeleri iten master'dan erişmem gerekiyor, güvenlik nedenlerinden dolayı gönderdiğim dosyalar yürütülmüyor, ancak symlink yapabilirsem, dosyayı symlink aracılığıyla değiştirerek zaten mevcut bir sürece (teorik olarak) kod enjekte edebilirim ... ama bunu yapmak için% 100 üzerinde bir symlink kopyalamak gerekir :(
TheHidden

@ user1779617 "Slave" ve "master" ile ne demek istediğiniz hala belirsiz. Sunucuda bir symlink oluşturmanız gerekiyorsa , bunu SFTP ile yapabilirsiniz, ancak yapılandırmaya bağlı olarak, SFTP-arka plan programının köklenmiş alanının dışına bakamayabilirsiniz. Lütfen sftp( linux.die.net/man/1/sftp ) kılavuz sayfasına bakınız ! symlinkİhtiyacınız olan şey için özel bir komut var .
polemon

5

Symlink ile tam olarak nasıl başa çıkmak istediğinizi biraz belirsiz. Anladığım kadarıyla, diğer sistemde sembolik bağlantıyı yeniden oluşturmak istiyorsunuz. Simgeler dosya sistemine bağımlıdır, dosyaları kopyalamak için kullanılan protokolün farkında olmalıdır. İyi bir örnek seçeneği rsyncile kullanmaktır -a.

daha spesifik olarak, -lseçenek, ama -amuhtemelen istediğiniz şeydir.

Hedefleri çekmeden sembolik linkleri yeniden oluşturacaktır (linklerin kaydının silinmesi).


Ben hm görüyorum, bu yüzden bir dosya gibi kopyalamak ve bağlantıyı korumak için hiçbir yolu olmaz? Ben sadece aynı sistem üzerinde symlink oluşturmak ve kopyalamak umuyordum üzerinden dosyaları doğrudan taşıma yeteneği var ya da ben sadece umutlu olmak mı?
TheHidden

@ user1779617 her şeyden önce: "taşı" derken, aslında "taşı" ya da "kopyala" mı demek istersiniz? Çünkü "taşıma" orijinal dosyayı silmeyi gerektirir (bu aynı zamanda sorunuzu düzenlememin nedenidir). İkinci şey: Belirli bir dosya aktarım protokolüyle sınırlı mısınız (sadece FTP gibi)? Öyleyse, bunu ve bahsettiğimiz dosya sistemlerini ele almalıyız.
polemon

Yalnızca SFTP, yalnızca symlink'e ihtiyaç duyan makineden indirin, yani master'dan slave'e sadece SFTP'ye kopyalayın ve sftp bağlantısı sadece slave'den.
TheHidden

@ user1779617 "istemci" (slave) ve "sunucu" (master) demek istediğinizi varsayıyorum. sftpalt dizinleri -ranahtarla gezer, ancak dosya sistemlerini soyutladığı için sembolik bağlantıları izlemez. sftpana bilgisayarda sembolik linkler oluşturmayı destekler. En az indirirken denemelisiniz sadece sembolik (sembolik köprü ise ~/etc-> /etc/do get etcsondaki olmadan /) ve ne olduğunu görün. Sunucunun ve istemcinin FS'sine bağlıdır. Lütfen orijinal sorunuzu buna göre düzenleyin!
polemon

3

Çok kolay bir çözüm (giriş dizini için):

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

veya

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

Örneğin

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

başka bir (ör. ağ) hedefe sembolik bir .bashrc yerleştirme sağlamak için.


3

@Polemon'un bunu zaten yanıtladığını biliyorum.

Ama hızlı çözüm için biraz işimi yapıyorum.

Hangi anahtarı kullanmak istediğimi bilmek için adam rsync yapmak zorunda kaldım ...

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

Yine de, sizin durumunuzda linklerin bozuk olmadığından emin olmanız gerekir!


0

Diğer cevaplar, sembolik bir bağlantının başka bir makineye nasıl aktarılacağını zaten açıklıyor. Ancak, sembolik bağlantınızı nasıl aktardığınızdan bağımsız olarak, /etc/FTP, SFTP, SCP, SSH veya başka bir yolla bir dosyaya erişmek için bu sembolik bağlantıyı kullanamazsınız . Bu hizmetler belirli bir dizine bağlanma eğilimindedir veya açıkça paylaşılmayan dosyalara erişim sağlaması engellenir. Tabii ki, eski sistemlerde bu sorunu çözmenin her zaman yolları vardır, ancak bu tür güvenlik açıkları bulunur bulunmaz güncellenir ve güncellenir. Özür dilerim, yapmak istediğin şeyin mümkün olacağını düşünmüyorum.


yeterince adil, en azından denedim sanırım :(
TheHidden
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.