Konsolda çalışmak 3
man hier, find, locate ve dizinler üzerine
Yazan: Kandalf Tarih: 02.04.2005
GNU/Linux işletim sisteminde dizinlerin ve dosyaların diğer işletim sistemlerine göre farklı işlevleri ve özellikleri vardır. Bu özelliklerin bilinmesi sistemin işleyişinin kavranabimesi için yararlı olacaktır. Bu makalede dizin yapısı hakkında bilgi almak,dizinlerin özellikleri, dizin ve dosyaların aranması ve bulunması üzerinde duracağız.
Dizin yapısı
Diğer işletim sistemlerini kullandıysanız dizin yapısı hakkında bilginiz vardır. Aradığınız dosyayı bulmak, yazılımı kurmak ve kaldırmak ve kendiniz tarafından yapılacak işlemlerde nereye bakacağınızıbilirsiniz. GNU/Linux işletim sistemi ailesinin dizin yapısı ise diğer sistemlerden farklıdır. Farklı olmasının getirdiği sorunları aşmak için ise dizin yapısının bilinmesi gereklidir.
İlk bakışta farklı olsa da dizin yapısı hakkında bilgi almak için konsol size gereken araçları sunar. Böylece dizin yapısının nasıl işlediğini ve sistemin temel mantığını kavramak kolaylaşır. Konsol oturumu açarak dizin yapısını öğrenmeye başlayalım. Konsolda şu komutu verelim:
kandalf@linux:~-Konsole
Oturum Düzenle Görüntüle Yer imleri Ayarlar Yardım
home@kandalf:~>man hier
komutunu verdiğinizde kullandığınız sistemin dizin yapısını anlatan bir kaynağa erişeceksiniz. Konsolda aşağı doğru indikçe dizinlerin neler olduğu ve aralarındaki ilişki tanımlanmaktadır. Burada dizinlerin yapısı üzerinde durmayacağım.
Kendi konsol ekranınızdaki man hier komutunun çıktıısında bazı dizinlerin de alt dizinlere ayrıldığınını görebilirsiniz. Bu yazı kapsamında tüm dizinler üzerinde durmayacağım. Tersine, bazı dizinler üzerinde durmak ve bunlar hakkında bilgi vermek istiyorum. Bunlar /home, /etc, /bin, /sbin.
/home
Sistemi kullanmaya başladığınızda ilk dikkatinizi çeken kendinize ait bir dizinde dosyalarınızın yer almakta olduğudur. Bunun temel nedeni GNU/Linux işletim sisteminizin çok kullanıcılı bir sistem olmasıdır. Her kullanıcı sisteme giriş yaptığında kendi ayarları, dosyaları ile çalışır. Bu nedenle, kullanıcıların kişilsel ayarları ve dosyaları dizin ağacı üzerinde /home/kullanıcı_adı dizininde yer almaktadır. Burada önceki makalelerde ele aldığımız gibi kullanıcıya ait olan .bashrc dosyası ile gerekli olan diğer dosyalar yer alır.
root kullanıcısı sistem üzerinde tam yatkili olan kullanıcıdır. bu nedenle de diğer normal kullanıcılardan ayrı olarak /root dizinini kullanır. Bunun gerekçesi ise tam yetkili kullanıcı olmanın bazı geri dönülmez hatalara neden olabileceği ile çok kullanıcılı bir sistemde sistemin çalışmasını düzenleyecek olan bir kullanıcıya duyulan gereksinmedir. Normal kullanıcılar, kendi dizinlerindeki dosyaları ile çaloşabilcekler ve sistemin genel işleyişini engelleyecek bir düzenleme yapamayacaktırlar. Bundan dolayı root olarak sistemde çalışmanız gerektiğinde kullanmanız önerilir. Sürekli olarak root hesabını kullanmayınız. Sistem yöneticileri root hesabı kullanmazlar.

