Dosya Sistemi, Yapısı ve Temel komutları

advertisement
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Dosya Sistemi, Yapısı ve Temel komutları
Dosya, çevre bellek üzerinde (disk, disket, CD vb.), kendisine bir isim verilmiş olan
bağımsız bir bilgi grubudur. Linux‟ta bir dosya, ismi ve bulunduğu dizin ile belirlenir. Doğal
olarak aynı dizin içerisinde belirli bir isimde sadece bir tane dosya bulunabilir. Aynı isim
fakat farklı içerikte dosyalar oluşturmak istiyorsanız bunları farklı dizinlere koymalısınız.
Dizin kavramı ise bildiğiniz gibi, disk içinde belirli bir isimle tanımlanmış disk bölgesi
anlamındadır. Bu konulara yeni başlayanlar genellikle dosya ve dizin kavramını karıştırırlar.
Bir dizin içerisinde çok sayıda dizin ve dosya bulunabilir fakat dosya içerisinde dizin
bulunmaz.
Dosya isimleri 255 karakteri aşamaz. Tüm büyük harfler (A-Z), küçük harfler (a-z),
rakamlar (0-9) ve noktalama işaretlerinden bir bölümü (. , _ -) dosya ve dizin isimlendirirken
kullanılabilir. Dosya isimlerinde Türkçe karakterler ve <>?*{}[]()^!\|&$~ gibi karakterler
kullanılamaz.
En Sık Karşılaşacağınız Dosya Türleri:
Bilgisayar ortamında çok çeşitli tipte dosyalarla karşılaşmak söz konusudur.
Bunlardan en yaygın olarak karşılaşılabilecek olanları aşağıdaki sınıflarda toplamak
mümkündür.
1) Sistem Dosyaları
Bunlar bilgisayar sisteminin işletimi ile ilgili dosyalarıdır. Genellikle bu tür dosyalar
Linux işletim sisteminin okuyarak sistem işletimi için kullandığı metin tipinde dosyalardır.
Linux sistem sorumlusu bu tür sistem dosyalarının güncellenmesinden sorumludur. Örneğin
sisteme yeni bir kullanıcı eklense ya da sistemden yani bir kullanıcı çıksa kullanıcı sistem
dosyasının güncellenmesi gerekir.
2) Kullanıcı Veri Dosyaları
Bu tip dosyalar, Linux işletim sistemini kullanan kullanıcıların oluşturduğu ya da
güncellediği dosyalardır. Bunlarda metin tipi dosyalardır. Sayısal ya da alfabetik bilgi içerir.
3) İcra Edilebilir (executable) Dosyalar
Bu tip dosyalar ise, bilgisayarda doğrudan doğruya çalıştırılabilecek komut içerirler.
Belirli amaç için oluşturulmuş komut kümesine program adı veriyoruz. İcra edilebilir dosyalar
1
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
bu anlamda program dosyalarıdır. Bunların oluşturulması ya da üzerinde değişiklik yapılması
özel yazılım ürünleri sayesinde mümkündür.
Linux işletim sisteminde çalıştırılabilir dosyaların belli bir uzantıya sahip olması
gerekmemektedir. Bir dosyanın çalıştırılıp çalıştırılamayacağı dosyanın izinlerinden
anlaşılmaktadır.
Dizin Hiyerarşisi
Dizin Hiyerarşisi, işletim sisteminin, dosyaları diskte tutabilmek için kullandığı
yapılar ve yöntemlere verilen addır. Yani bir anlamda “dosyaların diskteki düzenidir”
diyebiliriz. Bu düzen kapsamında bir hiyerarşiden bahsedebiliriz.
Diğer işletim sistemlerinde olduğu gibi Linux‟ta da, disk, kendine isim verilmiş bir
takım bölgelere ayrılır. Bu isimlendirilmiş bölgelere dizin (directory) denilmektedir. Bir
dizin içine belirli bir konu ile ilgili çok sayıda dosya konulabilir. Ayrıca bir dizin başka bazı
dizinleri de içerebilir. Bir dizinin içerdiği bu dizinlere, o dizine ait alt dizin (subdirectories)
adı verilmektedir.
Linux‟ta, diskteki diğer bütün dizinleri içeren dizine kök (root) dizin adı verilir. Bir
disk içerisinde bir tane kök dizin bulunabileceği yukarıdaki tanımdan anlaşılmaktadır. Kök
dizine ebeveyn dizin (parent directory) adı da verilir. Kök dizin altındaki alt dizinlerde
kendilerine bağlı alt dizinler içerebilir ve bu yapı belirli bir derinliğe kadar sürebilir. Kök
dizin ve onun altındaki alt dizin guruplarından oluşan yapıya ağaç yapısı (tree structure) adı
verilmektedir.
Kök dizini (root directory) “/” karakteriyle gösterilir.
Bir dizin ya da dosyanın; sistemdeki konumu, o dosya/dizinin “yol”uyla belirtilir. Yol;
kök dizininden itibaren, o dosya/dizine ulaşmak için geçilmesi gereken dizinlerin “/”
işaretiyle birleştirilerek ardışık bir şekilde yazılmasıyla elde edilen ifadedir. Örneğin;
/home/erkut
yolu, kök dizinindeki, home isimli dizinin içindeki erkut dizininin konumunu belirtir.
Bu ifadede en baştaki “/” kök dizinini belirtmektedir. Aynı şekilde “/usr/share/kde” yolu, kök
dizinindeki usr dizininin içindeki, share dizininin içinde bulunan kde dizininin yerini belirtir.
2
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Sisteminizde erişilebilir her dizin/dosyanın yeri (diğer disklerdekiler de dâhil olmak
üzere) bu şekilde tarif edilebilir.
Bağlama ve Ayırma Kavramları (mount ve unmount)
Bir dosya sistemini/aygıtı erişilebilir kılmak için yapılması gereken işleme
“bağlamak” (İng. mount) denir. Bağlama işlemi yapıldıktan sonra, bağlanan aygıta, “bağlama
noktası” adı verilen bir dizinden erişilebilir. Bağlama noktası olarak sistemde herhangi bir
dizin seçilebilir, fakat birazdan bahsedeceğimiz üzere ön tanımlı bağlama noktaları /mnt'de
bulunur.
Ayırma (ing. unmount) kavramı da adı üstünde, bir sistemi/aygıtı sistemden ayırmak
için kullanılır. Ayrılma sırasında ayrılan aygıta, yapılan birtakım değişiklikler kaydedilir.
Dikkat! Bilgisayarınızı kapattığınız zaman sisteminize bağlı tüm aygıtlar otomatik
olarak ayrılır. Eğer bilgisayarınızı doğrudan mesela fişi çekerek kapatırsanız, ayırma işlemi
sırasında kaydedilecek olan bazı değişiklikler kaydedilemez, bu da sisteminizde birtakım
hasarlara yol açabilir. Bu yüzden her zaman böyle durumlardan kaçınınız.
Kök Dizini
Kök dizini diğer tüm dizin ve dosyaları içeren dizindir. Kök dizinin bulunduğu disk
bölümünün sahip olması gereken önemli bir özellik bulunmaktadır. Kök dizinini içeren disk
bölümü sistemi tek kullanıcılı açmak için gerekli tüm dosyaları içinde barındırmalıdır. Bu
işletim sistemin açılabilmesi için gerekli bir kuraldır.
Kök dizininde bulunan dizinlerden ve bu dizinlerin kullanılışlarından kısaca
bahsedelim:
/
bin
boot
dev
etc
home
lib
mnt
proc
root
usr
var
tmp
: Tüm kullanıcıların kullanabildiği temel komutları (cp, mv, ls gibi.)

