it-swarm-tr.com

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

Linux'ta sembolik bir bağlantı kurmak istiyorum. Bu bash komutunu, ilk yolun linklenmesini istediğim klasör ve ikinci yolun derlenmiş kaynak olduğu yere yazdım.

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

Bu doğru mu?

1766
chrissygormley

Yeni bir sembolik bağlantı oluşturmak için (sembolik zaten mevcutsa 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
3444
hsz
ln -s TARGET LINK_NAME

-s 'un sembolik yaptığı yer.

278
cyborg
ln -s EXISTING_FILE_OR_DIRECTORY SYMLINK_NAME
268
codaddict
ln -s target linkName

Buradaki man sayfasına bir göz atabilirsiniz:

http://linux.die.net/man/1/ln

88
rui

(Çünkü bir ASCII resim bin karaktere eşittir.)

Bir ok, özellikle Emacs'in yönettiği gibi göründüğü için, yararlı bir hatırlatıcı olabilir.

Ve büyük resim böylece Windows sürümüyle karıştırmayı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 henüz mevcut değil, to-here zaten mevcut olmalı (IIRC).

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

EDIT: Hala benim için yavaş yavaş batıyor; Notlarıma yazdığım başka bir yolum var.

ln -s (target exists) (link is made)
mklink (link is made) (target exists)
78
Brady Trainor
ln -s source_file target_file

http://unixhelp.ed.ac.uk/CGI/man-cgi?ln

24
Rob M

Orijinal soruya:


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

Bu gerçekten dosya/dizinden bir sembolik bağlantı (-s) yaratacaktır:

<basebuild>/IpDome-kernel/kernel

yeni bağlantınıza

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

İşte hatırlamanıza yardımcı olacak birkaç yol:

İlk önce, ln için adam sayfası var. Buna, google’daki "man ln" ifadesini kullanarak erişebilir veya bir terminal penceresi açıp man ln yazıp aynı bilgileri edinebilirsiniz. Man sayfa açıkça belirtir:

[SEÇENEK] ... [-T] HEDEF LINK_NAME içinde (1. form)


Her seferinde bir adam sayfasını aramak veya okumak zorunda kalmazsanız, sizin için uygun değilse, belki de hepsini hatırlayarak daha kolay bir zaman geçirirsiniz nix komutları aynı şekilde çalışır:

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

cp şu anda mevcut olan bir dosyayı (ilk argüman) yeni bir dosyaya (ikinci argüman) kopyalar .
mv şu anda mevcut olan bir dosyayı (ilk argüman) yeni bir yere taşır (ikinci argüman)

Benzer şekilde ln şu anda mevcut olan bir dosyayı (ilk argüman) yeni bir bağlantıya (ikinci argüman) bağlar*


Önermek istediğim son seçenek, okuması kolay ve (sizin için) bulması/hatırlaması kolay olan kendi man sayfalarınızı oluşturabilmenizdir. Sadece ihtiyacınız olan ipucunu veren basit bir Shell betiği hazırlayın. Örneğin:

.Bash_aliases dosyanızda şöyle bir şey ekleyebilirsiniz:

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ına sadece cmds yazın ve doğru sözdizimini hızlıca okuyup anlayabileceğiniz şekilde geri alırsınız. İhtiyacınız olan bilgiyi elde etmek için bu işlevleri istediğiniz kadar gelişmiş hale getirebilirsiniz. Onları etkileşimli bile yapabilirsin, böylece istemleri izlemelisin.

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 ile dizinler üzerinde çalışabilirler ... ama öncül aynıdır
Shell - bash Kabuğunu kullanan örnekler

17
Mike
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
miku

Linux'ta Sembolik Bağlantılar veya Yazılım Bağlantıları Oluşturma:

Bash İstemi'ni açın ve dosyanıza sembolik bir bağlantı oluşturmak için aşağıdaki komutu yazın:

A) Yumuşak bir link oluşturmak istediğiniz klasöre gidin ve komutu aşağıda belirtilen şekilde yazın :

$ ln -s (path-to-file) (symbolic-link-to-file)

$ ln -s /home/user/file new-file

B) Yeni dosya adınızın yoluna gidin ve :

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

Örnek:

ls -lrt

lrwxrwxrwx 1 user user 24 Aug 6 23:40 new-file -> /home/user/file

Note: Where, A -> B Means, A is symbolically linked to B

12
Ankit Raj

ln -s sourcepath linkpathname

Not:

-s sert bağlantılar yerine sembolik bağlantılar oluşturur

11
simranjeet

Sembolik bağlantı oluşturmak istediğiniz dizindeyseniz, ikinci yolu yoksayın.

