Linux'ta bir dosyayı nasıl bağlayabilirim? [kapalı]


1939

Linux'ta sembolik bir bağ kurmak istiyorum. İlk yolun içine bağlanmak istediğim klasör ve ikinci yol derlenmiş kaynak olduğu bu Bash komutunu yazdım.

ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal 

Bu doğru mu?


Muhtemelen bu soruyu unix.stackexchange.com
Guss

Yanıtlar:


3677

Yeni bir simge bağlantısı oluşturmak için (simge bağlantısı zaten varsa başarısız olur):

ln -s /path/to/file /path/to/symlink

Bir sembolik bağlantı oluşturmak veya güncellemek için:

ln -sf /path/to/file /path/to/symlink

381
@micapam lnSözdizimi sözdizimine benzer cp, örn. kaynak hedef .
Andrey

157
İşte sizin için bir anımsatıcı: l (i) n (k) -s (ymbolic) <target> <isteğe bağlı ad> (son parametrenin isteğe bağlı olması, hedef olmadığını anlamanıza yardımcı olur) (btw
Symlink

32
@micapam Tıpkı cpolduğu CoPy, lnolduğunu LiNk. Birinci ve üçüncü harfler.
Cole Johnson

68
Bunun neden işe yaramadığını anlamaya çalışmak için birkaç dakika geçirdim. Kendinden döngülü bir bağlantı oluşturdu. Görünüşe göre / path / to / file mutlak olmalı ve "geçerli klasöre" göreli olmamalıdır. Belki de cevapta bu konuya dikkat çekmelisiniz?
Abhishek Anand

52
@AbhishekAnand bir kaç yıl oldu, ama sadece o not bırakmak istedik yapar göreli yollar ile iş; sadece geçerli dizine değil, sonuçtaki sembolik bağlantının dizinine göreli olması gerekir. İlk yol argümanı olarak yazdığınız şey aslında, kelimeyle, sembolik bağın içinde olacak metin; bu yüzden göreli olduğunda, bağlantıya göreli olmalıdır.
JoL

302
ln -s TARGET LINK_NAME

Nerede -ssembolik yapar.


2
HEDEF ve LINKNAME hatırlamanın daha iyi yoludur. sytink kullanımı silmek için btw:unlink LINK_NAME
Silvan

31
Ben ifade bu şekilde mi: ln -s where-the-symlink-should-point where-to-place-the-symlink-itself.
totymedli

@Silvan, bir symlink'i silebilirsiniz rm, ancak çoğu kişi arkadan kaldırmayı bilmiyor /.
FreeSoftwareServers

288
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME

2
Kabul edilen cevaptan daha iyi ve kesin kısalık ile kaplı.
Josh Habdas

3
Ancak yeni symlink adı değil. Adı içeren yeni sembolik bağlantının adı veya tam yoludur (cur dir veya mutlak olarak göreceli).
David Spector

ln -s EXISTING_FILE_OR_DIRECTORY {/ SYMLINK_NAME için isteğe bağlı yol ve bir dizin olmadığı için sembolik bağın sonuna eğik çizgi koymayın
comfytoday


88

(Çünkü bir ASCII resmi bin karaktere bedeldir.)

Bir ok yararlı bir anımsatıcı olabilir, özellikle Emacs'ın direktifinde neredeyse tam olarak böyle görünüyor.

Ve büyük resim, böylece Windows sürümü ile karıştırılmasın

Linux:

ln -s target <- linkName

Pencereler:

mklink linkName -> target

Bunlara şu şekilde de bakabilirsiniz:

ln -s "to-here" <- "from-here"
mklink "from-here" -> "to-here"

from-hereİken, bu oluşturulacak, henüz var olmamalıdırto-here zaten (IIRC) bulunmalıdır.

(Her zaman çeşitli komutların ve argümanların önceden var olan bir yeri mi yoksa yapılacak bir yeri mi içereceği konusunda karışık olurum.)

EDIT: Benim için hala yavaş yavaş batıyor; Notlarıma yazdığım başka bir yol daha var.

ln -s (target exists) (link is made)
mklink (link is made) (target exists)

Emacs'da dired, imleci hedefinizin üzerine getirdiğinizde, tuşuna basın Sve bağlantının oluşturulmasını istediğiniz dizini yazın. İstenen sonucu hayal etmek ve yazmak arasındaki boşluğu kısaltır. Bkz. Gnu.org/software/emacs/manual/html_node/emacs/… .
Brady Trainor

2
Benim anımsatıcı AÇIK: ln -s Orijinal
Newfile

Bu benim için çalıştı
Haider Ali


22

Orijinal soruya:


'ln -s '+basebuild+'/IpDome-kernel/kernel /home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal'

Bu aslında dosyadan / dizinden sembolik bir link ( -s) oluşturur :

<basebuild>/IpDome-kernel/kernel

yeni bağlantınıza

/home/build/sandbox/gen2/basebuild/IpDome-kernel/kernal

Hatırlamanıza yardımcı olacak birkaç yol:

İlk olarak, adam sayfası varln . Buna, Google'da "man ln" kelimesini arayarak erişebilir veya bir terminal penceresi açıp yazabilirsiniz man lnve aynı bilgileri alırsınız. Kılavuz sayfasında açıkça şunlar belirtiliyor:

ln [OPTION] ... [-T] HEDEF LINK_NAME (1. form)


Her seferinde bir adam sayfasında arama yapmak veya okumak zorunda kalmak sizin için uygun değilse, belki de nix komutlarının aynı şekilde çalıştığını:

cp /file/that/exists /location/for/new/file
mv /file/that/exists /location/its/moving/to
ln /file/that/exists /the/new/link

cp o anda var olan bir dosyayı (ilk bağımsız değişken) yeni bir dosyaya (ikinci bağımsız değişken) kopyalar.
mv o anda var olan bir dosyayı (ilk bağımsız değişken) yeni bir yere (ikinci bağımsız değişken) taşır

Aynı şekilde ln, var olan bir dosyayı (ilk bağımsız değişken) yeni bir bağlantıya (ikinci bağımsız değişken) bağlar *


Önermek istediğim son seçenek, okunması ve hatırlanması kolay (sizin için) kolay kendi man sayfalarınızı oluşturabilmenizdir. Sadece ihtiyacınız olan ipucunu veren basit bir kabuk komut dosyası yapın. Örneğin :

.Bash_aliases dosyanıza şöyle bir şey yerleştirebilirsiniz:

commandsfx() {
    echo "Symlink:  ln -s /path/to/file /path/to/symlink"
    echo "Copy:     cp /file/to/copy /destination/to/send/copy"
}

alias 'cmds'=commandsfx

Daha sonra ihtiyacınız olduğunda, komut satırından yazmanız yeterlidir cmdsve doğru sözdizimini hızlı bir şekilde okuyabileceğiniz ve anlayabileceğiniz bir şekilde geri alırsınız. İhtiyacınız olan bilgiyi elde etmek için bu işlevleri istediğiniz kadar gelişmiş yapabilirsiniz, bu size bağlıdır. Onları etkileşimli hale getirebilirsiniz, böylece bilgi istemlerini takip etmeniz yeterlidir.

makesymlink() {
    echo "Symlink name:"
    read sym
    echo "File to link to:"
    read fil
    ln -s $fil $sym
}

alias 'symlink'=makesymlink

* - Açıkçası hepsi farklı parametreler alabilir ve farklı şeyler yapabilir ve dosyalar ve dizinler üzerinde çalışabilirler ... ama öncül aynıdır
♦ - bash kabuğunu kullanan örnekler


18
ln [-Ffhinsv] source_file [target_file]

    link, ln -- make links

        -s    Create a symbolic link.

    A symbolic link contains the name of the file to which it is linked. 

    An ln command appeared in Version 1 AT&T UNIX.

16

Linux'ta Sembolik bağlantılar veya Yazılım bağlantıları oluşturma:

Bash istemini açın ve dosyanızla sembolik bir bağlantı oluşturmak için aşağıdaki komutu yazın:

A) Yumuşak bağlantı oluşturmak istediğiniz klasöre gidin ve komutu aşağıda belirtildiği gibi yazın :

$ ln -s (path-to-file) (symbolic-link-to-file)
$ ln -s /home/user/file new-file

B) Yeni dosya adı yolunuza gidin ve şunu yazın :