/bin
içerir.

/boot
: Açılış işlemi (ing. boot) sırasında kullanılan dosyaları (çekirdek
görüntüsü, sistem haritası, önyükleyici yapılandırması gibi.) içerir.

/dev
: Bilgisayarınızdaki, donanımlarla (sabit diskler, fare gibi.) iletişim
kurulabilmesi için gereken özel aygıt dosyalarını içerir.
3
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2

/etc
: Adı İngilizcedeki etc kısaltmasından gelir. Dizin, bulunduğu
bilgisayara özel, birçok yapılandırma bilgisini içerir.

/home
: Bu dizin altında, kullanıcıların kişisel verilerini, yapılandırmalarını
kaydettikleri çalışma alanları olan ev dizinleri bulunur. Her kullanıcının ev dizini,
kendi kullanıcı adını taşır.

/lib
: Çekirdek modülleri ve paylaşılan kod kütüphanelerini içerir. MS
Windows'ta dll uzantısına sahip olan paylaşılan kütüphane dosyaları, Linux'ta so
uzantısına sahiptir.

/mnt
: Çeşitli dosya sistemi/aygıtların (Örneğin CD, DVD sürücünüz diğer
sabit diskleriniz gibi) bağlama noktaları burada bulunur.

/proc
: Süreçler, sistem belleği, bağlı aygıtlar, donanım yapılandırmalarıyla
ilgili bilgileri içeren özel bir “sanal” dosya sistemidir. Bir bilgi alma merkezi
olarak görülebilir. Birçok uygulama buradaki bilgilerden yararlanmaktadır.

/root

/usr
: Tüm kullanıcılarca paylaşılan verileri (örneğin programlar, komutlar,
kütüphaneler, dokümanlar gibi) içeren dizindir.

: Sistem yöneticisinin (yani “root” kullanıcısının) ev dizinidir.

/usr/bin

/usr/sbin : Sistem tarafından kullanılan ve sistemin açılması, kapanması
ve tek kullanıcılı modda çalışması ile ilgili olmayan programlar.

/usr/lib

/usr/include: C/C++ için kullanılan başlık dosyaları.

/usr/doc

/usr/man : Man dosyaları.
: Normal kullanıcılar tarafından kullanılan komutlar.
: Programlama için kullanılan kütüphaneler.
: Dokümanların bulunduğu dizin.
/var
: Değişken verileri içerir. (Örneğin rapor dosyaları, veritabanları,
kuyrukta bekleyen yazdırılacak dokümanlar gibi.)

/var/lock : Çalışan programların yarattığı kilit dosyaları.

/var/log
: Log dosyaları.

/var/run
dosyalar.
: Sistemde çalışan sunucuların proses kimlik numaralarını içeren

/var/tmp
: Geçici dosyalar.

/var/yp
: NIS ile ilgili dosyalar.

/var/spool : Kuyruk dosyaları.
o mail
: Kullanıcıların e-postalarının tutulduğu dizin.
o Mqueue : E-posta kuyruğunda bekleyen e-postalar için yaratılan geçici
kuyruk dosyalarının bulunduğu dizin.
o lpd
: Yazıcı kuyruğunda bekleyen işler için geçici dosyaların
bulunduğu dizin.