cd myfolder
ln -s target

target içinde myfolder sembolik linkini oluşturacaktır.

Genel sözdizimi

ln -s TARGET LINK_NAME
10
Fizer Khan

Bu Yığın Taşması olduğundan kod istediğinizi varsayıyorum:

Aşağıdaki kodların tümü, /tmp/link 'a bağlanan /tmp/realfile adında sembolik bir bağlantı oluşturmak istediğinizi varsayar.

CUTION: Bu kod hataları kontrol etse de, /tmp/realfile gerçekten var mı kontrol etmiyor! 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, tıpkı komut satırında (Shell'in olduğu gibi) yapacağınız gibi. Tüm hata işlemleri Shell tercümanı tarafından yapılır. Bu kod, /bin/sh adresinde çalışan bir Shell tercümanınız olduğunu varsayar.

Gerekirse, yalnızca bağlantı başarılı bir şekilde oluşturulduysa, yalnızca 0 olarak ayarlanacak olan $? değişkenini 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");
}

symlink, yalnızca bağlantı oluşturulduğunda 0 değerini döndürür. Diğer durumlarda, sorunla ilgili daha fazla şey anlatmak için perror kullanıyorum.

Perl

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

Bu kod, /usr/bin/Perl adresinde bir Perl 5 tercümanınız olduğunu varsayar. symlink, yalnızca bağlantı oluşturulabilirse 1 değerini döndürür. Diğer durumlarda, hata sebebini standart hata çıktısına yazdırıyorum.

9
Garo

Daha önce sunulan açıklamaların daha sade bir İngilizce 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", link türünün sembolik olacağını belirtir. Sembolik bir link dosyası örneği 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 bilgisi soldadır (ilk karakterin "link" için "l" olduğuna dikkat edin); dosya adı "a:" dır ve "->" ayrıca dosyanın bir bağlantı olduğunu gösterir. Temel olarak WINE’ya Windows’taki "Drive A: "’nin Linux’ta bir disket sürücü ile nasıl ilişkilendirileceğini söyler. Bunun için SIMILAR'a sembolik bir bağlantı oluşturmak (şu anki dizinde ve bunu WINE için yapmak gerçekten daha karmaşık; "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
6
Prem S

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

sembolik bağlantılar: Başka bir dosyanın soyut konumunu belirten sembolik bir yola bakın.

hard linkler: Fiziksel verinin spesifik konumuna bakın.

Senin durumunda, sembolik bağlantılar:

ln -s source target

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

çok sert bağlantılar oluşturabilirsiniz

Bir dosyaya sabit bağlantı, orijinal dizin girişinden ayırt edilemez; Bir dosyada yapılan değişiklikler, dosyaya atıfta bulunmak için kullanılan addan bağımsızdır. Sabit bağlantılar normalde dizinlere atıfta olmayabilir ve dosya sistemlerini kapsamaz.

ln source link
3
wpp

Adam bilgilerindeki "hedef" ve "dizin" terminolojilerini kafa karıştırıcı buluyorum.

Hedef, birbirine bağladığımız klasör ve dizinde asıl bağlantı (eğer bağlanacağınız dizine değil), eğer aynı karışıklığı yaşayan biri varsa, yalnız hissetmeyin.

Bu, bir Symlink oluşturma yorumum (linux'da):

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

Sembolik bağlantıyı oluşturmak istediğiniz komutu görüntüleyebilir ve komutu çalıştırabilir ya da ADI OF YOUR-SYMLINK yerine sembolik bağlantı için TAM YOLU belirleyebilirsiniz.

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

OR

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

Umarım bu biraz daha karıştı olanlara yardımcı olur.

2
mmmdearte

bağlantılar temel olarak iki türdendir:

sembolik bağlantılar (Yumuşak): başka bir dosyanın soyut konumunu belirten sembolik bir yola bağlantı

sabit bağlantılar: fiziksel verinin belirli bir yerine bağlantı.

Örnek 1: ln/root/file1/root/file2

Yukarıdaki fiziksel verilerinizin bir kopyasını alabileceğiniz bir hard link örneğidir.

Örnek 2: ln -s /path/to/file1.txt /path/to/file2.txt

Yukarıdaki komut, file1.txt dosyasına sembolik bir link oluşturacaktır.

Kaynak bir dosyayı sildiğinizden daha fazlasını Soft'da hedef için hiçbir şeyiniz olmaz

ne zaman yaparsın:

ls-lai

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

Daha fazla ayrıntı için linux işletim sistemindeki ln insanını okuyabilirsin.

Teşekkürler

2
Prabhat Singh