$ ls -lrt (To see if the new-file is linked to the file or not)

Misal:

user@user-DT:[~/Desktop/soft]# ln -s /home/user/Desktop/soft/File_B /home/user/Desktop/soft/File_C
user@user-DT:[~/Desktop/soft]# ls -lrt
total 0
-rw-rw-r-- 1 user user  0 Dec 27 16:51 File_B
-rw-rw-r-- 1 user user  0 Dec 27 16:51 File_A
lrwxrwxrwx 1 user user 31 Dec 27 16:53 File_C -> /home/user/Desktop/soft/File_B


Note: Where, File_C -> /home/user/Desktop/soft/File_B  Means, File_C is symbolically linked to File_B

12

ln -s sourcepath linkpathname

Not:

-s sabit bağlantılar yerine sembolik bağlantılar yapar


11

Symlink oluşturmak istediğiniz dizindeyseniz, ikinci yolu yok sayın.

cd myfolder
ln -s target

targetİçeride symlink oluşturacaktır myfolder.

Genel sözdizimi

ln -s TARGET LINK_NAME

11

Bu yığın taşması yani kod istediğinizi varsayalım:

Aşağıdaki tüm kodlar, bu bağlantılara ad /tmp/linkveren sembolik bir bağlantı oluşturmak istediğinizi varsayar /tmp/realfile.