Sistemin İşleyişine Dair...
Konsolda bazı düzenlemler yaparak kendi tanımladığımız komutları kullanmamıza olanak veren .bashrc dosyası, /home/kullanıcı_adı dizininde yar alır. Ancak sistem genelindeki işleyiş içinde bir bashrc dosyası yer almaktadır. Sistem geneline ait olan ayarlar ise sisteme ait olan bashrc dizininde yer almaktadır. Bu dosya sistem genelinde konsol komutları ve konsol oturumlarının tanımlandığı dosyadır.
/etc dizininde alt dizinler de yar alır. Örneğin kullandığınız X sunucusun için ayarlar /etc/X11 alt dizininde yer alan dosyalarda tanımlanmaktadır. Benzer olarak da TCP/IP ve UDP protokollarine ait düzenlemler de services yer almaktadır. Bu dizin sistem genelindeki ayarların yer aldığı dizindir. Dizinde yer alan dosyalar üzerinde işlem yapacağınızda çalışacağınız dosyanın aslını uygun bir dizinde bir yedeğini saklamanız önemlidir.
Dikkat etmemiz gereken, sistemde bir tek bashrc dosyasının olmadığıdır. Her kullancı için-/home/kullanıcı_adı-dizininde bir .bashrc dosyası yer almaktadır. Bunlar kullanıcıların kendi tercihlerine göre tanımladıkları alias saklanması ve kullanıcıların rahat çalışabilmeleri için düzenlenmiştir.
Yukarıda /bin ve /sbin dizinlerden söz etmiştik. Bu dizinler komutların, normal kullanıcıların ve yetkili kullanıcı tarafından kullanılabilen bazı uygulamaların yer aldığı dizinlerdir. Bu dizinlerde yer alan uygulamlar sistemin açılmasında veya özel durumlarda kullanılan komutları içerirler. Örneğin, lilo, grub, fsck, init gibi. Yetkili kullanıcı tarafoından kullanılan komutlar ise /sbin dizininde yer alır. bunlar normal kullanıcı tarafından kullanılamayan komutlar ve uygulamalardır. uygulamların ikiye bölünmüş olmasının nedeni kullanıcıların yetkilerinin sınırlandırılmış olması, sistemin işleyişindeki yetkilerine göre komut ve uygulamaları kullanabilmeleridir.
env ve PATH
Kullanıcı ayrımı yapılıyorsa, bu durumda kullanıcıların yetkilerine göre kullanabildeikleri uygulamaların tanımlanması gereklidir. Sistem kullanıcıların yetkisinde bulunan uygulamaların yerini bilmek durumundadır. GNU/Linux işletim sisteminde dizinler ve dosyalar önemli olduğuna göre, sisteminde bir kullanıcı için tanımlı olan uygulama ve dosyaları bulmasını sağlamak gereklidir. Örneğin yeni bir uygulamayı kurmak, kullanıcılara yetki vermek için genel olarak dosyaların ve dizinlerin yerini yanımlamak gereklidir. Bunu ise PATH ile gerçekleştiririz.
PATH düzenlemesini tanımlamak için env komutu kullanılabilir. Eğer env komutunu herhangi bir seçenek olmadan kullanırsanız, size ait olan düzenlemeyi tamamen elde edersiniz. Bu uzun çıktı içinde aradığımız bulmak için pipe ve grep kullanırsak, PATH tanımladığı dizin ve dosyaları görebiliriz.
kandalf@linux:~-Konsole
Oturum Düzenle Görüntüle Yer imleri Ayarlar Yardım
home@kandalf:~>env | grep PATH
MANPATH=/usr/local/man:/usr/share/man:/usr/X11R6/man:/opt/gnome/man
GNOME_PATH=:/opt/gnome:/usr
XNLSPATH=/usr/X11R6/lib/X11/nls
PATH=/home/kandalf/bin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:
/opt/gnome/bin:/opt/kde3/bin:/usr/lib/java/jre/bin
PKG_CONFIG_PATH=/opt/gnome/lib/pkgconfig
ACLOCAL_PATH=/opt/gnome/share/aclocal
INFOPATH=/usr/local/info:/usr/share/info:/usr/info
home@kandalf:~>
/usr/bin/mozilla
home@kandalf:~>
PATH, bir komutu verdiğinizde sisteme nereye bakmasını ve gereksinim duyulan bileşenlerin nerede olduğunu belirtir. Eğer PATH ile tanımlanmamış ise sistem hata mesajı verecektir. Bu durum özellikle de sistemde kurulu olduğunu veya kurduğunuzu düşündüğünüz bir uygulama veya komutun çalıştırılamaması durumunda sıkıcı olacaktır.
find ve locate
Bir uygulamayı indirip kurduğunuzu varsayalım. Kurulum başarılı olmuş ve bir hata mesajı almamış olalım. Uygulamayı çalıştırmak için konsolda uygulmanın adını yazıp enter basalım. Eğer sistem size uygulamanın tanınmadığına veya bulunmadığına dair hata mesajı verse ne yapardınız?
find komutunu kullanarak bir dosya ve dizini bulabiliriz. find kullanmak için taranacak dizin ve aranacak olan isimin tanımlanması yeterlidir. Basit bir örnek olarak Mozilla 1.7.5 kurulmuş olan bir sistemde yeni bir kullanıcı hesabı oluşturup, Mozilla 1.7.5 çalıştırmak isteyelim. Mozilla 1.7.5 çalıştırmak için ALT+F2 ile komut çalıştır seçeneğini çağırımış olsun. Ancak sistemde eski bir sürümü kurulu ise karşımıza eski sürümü gelecektir. O halde aradığımız yeni sürüm mozillayı bulmak için konsolda find komutunu kullanmak yeterlidir.
kandalf@linux:~-Konsole
Oturum Düzenle Görüntüle Yer imleri Ayarlar Yardım
home@kandalf:~>find / -name mozilla
find: /etc/opt/kde3/share/servicetypes: Erişim engellendi
find: /etc/ssl/private: Erişim engellendi
/opt/kde3/share/icons/crystalsvg/16x16/apps/mozilla
/opt/kde3/share/icons/crystalsvg/32x32/apps/mozilla
/opt/kde3/share/icons/crystalsvg/48x48/apps/mozilla
/opt/mozilla
/opt/mozilla/installed-chrome.d/mozilla
find: /usr/share/doc/packages/taskjuggler/manual: Erişim engellendi
find: /usr/share/snmp/snmpconf/snmpd.conf: Erişim engellendi
find: /proc/1/fd: Erişim engellendi
/usr/local/mozilla175/mozilla
home@kandalf:~>
Yukarıdaki konsol görüntüsünde erişim engellendi mesajları aldığımız ve bunlara ek olarak da mozilla adını içeren dizin ve dosyaları da bulduğumuuz görüyoruz. komutu belirttiğimiz üzere find / dizini altında yer alan tüm dizinleri ve dosyaları tarar. Erişim engellendi mesajı ise kullanıcının yetkisi dışında kalan dizinlere erişilmek istenmesi durumunda alınır. Eğer aynı komutu sadece /usr/local/ olarak vermiş olsa idik, erişim engellendi mesajını almayacak ve söz konusu dizinde yer alan ve mozilla anahtar sözcüğünü içeren sonuçları görecektik. Kendi sistemimde gördüğümüz gibi bazen birden fazla sonuç elde edebiliriz. Bu önemli mi? Bazı durumlarda evet!