/tmp
: Geçici dosyaları içerir. Yalnız geçici olduğu için bu dosyaları silmek
tehlikeli olabilir.
4
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Ana Dizin (Home Directory)
Linux her kullanıcı için, o kullanıcıya ait olan bir ana dizin (home directory)
sağlamaktadır. Bu ana dizin içinde, kullanıcıya ait çeşitli dosyalar bulunabilir ya da kullanıcı
bu ana dizin içerisinde başka alt dizinler oluşturabilir. Bir kullanıcının home dizinin nerede
açılacağı Linux tarafından belirlenir ve kullanıcı tarafından bu yer değiştirilemez.
Bir kullanıcının ana dizini içine normal olarak diğer kullanıcılarda girebilir;
kullanıcıya ait dosyaları okuyabilir ve kopyalayabilir. Sadece dosyalar üzerinde değişiklikler
ve dosyaları silme işlemini gerçekleştiremezler.
Bir kullanıcı, kendi home dizini içerisinde diğer kullanıcıların girmesini istemiyorsa
bu durumda kendi dizin ve dosyaları üzerine erişim kısıtlaması ya da kilit getirmelidir.
Burada bir noktayı belirtmede yarar vardır; sisteme root olarak giren (login olan)
kullanıcı sistem yöneticisidir (system administrator) ve sistemdeki bütün dosya ve dizinlerin
üzerinde bu dosyalar ve dizinler kilitli bile olsa her türlü işlem yapabilir. O nedenle sistem
yöneticisi güvenli bir kişi olmalıdır.
5
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Linux Sisteme Giriş
Sistem açıldığında aşağıdaki görüntü gelir.
Login : _
Linux sistem, kullanıcıdan bir bağlantı ismi (login) beklemektedir. Bu işlem ile
kullanıcının sistemde bir oturum açması söz konusu olacaktır. Bağlantı isminin, sistem
yöneticisi tarafından sisteme daha önce tanıtılmış bir kullanıcı ismi olması gerekiyor. Aksi
takdirde giriş işlemi gerçekleştirilemez. Bağlantı ismi doğruysa kullanıcıdan bağlantı ismine
ait parolayı girmesi istenir.
Password :
Bağlantı ismi ve parolası doğru bir şekilde girildiğinde ekranda $ işareti görüntülenir.
$ işareti, Linux kabuğuna ulaşıldığını ve sistemin Linux komutlarını kabul etmeye
hazır olduğunu göstermektedir. Komutları bu işaretin sağında bulunan imlecin bulunduğu
yere yazarız.
Eğer kullanıcı sistem yöneticisi ise, # işareti görüntülenir.
6
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Linux Sisteminden Çıkış
Kullanıcının komut yorumlayıcısında çalışması bittiğinde sistemi terk etmesi
gerekiyor. Bu amaçla aşağıdaki yöntemlerden birisi tercih edilir.

Ctrl+d (ctrl ve d tuşlarına birlikte basılır)

