Dosyalara Kısayol-Bağ (Link) Tanımlanması
Diskin üzerinde yer alan bazı
dosyalar aslında orada olmayabilir; hatta bir dosyanın sistemde tek
bir kopyası olmasına rağmen, bu dosya birden fazla dizinde;
üstelik farklı isimlerle yer alabilir. Kavraması ve kullanması
zor bir kavram fakat bir kez mecbur kalıp da kullandığınızda
hoşunuza gideceğine emin olabilirsiniz.
Bir örnekle anlatırsak :
Farzedin ki bir UNIX sisteminin
yöneticisisiniz. Sizden, bilgisayara matlab isimli yeni bir uygulama
programı yüklemenizi istediler. Ancak, uygulama programının bir
gereği olarak, program paketine ilişkin dosyaların /usr/local
dizininin altında açılacak bir dizinde yer alması gerekiyor. Eh!
Olabilir. Ancak, bir sorun var! /usr diskinde, yeni programa
ilişkin dosyalar için yeterli boş yer yok; ve silebileceğiniz
gereksiz dosyalar da yok! ln kavramını kullanarak bu işi
çözebilirsiniz. Disklerin birinde; örneğin /home
dizininin bulunduğu disk bölümünde (partition), yeni
yükleyeceğiniz program için bir dizin yaratınız :
# mkdir /home/matlab
Sonra, bu dizini, /usr/local altında
yer alıyormuş gibi gösterebilmek için
# ln -s /home/matlab
/usr/local/matlab
komutunu veriniz.
Böylece, gerçekte /home altında yer
alan matlab dizini, aynı zamanda /usr/local altında da varmış
gibi olacaktır. Bu dizini kullanırken isterseniz /home/matlab;
isterseniz /usr/local/matlab dizin adreslerini kullanabilirsiniz. Bir
başka deyişle, dosyalarının /usr/local altında bulunmasını
isteyen matlab yazılımını kandırmış olursunuz.
Link kavramının çok işe
yarayabileceği, bir öncekine benzeyen bir senaryo daha
anlatabilirim. Diyelim ki elinizde mhsb1995 isimli bir dosya var ve
muhasebe departmanının kullandığı muhasebe programı bu dosyayı
mutlaka bu isimde görmek istiyor. Öte yandan yeni satın aldığınız
bir mali analiz programı, aynı muhasebe verilerini acct95 adıyla
görmek istiyor.
Söz konusu dosyanın adı mhsb1995
olduğu zaman muhasebe departmanının sorunu yok ama siz mali analiz
programını çalıştıramıyorsunuz. Analiz çalışmaları için
dosyanın adını değiştirseniz, siz çalışabiliyorsunuz ama bu
sefer muhasebe departmanındaki program kullanılamıyor. Dosyanın
adını mhsb1995 olarak tutup, kendi analiz çalışmalarınız için
acct95 adlı bir kopyasını çıkardığınızda ve siz bu kopya
üzerinde çalıştığınızda problem kısmen çözülüyor ama çok
kullanıcılı ortamda siz analizler üzerinde çalışırken öte
taraftan muhasebe personeli yeni kayıtlar girip sizin
analizlerinizin eskimiş kayıtlar üzerinde yapılmasına neden
oluyorlar. İşte böyle bir durumda link kullanımı sizi
kurtaracaktır.
# ln ./mhsb1995 ./acct95
Bu komutla mhsb1995 dosyasını acct95
isimli bir dosyaya bağladığınızda (aslında sadece tek bir asıl
kopya var; o da mhsb1995. acct95 isimli bir dosya aslında yok sadece
diğer dosyanın bir başka adı. ) Bu sayede mhsb1995 dosyasında
yapılan her değişiklik acct95 diye tanınan dosyada da aynen
gözlenebilecektir. İşin bir başka yaralı tarafı da; acct95
isimli dosyanın diskte hiç yer kaplamayacak olmas Bu örnekler
arasında, dikkatinizi çekmiş olduğunu umduğum bir fark var. İlk
örnekte (matlab), ln komutunda -s diye bir parametre kullandım;
oysa ikinci muhasebe örneğinde kullanmadım!
- Eğer, ln komutuyla birbirlerine bağlanacak olan dosya sistemi elemenları birer dizinse; -s parametresini kullanmak zorundasınız.
- ln komutuyla, bir dizini ve bir dosyayı birbirlerine bağlayamazsınız. Bağlanacak olan elemanların ikisi de dizin; ya da ikiside dosya olmalıdır.
Birbirine bağlı olan dosyalardan
birini silmeniz diğerini etkilemez. Asıl dosyayı silseniz bile,
UNIX, bağlantıyı farkedip dosyayı diskten gerçekten
silmeyecektir. UNIX, her dosya için bağlantılarısayar ve her
silme işleminde bağlantı sayısını bir azaltır. Gerçek silme
işi bu bağlantı sayısı sıfırlanınca yapılır.
Bir dosyanın gerçekten var olan bir
dosya mı, yoksa sadece bir bağlantı mı (link) olduğunu anlamak
için ls komutunu -l seçeneği ile kullanmanız gerekir. İçinde
bağlantılı dosyalar bulunan bir dizinde ls -l komutunu vererek,
alacağınız listede bağlantılı dosyaları ve hangi dosyaya
bağlantılı olduklarını açıkça görebilirsiniz.
Symlink aracını lullanarak gerçek
ve sembolik linklerimizi takip edebilir. Hedefi yok olmuş sembolik
linkleri sistemden kaldırabiliriz. Herhangi bir dizindeki sembolik
linkleri görebilmek için
[root@mail ~]# symlinks -v /etc/
relative: /etc/grub.conf ->
../boot/grub/grub.conf
relative: /etc/bg5ps.conf.zh_CN ->
bg5ps.conf.zh_CN.GB2312
relative: /etc/bg5ps.conf ->
bg5ps.conf.zh_TW.Big5
relative: /etc/vfontcap ->
../usr/share/VFlib/2.25.6/vfontcap
relative: /etc/rc5.d ->
rc.d/rc5.d
relative: /etc/rc2.d ->
rc.d/rc2.d
absolute: /etc/named.conf ->
/var/named/chroot/etc/named.conf
relative: /etc/rmt -> ../sbin/rmt
relative: /etc/rc1.d ->
rc.d/rc1.d
absolute: /etc/rndc.key ->
/var/named/chroot/etc/rndc.key
relative: /etc/rc0.d ->
rc.d/rc0.d
relative: /etc/rc6.d ->
rc.d/rc6.d
relative: /etc/init.d ->
rc.d/init.d
relative: /etc/rc.local ->
rc.d/rc.local
relative: /etc/rc -> rc.d/rc
relative: /etc/rc.sysinit ->
rc.d/rc.sysinit
relative: /etc/rc4.d ->
rc.d/rc4.d
relative: /etc/bg5ps.conf.zh_TW ->
bg5ps.conf.zh_TW.Big5
relative: /etc/rc3.d ->
rc.d/rc3.d
Eğer bu dizinleri rekursif
olarak taramak istiyorsak komuta –r parametresini eklemeliyiz.
[root@mail ~]# symlinks -r -v /etc
Eğer çok bir dizinde hedefi
kaybolmuş yada silinmiş sembolik linkleri silmek istiyorsak.
[root@mail ~]# symlinks -d /tmp/
ALINTIDIR
KAYNAK:www.belgeler.org
ALINTIDIR
KAYNAK:www.belgeler.org