Bazı durumlarda ise find komutunu kullanmak ve sonuçlarını elde etmek uzun zaman alabilir. Bunun yerine ise locate komutunu kullanabiliriz. Bu komutun kullanılmasında dikkat edilecek olan nokta, komutun *NIX ailesi istemlerde dosya ve dizinlerin yer aldığı bir veritabanında tarama yaparak sonuç elde ettiğidir. Bazı sistemlerde bu veritabanı düzenli olarak güncelenir. bazılarında ise bu veri tabanı kaldırılmış olabilir. Her iki durumda da güncellenmemiş bir veritabanında arama yapıldğında sonuç elde dilemeyecektir. Benzer olarak da veritabanı kaldırılmış ise de sonuç elde edilemez.
Burada bir başka önemli noktaya geldik. Eğer aynı uygulamadan birden fazla varsa komutu yazdığımızda hangisi çalışacaktır? Bunu öğrenmek için which komutunu kullanarak öğrenebiliriz.
kandalf@linux:~-Konsole
Oturum Düzenle Görüntüle Yer imleri Ayarlar Yardım
home@kandalf:~>which mozilla
/usr/bin/mozilla
home@kandalf:~>
Sistem daha önce gördüğümüz gibi PATH içinde yer alan tanımlamara bakmaktadır. Bu tanımların düzenlenmesini ise ileride göreceğiz. Zira PATH içinde yer alan değişkenleri yeniden tanımlamaz iseniz, sistem önceden tanımlanmış olan uygulamayı çalıştıracaktır. Bu durumda yeni sürümü çalıştırmak için dosyanın tam yolunu belirterek çağırmanız gerekir.