GNU/LINUX 101 ders notları

Linux ve Unix tabanli isletim sistemlerini hep beraber tanıyıp öğreneceğiz.
Cevapla
Kullanıcı avatarı
Ensatech
Megabyte2
Megabyte2
Mesajlar: 1173
Kayıt: 22 May 2006, 19:07
cinsiyet: Erkek
Teşekkür etti: 85 kez
Teşekkür edildi: 190 kez

GNU/LINUX 101 ders notları

Mesaj gönderen Ensatech »

Linux Sertifikasyon Programı

GNU/LINUX 101
Ders Notları

Bölüm 1. Linux ve bu egitim hakkında

Neden Linux ?

Bu egitime geldiginize göre hepinizin kafasında üç asagı bes yukarı bir Linux nosyonu vardır. Hatta muhtemelen bazılarınız Linux kurmustur bile. Fakat kurmus olanlarınızın bile kafasında 'Neden Linux ?' sorusu vardır.

Gerçekten 'Neden Linux ?' Bu soruya cevap vermeden önce bir miktar Linux'u yüzeysel bile olsa tanımak gerekmektedir.

Linux 1992 yılında Linus Tornvalds tarafından baslatılan bir projedir. Temel olarak 1970'lerden beri süregelen Unix isletim sisteminin evlerde yaygın olan i386 (PC) tabanlı makinalarda çalısmasını hedeflemistir. Bu baslangıcın devamında proje birçok kisi tarafından desteklenmis ve su anda binlerce yazılımcının bir sekilde ilgilendigi dev bir proje halini almıstır.

Linux diye bildigimiz dagıtımların hepsi, Linux kerneli (çekirdegi) ve onun etrafındaki GNU yazılımlardan olusan bir Unix sistemidir aslında. O zaman asıl sorumuz neden Unix olacaktır ?

Unix temelde Windows ve Dos kullananlarımızın komut satırı diye bildigi ortamdan ve X-Windows sisteminden olusur. Bu ikisinin de geçmisi hem Dos'dan hem de Windows'dan çok daha eskilere dayanır.

Unix'in 1970'lerden beri temel aldıgı en önemli özellik çok görevli (multi-task) ve çok kullanıcılı (multi user) olmasıdır. Bütünlesik bir isletim sistemi olan Unix, bu iki özelligini hem komut satırı ortamında hem de gui ortamı olan X-Windows'da korur. Dahası X-Windows'da yapabileceginiz hemen herseyi komut satırından (konsoldan) gerçeklestirebilirsiniz.

Az önce bahsettigimiz gibi Unix'in temel özelligi çok görevli ve çok kullanıcılı olmasıdır. Bu sebeple Unix'de çok ciddi bir kullanıcı kısıtlaması vardır. Kullanıcılar, ancak izinleri olan harddisk alanında, izinleri olan komutları, kullanmalarına izin verilen hafıza miktarında ve hatta CPU gücü ile yaparlar. Bir kullanıcının bir programının çakılması bir baska kullanıcıyı ve makinanın genel isletimini engellemez.

Otuz yıldır gelistirilen bu özellikler Unix'i diger isletim sistemlerinden ayırmakta ve dünyanın en çok tercih edilen sunucu platformu yapmaktadır.

İste bu noktada Unix'le tanısıklıgı biraz daha ilerlemis bazıları 'iyi de kullanması kesinlikle daha zor, bir çok isi konsoldan yapıyorsunuz, Windows gibi guiden herseyi halletmek varken, 2003 senesinde ben niye konsolu kullanayım' diyebilir.

Burda bir seye açıklık getirmek lazım. Konsol, dinazorluktan, ya da eski kafalılıktan hala kullanılan bir sey degildir. Konsol kullanılmaktadır, zira bir sistem yöneticisinin islemleri en hızlı ve en kolay yoldan yapmasının yolu konsoldur. Konsoldan bir iki satır ile hallettiginiz bir emri guiden yapmak genelde çok daha uzun zamanınızı alır. Belki daha da önemlisi, konsol 'ne yapması gerektigini bilenler ' içindir, suraya buraya klikleyeyim de nasıl olsa hallederim bu isi diyerek sistemi kurcalayanlar için degil.

Bir baska önemli nokta da Unix'in gücünü biraraya gelmis binlerce küçük programdan alıyor olmasıdır. Bu kurs süresince size bu programları ihtiyacımız dogrultusunda nasıl birbiri ile ilintileyecegimizi, nasıl istedigimizi gibi sonuçlar alacagımızı gösterecegiz.

Kısa bir örnek ls komutu olabilir. Dos ortamındaki dir komutunun karsılıgı olan ls komutu size basitçe bir dizinin içerigini gösterir. Diyelim ki bu dizin uzun ve içerigini sayfa sayfa görmek istiyoruz. Bu noktada herhangibir text dosyasını bize sayfa sayfa gösteren more komutu ile ls komutunu birlestiririz. En basitinden ls -al|more dediginizde ls komutunun çıktısı takip edebileceginiz gibi sayfa sayfa karsınıza gelir. Mesela ls komutu bir dizindeki dosyaları gösterirken, ls|wc -l komutu ls komutunun çıktısını wc (wordcount) komutuna gönderek o dizinde kaç dosya oldugunu gösterir. Görüyorsunuz iki alakasız komutla ls komutuna yeni fonksionlar kazandırdık. Dahası bir dizinde kaç dosya oldugunu bilgisayara saydırdık. Kolaylıkla bir baska komutu da bu sisteme ekleyip, her dosyayı bizim için teker teker printera yollamasını saglayabilirdik. Veya baska bir sey. Birkaç kelimelik bu tür komutlarla yapabileceginiz seylerin ne kadar derine gidebildigini görseniz sasarsınız. Dahası bir shell ortamı gibi yapıstırıcı bir sahte-programlama dili ile birlestirildiginde bu komutlar gerçekten uygulama düzeyinde islerin altından kalkabilirler.

Linux kullanmayı ögrenmenizin sebeplerinden biri iste bu. Gerektigi gibi bilgisayarınızı kontrol edebilmeniz, ona istediginiz islemleri yaptırabilmeniz. Kendinizi ona degil onu kendinize uydurabilmeniz.


