NAME ln -- make a link
SYNOPSIS ln name1[ name2 ]
DESCRIPTION ln creates a link to an existing file name1.
If name2 is given, the link has that name;
1971'den itibaren Unix Birinci Baskı Kılavuzları .
Bir yoktur ikinci , basit, sözdizimi formu.
düzenleme: Ben adresleme vb yorumları görmek de altta çok uzun eklenmesini bkz --- TARGET yerine DOSYASINI veya FILENAME koymak buzdağı, sert ve yumuşak ait ln
, bunun sadece ucu.
Yani GNU’da ln
şu var:
ln [opt] FILENAME
In the 2nd form, create a link to FILENAME in the current directory.
link ismine ihtiyacınız yok. Sonra ln -s /usr/lib/modules
aldığınız bir
modules -> /usr/lib/modules
FILENAME ("hedef" veya "kaynak") ile aynı adda, bulunduğunuz yer. Seçim yok, karışıklık yok.
Eğer daha talepkar olan ve altında oluşturulan bağlantıyı istiyorsanız Şimdi başka bir isim ve / veya başka bir yerde , sen eklemek adı veya yolu olarak bu dilek. Gerçek hedef önce gelir, ekstra fantezi yeni link ismi ikinci olur.
Ya da diyorsunuz: " ls -l
Bağlantılar için bu ok gösterimini biliyorum . Kabuğumda bağlantımın yönünü gösterecek bir okum yok. Bu yüzden ters çevirmek zorundayım."
Bir yönde yaratırsınız, böylece diğerinde kullanabilirsiniz.
(SORU-SORU BÖLÜMÜNÜN SONU)
Başka bir düzeyde, "link" kelimesinin kendisi derin bir gizli çifte anlam taşır. Sembolik linkler daha sonra geldi, bu yüzden ilk günlerde bir link sadece bir linkti. Yumuşak ve sert, -s
seçenek yoktu . Ve şimdi kaynak-hedef sembolizmini bile kullanıyorum:
mv A B --- move the whole file to B (dir or new name)
cp A B --- copy whole file (mv and cp are "the same" here)
ln A B --- copy whole file MINUS data blocks (=copy only inode and name), and increase "link count" for track keeping
Bu aşamada, bağlantılar vardır, ancak sert ve yumuşak ls -l
değildir ve oklar göstermez, çünkü (sert) bir bağlantıda yön yoktur. Unix evriminin o aşamasında bir "link", dosya sistemindeki "B" dosya adının ("B" dizin adı) "A" dosya adının işaret ettiği aynı inodu işaret ettiği anlamına geliyordu.
A ve B dosyaları birbirine “bağlantılı”, çünkü aynı blokları paylaşıyorlar. Şimdi, her rm'de, çekirdeğin kontrol etmesi gerekiyor: Bu dosyanın diskteki bloklarını silmiş / serbest mi bırakıyorum yoksa aynı bloklara bağlı başka bir dosya var mı? Bunun için bir bağlantı sayacı kullanılır.
Diyelim ki / tmp grom üzerinde büyük bir dosyayı silmek istiyor ve yapıyorsunuz ln /tmp/bigfile
. Şimdi çalışma direktörünüzde büyük bir dosya var. / Tmp dosyasını temizledikten ve "orijinali" oynattıktan sonra, aynı veri bloklarını kullanmaya devam edersiniz. Ölü ya da sarkan bir bağlantı alamadım, normal bir dosyanız var. Hiçbir dosyaya işaret etmemekle birlikte, yalnızca her dir girişindeki gibi dosya sistemi engeller. Sadece şimdi "temizlik" / tmp olduğu kadar etkili değil. Boş görünüyor ve öyle, ancak bölümdeki bloklar serbest kalmıyor.
Sert bir bağlantı, cp'nin yaptığı gibi, kendi alanını maliyetlendirmemesine rağmen, dolaylı olarak yapabilir.
ln -s
Yukarıdaki sıraya ekleyerek :
ln -s A B --- copy only the file's name to "B"
Şimdi "B", yumuşak bağlantı, yalnızca bir yol adı ile bir dize vardır. Bu "yumuşak" bir bilgidir. Teknik olarak "A" ve "B" alakasızdır. Ama yine de B, saklı yol adını "A" kısayolu olarak kullanabileceğiniz yeni anlamda "bağlantı" dır . Şimdi "A'nın bağlantısı" (dönem) ve "A dosyası inode'uyla bağlantılı" değil
Her iki tür bağlantı da sadece insanları değil aynı zamanda çekirdeği / f'leri de karıştırabilir. 1971 kılavuz sayfası şunları not ediyor: "HATA: bağlantılar iki kez yedeklendi ve ayrı dosyalara sahip ayrı dosyalar olarak geri yüklendi."
Dizinlere zor bağlantılar (nadir / izin verilmez) kolayca tıkanmaya neden olabilir.
Dizinlere yumuşak bağlantılar (çok yaygın) sonsuz döngülere yol açabilir - kamu hizmetleri / çekirdek tarafından tanınması gerekir.
Bash pratik örnek
"F" normal bir dosyadan başlayarak ...
ln F Fhard
... Fhard'ı F ile aynı boyutta yapar, ancak onlar şimdi koyu kırmızı oklarla KIRMIZI görünürler ls -l --color
. Yüzünden stat
gösteren "Bağlantılar: 2" ile bağlantılı olarak "Düğüm: xyz". Sert bağlantı F, F'yi sert bir bağlantıya dönüştürür. Her ikisi de / stay filetype "normal dosya" dır. Ancak her ikisinde de 1'in üzerinde bağlantı sayısı olan bir inode var.
ln -s F Fsoft
... filetype "sembolik link" ile küçük bir "düzensiz" dosya "Fsoft" yapar --- boş bir dizinden bile daha fazla alan tasarrufu. Bir ls -l
"F" için özel bir şey göstermez. Fsoft için, dize 'F' olduğu için gösterilen boyut 1 bayttır ve Fsoft -> F
ad olarak görüntülenir. Birini tanımak için yumuşak bir bağlantıyı renklendirmeye gerek yoktur. Çünkü kısa formda
eklenmiş ls -F
bir sarmal zincir elde edersiniz @
:Fsoft@
Şunun ls -l
gibi görünüyor:
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 F
-rw-r--r-- 2 root root 6070340 Sep 16 16:28 Fhard
lrwxrwxrwx 1 root root 1 Sep 16 16:31 Fsoft -> F
Fhard, F'nin boyutuna ve tipine sahiptir.
Fsoft, F ve F adının boy büyüklüğüne ve farklı bir dosya türüne sahiptir.
Kısa ls -sF
:
5932 F 5932 Fhard 0 Fsoft@
ekleme --block-size=1
de aynı büyüklüklerde değildir. Fsoft "tek bayt, sıfır blok" boyutuna sahiptir. F ve Fhard paralel olarak sapma gösterir:
6074368 F 6074368 Fhard 0 Fsoft@
Fsoft'un sarkıp sarkmadığını görmek ls
için renkleri kullanmanıza izin verir.
ORPHAN 40;31;01 # symlink to nonexistent file, or non-stat'able file
a
ve diyoruzb
"