Sabit bağlantılar Windows kısayollarına eşdeğer midir?


52

Vikipedi, sert bir bağlantıyı şöyle tanımlar :

dosya sistemindeki bir adı bir dosyayla ilişkilendiren bir dizin girişi. (Bir dizinin kendisi, bu girişlerin bir listesini içeren özel bir dosya türüdür.) Terim, aynı dosya için birden fazla sabit bağlantı oluşturulmasına izin veren dosya sistemlerinde kullanılır.

Sabit bağlantı kavramının Windows Kısayol kavramına eşdeğer olup olmadığını merak ediyorum .

Sabit bağlantılar kısayollara eşdeğer değilse, o zaman sabit bağlantılara en yakın Windows özelliği nedir?


1
Aslında paylaştığınız o wiki sayfasından bazı harika referanslar var.
eccentricSam

8
Microsoft NTFS hardlink'i desteklemektedir ve unix hardlink'e çok benzemektedir. Bence kısayollar Windows ortamı için özel bir objedir, ancak gerçek hardlinksin aksine
filesytem

Aşağıdaki bağlantı iyi bir açıklama sunar: comptb.cects.com/…

3
Paralelin yanıltıcı olduğunu düşünüyorum, Kısayol "arabirim" sadece dosya tarafından değil, arabirim tarafından yorumlanan hedefle ilgili metin bilgisine sahip dosyaları bağlar. Bir komut satırından, gerçekten dosya sistemi anlamında bir şeye işaret etmiyorlar. , Windows uygun sembolik bağ vardır (ya da daha iyi NTFS söyledi) en.wikipedia.org/wiki/NTFS_symbolic_link kısayolları ne de sabit bağlarının değildir. Onları Windows'ta Dropbox klasörlerinin herhangi bir yerinde olması için kullanıyorum, bu kısayollarla yapılamıyor.
alfC

5
Windows kısayol dosyaları, Linux .desktop dosyalarına çok benzer. Linux sembolik bağlantıları ve sabit linkler bazen aynı amaca hizmet eden tamamen farklı bir şeydir.
mikebabcock

Yanıtlar:


113

Hayır, sert bir bağlantı tamamen farklıdır. Yumuşak bir bağlantı Windows kısayoluna daha yakındır (önemli farklılıklar olsa da, sembolik bağlantılar sabit bağlantılardan çok Windows kısayollarına benzer). Sert bir bağlantı farklı bir şeydir ve neredeyse hiç ihtiyacınız olmayacak olanıdır.

Kısaca, bu komutla yumuşak bir bağlantı oluşturulur:

ln -s foo bar

Sonra koşarsan ls -l, göreceksin:

lrwxrwxrwx 1 terdon terdon 3 Mar 10 15:58 bar -> foo
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

Bu bir bağlantı olduğu ->anlamına gelir . Böylece, örneğin bir metin editörüyle açılış , aslında ayrı dosyayı açacaktır . Ancak, silme sadece kısayolu siler, dosyayı etkilemez .barfoobarfoobarfoo

Öte yandan, sabit bağlantılar bu komutla oluşturulur:

ln foo bar

Şimdi çalıştırırsanız ls -l, dosyalar arasında herhangi bir ilişki olduğuna dair bir gösterge yoktur:

-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 bar
-rw-r--r-- 2 terdon terdon 0 Mar 10 15:58 foo

Fakat — ve bu çok önemli - bunlar aslında aynı dosya . Unix dosya sistemlerindeki dosyalar, inode kullanılarak depolanır ; Bir inode temelde dosya sisteminin bir dosya adını fiziksel sabit sürücüdeki belirli bir yere eşleme şeklidir. Bu nedenle, sabit bağlantılar, hedefleriyle aynı inode'a işaret eden dosyalardır . Bunu koymanın başka bir yolu da, tüm dosyaların gerçekte kendi inode'larına işaret eden sert linkler olmasıdır. Bir dosyaya sert bir bağlantı yapmak, sadece dosya sistemi üzerinde aynı inode'a işaret eden yeni bir işaretçi (dosya) oluşturur. Her inode, kendisine veya birine işaret eden veya hiç olmayan birden fazla dosya içerebilir.

Bunu daha net anlamak için ls -i, bir dosyayla ilişkili inode'u gösteren kullanımı kullanın . Yumuşak bir bağlantı ve sert bir bağlantı oluşturalım ve ne olacağını görelim:

ln -s foo SoftLinkToFoo
ln foo HardLinkToFoo

Şimdi, inode'larını kontrol et:

görüntü tanımını buraya girin

Yukarıda da görüldüğü gibi, her iki foove HardLinkToFooSoftLinkToFoo farklı bir (16648036) sahipken aynı düğüm (16648029) var.