Bu egitim neleri içeriyor?
"Linux Temellerine" hosgeldiniz. Bu kurda sizlere bash (Linux'daki standart kabuk (shell))'i tanıstıracak, ls, cp, mv gibi standart Linux komutlarının tüm potansiyelini nasıl kullanabileceginizi gösterecek, Linux'un izin ve sahiplik modellerini ve daha birçok kavramı anlatacagız.

Bu kurun sonunda, Linux temelleri konusunda saglam bir zemin elde etmis olacak, ve hatta bazı temel Linux sistem yönetim görevlerini ögrenmeye hazır halde olacaksınız. Bütün bu serinin sonunda ise (toplam 4 kur) bir Linux Sistem Yöneticisi olmak için gerek duyabileceginiz bütün bilgilere sahip olacaksınız.


bash'e giris

Kabuk
Eger daha önce bir Linux sistemi kullandıysanız sisteme girdiginizde asagıdakine benzer bir komut satırı ile karsılasacagınızı bilirsiniz:

$

Bu komut satırı çok farklı görünebilir. Sisteminizin hostname bilgisini, içinde bulundugunuz dizini veya her iki bilgiyi birden yansıtıyor olabilir. Ancak nasıl görünürse görünsün kesin olan bir sey vardır: Bunu görüntüleyen programa "kabuk" (shell) denir ve çok büyük ihtimalle sisteminizde sizi karsılayan bash kabugudur.

bash mi kullanıyorsunuz?
bash kullanıp kullanmadıgınızı su sekilde kontrol edebilirsiniz:

$ echo $SHELL
/bin/bash

Eger üstteki ifade bir hata verirse veya yukarıdaki örnege benzemeyen bir sonuç verdiyse, bash'ten farklı bir kabuk kullanıyor olabilirsiniz. Bu durumda bile bu egitimin büyük bir bölümü hala geçerli olacaktır, fakat bash'a geçis yapmanız bu egitim sürecinde sizin için önemli bir avantaj olacaktır. (chsh komutunu kullanarak kabugu degistirmek için gerekli bilgiyi bu egitim serisinin 2. Bölümüne bakın.)

bash hakkında
"Bourne-again shell" ifadesi için bir tür kısaltma olan Bash, pek çok Linux sistemde öntanımlı kabuk olarak karsınıza çıkar. Kabugun görevi verdiginiz komutlara uyarak Linux sisteminizle etkilesime geçmenizi saglamaktır. Komut vermeyi bitirince kabuga exit ya da logout komutu ile kendini sonlandırmasını söyleyebilirsiniz, hemen ardından karsınıza login ekranı gelir. Bu arada, kabuk ile çalısırken control-D tus kombinasyonuna basarak da bash kabugunu sonlandırabilirsiniz.

"cd" kullanımı
Sizin de farkına varmıs olabileceginiz gibi bash komut satırı dünyanın en heyecan verici seyi sayılmaz. İsterseniz simdi de biraz dosya sistemi içinde gezinmek için bash kullanalım. Komut satırında iken asagıdaki komutu verin ($ karakterini yazmadan):

$ cd /

Bu komut ile bash kabuguna / içinde çalısmak istedigimizi söylemis olduk. Bu aynı zamanda kök (root) dizin olarak da bilinir; dosya sistemindeki tüm dizinler bir agacı olustururlar ve / de bu agacın en tepesinde ya da bu agacın kökü kabul edilir.

cd komutu o anda çalısmakta oldugunuz dizini belirler. cd komutunun bir adıda "halihazırda çalısılan dizin (current working directory)" dir.

Yollar
bash kabugunun halihazırda çalıstıgı dizini görmek için yazılabilecek komut:

$ pwd
/

Yukarıdaki örnekte, cd komutuna cevap olarak gelen / elemanına yol (path) denir ve cd komutuna gitmek istedigimiz yeri söyler. Burada, / elemanı mutlak yol (absolute path) olarak kullanılmıs. Gidilecek olan dizinin, dosya sistemi agacında, kökten itibaren ifade edilisine mutlak yol denir.

Mutlak Yollar
Birkaç mutlak yol örnegi:

/dev
/usr
/usr/bin
/usr/local/bin

Gördügünüz gibi bütün mutlak yol ifadelerinin ortak noktası / ile baslamaları. Örnegin /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 baslayarak kullanılır.

Göreli yollar
Diger yol türü göreli yoldur. Bash, cd ve diger komutlar bu tür yolları daima içinde bulundugunuz dizine göre yorumlar. Göreli yollar kesinlikle / ile baslamaz. Yani eger /usr dizini içinde isek:

$ cd /usr

/usr/local/bin dizinine gitmek için:

$ cd local/bin
$ pwd
/usr/local/bin

yazabiliriz.

".." kullanımı
Göreli yolların içinde bir ya da daha çok .. dizini bulunabilir. ".." dizini özel bir dizindir ve bulundugunuz dizinin üstündeki dizini gösterir. Yukarıdaki örnekten devam edecek olursak:

$ pwd
/usr/local/bin
$ cd ..
$ pwd
/usr/local

Gördügünüz gibi simdi içinde bulundugumuz dizin /usr/local dizinidir. Bu sekilde içinde bulundugumuz dizine göre "geriye" dogru gidebiliriz baska bir deyisle "yukarı" dogru çıkabiliriz.

".." kullanımı, devamı
Ek olarak, içinde bulundugumuz dizinin de yer aldıgı yani bir üst dizini temsil eden ".." dizinini de kullanabiliriz. Örnegin:

$ pwd
/usr/local
$ cd ../share
$ pwd
/usr/share



Linux Komutlarının Kullanımı

"ls" tanımı
simdi ls komutuna hızlıca gözatacagız. Muhtemelen ls komutunu önceden biliyorsunuz ve sadece onu yazmanın halihazırda bulundugunuz dizinin içerigini listeleyecegini biliyorsunuz:

$ cd /usr
$ ls
bin doc etc games include info lib local man sbin share src X11R6

-a seçenegini belirterek bir dizindeki dosyaların tümünü, gizli dosyalar -. ile baslayanlar- da dahil olmak üzere görebilirsiniz. Asagıdaki örnekte de görebileceginiz gibi, ls -a . ve .. özel dizin linklerini de gösterir:

$ ls -a
. .. bin doc etc games include info lib local man sbin share src X11R6

Uzun dizin listeleri
ls komut satırında bir ya da birden fazla dosya ya da dizin belirtebilirsiniz. Eger bir dosya belirtirseniz, ls sadece o dosyayı gösterecektir. Eger bir dizin belirtirseniz, ls bu dizinin içerigini gösterecektir. -l seçenegi, dosya haklarını, sahibi olan kisi ve grupları, degisiklige ugradıgı zamanı ve boyut bilgilerini görmek istediginizde isinize yarayacaktır.

Dizinlere bakmak
Bazen bir dizinin içine degil de kendisine bakmak istersiniz. Bu gibi durumlar için -d seçenegini kullanabilirsiniz, bu sayede ls dizinlerin içine degil kendilerine bakar.

$ ls -dl /usr /usr/bin /usr/X11R6/bin ../share
drwxr-xr-x 194 root root 24576 2003-03-23 20:30 ../share
lrwxrwxrwx 1 root root 12 2003-03-23 21:05 /usr -> /KNOPPIX/usr
drwxr-xr-x 2 root root 303104 2003-03-23 21:10 /usr/bin
drwxr-xr-x 2 root root 20480 2003-03-22 18:36 /usr/X11R6/bin

mkdir
Yeni dizinler yaratmak için kullanılan mkdir komutuna hızlı bir göz atalım. Asagıdaki örnek /tmp altında 3 yeni dizin yaratır, tic, tac ve toe.

$ cd /tmp
$ mkdir tic tac toe

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ıstırmalısınız:

$ mkdir de/ne/me
mkdir: `de/ne/me' dizini olusturulamıyor: Böyle bir dosya ya da dizin yok
$ mkdir de
$ mkdir de/ne
$ mkdir de/ne/me

touch
simdi kopyalama, yeniden adlandırma, dosya ve dizin tasımak için kullanılan cp ve mv komutlarına gözatacagız. Buna baslamadan önce /tmp de bir dosya olusturmak için touch komutunu kullanacagız:

$ cd /tmp
$ touch benikopyala

touch komutu varolan bir dosyanın "mtime" degerini günceller (ls -l çıktısındaki 6. sütunu hatırlayın). touch komutuna parametre olarak verilen dosya mevcut degilse bos bir yeni dosya yaratılacaktır. Yukarıdaki komutun sonucunda sıfır boyutlu bir /tmp/benikopyala olusturmus oluyorsunuz.

cat ve cp
Terminalde dosyanın içerigini görüntülemek için cat komutunu kullanın:

$ cat benikopyala
ilkdosya

simdi cp komutunun en basit seklini 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, inode numaraları farklıdır:

$ ls -i benikopyala benikopyaladi
8919 benikopyaladi 8901 benikopyala

mv
simdi "copiedme" dosyasını "movedme" olarak isimlendirmek için mv komutunu kullanalım. Bu sefer inode numarası aynı kalmakla birlikte bu inode numarasına sahip olan dosya ismi degismis olacak.

$ mv benikopyaladi benitasidi
$ ls -i benitasidi
8919 benitasidi

Tasınan (move) bir dosyanın inode numarası, söz konusu dosya kaynak dosya ile aynı dosya sisteminde bulundugu sürece aynı kalır. Bu egitimin 3. bölümünde dosya sistemlerini daha detaylı olarak inceleyecegiz.


Dosyaları silmek


rm
Artık cp, mv ve ln komutlarının nasıl kullanıldıgını biliyoruz, simdi nesneleri dosya sistemi üzerinde kaldırmayı ögrenemenin zamanı gelmistir. Normalde bu islem rm komutuyla yapılmaktadır. Dosyayı kaldırmak için basitçe bunları komut satırında belirlemek gerekmektedir.

$ 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 dosya1 dosya2
$ ls -l dosya1 dosya2
ls: dosya2: Böyle bir dosya ya da dizin yok
-rw-r--r-- 1 knoppix knoppix 0 2003-03-25 16:53 dosya1

rmdir
Dizinleri kaldırmak için iki seçeneginiz var. Dizinin altındaki bütün nesneleri yokedebilir ve sonra rmdir kullanarak dizinin kendisini kaldırabilirsiniz:

$ mkdir benimdir
$ touch benimdir/dosya1
$ rm benimdir/dosya1
$ rmdir benimdir

rm ve dizinler
Veya rm komutunun özyineli seçeneklerini kullanıp rm'e belirttiginiz dizini içerdigi nesnelerle birlikte kaldırmasını söyleyebilirsiniz:

$ rm -rf benimdir
Genel olarak bir dizin agacı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 kullanılabilir. :)


Bölüm 5. joker karakterler, Giris

Joker karakterler (wildcards)

Günlük linux kullanımında çok defa bir operasyonu tek seferde birden fazla nesne için çalıstırmak isteyebileceginiz (rm gibi) durumlarla karsılasabilirsiniz. Böyle durumlarda, asagıdaki gibi bütün dosyaları komut satırına yazmak çok gereksizdir:

$ rm dosya1 dosya2 dosya3 dosya4 dosya5 dosya6 dosya7 dosya8

Bu problemi çözmek için, Linux'un kendi içinde yer alan joker karakter desteginin getirdigi avantajdan yararlanabilirsiniz. Aynı zamanda "globbing" olarak da adlandırılan (tarihsel nedenlerden dolayı) bu destek, joker karakter modelini kullanarak tek seferde birden fazla dosyayı belirlemenize olanak saglar. Bash ve diger Linux komutları joker karakter modeline bakarak ve dosya üzerinde bu modele uyan dosyaları bularak komutu yorumlar. Bu durumda diyelim ki bulundugumuz dizinde file1, file2, ... , file8 isimli dosyalar varsa bu dosyaları asagıdaki sekilde yok edebilirsiniz:

$ rm dosya[1-8]

Ya da daha basitçe ismi file ile baslayan bütün dosyaları yok etmek istediginizde asagıdaki gibi yazabilirsiniz:

$ rm dosya*



Düzenli İfadeler

Düzenli ifade nedir?
Düzenli ifadeler ("regex" veya "regexp" de denir) yazı kalıplarını ifade etmek için kullanılan özel bir biçimdir.
Linux sistemlerinde, arama ve degistirme islerinde oldugu kadar yazı kalıplarının bulunmasında da düzenli ifadeler kullanılır.


Basit bir dizi parçası
Düzenli ifadelerin en basit türüne bakalım, basit dizi parçası. Bunun için grep komutunu
kullanacagız. Bu komut bir dosyanın içerigini tarayıp belli bir düzenli ifade kalıbına uyan kısımları bulur. grep, düzenli ifade kalıbına uyan her satırı basar ve buna uymayan satırları da görmezden gelir:

$ grep bash /etc/passwd
root:x:0:0:root:/home/root:/bin/bash
knoppix:x:1000:1000:Knoppix User:/home/knoppix:/bin/bash

Yukarıda, grep programına ilk parametre olarak bir düzenli ifade geçildigini ve ikinci parametre olarak bir dosya ismi verildigini görebilirsiniz. Grep /etc/passwd dosyasındaki her satırı okur bash olarak verilmis basit karakter dizi parçasının o satırda mevcut olup olmadıgına, baska bir deyisle o satırın kendisine verilen düzenli ifade kalıbı ile eslesip eslesmedigine bakar. Eger bir eslesme söz konusu olursa ilgili satırı basar, olmazsa bir sonraki satıra geçer


Dosyaları bulmak

"which"
Aradıgınız programın PATH ile verilen dizinlerden birinde olup olmadıgını which komutu ile bulabilirsiniz. Örnegin, asagıdaki komut ile Linux sistemimizin sagduyuya sahip olup olmadıgını sorgulayabiliriz:

$ which sagduyu

Asagıdaki örnekte ise ls komutunun nerede bulundugunu görebiliriz:

$ which ls
/usr/bin/ls

"which -a"
Son olarak -a seçenegine dikkat etmelisiniz. Bu seçenek kullanıldıgında which komutu PATH degiskeninde tanımlı tüm dizinlerde aradıgınız programın olup olmadıgını gösterir:

$ which -a ls
/bin/ls

whereis
Eger bir programın yerini ögrenmek dısında onunla ilgil daha çok bilgiye erismek istiyorsanı< whereis komutunu denemelisiniz:

$ whereis ls
ls: /bin/ls /usr/share/man/man1/ls.1.gz

Buradan görürüz ki ls programı iki dizinde bulunmaktadır, /bin and /usr/bin. Buna ek olarak /usr/share/man dizininde de ls ile ilgili bir man sayfası oldugu bilgisini ediniriz. man ls yazdıgınızda karsınıza gelen sayfa yukarıda belirtilen sayfadır. whereis aynı zamanda kaynak arama, alternatif arama yolları tanımlama ve sıradısı girdileri arama gibi özelliklere de sahiptir. Detaylı bilgi için lütfen whereis man sayfasını inceleyin.

find
find alet çantanızdaki araçlardan biridir. find komutu ile artık sadece program dosyaları ile sınırlı degilsinizdir, her türlü dosyayı çok çesitli kriterlere göre arayabilirsiniz. Örnegin /usr/share/doc dizini ve alt dizinlerinde README dosyasını bulmak için su komutu vermeniz yeterlidir:

$ find /usr/share/doc -name README
/usr/share/doc/aalib1/README
/usr/share/doc/adduser/examples/README
/usr/share/doc/afio/README



locate
simdiye dek which, whereis ve find komutlarını ele aldık. find çalısırken biraz vakit geçtigini fark etmissinizdir
çünkü üzerinde her dizine tek tek girip bakmak zorundadur. locate komutu ise bir veritabanını kullanarak isleri
biraz hızlandırabilir. Bu komut yol isminin herhangi bir kısmı ile eslesme yapabilir sadece dosya ismine bakmak zorunda degildir. Örnegin:

$ locate bin/ls
/bin/ls
/bin/lspci
/sbin/lsmod
/sbin/lspci
/sbin/lspnp
/usr/bin/lsattr
/usr/bin/lsdev
/usr/bin/lsof
/usr/bin/lspgpot
/usr/bin/lss16toppm
/usr/sbin/lsof
/usr/sbin/lsusb

updatedb kullanımı
Pekçok Linux sistemi periyodik olarak veritabanını güncelleyen bir proses çalıstırır. Eger sisteminiz yukarıdaki komuta asagıdaki gibi bir hata ile cevap verirse o zaman bir veritabanı olusturmak için uptadedb komutunu çalıstırmanız gerekir:

$ locate bin/ls
locate: /var/spool/locate/locatedb: No such file or directory
$ su
Password:
# updatedb

updatedb komutunun isini tamamlaması uzun bir süre alabilir. Eger gürültücü bir harddiskiniz varsa tüm dosya sistemi indekslenirken basınız epey agrıyabilir :)

slocate
Pek çok Linux dagıtımında locate komutu yerine artık slocate komutu kullanılmaktadır. Genellikle locate isimli
bir sembolik baglantı oldugu için hangisini kullanayım diye tereddüt etmenize gerek yoktur. slocate "secure locate" yani "güvenli locate" anlamına gelmektedir. Bu komut kullandıgı veritabanında dosya ve dizin izinlerini de depolar
ve böylece normal kullanıcılar erisim izninine sahip olmadıkları dizine bakamazlar. slocat komutunun kullanım sekli locate komutunda oldugu gibidir ancak çıktı bilgisi komutu çalıstıran kullanıcıya göre degisebilir.
Kullanıcı avatarı
Ensatech
Megabyte2
Megabyte2
Mesajlar: 1173
Kayıt: 22 May 2006, 19:07
cinsiyet: Erkek
Teşekkür etti: 85 kez
Teşekkür edildi: 190 kez

Mesaj gönderen Ensatech »

Proses Kontrolü

xeyes´ı baslatmak
Proses kontrolünü ögrenmek için önce bir proses baslatalım:

$ xeyes -center red

xeyes penceresinin birden açıldıgını ve kırmızı gözlerin fareyi takip ettigini göreceksiniz. Bu arada bir sey daha fark
edeceksiniz: Komut satırına dönmediginizi.

Prosesi durdurmak
Komut satırına geri dönebilmek için Control-C tus kombinasyonuna basmalısınız (genellikle Ctrl-C veya ^C seklinde gösterilir):

^C
$

bash komut satırına geri döndünüz ancak xeyes penceresi de kayboldu. Aslında isi yapan proses tamamen sonlandırılmıs, öldürülmüs durumda. Control-C ile prosesi öldürmek yerine Control-Z ile durdurabilirdik:

$ xeyes -center red
^Z
[1]+ Stopped xeyes -center red
$

simdi gene bash komut satırına döndünüz ama bu sefer xeyes penceresi durrması gereken yerde duruyor. Ancak fare ile oynarsanız göreceksiniz ki gözler sizi takip etmiyor artık, donup kalmıs durumdalar. Eger xeyes penceresi üzerine baska bir pencereyi sürükleyip sonra çekerseniz göreceksiniz gözler yeniden çizilmiyor bile. Proses hiçbir sey yapmıyor su anda yani "Durmus" (Stopped) halde.


ps komutu ile prosesleri listelemek
Yukarıda kullandıgımız jobs komutu içinde bulundugumuz mevcut bash oturumunda baslatılan prosesleri listeliyordu. Sisteminizdeki tüm prosesleri görmek için kullanmanız gereken komut ise ps komutudur ve bu komua a ve x seçeneklerini vermeniz gereklidir.

$ ps ax
PID TTY STAT TIME COMMAND
1 ? S 0:04 init
2 ? SW 0:00 [keventd]
3 ? SWN 0:00 [ksoftirqd_CPU0]
4 ? SW 0:01 [kswapd]
5 ? SW 0:00 [bdflush]
6 ? SW 0:00 [kupdated]

Bu komutun çıktısı olan listenin ancak küçük bir kısmını yukarı yazdık çünkü genellikle bu liste çok daha uzun olur. Bu liste size makinanın o anda ne yaptıgının bir fotografını verir ancak göz atılacak pek çok veri vardır içinde. Eger ax seçeneklerini kullanmadan ps komutunu çalıstıracak olsaydınız sadece size ait ve belli bir terminalin kontrolü altındaki prosesleri görürdünüz. ps x size tüm prosesleri gösterir, belli bir terminal tarafından kontrol edilmeyenler dahil. Eger ps a seklinde kullanmıs olsaydınız o zaman da belli terminallere baglı ve herkese ait prosesleri görürdünüz.


"top" kullanımı
Eger kendinizi sürekli ps komutunu çalıstırır ve neler olup bittigini anlamaya çalısır durumda bulursanız ihtiyacınız olan esas komut top komutudur. top komutu sürekli güncellenen bir proses listesi basmanın yanı sıra özet bilgi vermeyi de ihmal etmez:

$ top
11:34:16 up 1:13, 0 users, load average: 0.43, 0.21, 0.12
47 processes: 45 sleeping, 2 running, 0 zombie, 0 stopped
CPU states: 3.0% user, 1.8% system, 0.0% nice, 95.2% idle
Mem: 255680K total, 249136K used, 6544K free, 10624K buffers
Swap: 393552K total, 43852K used, 349700K free, 37780K cached

PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME COMMAND
309 root 14 0 204M 132M 6644 S 2.5 52.9 2:23 XFree86
5050 knoppix 11 0 11316 10M 9356 R 0.7 4.2 0:01 kdeinit
3849 knoppix 10 0 38532 36M 13612 S 0.5 14.7 0:45 kword
5282 knoppix 13 0 1016 1016 808 R 0.5 0.3 0:00 top
1 root 8 0 52 48 28 S 0.0 0.0 0:04 init
2 root 9 0 0 0 0 SW 0.0 0.0 0:00 keventd
3 root 19 19 0 0 0 SWN 0.0 0.0 0:00 ksoftirqd_CPU0
4 root 9 0 0 0 0 SW 0.0 0.0 0:01 kswapd
5 root 9 0 0 0 0 SW 0.0 0.0 0:00 bdflush


Yazı isleme

Yönlendirme
Bir komutun çıktısını bir dosyaya yönlendirmek için > operatörünü kullanırız, söyle ki:

$ echo "dosya" > kopyasi

Çıktıyı yönlendirmeye ek olarak, oldukça güçlü bir kabuk özelligi olan pipe (boru)ları da kullanabiliriz. Baglantıları kullanarak bir komutun çıktısını digerine girdi olarak vermemiz mümkün. su örnege bir bakın

$ echo "merhaba dunyali" | wc
1 2 16

| karakteri soldaki komutun çıktısının sagdaki komuta girdi olarak verilmesini saglamaktadır. Yukardaki örnekte echo komutu merhaba dunyali cumlesini sonunda bir satır sonu ile birlikte basar. Normalde bu çıktının terminalde gözükmesi lazım fakat yaptıgımız baglantı onu wc komutuna yönlendirdi ve böylece satır, kelime ve karakter (bosluk ve satır sonu dahil) sayılarını ögrendik.

Bir boru örnegi
İste bir baska örnek:

$ ls -s | sort -n

Bu durumda, ls -s normalde mevcut dizinin listesini her dosyanın boyu dosya isminden önce gelecek sekilde terminal ekranına basacakken biz bu çıktıyı borudan geçirip sort -n'ye yönlendirdigimiz için karsımıza çıktının sayısal olarak sıralanmıs sekli gelmektedir. Ev (home) dizininizdeki büyük dosyaları bir bakısta tespit etmek için gerçekten güzel bir yöntem!

Asagıdaki önekler biraz daha karısıktır ancak boru mekanizması ile ne kadar güçlü ve becerikli islemler gerçeklestirilebildigini göstermeleri bakımından faydalıdır. simdiye dek görmediginiz bazı komutlarla karsılasabilirsiniz, bunun sizi yavaslatmasına lütfen izin vermeyin. Bunun yerine boru mekanizmasını yani bir çıktının bir sonraki programa girdi olarak nasıl geçildigini anlamaya odaklanın. Böylece bunlardan günlük Linux kullanımınızda bolca faydalanabilirsiniz.

echo
echo kendisine verilen argümanları terminale basar. -e seçegini kullanırsanız "escape dizisi" olarak tabir ettigimiz özel karakter kombinasyonlarının da düzgün olarak yorumlanmasını saglarsınız, misal: echo -e "foo\nfoo" komutu ekrana önce foo basar, bir satır asagı iner baska bir deyisle yenisatır karakteri basar ve sonra yine bir kez foo basar. -n seçenegini kullanırsanız çıktıya en sonra otomatik olarak eklenen yenisatır karakterinin basılmasını engelleyebilirsiniz.

cat, sort ve uniq

cat: cat komutu bir dosyanın içerigini terminal ekranına basar. Bir boru hattına ilk girdiyi vermek için faydalı bir komuttur, misal cat foo.txt | vesaire | vesaire.

sort: sort komutu komut satırında kendisine belirtilen dosyanın içerigini alfabetik olarak sıralayıp basar. Elbette sort komutu da boru üzerinden kendisine aktarılan girdiyi kabul edecek sekilde tasarlanmıstır. man sort ile bu komutun ne kadar farklı sıralama isleri için pratik sekilde kullanılabilecegini görebilirsiniz.

uniq: uniq sıralanmıs bir dosyayı ya da boru hattı üzerinden kendisine yollanan veriyi alır ve bunun içindeki birbirinin aynısı olan satırları ayıklar.




Sistem ve ag dökümantasyonu

Linux sistem döküman tipleri
Temel olarak bir Linux sisteminde üç çesit döküman kaynagı vardır: kılavuz sayfaları (manual pages), bilgi sayfaları (info pages) ve /usr/share/doc içinde bulunan uygulamalar ile gelen dökümanlar. Bu bölümde, dısardan yardım almadan önce bu üç kaynagı nasıl inceleyecegimizi ve onlardan nasıl yararlanabilecegimizi görecegiz.

Kılavuz sayfaları
Kılavuz dosyaları, ya da "man sayfaları" UNIX ve Linux referans dökümanlarının temellerini olusturur. İdeali
herhangi bir komut, konfigürasyon dosyası veya kütüphane dosyası hakkında man sayfasına bakarak bilgi
edinebilmenizdir. Pratikte ise Linux özgür bir yazılımdır ve bazı man sayfaları daha yazılmamıs veya çok önceden
yazılmıs olup güncelligini yitirmis olabilir. Yine de man dosyaları yardıma ihtiyacınız oldugunda ilk bakılması gereken adreslerdir.

Bir man sayfasına ulasmak için basitçe man ve istediginiz baslıgı yazın. Ekrana çıkan dökümandan çıkmak için q'a basmanız gerekir. Mesela ls komutu hakkında bilgi almak için:

$man ls

yazmanız gerekir.


GNU bilgisi
Kılavuz sayfalarının bir eksigi, yardımlı metinleri (hypertext) desteklememeleri. Bu durumda, bir dosyadan digerine kolaylıkla atlamak mümkün olmuyor. Bunu farkeden GNU uzmanları, yeni bir dokümantasyon yöntemi gelistirdiler: "info" (bilgi) sayfaları. Birçok GNU programı artık info sayfaları biçiminde kapsamlı bir dokümantasyonla geliyor. info sayfalarını okumaya "info" komutuyla baslayabilirsiniz:

$ info diff

info sayfaları hakkında daha fazla bilgi elde etmek isterseniz, info sayfasini okumanızı öneririm. su ana kadar
bahsettigimiz temel kullanım yöntemleriyle, bu isi basitçe yapabilirsiniz:

$ info info


Linux Dökümantasyon Projesi
Sistemde bulunan dokümanlara ek olarak, internet üzerinde de Linuk konusunda çok iyi kaynaklara ulasabilirsiniz. Linux Dokümantasyon Projesi'de, bir grup gönüllünün, bütünlesmis ve özgür bir Linux dokümantasyon seti olusturmak için çalısmaya karar vermesiyle baslamıs. Bu projenin varolus amacı, Linux dokümantasyonunun parçalarını, kullanımı ve arama yapılması kolay, ortak bir platformda birlestirmektir. Linux Dökümantasyonu Projesine http://www.tldp.org/ adresinden ulasabilirsiniz.

LDP'ye genel bakıs
LDP asagıdaki baslıkları içeriyor:

* Rehberler - genis kapsamlı kitaplar, örnegin The Linux Programmer's Guide
* HOWTO kaynakları - konuya özel, derinlemesine kaynaklar, örnegin DSL HOWTO
* SSS (Sıkça Sorulan Sorular) - en sık sorulan sorular ve cevapları, örnegin Brief Linux FAQ
* Kılavuz sayfalar - komutlara özel yardım sayfaları (Linux sisteminizde man komutuyla ulastıgınız dosyaların aynılarıdır).

Hangi bölümde arastırma yapmanız gerektigini bilmiyorsanız, arama kutularını kullanabilirsiniz. Böylece konu baslıgına göre arama yaparak bilgiye ulasırsınız. LDP bunlara ek olarak Linux Gazette ve LinuxFocus gibi bazı baglantı ve kaynak listesi de sunuyor. Ayrıca ilgili mail listelerine ve haber arsivlerine de LDP üzerinden ulasabilirsiniz.



Linux izin modeli

Bir kullanıcı, bir grup
Bu bölümde, Linux'un izin ve sahiplik modelini inceleyecegiz. Daha önce gördügümüz üzere, her dosyanın sahibi olan bir kullanıcı ve bir grup vardır. Linux'un izin modellerinin özünde bu vardır. Dosyaların sahibi olan kullanıcı ve grupları, ls -l komutuyla listeleyebilirsiniz:

$ ls -l /bin/bash
-rwxr-xr-x 1 root root 579816 2002-09-12 00:51 /bin/bash

Bu örnekte, /bin/bash çalıstırılabilir dosyasının sahibinin root kullanıcısı ve wheel grubu oldugunu görüyoruz. Linux izin modeli, herbir dosya için belirlenen üç ayrı izin katmanından olusur. Bu üç katman, dosya sahibinin izinleri, grubun izinleri ve tüm diger kullanıcıların izinleridir.

"ls -l" incelemesi
ls -l komutumuzun çıktısını inceleyelim.

$ ls -l /bin/bash
-rwxr-xr-x 1 root root 579816 2002-09-12 00:51 /bin/bash

İlk -rwxr-xr-x bölümü, dosya izinlerinin sembolik gösterimidir. Bastaki tire (-) karakteri dosyanın tipini belirtir. Bu örnekteki dosya normal bir dosyadır. Diger dosya çesitleri ve onları ifade eden karakterler söyledir:

'd' dizin
'l' sembolik baglantı
'c' character special device
'b' block special device
'p' fifo
's' socket

Üç adet üçlü grup

$ ls -l /bin/bash
-rwxr-xr-x 1 root root 579816 2002-09-12 00:51 /bin/bash

Dosya tipini belirten karakteri takip eden üç adet üçlü harf grubu görüyoruz. İlk üçlü grup dosyanın sahibinin haklarını, ikinci grup dosyanın sahibi olan grubun haklarını, son üçlü grupta diger tüm kullanıcılar için geçerli olan hakları simgeler.

"rwx"
"r-x"
"r-x"

Burada, r harfi, dosyanın içeriginin okunmasına izin verildigi anlamına gelir. w harfi dosyaya yazı yazılabilecegini (bu aynı zamanda modife etme ve silme islemlerini de kapsar), x harfi de dosyanın çalıstırılabilecegini gösterir. Tüm bunları biraraya getirdigimizde görüyoruz ki, örnegimiz olan dosyayı herkes okuyabilir ve çalıstırabilir ama sadece sahibi (root) dosyanın modifiye edilmesi konusunda hak sahibidir. Dolayısıyla, tüm kullanıcılar bu dosyayı kopyalama hakkına sahipken, sadece root'un güncelleme ya da silme hakkı vardır.

Kullanıcı ve Grup Haklarını Degistirmek
Bir dosyanın ya da baska bir dosya sistemi nesnesinin sahip oldugu kullanıcı ya da grubu degistirmek için sırasıyla chown ve chgrp komutlarını kullanabilirsiniz. Bu komutlarda herbirisi bir isim ve bunu takip eden bir ya da daha fazla dosya ismi ile kullanılır.

# chown root /etc/passwd
# chgrp users /etc/passwd

Ayrıca isterseniz chown komutunun alternatif bir kullanımı ile tek seferde dosya sahibini ve sahip oldugu grubu degistirebilirsiniz.

# chown root.users /etc/passwd

superuser olmadıgınız sürece chown komutunu kullanmamalısınız ancak dosyanın ait oldugu grubu sahip oldugunuz gruplardan birisi olarak belirlemek amacıyla chgrp komutunu normal kullanıcı durumunda da kullanabilirsiniz.


Linux hesap yönetimi

/etc/passwd dosyası
Bu bölümde Linux'un hesap yönetimi mekanizmasını inceleyecegiz. Sistemdeki tüm kullanıcıların bilgilerinin bulundugu /etc/passwd dosyasıyla baslayalım. "less /etc/passwd" yazarak, kendi sisteminizdeki dosyayı görüntüleyebilirsiniz. Bu dosyadaki herbir satır, bir kullanıcı hesabını belirtir. /etc/passwd dosyasından bir örnek satır ele alalım:

knoppix:x:1000:1000:Knoppix User:/home/knoppix:/bin/bash

Gördügünüz gibi, bu satırda çok fazla bilgi yokmus gibi duruyor. Aslında /etc/passwd dosyasındaki her satır : ile ayrılmıs birkaç parçadan olusur.

İlk kısım kullanıcı adını belirtir (knoppix), ikinci bölümde bir x harfi görüyoruz. Eski Linux sistemlerinde, bu kısımda sifrelenmis bir halde parolalar bulunurdu ve bu parolalar kullanıcı girisinde onaylama için kullanılırdı. Ama yeni Linux sistemlerinin neredeyse tamamında, sifreler baska bir dosyada tutuluyor.

Üçüncü alandaki (1000) ifadesi, kullanıcının numarasını, dördüncü alandaki (1000) ifadesi de, bu kullanıcının baglı oldugu grubu belirtir. Biraz sonra (1000) numaralı grubun nerede tanıtıldıgını da görecegiz.

Besinci bölüm, bu hesabın düzyazı olarak bir açıklamasını içerir, bu örnekte, açıklama kullanıcının tam adı olarak verilmis. Altıncı bölümde, kullanıcının home dizininin yeri belirtilir. Son olarak, yedinci kısımda o kullanıcı için standart olarak açılacak olan kabugu ifade eder. Bu kabuk kullanıcı bilgisayara girdiginde otomatik olarak açılan kabuktur.

/etc/shadow dosyası
Kullanıcı hesaplarına ait bilgilerin /etc/passwd dosyasında tutuldugunu gördük.Linux sisteminde bu dosyayla ortak çalısan bir dosya daha vardır: /etc/shadow dosyası. Bu dosya /etc/passwd dosyası gibi herkes tarafından okunabilir bir dosya degildir. Bu dosyanın içerigi, sadece root tarafından görüntülenebilen, sifrekenmis parola bilgilerinden ibarettir. Bu dosyadan alınmıs bir satırı inceleyelim:

knoppix:$1$inZ2aQ4f$Us10Oa1moVCgbwXsx.a.E.:12167:0:99999:7:::

Yine herbir satır ayrı bir kullanıcı hesabıyla ilgili bilgileri içeriyor ve herbir bölüm : ile ayrılmıs durumda. İlk kısım bu parola bilgisinin hangi kullanıcıya ait oldugunu belirtir. İkinci kısımda ise kullanıcının, parolası sifrelenmis bir halde bulunur. Diger alanlar ise kullanıcının sifresini degistirmeye zorlanması ile ilgili bazı degerleri içerir.

/etc/group dosyası
simdi de, /etc/group dosyasına gözatalım. Linux sistemindeki tüm grup bilgileri bu dosyada tutulur. Örnek bir satıra bakalım:

knoppix:x:1000:

/etc/group dosyasındaki satırların anlamlarını inceleyelim. İlk kısım grubun adını barındırıyor. ikinci alanda ise bir parola görüntüsü olarak x karakteri bulunur. Üçüncü kısımda, bu gruba ait olan grup numarasını verir. Bu örnekte bos olarak gözüken dördüncü bölümde de bu gruba üye olan kullanıcıların isimleri vardır.

/etc/passwd dosyası ile ilgili olarak verdigimiz örnekte, grup numarası olarak 1000 vardı. Bu, knoppix kullanıcısının, knoppix grubunun bir üyesi oldugu anlamına geliyor. Ama /etc/group dosyasında, knoppix grubunun bilgilerinin arasında üye olarak knoppix kullanıcısının belirtilmedigine dikkat edin.

Sistemde yeni kullanıcı yaratma
simdi kendi kullanıcı ve grubunuzu yaratma isleminin nasıl yapılacagına bakalım. Bunu ögrenmenin en iyi yolu, sistemde elle yeni bir kullancı yaratmaktır. Sisteme yeni bir kullanıcı eklemek için

$ adduser

komutunu kullanabilirsiniz. Ancak bu komutun dogru parametrelerle çalıstırılması gerekir. simdi sisteme deneme kullanıcısını eklemek için girilen asagıdaki komutu inceleyelim:

$ adduser --system --home /home/deneme --shell /bin/bash --uid 750 deneme

/etc/passwd dosyasında, kullanıcılarla ilgili bilgileri hatırlayalım. Kullanıcının userid'si, home dizini ve sisteme girdiginde açılacak olan kabuk bu komut çalıstırılırken parametre olarak girilmistir. Ayrıca grup bilgileri de adduser komutu ile ayarlanabilir. Bu komutla ilgili daha fazla bilgi için:

$ man adduser

kılavuz sayfasını inceleyebilirsiniz.

Parola belirleme
Tekrar komut satırına dönmüs durumdasınız. simdi, yeni kullanıcımız için bir parola belirleme zamanı:

# passwd deneme
Enter new UNIX password: (denemekullanici icin bir parola girin)
Retype new UNIX password: (denemekullanici icin belirlediginiz parolayı tekrar girin)


Linux Dosya Sistemi

Blok Aygıtlar
Bu bölümde linux dosya sistemini genel olarak inceleyecegiz. Böylece bir sistem yöneticisinin bilmesi gereken tüm detaylardan haberdar olacaksınız. Baslangıç olarak blok aygıtlar ile giris yapacagız. Bir linux sisteminde en çok bilinen blok aygıtlardan birtanesi de IDE sürücüsüdür. Sistemde /dev/hda olarak temsil edilmektedir. Eger sisteminiz SCSI sürücü ile çalısıyorsa bu durumda ilk sabit sürücünüz /dev/sda olacaktır.

Yukarıda belirtilen blok aygıtlar disk için soyut bir arayüz teskil eder. Kulanıcı programları sürücünüzün IDE ya da SCSI olması ile ilgilenmeksizin disk ile iletisiminde bu blok aygıtları kullanırlar.

Tüm Diskler ve Bölümler
Linux altında, mkfs olarak adlandırılan özel bir komuta belirli bir blok aygıtı komut satırı parametresi olarak vererek dosya sistemleri yaratırız.

Teorik olarak tüm diski /dev/hda veya /dev/sda gibi belli bir dosya sistemine ev sahipligi yapacak sekilde tek bir blok aygıt olarak kullanmak mümkün olsa da (bir tanesi tüm diski temsil edecek sekilde) pratikte bu kullanım neredeyse hiç tercih edilmez. Bunun yerine tüm blok aygıtlar, bölüm (partition) denilen daha küçük ve yönetimi daha kolay parçalara ayrılırlar. Bölümler, fdisk denilen ve her disk üzerinde saklanan bölüm tablosunu yaratmaya ve düzenlemeye yarayan bir araç ile olusturulmaktadır. Bölüm tablosu tüm diskin nasıl bölünecegini tam olarak belirler.

fdisk Kullanımı
fdisk kendisine verilen seçenekleri yardımıyla kullanılabilir. Bu seçenekleri ve fdisk hakkında ayrıntılı bilgiyi "man fdisk" yazarak alabilirsiniz.


Dosya Sistemlerini Yaratmak
Bir blok aygıt dosyaları barındırmak amacıyla kullanılmadan önce, bu aygıt üzerinde yeni bir dosya sistemi yaratmamız gerekmektedir. Bu islem için "mkfs" komutunu kullanırız. Kullanacagımız mkfs, yaratmak istedigimiz dosya sisteminin tipine göre degismektedir. Bu örnekte, bos ve kullanılmayan blok aygıt olan /dev/hdc8 üzerinde ext2 dosya sistemi yaratmak için mke2fs kullanıyoruz:

# mke2fs /dev/hda8
mke2fs 1.32 (09-Nov-2002)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
354112 inodes, 706852 blocks
35342 blocks (5.00%) reserved for the super user
First data block=0
22 block groups
32768 blocks per group, 32768 fragments per group
16096 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.

Yukarıdaki örnekte az önce de söyledigimiz gibi mke2fs komutu /dev/hda8 üzerinde ext2 dosya sistemi yarattı.

Dosya sistemlerini mount etmek
Bir dosya sistemini olusturduktan sonra onu mount edebiliriz.

# mount /dev/hdc8 /mnt/usrDeneme

Bir dosya sistemini mount etmek için, disk bölümü blok aygıtını ilk argüman olarak, ve bir mount (baglama) noktasını ikinci argüman olarak belirtmek gerekir. Yeni dosya sistemi artık sözkonusu baglantı noktasından erisilebilir olacaktır. Bu aynı zamanda /mnt dizini altındaki dosyaları saklama etkisi de yapabilir. Sözkonusu dosya sistemi umount islemine tabi tutuldugunda artık buradaki eski dosyalar görünmezler. umount komutunu kullandıktan sonra /mnt altındaki yeni baglanma noktasına eklenen yeni dosya ve didiznler artık yeni dosya sisteminde yeralır.

Takas bölümü olusturmak ve kullanmak
Takas aygıtı olarak kullanılmak üzere bir disk bölümü olusturduysak, bunu mkswap komutu ile düzenleyebiliriz. Dogal olarak bu komutun argümanı partisyon blok aygıtı olacaktır.

Not: Burada mkswap PATH degiskeninin gösteridigi dizlerina ltında öntanımlı olarak yeralmayabilir. Bunun için /sbin dizini de PATH degiskenine eklemek ya da komutu /sbin/mkswap seklinde kullanmak gerekecektir.

# mkswap /dev/hdc6

Geleneksel dosya sistemlerinin aksine takas bölümleri mount edilmez. bunun yerine swapon komutu ile aktif hale geçirilirler.

# swapon /dev/hdc6

Normalde, Linux sisteminizin baslangıç betikleri, otomatik olarak takas bölümlerini etkin hale getirecektir. Bu yüzden swapon komutu takas bölümlerini o an kullanmak istediginizde kullanılır. Mevcut takas aygıtlarını görmek için, cat /proc/swaps komutunu vermeniz gerekir.

Mount edilmis dosya sistemlerini görmek
Hangi dosya sistemlerinin mount edildigini görmek için mount komutunu tek basına çalıstırın.

$ mount
/dev/hda7 on / type xfs (rw)
none on /proc type proc (rw)
none on /proc/bus/usb type usbdevfs (rw)
none on /dev type devfs (rw)
none on /dev/pts type devpts (rw,mode=0620)
none on /mnt/cdrom type supermount (ro,dev=/dev/hdc,fs=auto,--,iocharset=iso8859 -1,codepage=850,umask=0)
none on /mnt/floppy type supermount (rw,sync,dev=/dev/fd0,fs=auto,--,iocharset=i so8859-1,codepage=850,umask=0)
/dev/hda5 on /mnt/win_d type vfat (rw,iocharset=iso8859-1,codepage=850,umask=0)
automount(pid1505) on /misc type autofs (rw,fd=7,pgrp=1505,minproto=2,maxproto=4 )
automount(pid1526) on /net type autofs (rw,fd=7,pgrp=1526,minproto=2,maxproto=4)
/dev/hda1 on /mnt/win_c type ntfs (ro,iocharset=iso8859-1,umask=0)

Benzer bilgilere cat /proc/mounts yazarak da erismeniz mümkün. Bazı linux sistemimde devfs sistemi kullanıldıgından, bu komutun çıktısının ilk satırında "root" partisyon blok aygıtının uzun bir yolu bulunmaktadır. "Root" dosya sistemi, kernel tarafından açılıs sırasında otomatik olarak mount edilmektedir.


Dosya sistemlerini Unmount Etmek
Genelde sistem yeniden baslatıldıgında ya da kapatılırken mount edilmis tüm dosya sistemleri otomatik olarak unmount edilir. Bir dosya sistemi unmount edilecegi zaman geçici bellekte bekleyen herhangi bir dosyasistemi bilgisi diske yazılır.

Ayrıca el yordamı ile de istenirse unmount islemi gerçeklestirilebilir. Bir dosya sistemini unmount etmeden önce bu sistem üzerinde herhangi bir süreç tarafında açılmıs ya da kullanılan dosya olmadıgından emin olmalıyız. Bu durum saglandıgında aygıt adını ya da baglama noktasını parametre olarak girerek unmount komutunu kullanabiliriz.

# umount /mnt

veya

# umount /dev/hdc6

unmount sonrasında, /mnt altında önceden mount edilmis sistemin kapsadıgı dosyalar yeniden belirecektir.


Linux'te yer alan degisik dosya sistemleri: ext2 Dosya Sistemi, ext3 Dosya Sistemi, XFS Dosya Sistemi, JFS Dosya Sistemi, VFAT, seklindedir.

Sistemi Baslatmak

Bu bölümde Linux sistem açılıs isleminden bahsedilmektedir. Burada boot yükleyicisi kavramını, açılısta çekirdek ayarlarını nasıl yapacagımızı ve açılıs log dosyalarını nasıl inceleyecegimizi görecegiz.

MBR
Sistemin yüklendigi dagıtıma bakmaksızın açılıs islemi tüm linux makinalarda birbirine benzemektedir. Asagıdaki örnek hardiske bir göz atalım:

+----------------+
| MBR |
+----------------+
| Partition 1: |
| Linux root (/) |
| containing |
| kernel and |
| system. |
+----------------+
| Partition 2: |
| Linux swap |
+----------------+
| Partition 3: |
| Windows 3.0 |
| (last booted |
| in 1992) |
+----------------+

İlk olarak bilgisayarın BIOS'u harddiskinizin ilk birkaç sektorünü okumaktadır. Bu sektörler içerisinde "Master Boot Record" ya da "MBR" denilen çok küçük bir program yer almaktadır. MBR Linux çekirdeginin (yukarıdaki örnekte bölüm 1) yerinin bilgisini saklamaktadır. Böylelikle çekirdegi bellege yükler ve baslatır.

Çekirdek Açılıs İslemi
Bundan sonra görecegimiz (her ne kadar çok hızlı bir sekilde geçse de ) asagıdakine benzer bir satır olacaktır:

Linux version 2.4.16 (root@time.flatmonk.org) (gcc version 2.95.3 20010315 (release))

Bu satır çekirdek çalısmaya basladıgı zaman ekrana bastıgı ilk satırdır. İlk kısım çekirdegin sürümünü, bundan sonra gelen satır çekirdegi yazan kisinin kimligini (genellikle root), sonraki kısım derleyiciyi ve sonra da yazıldıgı saat dilimini (timestamp) belirtmektedir.

Bundan sonra gelen satırlarda ise sistemde yer alan donanıma baglı olarak islemci, disk kontrol edici, PCI veriyolu, diskler, ses kartları, seri portlar, disket sürücüler, USB aygıtlar, ag adaptörleri ve muhtemel diger donanımlarla ilgili bunların durumlarını gösteren raporlar yer alacaktır.


/sbin/init Programı
Çekirdek yüklemesini tamamladıgı zaman init denilen bir program çagırmaktadır. Bu program sistem kapatılıncaya kadar çalısmaya devam eder. Asagıda da göreceginiz gibi programa verilen process ID her zaman 1 degerini alır.

$ ps --pid 1
PID TTY TIME CMD
1 ? 00:00:04 init.system

init programı bundan sonra birtakım scriptler çalıstırarak dagıtımın geri kalan kısmını da baslatır. Bu scriptler geleneksel olarak /etc/rc.d/init.d dosyasında yer alır ve sistemin sunucu adını belirleyen, dosya sistemini hatalara karsı denetleyen, genel dosya sistemlerini mount eden, ag uygulamalarını baslatan, yazıcı servislerini baslatan ve bunun gibi islemleri gerçeklestirecek bazı servisleri çalıstırırlar. Scriptlerin çalısması tamamlandıgında, init getty adında ve giris ekranını getiren bir program çalıstırır.

Bootloader Kavramı
su ana kadar açılıs islemine genel bir bakıs yapmıs olduk. simdi ilk kısmı, MBR ve çekirdegin yüklenmesini biraz daha ayrıntılı inceleyelim. MBR'nin bakımı "boot loader" sorumlulugundadır. x86 tabanlı Linux sistemleri için en popüler iki boot loader LILO (linux loader) ve GRUB (Grand Unified Bootloader) dır. Bu ikisi içerisinde LILO daha eski ve daha çok bilinen boot loader dır.
LILO ile GRUB arasındaki bahsedilmesi gereken önemli bir degisiklik ise GRUB'un yeni bir çekirdek yüklendiginde ya da kendisi konfigüre edildiginde tekrar kurulmaya ihtiyaç duymamasıdır. Bunun nedeni GRUB'ın linux dosya sistemiyle interaktif çalısması, LILO'nun ise sadece yüklenecek olan çekirdegin yerini tutmasıdır. Bu tek özellik yeni bir çekirdek yükledikten sonra lilo yazmayı unutan sistem yöneticilerinin bosuna is yapmıs hissiyle sinirlenmelerine engel olmaktadır :)

dmesg
Çekirdek ve init scriptlerinden gelen açılıs mesajları genelde çok çabuk geçmektedir. Bir hata mesajını farketseniz bile siz daha mesajı algılayamadan o kaybolacaktır. Bu durumda neyin yanlıs gittigini anlayabilmek için (ayrıca nasıl düzelteceginize dair fikir sahibi olmak için ) açılıs islemi tamamlandıktan sonra bakabileceginiz iki yer vardır.

Eger hata çekirdek yüklenirken ya da donanım aygıtları arastırılırken meydana gelmis ise dmesg komutu ile çekirdegin log dosyasının bir kopyasını ekrana getirebilirsiniz.

# dmesg | head -1
Linux version 2.4.16 (root@time.flatmonk.org) (gcc version 2.95.3 20010315 (release))

Burada gördügünüz gibi çekirdegin yüklenmesi sırasında yazdıgı ilk satır ortaya çıktı. Gerçekten de eger dmesg komutunu çıktısını bir sayfa görüntüleyiciye koyarsanız çekirdegin açılısta yazdıgı bütün mesajlar ve aynı anda çekirdegin konsola yazdıgı bütün mesajları görebilirsiniz.

/var/log/messages
Bilgi için bakılacak ikinci yer ise /var/log/messages dosyası olacaktır. Bu dosya kütüphanelerden, diger kölelerden ve çekirdekten gelen bilgileri giris olarak alan "syslog" kölesi tarafından kaydedilmektedir. messages dosyasındaki her satır tarihlendirilmistir. Bu dosya açılısta init scriptlerin çalısması sırasında meydana gelen hataları incelemek için iyi bir dosyadır. Örnegin kernel'dan gelen son birkaç mesajı görmek için:

# grep kernel /var/log/messages | tail -3
May 1 21:17:29 localhost kernel: hdc: ATAPI 52X CD-ROM drive, 128kB Cache, DMA
May 1 21:17:29 localhost kernel: Uniform CD-ROM driver Revision: 3.12
May 1 21:17:29 localhost kernel: SCSI subsystem driver Revision: 1.00



Sistemi Düzgün Kapatmak
Dikkat ederseniz eger sistemde o anda baska kullanıcılarda varsa sistemi bu sekilde kapatmak o kulanıcılar için çok zararlı olabilir. shutdown komutu bunun için çalısma seviyelerini daha düzenli bir sekilde degistirecek bir metod sunar. kill komutunu diger süreçlere sinyal gönderme özelligine benzer bir sekilde shutdown komutu da sistemi kapatmak yeniden baslatmak ya da tek-kullanıcı moduna geçmek için kullanılabilir. Örnegin 5 dakika içinde tek kullanıcı moduna geçmek için:

# shutdown 5
Broadcast message from root (pts/2) (Tue Jan 15 19:40:02 2002):
The system is going DOWN to maintenance mode in 5 minutes!

Eger control+c tusuna basarsanız tek-kullanıcı moduna geçmeyi saglayan bu komutu kaldırabilirsiniz de. Bu gördügünüz mesaj sistemde o anda çalısan tüm kullanıcıların terminallerinde belirecektir . Böylece bu kullanıcılar yaptıkları isi kaydedecek ve düzgün bir sekilde sistemden çıkabilecek zamanı bulabileceklerdir. (tabi bu 5 dakikanın yeterli olup olmayacagı ayrı bir tartısma konusu :))

Sistemi Aniden Kapatmak
Eger sistemde çalısan tek kullanıcı siz iseniz belli bir süre belirtmek yerine "now" parametresini kullanabilirsiniz. Örnegin sistemi hemen o anda yeniden baslatmak için:

# shutdown -r now

Bu örnekte -r "reboot after shutdown" bir sonraki örnekte görecegimiz -h "halt after shutdown" anlamına gelir. Bu durumda artık control+c tusuna basma sansınız olmayacaktır çünkü artık kapatma islemine baslanmıstır. Son olarak bahsedecegimiz -h parametresi ise söyle kullanılır:

# shutdown -h 1
Broadcast message from root (pts/2) (Tue Jan 15 19:50:58 2002):
The system is going DOWN for system halt in 1 minute!
Sistem Logları

syslogd'ye Giris
syslog sorumlusu (daemon), sistemde çalısan programlardan gelen mesajlar ile olgun bir istemci-sunucu mekanizması sunar. Syslog bir program sorumlusundan (daemon) ya da programdan gelen mesajları alır, önceligine ve tipine göre kategorize eder ve yönetici konfigürasyonu kurallarına göre raporlar. Logları yönetibilmek açısından bu yöntem oldukça saglamdır ve bütünlük arzetmektedir.

Logları Okumak
simdi gelin syslog tarafından kaydedilmis bir log dosyasını içerigini inceleyelim. Sonra da syslog konfigürasyonunun nasıl yapılacagına dönebiliriz. FHS log dosyalarının /var/log içerisinde yer alması gerektigini belirlemektedir. Burada tail komutunu kullanarak son on mesajın görüntüleyecegiz:

# cd /var/log
# tail messages
Jan 12 20:17:39 bilbo init: Entering runlevel: 3
Jan 12 20:17:40 bilbo /usr/sbin/named[337]: starting BIND 9.1.3
Jan 12 20:17:40 bilbo /usr/sbin/named[337]: using 1 CPU
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: loading configuration from '/etc/bind/named.Jan 12 20:17:41 bilbo /usr/sbin/named[350]: no IPv6 interfaces found
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: listening on IPv4 interface lo, 127.0.0.1#53
Jan 12 20:17:41 bilbo /usr/sbin/named[350]: listening on IPv4 interface eth0, 10.0.0.1#Jan 12 20:17:41 bilbo /usr/sbin/named[350]: running
Jan 12 20:41:58 bilbo gnome-name-server[11288]: starting
Jan 12 20:41:58 bilbo gnome-name-server[11288]: name server starting

Yazı isleme konusundan hatırlayacaksınız ki tail komutu bir dosyadaki son satırları görüntüler. Burada gördügümüz gibi bilbo isimli nameserver sistemde en sona yakın zamanda çalısmaya baslamıstır. Eger IPv6 konuslandıracak olsaydık named daemon'ının hiç bir IPv6 arayüzü bulamadıgını farkedecektik. Ayrıca tüm bunlara ek olarak yine bu dosyada bir kullanıcını gnome-name-server dan hemen önce GNOME çalıstırdıgını anlamaktayız.

Logları Kuyruktan Takip Etmek
Tecrübeli bir sistem yöneticisi bir log dosyasının çıkısını gözlemlemek için tail -f komutunu kullanacaktır.

# tail -f /var/log/messages

Yukarıdaki kullanım sayesinde bir servis çalıstırken ya da durduruken kendisinden gelen mesajları da görme sansımız olacaktır. Debug islemi için bu çok kullanıslı bir yöntemdir. Hatta bazı sistem yöneticileri ortaya çıkan mesajları o anda hemen görebilmek için bir terminalde sürekli bu komutu çalısır halde kullanmaktadırlar. Mesela bir terminalde yukarıdaki komutu yazıp baska bir terminalde de httpd servisini kapatalım:

# service httpd stop
Shutting down httpd2: [ OK ]
#

simdi ilk terminale dönersek en alt satıra eklenen su mesajı da görecegiz:

.....

...
May 1 23:11:00 localhost CROND[3827]: (mail) CMD (/usr/bin/python -S /var/lib/mailman/cron/qrunner)
May 1 23:11:25 localhost httpd: httpd shutdown succeeded

Log Dosyalarını grep ile Kullanmak
log dosyalarını incelemek için bir baska yararlı yöntem de grep komutunu kullanmak olacaktır. Yukarıda bahsedilen durum için "httpd" ile birlikte grep kullanarak durumu iceleyebiliriz:

# grep httpd /var/log/messages

Ya da httpd ile ilgili olarak gelen son 3 mesajı da su sekilde görebiliriz:

[root@localhost erman]# grep httpd /var/log/messages| tail -3
May 1 23:11:25 localhost httpd: httpd shutdown succeeded
May 1 23:14:15 localhost httpd2: httpd2: Could not determine the server's fully qualified domain name, using 127.0.0.1 for ServerName
May 1 23:14:18 localhost httpd: httpd2 startup succeeded
Cevapla

“Linux ve Unix tabanli isletim sistemleri” sayfasına dön