DİKKAT : Bu kod hataları kontrol etmesine rağmen, /tmp/realfilegerçekten var olup olmadığını kontrol ETMEZ ! Bunun nedeni, ölü bir bağlantının hala geçerli olmasıdır ve kodunuza bağlı olarak (nadiren) bağlantıyı gerçek dosyadan önce oluşturmak isteyebilirsiniz.


Kabuk (bash, zsh, ...)

#!/bin/sh
ln -s /tmp/realfile /tmp/link

Gerçekten basit, komut satırında yaptığınız gibi (kabuk). Tüm hataların işlenmesi kabuk yorumlayıcısı tarafından yapılır. Bu kod, adresinde çalışan bir kabuk yorumlayıcı bulunduğunu varsayar /bin/sh.

Gerekirse $?, yalnızca bağlantı başarıyla oluşturulduğunda 0 olarak ayarlanacak değişkeni kullanarak kendi hata işlemenizi uygulayabilirsiniz .

C ve C ++

#include <unistd.h>
#include <stdio.h>

int main () {
  if( symlink("/tmp/realfile", "/tmp/link") != 0 )
    perror("Can't create the symlink");
}

symlinkyalnızca bağlantı oluşturulduğunda 0 döndürür. Diğer durumlarda perrorsorun hakkında daha fazla bilgi vermek için kullanıyorum .

Perl

#!/usr/bin/perl
if( symlink("/tmp/realfile", "/tmp/link") != 1) {
  print STDERR "Can't create the symlink: $!\n"
}

Bu kod, adresinde perl 5 tercümanınız olduğunu varsayar /usr/bin/perl. symlinkyalnızca bağlantı oluşturulabilirse 1 döndürür. Diğer durumlarda, başarısızlık nedenini standart hata çıktısına yazdırıyorum.


1
Açıklama eklendi, ayrıca ölü bağlantılar için bir uyarı kelimesi. Bunu kontrol etmiyorum, çünkü bunun istenmediği varsayılamaz ve ayrıca filestestler artık konuyla ilgili değildir
Garo

8

Zaten sunulan açıklamaların plainer-İngilizce bir versiyonunu sunmak istiyorum.

 ln -s  /path-text/of-symbolic-link  /path/to/file-to-hold-that-text

"Ln" komutu bir link-FILE oluşturur ve "-s", bağlantının türünün sembolik olacağını belirtir. Sembolik bağlantı dosyasına bir örnek bir WINE kurulumunda bulunabilir (dizin içeriğinin bir satırını göstermek için "ls -la" kullanarak):

 lrwxrwxrwx 1 me power 11 Jan  1 00:01 a: -> /mnt/floppy

Standart dosya bilgisi öğeleri soldadır (ilk karakterin "link" için "l" olmasına rağmen); dosya adı "a:" ve "->" ayrıca dosyanın bir bağlantı olduğunu gösterir. Temel olarak WINE'a Windows "Sürücü A:" nın Linux'ta bir disket sürücü ile nasıl ilişkilendirileceğini söyler. Buna sembolik bir bağlantı SIMILAR oluşturmak için (geçerli dizinde ve bunu WINE için yapmak daha karmaşıktır; "winecfg" yardımcı programını kullanın):

 ln -s  /mnt/floppy  a:   //will not work if file a: already exists