Biz adlandırmak ne olur fooile mv foo bar?

görüntü tanımını buraya girin

Kırmızı renk, hedefi artık bulunamayan bir kopuk yumuşak bağlantıyı gösterir. Bunun nedeni, yumuşak bağlantıların bir dosyanın adını inode'a işaret etmemesidir. Adının değiştirilmesine rağmen, inode aynı kalır, böylece hardlink iyi, yine de çalışır.

Özet olarak, hard linkler aslında aynı dosyanın iki tezahürüdür ; diskin aynı bölümüne işaretçilerdir. Yumuşak bağlantılar sadece kısayollardır. Gerçek bir dünya benzetmesi yapmak için, hardlinks aynı telefon hattı için iki farklı telefon numarası gibidir ve yumuşak bağlantılar aynı evde iki farklı telefon hattı olması gibidir.


6
@Kiwy Bunun tersi: mutlak sembolik bağlantılar birçok farklı şekilde başarısız olur (verileri taşıdığınız anda, farklı bir yere monte ettiğinizde, yedeklediğinizde,…) ve bundan kaçınılması en iyisidir.
Gilles 'SO- kötülük' dur

3
Ayrıca, bir sabit bağlantıyı silmenin (yoluyla rmveya unlink()) yalnızca, dosya içeriği tarafından kullanılan bloklar serbest bırakıldığında, bağlantı sayısı sıfıra ulaşana kadar bağlantı sayısını azaltır. “Sabit linkler aslında aynı dosyanın iki örneğidir” demek kesinlikle doğru değil, çünkü iki isim aynı inode'a ve dolayısıyla aynı içeriğe işaret ediyor. herhangi bir anlamda.
Emmet

7
Windows kısayolunun kabuk tarafından kullanılan bir dosya olduğunu ve bu nedenle kabuğun bildiği, ancak dosya sistemini yapamayacağı şeyleri yapabileceğini unutmayın. Örneğin, kabuk ad alanına kısayollar (örneğin, Denetim Masası, Bilgisayar vb.) Yapabilir veya henüz yüklenmemiş uygulamalara (ilk kullanımda kurulacak) kısayollar yapabilirsiniz. Bu şeylerin dosya sistemi dünyasında doğrudan bir karşılığı yoktur.
Joey

2
Bu cevabı seviyorum ama aslında bir Windows kısayolunun ne olduğunu anlamakta oldukça zayıf. @Shaakunthala, Windows kısayolu bir Linux bağlantısından daha fazla bir Linux .desktop dosyası gibi olduğundan daha iyi yanıt verir.
mikebabcock

18

Yumuşak ve sert bağlantıların ne olduğuna dair iyi bir açıklama var, ancak bir şeyin netleştirilmesi gerekiyor.

Windows kısayolları , ne yumuşak bağlantılara ne de sert bağlantılara eşdeğer veya benzerdir . Dosya sistemi düzeyinde sadece dosyalardır. Yapılarını anlayan ve onları bağlantılar olarak yorumlayan kabuktur. Windows kısayolları ayrıca, dosya sistemiyle ilgili olmayan kabuk ad alanlarındaki nesnelere de işaret edebilir (yazıcılar, kontrol paneli öğeleri, sanal klasörler).

Windows kısayolları, dosya sistemi nesnesinin adına ek olarak aşağıdaki bilgileri içerir: PIDL (kabuk ad alanındaki opak ikili "yol"), açıklama, kısayol tuşu, simge, çalışma dizini. Windows, NTFS dosya sistemi kullanılıyorsa, bozuk kısayolları düzeltmek için NTFS nesne tanımlayıcılarını da ekler.

Windows kısayolunun kaba eşdeğeri bir .desktop dosyasıdır. SuperUser'da bu soruya bakın: Linux'ta bir .lnk eşdeğeri var mı?


6

Hayır. Linux'ta işler farklı çalışır.

Her dosya 'inode' adlı bir nesne ile temsil edilir. Her inode, kendisiyle ilişkilendirilmiş bir numaraya (ID) sahiptir.

Bildiğimiz gibi insanlar sayıları hatırlamakta iyi değil isimleri. (Telefon defterleri böyle gelişti)

Bu nedenle, her inode'a okunabilir bir isim vermek için dosya adı resme girmiştir. Temel olarak, bir hardlink bir dosya ismini bir inode'a bağlar. Bir inode'da birden fazla sabit bağlantı olabilir. Belirli bir inode için hiçbir sabit bağlantı yoksa, inode tarafından kullanılan disk alanı yeni dosyalar için yeniden tahsis edilebilir. Bu, her dosya için en az bir hardlink bulunması gerektiği anlamına gelir. Dosya adı (dosya tarayıcısında gördüğünüz dosya adı / simge olarak görselleştirilmiştir) kendisi bir bağlantıdır.

