Bir dosya, meta verileri içeren bir inode'dur.
Bir dosyaya erişebilmek için, dosyayı bir adla ilişkilendirmek için bir dizine bağlamanız gerekir (dizinleri klasör değil, telefon dizinleri olarak düşünün) .
Tüm bu bağlantılar, bu dosya adları aynı dosyayı gösterir. Biri orijinal, diğeri bağlantı olan yok. Hepsi dizin ağacında aynı dosyaya (aynı inode) erişim noktalarıdır. Dosyanın boyutunu ( lstat
sistem çağrısı) aldığınızda, inode'da depolanan bilgileri (yukarıda belirtilen meta veriler) alırsınız, bu dosyaya başvurmak için hangi dosya adı, hangi bağlantıyı kullandığınız önemli değildir. .
Buna karşılık sembolik linkler, içeriği hedef dosyaya giden bir yol olan başka bir dosyadır (başka bir inode) . Diğer tüm dosyalar gibi, bu semboller de bir dizine bağlanmalıdır (bir isme sahip olmalıdır), böylece dosyalara erişebilirsiniz. Bir sembol bağlantısına birkaç bağlantınız olabilir veya başka bir deyişle, sembol bağlantılarına birkaç ad verilebilir (bir veya daha fazla dizinde).
$ touch a
$ ln a b
$ ln -s a c
$ ln c d
$ ls -li [a-d]
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 a
10486707 -rw-r--r-- 2 stephane stephane 0 Aug 27 17:05 b
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 c -> a
10502404 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:05 d -> a
Dosya numarasının üstünde 10486707 normal bir dosyadır. Geçerli dizindeki iki giriş (biri adıyla a
, biri adıyla b
) ona bağlanır. Çünkü bağlantı sayısı 2'dir, mevcut dizinde bu dosya veya başka bir dizinin başka bir isim olduğunu biliyorum. Dosya numarası 10502404 başka bir dosyadır, bu kez symlink türü geçerli dizine iki kez bağlanır. İçeriği (hedefi), göreli yol "a" dır.
10502404 geçerli dizinden başka bir dizine bağlanmışsa, erişildiği şekle bağlı olarak genellikle farklı bir dosyayı işaret edeceğini unutmayın.
$ mkdir 1 2
$ echo foo > 1/a
$ echo bar > 2/a
$ ln -s a 1/b
$ ln 1/b 2/b
$ ls -lia 1 2
1:
total 92
10608644 drwxr-xr-x 2 stephane stephane 4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10504186 -rw-r--r-- 1 stephane stephane 4 Aug 27 17:24 a
10539259 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:26 b -> a
2:
total 92
10608674 drwxr-xr-x 2 stephane stephane 4096 Aug 27 17:26 ./
10485761 drwxrwxr-x 443 stephane stephane 81920 Aug 27 17:26 ../
10539044 -rw-r--r-- 1 stephane stephane 4 Aug 27 17:24 a
10539259 lrwxrwxrwx 2 stephane stephane 1 Aug 27 17:26 b -> a
$ cat 1/b
foo
$ cat 2/b
bar
Dosyaların, kendileriyle ilişkilendirilen dizinler dışında kendileriyle ilişkili adları yoktur. İsimleri tarafından alınan alan, bu dizinlerdeki girdilerdir, dizinlerin dosya boyutu / disk kullanımında hesaba katılır.
Bir dosyayı kaldırmak için sistem çağrısının olduğunu göreceksiniz unlink
. Yani, dosyaları kaldırmazsınız, referans verildikleri dizinlerle olan bağlantılarını kaldırırsınız. Belirli bir dosyaya girişi olan son dizinden bağlantısı kaldırıldıktan sonra, bu dosya daha sonra yok olur (işlemin olmadığı sürece) açıldı).
lstat
, boyutlarını alan sistem çağrısı için sayılmaz .