LANGUAGE TRANSLATE

English French German Spain Italian Dutch Russian Portuguese Japanese Korean Arabic Chinese Simplified

19 Şubat 2012 Pazar

DOSYA VE DİZİN İŞLEMLERİ-5



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