symlinks

Önceki inode bilgisi örneğimizi kullanalım:

pete@icebox:~$ ls -li

140 drwxr-xr-x 2 pete pete 6 Jan 20 20:13 Desktop
141 drwxr-xr-x 2 pete pete 6 Jan 20 20:01 Documents

ls komutundaki üçüncü alanı (field) es geçtiğimizi fark etmiş olabilirsiniz, bu alan link count’tur. Link count bir dosyanın toplam hard link sayısıdır, şu an için bir şey ifade etmiyor olabilir. O halde önce link’leri tartışalım.

Windows işletim sisteminde shortcut olarak bilinen şeyler vardır; shortcut’lar diğer dosyalara alias’tır. Orijinal dosyada bir şey yaparsanız, shortcut’ı potansiyel olarak bozabilirsiniz. Linux’ta shortcut’ların karşılığı symbolic link’lerdir (veya soft link veya symlink). Symlink’ler, başka bir dosyaya filename’iyle link vermemizi sağlar. Linux’ta bulunan bir başka link türü de hardlink’tir, bunlar aslında inode’a link verilen başka bir dosyadır. Symlink’lerle başlayarak pratikte ne demek istediğime bakalım:

pete@icebox:~/Desktop$ echo 'myfile' > myfile
pete@icebox:~/Desktop$ echo 'myfile2' > myfile2
pete@icebox:~/Desktop$ echo 'myfile3' > myfile3

pete@icebox:~/Desktop$ ln -s myfile myfilelink
pete@icebox:~/Desktop$ ls -li

total 12
  151 -rw-rw-r-- 1 pete pete 7 Jan 21 21:36 myfile
93401 -rw-rw-r-- 1 pete pete 8 Jan 21 21:36 myfile2
93402 -rw-rw-r-- 1 pete pete 8 Jan 21 21:36 myfile3
93403 lrwxrwxrwx 1 pete pete 6 Jan 21 21:39 myfilelink -> myfile

myfile’e işaret eden myfilelink adlı bir symbolic link oluşturduğumu görebilirsiniz. Symbolic link’ler -> ile belirtilir. Yeni bir inode numarası aldığımı fark edin, symlink’ler sadece filename’lere işaret eden dosyalardır. Bir symlink’i değiştirdiğinizde, dosya da değiştirilir. Inode numaraları filesystem’lere özgüdür, tek bir filesystem’de aynı inode numarasından iki tane olamaz; bu da bir dosyayı inode numarasıyla farklı bir filesystem’de referans edemeyeceğiniz anlamına gelir. Ancak symlink kullanırsanız inode numaraları kullanılmaz, filename’ler kullanılır, dolayısıyla farklı filesystem’ler arasında referans verilebilir.

Bir hardlink örneğine bakalım:

pete@icebox:~/Desktop$ ln myfile2 myhardlink
pete@icebox:~/Desktop$ ls -li

total 16
  151 -rw-rw-r-- 1 pete pete 7 Jan 21 21:36 myfile
93401 -rw-rw-r-- 2 pete pete 8 Jan 21 21:36 myfile2
93402 -rw-rw-r-- 1 pete pete 8 Jan 21 21:36 myfile3
93403 lrwxrwxrwx 1 pete pete 6 Jan 21 21:39 myfilelink -> myfile
93401 -rw-rw-r-- 2 pete pete 8 Jan 21 21:36 myhardlink

Bir hardlink, aynı inode’a link verilen başka bir dosya oluşturur. Yani myfile2 veya myhardlink’in içeriğini değiştirirsem, değişiklik ikisinde de görünür; ancak myfile2’yi silersem dosya myhardlink üzerinden hâlâ erişilebilir. İşte ls komutundaki link count burada devreye girer. Link count, bir inode’un sahip olduğu hardlink sayısıdır; bir dosyayı kaldırdığınızda bu link count azalır. Inode, inode’a olan tüm hardlink’ler silindiğinde silinir. Bir dosya oluşturduğunuzda link count’u 1’dir, çünkü inode’a işaret eden tek dosya odur. Symlink’lerin aksine, hardlink’ler filesystem’ler arasında geçerli değildir çünkü inode’lar filesystem’e özgüdür.

$ ln -s myfile mylink

Bir symbolic link oluşturmak için ln komutunu -s (symbolic) ile kullanırsınız ve bir target file ile bir link name belirtirsiniz.

$ ln somefile somelink

Symlink oluşturmaya benzer, ancak bu kez -s’yi bırakırsınız.

Last updated