exit veya logout komutu yazılarak enter tuşuna basılır.
Böylece Linux sisteminden çıkılarak login ekranına dönülür. Bu işlemin Linux
sistemini kapatmaz, sadece kullanıcı Linux sistemi terk etmiştir.
passwd (Kullanıcı Parolasının Değiştirilmesi)
Kullanıcı parolasını değiştirmek istediğinde passwd komutunu kullanacaktır. Komut
enter‟landıktan sonra önce mevcut parolanın girilmesi ardından ise iki defa yeni parolanın
girilmesi gerekiyor.
Normal kullanıcılar sadece kendi parolalarını değiştirebilirler. Sistem yöneticisi (root)
ise kendi parolasını değiştirebildiği gibi istediği kullanıcıların parolasını da değiştirebilir.
Bunun için kullanıcının eski parolasını bilmesine gerek yoktur. Örneğin sistem yöneticisi
burak bağlantı ismine sahip kullanıcının parolasını değiştirmek için passwd komutu aşağıdaki
şekilde kullanılır.
# passwd burak
New password : _
Yeni parola kaydedildikten sonra kullanıcının parolası değişmiş olur.
7
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Hangi kabuğu kullanıyorsunuz?
echo $SHELL komutuyla hangi kabuğu kullandığınızı kontrol edebilirsiniz:
$ echo $SHELL
/bin/bash
Sistemi tamamen kapatmak
shutdown komutu sistemi kapatmak, yeniden başlatmak ya da tek-kullanıcı moduna
geçmek için kullanılabilir. Sistemi kapatmak için sistem yöneticisi olmalısınız.
Örneğin 5 dakika içinde tek kullanıcı moduna geçmek için;
# shutdown 5
Broadcast message from root (pts/2) (Wed Jan 15 19:40:02 2014):
The system is going DOWN to maintenance mode in 5 minutes!
Eğer Control+c tuşuna basarsanız tek-kullanıcı moduna geçmeyi sağlayan bu komutu
kaldırabilirsiniz. Bu gördüğünüz mesaj sistemde o anda çalışan tüm kullanıcıların
terminallerinde belirecektir. Böylece bu kullanıcılar yaptıkları işi kaydedecek ve düzgün bir
şekilde sistemden çıkabilecek zamanı bulabileceklerdir. Burada belirttiğimiz rakam kaç
dakika içinde sistemin kapatılacağını belirtmektedir.
Eğer sistemde çalışan tek kullanıcı siz iseniz belli bir süre belirtmek yerine ”now”
parametresini kullanabilirsiniz. Örneğin sistemi hemen o anda yeniden başlatmak için:
# shutdown -r now
Bu örnekte -r ”reboot after shutdown” (yeniden başlat) bir sonraki örnekte
göreceğimiz -h ”halt after shutdown” (tamamen kapat) anlamına gelir. Bu durumda artık
control+c tuşuna basma şansınız olmayacaktır çünkü artık kapatma işlemine başlanmıştır. Son
olarak bahsedeceğimiz -h parametresi ise şöyle kullanılır;
# shutdown -h 1
Broadcast message from root (pts/2) (Wed Jan 15 19:50:58 2014):
The system is going DOWN for system halt in 1 minute!
8
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Temel Linux Komutları
Linux sistemlerinde içsel komut kavramı yoktur, bütün komutlar aslında birer
programdır ve temel komutların POSIX standartlarında belirlenmiştir. Bu sistemlerde bir
komutun genel yapısı şöyledir:
<komut ismi> [seçenekler] [parametreler]
Seçenekler genellikle -x formatındadır. x burada bir ya da birden fazla karakteri temsil
eder. Bir komut birden fazla seçenek alabilir. Örneğin:
-x -y -z
Bu tür seçenekler tek bir - içerisinde de yazılabilirler. Örneğin:
-xyz
pwd (print working diroctory)
Sisteme genelde size ayrılmış bir dizin içinde girersiniz. Size verilen izinler
çerçevesinde diğer dizin ve dosyalara erişmeniz mümkündür. Linux dizinleri arasında
dolaşırken, nerede olduğunuzu anlamak için pwd (print working directory) komutu kullanılır.
Bu komut yerinizi kaybettiğiniz durumlarda oldukça kullanışlıdır!..
$ pwd
/home/Erkut
cd (change directory) komutu
cd komutu o anda çalışmakta olduğunuz dizini belirler. cd komutunun bir adı da
”hâlihazırda çalışılan dizin (current working directory)” dir.
$ cd /
Bu komut ile bash kabuğuna / içinde çalışmak istediğimizi söylemiş olduk. cd
komutuna cevap olarak gelen / elemanına yol (path) denir ve cd komutuna gitmek istediğimiz
yeri söyler. Burada, / elemanı mutlak yol (absolute path) olarak kullanılmış. Gidilecek olan
dizinin, dosya sistemi ağacında, kökten itibaren ifade edilişine mutlak yol denir.
9
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Birkaç mutlak yol örneği:
/dev
/usr
/usr/bin
/usr/local/bin
Gördüğünüz gibi bütün mutlak yol ifadelerinin ortak noktası / ile başlamalarıdır.
Örneğin /usr/local/bin yolunu yazarak, cd komutuna önce / dizinine gitmesini, oradan usr
dizinine, daha sonra da usr dizininin altında local ve onunda altında bin dizinine gitmesi
söyleniyor. Mutlak yol ifadeleri, her zaman / den başlayarak kullanılır.
Diğer bir yol türü göreli yoldur. Linux, cd ve diğer komutlar bu tür yolları daima
içinde bulunduğunuz dizine göre yorumlar. Göreli yollar kesinlikle / ile başlamaz. Yani eğer
/usr dizini içinde isek:
$ cd /usr
/usr/local/bin dizinine gitmek için:
$ cd local/bin
$ pwd
/usr/local/bin
yazabiliriz.
”..” dizini özel bir dizindir ve bulunduğunuz dizinin üstündeki dizini gösterir.
Yukarıdaki örnekten devam edecek olursak:
$ pwd
/usr/local/bin
$ cd ..
$ pwd
/usr/local
Gördüğünüz gibi şimdi içinde bulunduğumuz dizin /usr/local dizinidir. Bu şekilde
içinde bulunduğumuz dizine göre ”geriye” doğru gidebiliriz.
10
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Ek olarak, ”..” dizinini yol tanımlarken de kullanabiliriz. Örneğin:
$ pwd
/usr/local
$ cd ../share
$ pwd
/usr/share
Aşağıdaki komutlar yazıldıktan sonra hangi dizin içerisine gidileceğini tahmin etmeye
çalışınız:
$ cd /bin
$ cd ../usr/share/zoneinfo
$ cd /usr/X11R6/bin
$ cd ../lib/X11
$ cd /usr/bin
$ cd ../bin/
Şimdi bunları bir de yazarak nereye gittiğine bakınız ve doğru tahmin edip
etmediğinizi gözlemleyiniz.
cd konusunu bitirmeden önce birkaç küçük şeyden daha bahsetmek gerekmektedir. İlk
olarak ”.” ile temsil edilen ve ”hâlihazırda bulunduğunuz dizin” anlamına gelen özel bir
sembol daha vardır. Bu dizin cd komutuyla birlikte kullanılmaz, genellikle bulunduğunuz
dizindeki bazı programları çalıştırmak için kullanılır:
$ ./program
Yukarıdaki örnekte halihazırda çalışılan dizin (ardından) program isimli dosya
çalıştırılacaktır.
Eğer ana dizinimize gitmek isteseydik şöyle yazabilirdik:
$ cd
11
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Parametresiz kullanımda cd, kullanıcıyı home dizinine götürecektir. root kullanıcılar
için home dizini /root ve diğer kullanıcılar için ise /home/kullanıcı adı şeklindedir. Peki ya
acaba kendi home dizinimiz içerisinde bir dosya belirlemek istersek ne yapmak gerekir?
Mesela bir dosya argümanını program komutuna parametre olarak göndermek isteyelim. Eğer
dosya kendi home dizinimiz içerisinde yer alıyorsa, yazılabilecek komut aşağıdaki şekilde
düşünülebilir:
$ ./program /home/erkut/dosyam.txt
Fakat yukarıdaki örnekte olduğu gibi her zaman tam yolu yazmak çok verimli
olmayabilir. Neyse ki ˜ (tilda) karakteri yardımıyla aynı işi daha kolay bir şekilde halletmek
mümkündür. Şöyle ki:
$ ./program /~/dosyam.txt
Kabuk için ˜ komutunun, kullanıcının home dizini anlamına geldiğini söylemiştik.
Bunun yanında, yine ˜ kullanılarak başka kullanıcıların da home dizinlerine erişmek
mümkündür. Örneğin, hasan isimli kullanıcının home dizininde yer alan ogrencidosyasi.txt
isimli dosyaya erişmek istiyorsak aşağıdaki komut yazılabilir:
$ ./program ~hasan/ogrencidosyasi.txt
Dosyaların Listelenmesi
Dosya ve dizinleri görebilmek için, Linux işletim sisteminde ls komutu kullanılır:
$ cd /usr
$ ls
bin doc etc games include info lib local man sbin share src X11R6
-a seçeneğini belirterek gizli dosyalar (. ile başlayanlar) da dahil olmak üzere bir
dizindeki dosyaların tümünü görebilirsiniz. Aşağıdaki örnekte de görebileceğiniz gibi, ls -a .
ve .. özel dizin linklerini de gösterir:
12
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
$ ls -a
. .. bin doc etc games include info lib
local man sbin share src X11R6
ls komut satırında bir ya da birden fazla dosya ya da dizin belirtebilirsiniz. Eğer bir
dosya belirtirseniz, ls sadece o dosyayı gösterecektir. Eğer bir dizin belirtirseniz, ls bu dizinin
içeriğini gösterecektir. -l seçeneği, dosya haklarını, sahibi olan kişi ve grupları, değişikliğe
uğradığı zamanı ve boyut bilgilerini görmek istediğinizde işinize yarayacaktır. Aşağıdaki
örnekte -l seçeneğini /usr dizininin tam bir listesini almak için kullanıyoruz.
$ ls -l /usr
toplam 706
drwxr-xr-x
2 root
drwxr-xr-x
4 root
drwxr-xr-x
3 root
drwxr-xr-x
2 root
drwxr-xr-x 63 root
lrwxrwxrwx
1 root
drwxr-xr-x 124 root
drwxrwsr-x
9 root
drwxr-xr-x
6 root
drwxr-xr-x
2 root
drwxr-xr-x 194 root
drwxrwsr-x
4 knoppix
drwxr-xr-x
6 root
root 303104
root
73728
root
2048
root
8192
root
32768
root
10
root 217088
staff
2048
root
2048
root
53248
root
24576
knoppix 2048
root
2048
2003-03-23
2003-03-23
2002-07-04
2003-03-23
2003-03-22
2002-08-08
2003-03-23
2001-05-12
2002-08-21
2003-03-22
2003-03-23
2003-03-23
2003-02-13
21:10
19:50
18:54
16:36
19:14
15:02
21:10
02:04
22:09
22:20
20:30
18:47
08:36
bin
doc
etc
games
include
info -> share/info
lib
local
man
sbin
share
src
X11R6
Bazen bir dizinin içine değil de kendisine bakmak istersiniz. Bu gibi durumlar için -d
seçeneğini kullanabilirsiniz, bu sayede ls dizinlerin içine değil kendilerine bakar.
$ ls -dl /usr /usr/bin /usr/X11R6/bin ../share
drwxr-xr-x 194 root root 24576 2003-03-23
lrwxrwxrwx
1 root root
12 2003-03-23
drwxr-xr-x
2 root root 303104 2003-03-23
drwxr-xr-x
2 root root 20480 2003-03-22
20:30
21:05
21:10
18:36
../share
/usr -> /KNOPPIX/usr
/usr/bin
/usr/X11R6/bin
Bir dizinin kendisine bakmak için -d kullanabileceğinizi gördük ancak -R ile tam
tersini de yapabilirsiniz yani sadece bir dizinin içinde değil zincirleme olarak o dizinin içinde
bulunan tüm dizinlerin ve onların da içinde bulunan ve... Bu şekilde mevcut tüm dizinlerin
içine bakabilirsiniz! Bunun çıktısını burada göstermiyoruz çünkü böyle bir komutun çıktısı
13
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
epey uzun olur ancak siz kendi sisteminizde hemen ls –R ve ls -Rl komutlarının deneyip
sonucu görebilirsiniz.
Son olarak, -i seçeneği dosya sistemindeki nesnelerin inode numaralarını göstermek
için kullanılabilir:
$ ls -i /usr
6603072 bin
6603184 doc
6603296 etc
6603408 games
6603524 include
6603644 info
6603776 lib
6603888 local
6604004 man
6604116 sbin 6602956 X11R6
6604230 share
6604346 src
Bir dosya sistemindeki her nesneye özgü bir indeks numarası verilir, bu indeks‟e de
inode denir. Bu biraz önemsiz, ya da gereksiz detay gibi görünebilir ama birçok dosya sistemi
işlemini anlamanın temeli inode mantığını anlamayı gerektirir. Örnek olarak, her dizinde
gördüğünüz . .. bağlantılarını düşünelim.
Gerçekte .. dizininin ne olduğunu tam olarak anlayabilmek için /usr/local‟ın inode
numarasına bir bakalım:
$ ls -id /usr/local
6603888 /usr/local
/usr/local dizininin inode numarası 6603888 imiş, şimdi de, /usr/local/bin/.. ‟in inode
numarasına bakalım:
$ ls -id /usr/local/bin/..
6603888 /usr/local/bin/..
Gördüğünüz gibi, /usr/local/bin/.. ile /usr/local‟ın inode numaraları aynı! Açığa çıkan
bu bilgiden varabileceğimiz nokta şu: 6603888 inode‟u dizinin kendisi, ayrıca da bu inode‟a
işaret eden iki tane de dizin tanımı (link‟i) var. Hem /usr/local, hem /usr/local/bin/.. de
6603888 inode‟una işaret ediyor.
14
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Aslında ls -dl komutu ile 6603888 numaralı inode‟a kaç kere bağlantı yapıldığını,
başka bir deyişle aynı yeri gösteren kaç farklı ismin dosya sisteminde mevcut olduğunu
görebiliriz:
$ ls -dl /usr/local
drwxrwsr-x 9 root staff 2048 2001-05-12 02:04 /usr/local
Soldan ikinci sütuna bakacak olursak görürüz ki /usr/local (inode 6603888) dizinine 9
bağlantı (link) vardır. Benim dizinimde bu inode‟a bağlı olan birkaç yolu göstermem
gerekirse:
/usr/local
/usr/local/.
/usr/local/bin/..
/usr/local/games/..
/usr/local/lib/..
/usr/local/sbin/..
/usr/local/share/..
/usr/local/src/..
mkdir (yeni dizin yaratmak)
Yeni dizinler yaratmak için kullanılan mkdir komutuna hızlı bir göz atalım. Aşağıdaki
örnek /tmp altında 3 yeni dizin yaratır, tik, tak ve tok.
$ cd /tmp
$ mkdir tik tak tok
Varsayılan olarak, mkdir komutu üst dizinleri sizin için yaratmaz; yaratılması istenilen
dizinin tüm yolunda sondan bir önceki dizin‟e kadar bütün dizinlerin var olması gereklidir.
Bunun anlamı /de/ne/me dizinlerini yaratmak istiyorsanız, üç ayrı mkdir komutu
çalıştırmalısınız:
$ mkdir de/ne/me
mkdir: „de/ne/me‟ dizini oluşturulamıyor: Böyle bir dosya ya da dizin yok
$ mkdir de
$ mkdir de/ne
$ mkdir de/ne/me
15
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Ancak, mkdir‟in faydalı opsiyonu -p ile mkdir‟i dizin yolunda var olmayan üst
dizinleri yaratmasını sağlayabilirsiniz, aşağıda görüldüğü gibi:
$ mkdir -p de/ne/me2
touch
Şimdi kopyalama, yeniden adlandırma, dosya ve dizin taşımak için kullanılan cp ve
mv komutlarına göz atacağız. Buna başlamadan önce /tmp de bir dosya oluşturmak için touch
komutunu kullanacağız:
$ cd /tmp
$ touch benikopyala
touch komutu var olan bir dosyanın ”mtime” değerini günceller (ls -l çıktısındaki 6.
sütunu hatırlayın).
touch komutuna parametre olarak verilen dosya mevcut değilse boş bir yeni dosya
yaratılacaktır. Yukarıdaki komutun sonucunda sıfır boyutlu bir /tmp/benikopyala oluşturmuş
oluyorsunuz.
echo ve yönlendirme
Şimdi artık dosya var olduğuna göre bu dosyaya biraz veri ekleyelim. Bunu echo
komutu ile yapabiliriz, bu komut kendisine geçilen argümanları alıp bunu standart çıktıya
basar. Önce echo komutunun kendisine bir göz atalım:
$ echo "ilk dosya"
ilk dosya
Ve şimdi aynı echo komutunu bu sefer çıktı yönlendirme tekniği ile kullanalım:
$ echo "ilkdosya" > benikopyala
16
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Yukarıda gördüğünüz büyüktür işareti kabuğa echo‟nun çıktısını benikopyala isimli
bir dosyaya yönlendirmesini söyler. Bu dosya eğer mevcut değilse yaratılır, yok eğer mevcut
ise üzerine yazılır. ls -l komut ile benikopyala dosyasının 9 byte büyüklüğünde olduğunu
görebiliriz çünkü ”ilkdosya” sözcüklerini, boşluk karakterini ve yenisatır karakterini
barındırır:
$ ls -l benikopyala
-rw-r--r-- 1 knoppix knoppix 9 2003-03-25 16:33 benikopyala
cat ve cp
Terminalde dosyanın içeriğini görüntülemek için cat komutunu kullanın:
$ cat benikopyala
İlkdosya
Şimdi cp komutunun en basit şeklini kullanarak benikopyala dosyasının benikopyaladi
isimli bir kopyasını çıkarabiliriz:
$ cp benikopyala benikopyaladi
Detaylı olarak incelersek görürüz ki bu ikisi gerçekten de birbirinden ayrı dosyalardır,
ama inode numaraları farklıdır:
$ ls -i benikopyala benikopyaladi
8919 benikopyaladi 8901 benikopyala
cp komutu aşağıdaki seçeneklerle birlikte kullanılabilir:
-i işlemi onaylamanızı ister, hata olasılığını azaltmak için kullanılır.
-r Bir dizin ve altındaki her şeyi hedef dizine kopyalamak için.
-f Dosyaları onay almadan tek adımda koşulsuz olarak siler.
$ cp -r /home/serdar/projeler /home/serdar/backup
komutu, projeler isimli klasörün altında her ne varsa, backup isimli dizine kopyalar.
17
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
mv
Şimdi ”benikopyaladi” dosyasını ”benitasidi” olarak isimlendirmek için mv komutunu
kullanalım. Bu sefer inode numarası aynı kalmakla birlikte bu inode numarasına sahip olan
dosya ismi değişmiş olacaktır.
$ mv benikopyaladi benitasidi
$ ls -i benitasidi
8919 benitasidi
Taşınan (move) bir dosyanın inode numarası, söz konusu dosya kaynak dosya ile aynı
dosya sisteminde bulunduğu sürece aynı kalır. mv komutu da cp komutu ile aynı seçenekleri
kullanabilir.
Linkler yaratmak ve dosyaları silmek
Katı bağlantılar (hard links)
Daha önce dizin girişleri ve inode‟lar arasındaki ilişkiden bahsederken bağlantı
terimini kullanmıştık. Aslında Linux altında iki tip bağlantı çeşidi vardır. Daha önce
tartıştığımız bağlantılar katı bağlantılardı.
Sistem üzerindeki herhangi bir inode herhangi bir miktarda katı bağlantıya sahip
olabilir ve tüm katı bağlantılar ortadan kalkana kadar da sistem üzerinde var olmaya devam
edecektir. Yeni katı bağlantılar ln komutu kullanılarak yaratılabilir:
$ cd /tmp
$ touch ilklink
$ ln ilklink ikincilink
$ ls -i ilklink ikincilink
8940 ilklink 8940 ikincilink
Görebildiğiniz gibi, katı bağlantılar bir dosyayı ilişkilendirmek için inode seviyesinde
çalışmaktadır. Linux sistemlerde, katı bağlantıların bazı kısıtlamaları vardır. Bir kısıtlama,
sadece dosyalara katı bağlantılar yapmaya izin verir, dizinlere vermez. ”.” ve ”..” sistem
tarafından yaratılmış dizinlere ilişkilenmiş katı bağlantılar olmasına rağmen bu doğrudur.
”root” kullanıcısı bile olsanız, kendinize ait dizinlere ilişkilenmiş yeni katı bağlantılar
18
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
yaratamazsınız. Katı bağlantıların ikinci kısıtlaması da dosya sistemleri arasında geçiş
yapılamamasıdır. Bunun anlamı / ve /usr dizinleri farklı dosya sistemlerinde bulunuyorsa
/usr/bin/bash dizininin içinde /bin/bash dizininin içindeki bir dosyaya katı bağlantı
yapamazsınız.
Sembolik bağlantılar
Pratikte, sembolik bağlantılar katı bağlantılardan çok daha sık kullanılırlar. Sembolik
bağlantılar özel bir tip dosya olup başka bir dosyaya doğrudan inode üzerinden değil de ismi
ile ilişkilenirler. Sembolik bağlantılar bir dosyanın silinmesine engel olmazlar, hedef dosya
ortadan kaybolursa, sembolik bağlantı kullanılamaz hale gelir ya da ”kırılır”.
Bir sembolik bağlantı ln komutuna -s parametresi verilerek yaratılabilir.
$ ln -s ikincilink ucunculink
$ ls -l ilklink ikincilink ucunculink
-rw-r--r-- 2 erkut erkut 0 2003-03-25 16:39 ilklink
-rw-r--r-- 2 erkut erkut 0 2003-03-25 16:39 ikincilink
lrwxrwxrwx 1 erkut erkut 10 2003-03-25 16:40 ucunculink -> ikincilink
ls -l çıktısında sembolik bağlantılar normal dosyalardan üç şekilde ayırt edilebilir.
Birincisi, bu çıktıdaki ilk sütun dosyanın bir sembolik bağlantı olduğunu belirtmek için l
karakterini fark edebilirsiniz. İkincisi, sembolik bağlantının boyutu ilişkilendiği hedef
dosyasının karakter sayısını verir. Üçüncüsü, son kolon hedef dosyanın ismini görüntüler.
Sembolik bağlantılar genelde katı bağlantılardan daha esnektir. Dizinler de dâhil
olmak üzere herhangi bir çeşit dosya sistemi nesnesi için sembolik bağlantı yaratmanız
mümkündür. Ayrıca, sembolik bağlantıların yürütülmesi yollara bağlı olduğu için, mükemmel
bir şekilde başka bir dosya sistemi üzerinde yer alan nesneye de sembolik bağlantı
oluşturabilirsiniz. Fakat bu durum da sembolik bağlantının anlaşılmasını biraz zorlaştırabilir.
/tmp isimli dizin altında, /usr/local/bin isimli dizine sembolik bağlantı yaratmak
istediğimiz bir durum düşününüz. Bu durumda yazmamız gereken:
$ ln -s /usr/local/bin bin1
$ ls -l bin1
lrwxrwxrwx 1 erkut erkut 14 2003-03-25 16:42 bin1 -> /usr/local/bin
19
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Ya da alternatif olarak:
$ ln -s ../usr/local/bin bin2
$ ls -l bin2
lrwxrwxrwx 1 erkut erkut 16 2003-03-25 16:43 bin2 -> ../usr/local/bin
Gördüğünüz gibi, her iki sembolik bağlantı da aynı dizini göstermektedir. Eğer ikinci
sembolik bağlantı başka bir dizin içerisine taşınırsa, bu bağlantı bağıl yol yüzünden ”kırılmış”
(broken) olacaktır.
$ ls -l bin2
lrwxrwxrwx 1 erkut erkut 16 2003-03-25 16:43 bin2 -> ../usr/local/bin
$ mkdir yenidir
$ mv bin2 yenidir
$ cd yenidir
$ cd bin2
bash: cd: bin2: Böyle bir dosya ya da dizin yok
/tmp/usr/local/bin dizini mevcut olmadığı için, artık bin2 bağlantısı ile dizin
değiştiremeyiz. Bir başka deyişle bin2 bağlantısı artık kırılmıştır.
Bu yüzden bazen bağıl yol bilgisi ile sembolik link yaratmaktan kaçınmak iyi bir fikir
olabilir. Fakat sembolik linklerin kullanışlı olduğu birçok durum da vardır. /usr/bin altında yer
alan bir program için başka bir isim yaratmak istediğiniz bir örneği ele alalım:
$ ls -l /home/erkut/.Xdefaults
-rw-r--r-- 1 erkut erkut 893 2000-02-28 03:26 /home/erkut/.Xdefaults
root kullanıcısı olarak, ”.Xdefaults” için ”xd” adında başka bir isim yaratmak istiyor
olabilirsiniz. Bu örnekte, komut satırlarında yer alan # işaretinden de açıkça anlaşıldığı gibi
root haklarına sahibiz.
# cd /home/erkut
# ln -s /home/erkut/.Xdefaults xd
20
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
Bu çözüm çalışacak olsa da, her iki dosyayı da /usr/local/bin altına taşımaya karar
verdiğimiz anda bu durum problem yaratacaktır:
$ mv /home/erkut/.Xdefaults /home/erkut/xd /usr/local/bin
Çünkü sembolik bağlantımız için tam yol kullanmış durumdayız, xd halen
/home/erkut/.Xdefaults dosyasını göstermektedir ki bu bağlantı artık mevcut değildir, yani
kırılmıştır. Bağıl yol ve tam yolların her ikisinin de çok faydalı olduğu durumlar vardır.
Sonuçta kendi uygulamanıza en uygun olan tipi seçmeniz gerekmektedir. Genellikle bağıl yol
ya da tam yol düzgün bir şekilde çalışır. Bu durumda aşağıdaki örnek çalışacaktır:
$ cd /home/knoppix
$ ln -s .Xdefaults xd
$ ls -l xd
lrwxrwxrwx 1 erkut erkut 10 2003-04-11 14:54 xd -> .Xdefaults
rmdir
Dizinleri kaldırmak için iki seçeneğiniz var. Dizinin altındaki bütün nesneleri yok
edebilir ve sonra rmdir kullanarak dizinin kendisini kaldırabilirsiniz:
$ mkdir benimdir
$ touch benimdir/dosya1
$ rm benimdir/dosya1
$ rmdir benimdir
Eğer silinecek dizin boş değil ise rmdir komutu ile bu dizini silmemize izin verilmez.
rm
Artık cp, mv ve ln komutlarının nasıl kullanıldığını biliyoruz, şimdi nesneleri dosya
sistemi üzerinde kaldırmayı öğrenmenin zamanı gelmiştir. Normalde bu işlem rm komutuyla
yapılmaktadır. Dosyayı kaldırmak için basitçe bunları komut satırında belirlemek
gerekmektedir.
21
Öğr.Gör. Erkut Tekeli
Açık Kaynak İşletim Sistemi Ders Notu - 2
$ cd /tmp
$ touch dosya1 dosya2
$ ls -l dosya
$ ls -l dosya1 dosya2
-rw-r--r-- 1 knoppix knoppix 0 2003-03-25 16:53 dosya1
-rw-r--r-- 1 knoppix knoppix 0 2003-03-25 16:53 dosya2
$ rm dosya2
$ ls -l dosya1dosya2
ls: dosya2: B¨oyle bir dosya ya da dizin yok
-rw-r--r-- 1 knoppix knoppix 0 2003-03-25 16:53 dosya1
Seçenekleri şu şekildedir:
-i işlemi onaylamanızı ister, hata olasılığını azaltmak için kullanılır.
-r Hedef bir dizin ise, o dizin altındaki tüm dizin ve dosyaları siler.
-f Dosyaları onay almadan tek adımda koşulsuz olarak siler.
rm komutunun özyinelemeli seçeneklerini kullanıp rm‟e belirttiğiniz dizini içerdiği
nesnelerle birlikte kaldırmasını söyleyebilirsiniz:
$ rm -rf benimdir
Genel olarak bir dizin ağacını kaldırmak için tercih edilen rm -rf ‟dir. rm -f kullanırken
dikkatli olun, çünkü bunun gücü iyi veya kötü niyetli olarak kullanılabilir.
Kaynaklar
C ve Sistem Programcılar Derneği, 2002, “Unix/Linux Sistem Programlama Ders Notları”
Çetin G., 1999, “Linux İşletim sistemi”, Seçkin Yayınevi
İstanbul Bilgi Üniversitesi Bilgisayar Bilimleri Bölümü, 2007, “Open Source Enterprise
Centre GNU/Linux Sertifikasyon Programı Linux 101 Ders Notları”
Özbilen A., 2013, “Linux Sistem ve Ağ Yönetimi”, Pusula Yayınları
Özkan Y., 2004, “Linux İşletim Sistemi”, Alfa Yayınları
UYBHM, “Temel Linux işlemleri”, İTÜ
Yazıcı M., 2014, “Açık Kaynak İşletim Sistemleri Ders Notu”, www.muratyazıcı.com
22
Download
Study collections