Windows'ta kısayol ayrı bir dosyadır (* .lnk dosyası). Orijinal dosya hakkında bilgi içerir (anlaşılır şekilde dosya yolu). Linux algısında, bir Windows kısayolu, '.lnk' ile biten bir dosya adına sabitlenmiş başka bir inode olacaktır.


3
NTFS aslında bu şekilde çok çalışıyor. Bir dosya MFT'deki bir giriştir ve dizin girişleri dosya adlarını dosya kimlikleriyle eşleştirir. Hardlinks'i ve 2008/7 / Vista (?) 'Dan beri sembolik bağlantıları bile destekliyor. Bu noktada en büyük fark kültüreldir.
cHao

2

Windows'ta NTFS dosya sisteminiz varsa, sabit bağlantılar da oluşturabilirsiniz.

fsutil hardlink create target_file source_file

Dosyaların aynı mantıksal sürücüde olması gerekir.


Bu doğru - NTFS de köprüleri destekliyor. Genellikle araçlar, bunları oluşturmak için yönetici haklarına sahip olmanızı gerektirir. "Aynı mantıksal sürücü" hakkında - aynı dosya sisteminde olmaları gerektiğini söylemek daha kesin olurdu. Bir mantıksal sürücü tarafından oluşturulan bir sürücü harfi dahil her şey olabilir substkomuta. Bir araç bunu bilemeyebilir / önemsemeyebilir ve bu nedenle bir bağlantı oluşturmayı reddedebilir . Çok yararlı bir şey, kaşifin onları oluşturmasını sağlayan Link Shell Extension .
Tobias

1

Klasörler için değil, dosyalar için büyük bir fark, hard link oluşturulamaz.

Klasörler için kısayol oluşturulabilir, dolayısıyla bunların eşdeğer olduğunu söyleyemezsiniz.

Sorunuz sembolik link veya yumuşak link ve kısayol arasındaki fark olmalıdır .

Buna göre:

Sembolik bir bağlantı dosya sistemi seviyesidir ve her şey orijinal dosya olarak görür. Bir uygulamanın sembolik bir bağlantı kullanmak için özel bir desteğe ihtiyacı yoktur.

Bir "Kısayol" sadece hedef dosyaya veya dizine referansı olan normal bir dosyadır.

Kısayol tıklattığınızda, dizininizi asıl dosyaya değiştirir, soft-link onun konumunu asıl dosya gibi gösterir, bunun için Linux'ta terminal ve cd'leri sembolik bağlar için kullanabilirsiniz; .

Bir Windows kısayolu ve bir Linux başlatıcısı (bir yere işaret ediyor) aynı olacaktır.


2
Ne? Softlinks sadece garip olanlar olsa da dosyalar, örneğin inode'lar da alıyorlar. Orijinal olarak kabul edilmezler (bu hardlinks). Çoğu işletim sistemindeki dizinler için sabit bağlantılara izin verilmediği doğru olsa da, bu yalnızca bir güvenlik özelliğidir ve bunun istisnaları vardır (örneğin, OSX zaman makinesi). Ve elbette kısayollara cd atabilirsiniz (Diyelim ki Windows kısayollarını kastediyorsunuz çünkü söyleyeceğiniz gibi CD'lere bağlayabilirsiniz).
terdon

1
kısayoldan cd'ye cmd kullanabildiğinizden emin misiniz?
nux

1
Windows VM'mi yeni açtım ve Masaüstümdeki bir klasöre bir kısayol oluşturdum, Windows kısayolları sembolik bağlantılara benzer (aynı değilse). Onlara cd nedense cmd.exe'yi kullanarak edemesek de, sen yapabilirsiniz bir dizine bir .lnk oluşturup gezgini ile kullanın.
terdon

1
aşağı seçmenlerin oy düşürmesi için bir sebep vermesi gerekiyor
nux

5
Üzgünüz, hala doğru değil. Symlinks, hedeflerini düz metin olarak içeren dosyalardır ( buraya bakın ), symlinks orijinali olarak kabul edilmez , bu da symlinks ve hardlinks arasındaki farktır. Linux rampaları (demek istediğim. Masaüstü dosyaları) bununla hiçbir ilgisi yok, tamamen farklılar. Sizin de söylediğiniz gibi, Windows kısayolları dosyalara (programlar dahil) ve klasörlere (mac ve windows'da klasörlere, Linux'ta dizinlere sahip) işaret edebilir. Masaüstü dosyaları sadece bir program başlatmanıza izin verir. Hiçbir yere bağlanmıyorlar.
terdon
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.