7

Sembolik bir bağlantı / yumuşak bağlantı oluşturmak için şunu kullanın:

ln -s {source-filename} {symbolic-filename}

Örneğin:

ln -s file1 link1

4

İki tür bağlantı vardır:

sembolik bağlantılar: Başka bir dosyanın soyut konumunu gösteren sembolik bir yola başvurun

sabit bağlantılar: Fiziksel verilerin belirli konumlarına bakın.

Sizin durumunuzda sembolik bağlar:

ln -s source target

http://man7.org/linux/man-pages/man7/symlink.7.html adresine başvurabilirsiniz.

çok zor bağlantılar oluşturabilirsiniz

Bir dosyaya olan sabit bağlantı, orijinal dizin girişinden ayırt edilemez; dosyada yapılan herhangi bir değişiklik, dosyaya başvurmak için kullanılan addan etkili bir şekilde bağımsızdır. Sabit bağlantılar normalde dizinlere atıfta bulunmayabilir ve dosya sistemlerini kapsayamayabilir.

ln source link

4

Bağlantılar temel olarak iki türdür:

Sembolik bağlantılar (yumuşak): başka bir dosyanın soyut konumunu gösteren sembolik bir yola bağlantı

Sabit bağlantılar: fiziksel verilerin belirli konumlarına bağlantı.

Örnek 1:

ln /root/file1 /root/file2

Yukarıdaki, fiziksel verilerinizin bir kopyasına sahip olabileceğiniz bir sabit bağlantı örneğidir.

Örnek 2:

ln -s /path/to/file1.txt /path/to/file2.txt

Yukarıdaki komut file1.txt dosyasına sembolik bir bağlantı oluşturur.

Eğer varsa silmek bir kaynak dosyası daha sonra yumuşak içinde hedefe şey olmaz.

Yaptığınızda:

ls -lai

Simgeler için farklı bir inode numarası olduğunu göreceksiniz.

Daha fazla bilgi için Linux işletim sisteminizde ln'nin man sayfasını okuyabilirsiniz.


hard link where you can have a copy of your physical data- Bence fiziksel verilerin bir kopyasını oluşturmayız . Aynı fiziksel veriler için başka bir isim.
Alexander Radchenko

3

Ben adam bilgileri "hedef" ve "dizin" terminolojileri biraz kafa karıştırıcı buluyorum.

Hedef, symlinking yaptığımız klasör ve gerçek symlink dizinidir (symlinking yapacağınız dizin değil), eğer aynı karışıklığı yaşıyorsa, yalnız hissetmeyin.

Bu benim Symlink (linux) oluşturma yorum:

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

Symlink'i oluşturmak istediğiniz klasöre gidebilir ve komutu çalıştırabilir veya symlink'iniz için NAME-OF-SYMLINK yerine TAM YOL'u belirleyebilirsiniz.

cd /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER
ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO NAME-OF-YOUR-SYMLINK

VEYA

ln -s /FULL/PATH/FOLDER-OR-FILE-SYMLINKING-TO /FULL/PATH/TO/MY-SYMLINK-PARENT-FOLDER/NAME-OF-YOUR-SYMLINK

Umarım bu (hala) şaşkın şaşkın olanlara yardımcı olur.


-2

Vagrant'ta symlink nasıl oluşturulur. Adımlar:

  1. Vagrant dosyasında senkronize edilmiş bir klasör oluşturun. örneğin config.vm.synced_folder "F: / Sunburst / kaynak / sunburst / lms", "/ kaynak" F: / Sunburst / kaynak / sunburst / lms: - kaynak kodun, / source: - vagrant içindeki dizin yolu
  2. Vagrant up ve vagrant ssh yazın ve kaynak dizine gidin, örneğin cd source
  3. Kaynak kodu klasör yapınızın kaynak dizinde bulunduğunu doğrulayın. ör. / kaynak / yerel
  4. Ardından, tarayıcıyla ilişkilendirilmiş dosyaların konuk makine dizinine gidin. Dosyayı yedekledikten sonra. sudo mv local Instagram Hesabındaki Resim ve Videoları local_bk
  5. Ardından symlink oluşturun, örneğin sudo ln -s / source / local local. Symlink'i kaldırmanız gerekiyorsa yerel ortalama bağlantı adı (konuk makinede bağlayacağınız klasör adı): - sudo rm local yazın
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.