18 Kasım 2010 Perşembe

Linux Modüller

 

5.7 Modüller (Yüklenebilir Çekirdek Parçaları)

Linux işletim sistemi çekirdeğinin boyu genellikle 400-600Kb arasındadır. Hantal çekirdeklerde bu sayı 800Kb'lara kadar çıkabilir. Çekirdeğin boyunun büyümesi, sistemin performansını olumsuz yönde etkiler. Özellikle bilgisiz kullanıcıların gerekli gereksiz tüm desteği çekirdeğe yüklemesi sıkça görülür. Bunun önüne geçmek de deneyim ister.
Linux'a özgü özelliklerden birisi modüllerdir (yüklenebilir çekirdek parçaları). Modüller sayesinde nadiren gerekli duyulan bir çekirdek parçası sadece gerektiği zaman çekirdeğe eklenir. Örneğin Java programlarını her zaman çalıştırmak istemiyorsanız, bu desteği modül olarak derleyip bir kenara koyarsınız. Ne zaman bir Java programı çalıştırılacaksa bu modül hafızaya yüklenecektir.
Bir modül, çekirdeğin derleme aşamasında `M' parametresiyle tanımlanır. Her desteğin modülü henüz geliştirilmemiş olmasına rağmen bu sayı gün geçtikçe artmaktadır. İlginizi çekebilecek modüller arasında disket desteği, yazıcı desteği, minix dosya sistemi desteği veya SCSI aygıt sürücü desteği sayılabilir.
Bir modülü derledikten sonra modüle ait dosya /lib/modules dizini altında yeralır. Burada istenilen bir modül
# insmod modul-ismi
komutuyla çekirdeğe eklenir. Modülü hafızadan çıkarmak için
# rmmod modul-ismi
yazın. Hafızadaki modüllerin bir listesini görebilmek için de lsmod komutu kullanılabilir.
kerneld komutu, arkaplanda çalışarak gerekli olan modülleri anında yükler. Bu sayede çekirdeğe eklemek için insmod komutuna gerek kalmaz. Ayrıca belirli bir süre içinde kullanılmayan modülleri de çekirdekten atar.

5.8 Yeni Yazılımların Yüklenmesi

Linux işletim sistemi, benzerlerine nazaran çok büyük bir hızla genişliyor. Her an yeni bir program, yeni bir yazılım piyasaya çıkıyor ve bunları takip etmek de gittikçe zorlaşıyor. Bir ftp adresini kontrol ettikten iki gün sonra tekrar bakıyorsunuz ki üç-beş yeni yazılım gelivermiş.
Tabi ki her an her programı makinanıza indirip açmak zorunda değilsiniz. Buna ne zamanınız, ne de sabit diskiniz yeter (Linux'un sunsite arşivi 20GB'tan fazla yer kaplıyor!). Öyleyse tespih çeker gibi program indirmek veya varolan yazılımları güncellemek komik olur. Sadece gereken zamanda gereken dosyaları makinanıza kurmalı veya güncellemelisiniz.
Bu işlem çekirdek için de geçerlidir. Bazı çekirdek fanatikleri çekirdeği çıktığı anda makinalarına indirir ve derlerler. Linux'a çok önemli bir fonksiyon kazandırmayacaksa her an çekirdek derlemek hem zaman kaybı olur, hem de derleme esnasında sistemi yavaşlatarak diğer kullanıcıları kızdırır.
Kurmak istediğiniz ve ftp adresinden bulup getirilen dosya çok büyük ihtimalle tar ve gzip ile arşivlenip sıkıştırılmıştır. Bu dosyanın sonu genellikle tar.gz, tgz veya tar.Z ile biter. Dosya kaynak koduyla veya çalıştırılabilir program olarak dağıtılıyor olabilir . Her iki durumda da yapılacak işlemler birbirine benzer.
Öncelikle yazılımın açıldığı zaman hangi dizine kendini yerleştireceğine bakmak gerekir. Bunu tar komutunun -t seçeneği ile kontrol edin. compress ve gzip ile sıkıştırılmış dosyalar için,
# tar -ztvf dosya.tar.gz
komutu kullanılabilir. Çok nadir durumlarda dosya, kendine ait bir dizin yaratmaz, onlarca programı ve konfigürasyon dosyasını bulunduğunuz dizine yazar. Karmaşıklık yaratan bu durumdan ancak arşivi ayrı bir dizin altında açmakla kurtulabilirsiniz.
Linux'çular yeni bir yazılımı denemek istediklerinde arşivi genellikle /usr/src veya /usr/local/src dizini altına kopyalarlar ve burada açarak biraz sonra anlatılacak konfigürasyon işlemini uygularlar. Derleme gerektirmeyen bazı programların ise doğrudan kök dizinde açılmaları gerekebilir. Bu programlar açıldıkları anda çalışmaya hazırdırlar.
/usr/src veya /usr/local/src dizini altına dosyayı açtıktan sonra bol miktarda dosya ve dizinle karşılaşabilirsiniz. Buna en iyi örnek Linux çekirdeğidir. Burada yeralan bazı anahtar dosyalar yazılımın kurulması için hayati önem arzeder.
Öncelikle README, README.linux ve varsa INSTALL dosyalarının gözden geçirilmesi gerekir. Bunlar sırayla bir kullanıcı olarak dosyaları nasıl kuracağınızı ayrıntılarıyla söyler. Kurma aşamasında dikkat edilecek dosyalardan ilki Makefile veya makefile dosyasıdır. Bu dosyanın içinde (nadiren) küçük birkaç değişiklik yapmak gerekebilir. Diğer kontol edilmesi gereken dosya ise varsa config.h dosyasıdır. Bunu da sistem gereksinimize göre değiştirmelisiniz.
Bazen başta derleyici olmak üzere sistemdeki yazılımı baştan aşağı kontrol eden programlar olabilir (configure gibi). Bunların da komut satırından çalıştırılmaları gerekir.
Varsa Makefile dosyasına göre yazılımı kurmak için make komutunu kullanın. make komutu kuruluma make all, make install gibi bazı parametreler alabilir. make all, halihazırda yeralan tüm yazılımları kurarken make install, bu yazılımı konfigürasyon dosyalarının gösterdiği dizinlere yerleştirirler.
Çoğu büyük paketler, man dosyalarıyla birlikte gelirler. Bunları da diğer man dosyalarının yanına (/usr/man) koymak için ayrı bir make install.man türü komut kullanmak gerekebilir.
Her durumda, mutlaka README dosyasını okuyun. Biraz sıkıcı gelse de sizi zaman kaybından kurtaracaktır.
Slackware dağıtımını kullanıyorsanız, yüklenmiş yazılımları silmek için 2 yolunuz var. Birincisi, root olarak sisteme girip, istemediğiniz programları tek tek komut satırından silebilirsiniz. Ama bu size önerebileceğimiz bir yol değil ve çok fazla sakıncası var. Örneğin, programı silip, ona olan bağlantıları unutabilirsiniz. Ya da tam tersi olabilir. İkinci yol ve en geçerlisi, Slackware dağıtımı ile gelen pkgtool programı kullanmanız. pkgtool seçenekleri arasındaki remove package işinize yarayacaktır.

5.9 Sistem Açılış Dosyaları

Linux makinası açılırken onlarca dosyayı okur. Birkaç dakika içinde çekirdeği hafızaya yükler, belirli dizinlerin altındaki programları arkaplanda çalıştırır. Sistem uyanırken hatırı sayılır nicelikte konfigürasyon dosyası elden geçer. Açık bir işletim sistemini diğerlerinden ayıran bir özellik de kullanıcının büyük bir kolaylıkla bu konfigürasyon dosyalarını değiştirebilmesidir. Sistem açılış dosyalarında , özellikle ağ temelli dosyalarda değişiklik yapabilmek için TCP/IP konusunda basit temelleri anlayabilmiş olmanız gerekir.
Açılış dosyalarında, tek bir kullanıcı için veya sistemde hesabı olan herkese yönelik olarak değişiklik yapmak mümkündür. Pek çok kullanıcı bu açılış dosyalarıyla oynayarak Linux'u daha yakından öğrenme imkanına sahip olur.
İnternet servisi veren bir makina bu servisini daemon'lar aracılığıyla yapar. Bir daemon, her makina tarafından bilinen bir port numarasını açar ve dinlemeye koyulur. Eğer sorumlu olduğu port adresine istek gelirse bu isteğe cevap vererek servise başlar.
Bash kabuğunun anlatıldığı konu içinde sisteme girerken okunan dosyaları anlatmıştım. Sistemde yeralan önemli dizinler de dosya sistemi yapısı konusunda detaylı olarak belirtilmişti. Bu bölümde daemonlardan kısaca bahsedip açılış anında çalıştırılan programlara ve bunların konfigürasyon dosyalarına kısa bir giriş yapılacaktır.

inetd ve /etc/inetd.conf

inetd, en ağır görevleri üstlenen ve en önemli İnternet servislerindendir. Bu program sistem açılırken arkaplanda çalışmaya bırakılır. inetd'nin görevi belirli portları dinleyerek bu portlara yapılan bağlantıları denetlemektir. Bir bağlantı yapıldığı anda inetd bu portla ilgilenecek olan programı çalıştırır. Örnek olarak Linux'a ftp isteği geldiği anda inetd, ftp isteğine cevap verecek olan wu.ftpd programını uyandırır ve geri kalanını bu programa bırakır.
inetd olmasaydı her standart port numarası için bu portu dinleyecek olan bir program arkaplanda çalışıyor olacaktı. Bu da sisteme normalden daha fazla yükün binmesi demektir. inetd'nin kullandığı konfigürasyon dosyası /etc/inetd.conf'tur. Bu dosyadan bir bölüm aşağıda yeralmaktadır :
# "kill -HUP <pid of inetd>".
# The inetd will re-read this file whenever it gets that signal.
#
# <service_name> <sock_type> <proto> <flags> <user> <server_path> <args>
#
time    stream  tcp     nowait  root    internal
time    dgram   udp     wait    root    internal
ftp     stream  tcp     nowait  root    /usr/sbin/tcpd  wu.ftpd
telnet  stream  tcp     nowait  root    /usr/sbin/tcpd  in.telnetd
#nntp   stream  tcp     nowait  root    /usr/sbin/tcpd  in.nntpd
shell   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rshd -L
login   stream  tcp     nowait  root    /usr/sbin/tcpd  in.rlogind
ntalk   dgram   udp     wait    root    /usr/sbin/tcpd  in.talkd
pop3    stream  tcp     nowait  root    /usr/sbin/tcpd  in.pop3d
imap2   stream  tcp     nowait  root    /usr/sbin/tcpd  imapd
finger  stream  tcp     nowait  nobody  /usr/sbin/tcpd  in.fingerd -w
systat  stream  tcp     nowait  nobody  /usr/sbin/tcpd  /bin/ps -auwwx
netstat stream  tcp     nowait  root    /usr/sbin/tcpd  /bin/netstat    -a
# End of inetd.conf.
/etc altında bir konfigürasyon dosyasını değiştirmek isterseniz, o dosyayı okuyan ve arkaplanda çalışıyor durumda bulunan süreçleri bundan haberdar etmelisiniz. Çünkü bu dizindeki bazı dosyalar sadece açılışta okunur. inetd, yukarıdaki inetd.conf dosyasını sistem açılırken okuyacaktır. Değişiklik yaptıktan sonra inetd'nin bu değişiklikten tekrar haberinin olması için bu sürecin PID numarasını ps -aux komutu ile bir kenara not edin ve şunları yazın.
# kill -HUP <PID-inetd>
PID-inetd yerine not ettiğiniz süreç numarasını girmelisiniz. Bu sayede inetd kendisine ait olan inetd.conf dosyasını tekrar okuyacak ve değişiklikler işleme konacaktır.
Her bilgisayar tarafından bilinen servislerin isimleri ve hangi portları (portları) kullandıkları /etc/services dosyasında tutulur.

syslogd ve /etc/syslog.conf

syslogd programı Linux'taki çeşitli olayların kayıtlarını tutar. Bunlar genellikle hata mesajları veya çekirdek mesajları gibi kayıtlardır. syslogd sistem açılırken arkaplanda işlemeye bırakılır.
/etc/syslog.conf, syslogd programının konfigürasyonu için kullanılır. Normal olarak sistem kayıtları /usr/adm/messages dosyasının sonuna eklenir. Bu dosyanın yapısı biraz karışık olmasına rağmen eğer sistem yöneticiyseniz syslogd sizin en büyük yardımcınız olabilir.
Örnek bir syslog.conf dosyası aşağıda yeralıyor.
*.info;*.notice                                 /usr/adm/messages
*.debug                                         /usr/adm/debug
*.warn                                          /usr/adm/syslog
*.emerg;*.alert;*.crit                          /dev/tty8
mail.*                                          /dev/tty9
kern.*                                          /dev/tty10
Bu dosyanın en solunda yeralan ve nokta ile ayrılmış olan iki kelimeden ilki, kaydı yapılan program grubudur. Bu kısma kern (çekirdek mesajları), mail (sendmail mesajları), login (sisteme giriş veya sistemden çıkış mesajları), auth, authpriv veya security (güvenlik mesajları), cron (cron mesajları), daemon (deamon'lardan gelen mesajlar),lpr (yazıcı mesajları), news (haber grubu mesajları), user (kullanıcı mesajları) veya uucp (uucp mesajları) yazılabilir. Noktanın sağındaki kelime ise kaydı yapılan program grubunun mesaj önem sırasını belirler. Bu kısımda önem sırasına göre debug, info, notice, warning, err, crit, alert ve emerg bulunur.
Dosyanın sağında yeralan kısımda ise bu mesajların hangi dosyaya yazılacağı vardır. Yukarıda verilen örnekte, syslogd'den gelen mesajlar sanal konsollardan kullanılmayanlara yönlendirilmiştir. Böylece sistem yöneticisi F8, F9 ve F10 tuşlarını kullanarak sistem kayıtlarına anında ulaşabilir.
Başka bir makinaya kayıt tutturmak da mümkündür. Uzak makinanın ismi syslog.conf dosyasının sağ bölümüne yazılır. Böylece diğer makina yerel olarak sistem kayıtlarını tutacaktır.
mail.err                     @ordek.cclub.metu.edu.tr
Bazı kritik ve sistemin düzgün çalışmadığını haber verebilecek mesajların konsola yönlendirilmesinde fayda vardır.
kern.crit                    /dev/console
Sisteme bağlanmış olan kullanıcılar hakkında bilgiyi ise
/var/adm/wtmp
dosyası tutar. Bu dosya ASCII olmadığından doğrudan okunamaz, last komutu ile içeriği incelenebilir. Buna ek olarak çeşitli paketler çalıştırılıyorsa onların yarattığı kayıt dosyaları da incelenmelidir. Örneğin ftp çalışıyorsa /var/adm/xferlog kimin ftp ile hangi dosyaları aktardığını gösterir. Bu tür dosyalar içerisinde elde edilebilecek ipuçları ile sistemin çalışma performansı artırılabilir, kendisini pek belli etmeyen hatalar bulunabilir.

init ve /etc/inittab

init, sistemde ilk çalışan programdır. Neredeyse sistemin tüm açılış yükünü elinde tutar. init sayesinde açılış anında hangi programların çalışacağı belirlenir. Bu programları da /etc/inittab dosyasından öğrenir.
Burada /etc/inittab dosyasından alınan birkaç örnek satır yeralıyor. Her satırın sonunda çalıştırılacak olan dosyalar var.
# Default runlevel.
id:3:initdefault:
# System initialization (runs when system boots).
si:S:sysinit:/etc/rc.d/rc.S
# Script to run when going single user (runlevel 1).
su:1S:wait:/etc/rc.d/rc.K
# Script to run when going multi user.
rc:23456:wait:/etc/rc.d/rc.M
# What to do at the "Three Finger Salute".
ca::ctrlaltdel:/sbin/shutdown -t5 -rfn now
# Runlevel 0 halts the system.
l0:0:wait:/etc/rc.d/rc.0
# Runlevel 6 reboots the system.
l6:6:wait:/etc/rc.d/rc.6
# What to do when power fails (shutdown to single user).
pf::powerfail:/sbin/shutdown -f +5 "THE POWER IS FAILING"
# If power is back before shutdown, cancel the running shutdown.
pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK"
# If power comes back in single user mode, return to multi user mode.
ps:S:powerokwait:/sbin/init 5
c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:1235:respawn:/sbin/agetty 38400 tty3 linux
c4:1235:respawn:/sbin/agetty 38400 tty4 linux
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
# Serial lines
#s1:12345:respawn:/sbin/agetty 19200 ttyS0 vt100
#s2:12345:respawn:/sbin/agetty 19200 ttyS1 vt100
# Dialup lines
#d1:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS0 vt100
#d2:12345:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS1 vt100
x1:4:wait:/etc/rc.d/rc.4
Bir Linux makinasının birkaç tane çalışma düzeni vardır. Bunlardan birkaçı 3 (çok kullanıcılı konum), 1 (tek kullanıcılı konum) ve 4 (X Window konumu)'tür. Her konum, bir sayı veya bu sayılara karşılık gelen tek harften oluşur. Bir konum altında çalışırken diğerine geçebilmek için init veya telinit komutu kullanılır.
/etc/inittab'da yeralan dosya isimleri değiştirilebilir veya kullanıcının isteği doğrultusunda her çalışma modu için farklı dosyalar çalıştırilabilir.
# init 1 
Switching to runlevel 1 
Sending all processes the TERM signal 
Waiting for processes to terminate........ 
Turning off quota..
Single user mode.
init komutundan sonra açmak istediğiniz çalışma düzenine ait olan sayıyı yazabilirsiniz. Örneğin init 0 komutu sistemi kapatacaktır. Yukarıdaki komut çalıştıktan sonra /etc/inittab dosyasında bu konuma ait olan /etc/rc.d/rc.K dosyası çalıştırılır. Bu dosya çalıştıktan sonra dışarıdan yapılan bağlantılara izin verilmez.
/etc/inittab dosyasında yapılacak her değişikliğin ardından
# init q
komutunu vererek init programının inittab dosyasını tekrar okuyup değişikliklerden haberdar olmmasını sağlamalısınız. O an sistemin hangi konumda çalıştığını bulabilmek için runlevel komutunu kullanın :
$ runlevel 
N 3
Sistem, yukarıdaki bilgilere göre 3 numaralı konumda (çok kullanıcılı konum) çalışıyor.

/etc/rc.d/* Dosyaları

İşte sistemin kalbinin attığı yer. Ne yaparsanız yapın ama bu dosyaları gözünüz gibi koruyun. Sistem açılırken arkaplanda çalışmaya başlayan programlar burada yazılıdır. Tüm bu dosyalar Slackware dağıtımına özgüdür.
rc.0
Bu dosya, 0 (halt) çalışma düzenine geçerken okunur. Sistemin shutdown veya halt komutları ile kapatılmak istenirse bu program çalıştırılır. Önce sistemdeki tüm süreçler öldürülür, ardından sistemin kapandığını belirten bazı satırları kayıt dosyalarına atar. Tüm dosya sistemlerini umount işleminden geçirdikten sonra da sistemi dondurur.
rc.K
Bu dosya, init tarafından 1 numaralı çalışma düzenine (tek kullanıcılı konum) geçilirken çalıştırılır. Tüm süreçler öldürülür ve sistem sadece konsoldan giriş yapılacak şekilde tekrar açılır.
rc.cdrom
Bu dosya, bulduğu CDROM sürücüsünü /cdrom dizini altına mount yardımıyla ekler.
rc.local
Çok kullanıcılı açılış anında çalıştırılan bu dosyaya istediğiniz programları ekleyebilirsiniz.
rc.4
4 numaralı çalışma düzenine geçilirken bu dosya çağırılır. Tüm sanal konsollara vt100 terminalleri yerine grafik tabanlı bir program kullanılarak girilir.
rc.M
init tarafından çok kullanıcılı konuma geçmek için kullanılır.
rc.S
Sistem açılırken bu dosya mutlaka çalıştırılır. Takas alanı açılır, dosya sisteminde hata olması halinde bunu gidermeye çalışır. Bazı kontrollerden sonra kontrolü diğer rc programlarına bırakır.

5.10 Çekirdek Mesajları

Çekirdek, hafızaya yüklenip çalıştırıldıktan sonra kendisi ve sistemdeki donanım hakkındaki her türlü bilgiyi ekrana yazar. Her türlü bilginin içine hata mesajları da girer. Çekirdeğin hata verip vermemesi açılış anında ekrana bakmakla anlaşılabilir. Bu nedenle sistem açılırken gözünüzü monitörden ayırmamalısınız. Aşağıda bir çekirdeğin açılış kaydı yeralıyor :
Console: colour EGA+ 80x25, 1 virtual console (max 63)
bios32_init : BIOS32 Service Directory structure at 0x000faf10
bios32_init : BIOS32 Service Directory entry at 0xfb390
pcibios_init : PCI BIOS revision 2.10 entry at 0xfb3c0
Calibrating delay loop.. ok - 30.22 BogoMips
Serial driver version 4.11 with no serial options enabled
tty00 at 0x03f8 (irq = 4) is a 16550A
tty01 at 0x02f8 (irq = 3) is a 16550A
lp1 at 0x0378, using polling driver
ftape: allocated 3 buffers aligned at: 00210000
hda: QUANTUM ELS170A, 162MB w/32KB Cache, CHS=1011/15/22, MaxMult=8
ide0: primary interface on irq 14
Floppy drive(s): fd0 is 1.44M
FDC 0 is a post-1991 82077
lance.c: PCI bios is present, checking for devices...
Memory: 6612k/8192k available (760k kernel code, 384k reserved, 436k data)
This processor honours the WP bit even when in supervisor  mode. Good.
Swansea University Computer Society NET3.019
Swansea University Computer Society TCP/IP for NET3.019
IP Protocols: ICMP, UDP, TCP
PPP: version 0.2.7 (4 channels) NEW_TTY_DRIVERS OPTIMIZE_FLAGS
TCP compression code copyright 1989 Regents of the University of California
PPP line discipline registered.
SLIP: version 0.8.3-NET3.019-NEWTTY (4 channels) (6 bit encapsulation enabled)
CSLIP: code copyright 1989 Regents of the University of California
eth0: D-Link DE-600 pocket adapter: at I/O 0x378.
Checking 386/387 coupling... Ok, fpu using exception 16 error reporting.
Checking 'hlt' instruction... Ok.
Linux version 1.2.13 (root@bigkitty) (gcc version 2.7.0) #1 Wed Aug 23 01:06:43 CDT 1995
Partition check:
  hda: multiple mode turned off
  hda: hda1 hda2
VFS: Mounted root (ext2 filesystem) readonly.
Adding Swap: 8188k swap-space
Yukarıdaki mesajda swap alanı belirlenmesi, sabit diskin tanınması, disketin tanınması, aygıt sürücülerinin, ethernet kartını tanıması ve ekranın özelliklerinin yazılması gibi bilgiler vardır. Bu bilgilere sistem açıldıktan sonra /var/adm/messages dosyasıından da erişilebilir.

5.11 Linux Dosya Sistemi Yapısı

Bu bölümde Linux'un kullandığı dosya sistemi hakkında bilgi verilecektir. Dosya sistemini oluşturan dizinler, kapsadıkları dosyalar ve bunların Linux işletim sistemindeki görevleri de kısaca belirtilecektir.
Bir işletim sisteminin dosya sisteminin performansı, hızı ve buna benzer çeşitli özellikleri sistemin verimli ve kararlı çalışması üzerinde doğrudan etkisi vardır. Linux dizin yapısının geliştirilmesinde FSSTND (file system standard) grubunun çalışmalarının payı çok büyük oldu. Programcılardan oluşan grup, standartların belirlenmesinde ve uygulama aşamasında Linux ile ilgilenenlere yardım etti. 1993 yılında Olaf Kirsh, Linux haber grubuna yazdığı bir e-postasında Linux dosya sistemi üzerindeki çalışmaların tamamlandığını haber verdi.
Linux dizin yapısında bazı dizinlerin işlevi birbiriyle aynıdır. Bu durum, özellikle birbirini takip eden iki Linux sürümünde belirginleşir. Örnek olarak bir dağıtımda /usr/bin dizini altında yeralan dosya, diğer sürümde /bin altına yerleştirilebiyor.
Dosya sistemleri ve dizinler paylaşımlı olarak da kullanılabilir. Birden fazla kişisel bilgisayarın bağlandığı ağda, disk alanından yer kazanmak için bir makina sunucu (ana makina) olarak tayin edilir. Ağ üzerindeki diğer makinalar da sunucu üzerindeki diski paylaşır. Buna örnek olarak kullanıcı ev dizinlerinin yeraldığı /home, çalıştırılabilir dosyaların bulunduğu /usr, e-posta ve haber grubu bilgilerinin bulunduğu /var/spool/mail ve /var/spool/news dizinleri verilebilir.
Kök dizini, kendisine bağlı diğer tüm dizinleri de içerdiğinden, Linux dosya sisteminde önemli bir yere sahiptir. Linux açılırken önce kök dizini /etc/fstab dosyasına uygun şekilde bağlanır. Diğer dosya sistemlerinin onarımı ve kontrolü için gerekli olan fsck programları, bu dizinde bulunmalıdır. Benzer şekilde yedekleme için gerekli olan tar, zip, compress gibi arşiv programlarına da kök dizin altından erişilebilmeli, açılış esnasında hafızaya yüklenen çekirdek de kök dizininde yeralmalıdır.
Bir programı yerine koymadan önce bazı "dengelerin" gözönünde tutulmasında yarar vardır. Programlanan her yazılımı kök dizinine koyarsanız, bir süre sonra bu dosya sisteminin şiştiğini görürsünüz. Kök dizinini başlangıçta küçük (20-30Mb kadar) tutmak, geliştirilen programları daha önceden belirlenen başka bir dosya sistemi altına koymak akıllıca olur. Bu yol, ağ üzerinden genellikle paylaşımı mümkün olmayan kök dizininin her makinadaki sabit diskte mümkün olan en az yer işgal etmesini sağlar.
Sistemdeki önemli dizinlere göz atarsak,
/bin :
Sistemin açılışı ve kontrolü için gerekli komutlar. Hem kullanıcıların, hem de sistem görevlisinin kullanabileceği dosyalar (kök dizinde ise fazla şişmemesi koşuluyla) buraya atılabilir. Sadece root kullanıcının ihtiyaç duyacağı init, getty, updatedb gibi programlar /sbin veya /usr/sbin'de durabilir. Bu dizinde bulunan dosyalara örnek olarak cat, chgrp, chown, date, dd, df, ln, mkdir, mount, ps, rm, sh, su, sync ve umount verilebilir.
/dev :
G/Ç dosyaları. Linux çekirdeğinde desteklenen her aygıta ait dosya /dev dizini altında bulunur. Kurulum anında bu dosyalar yerine yerleştirilir, bu dosyaların silinmesi durumunda /dev/MAKEDEV ile tekrar yaratılabilirler.
/etc :
Sistem konfigürasyon dosyaları. Bu dizinde çalıştırılabilir dosyalar bulunmamalıdır.
·         skel : Buradaki dosyalar, kullanıcı hesabı açıldığında kullanıcının ev dizinine kopyalanır.
·         rc.d : Bu dizinin içinde, init sürecinin başvurduğu konfigürasyon dosyaları vardır. Bunlara "rc dosysları" da denir.
·         passwd : Kullanıcı veritabanı
·         fstab : Linux'un açılışı esnasında bindirilecek dosya sistemleri burada listelenir.
·         group : passwd'e benzer şekilde kullanıcıların gruplarını tutar.
·         inittab : init daemon için konfigürasyon dosyası
·         motd : Kullanıcı sisteme girdikten sonra ekranına basılması istenen mesaj burada tutulur.
·         profile : Kullanıcı sisteme girdiği zaman çalıştırılan dosya (csh ve sh türevi kabuklar için)
·         shells : Sistemde kullanılabilecek kabuk isimleri burada tutulur.
·         login.access : login komutu için konfigürasyon dosyası. Sisteme girişi kullanıcı bazında sınırlamak için kullanılir.
/home :
Kullanıcılara ayrılmış dizin. Başka şekilde ayarlanmamış ise, açılan her hesaba ait kullanıcı, burayı kullanır. Büyük sistemlerde, bu kısım alt parçalara ayrılabilir (/home/ftpadm , /home/ogrenci gibi)
/lib :
Kütüphane dosyaları.
/mnt :
Geçici mount edilen dosya sistemleri. Sadece bu iş için kullanıldığından sistem görevlisine zaman kazandırır.
/proc :
Süreç kontrollerini ve diğer sistem bilgilerini tutan dosya sistemi. Bu dosya sistemi aslında disk üzerinde yer kaplamaz, tüm dosyalar çekirdeğin bir uzantısı sayılabilir.
·         cpuinfo : işlemci modeli, tipi ve performansını bildirir.
·         devices : Halihazırda çalışan çekirdek içinde desteği bulunan aygıt sürücülerini listeler.
·         dma : Hangi dma kanallarının kullanıldığını belirtir.
·         filesystems : Halihazırda çalışan çekirdek içinde desteği bulunan dosya sistemlerini listeler.
·         interrupts : Hangi kesintilerin kullanımda olduğunu söyler.
·         iports : Halen hangi giriş/çıkış iskelelerinin kullanıldığını belirtir.
·         kcore : Sistem hafızasının görüntüsü
/root :
Sistem görevlisinin ev dizini. Mümkünse bu dizini sistemdeki diğer kullanıcıların görmeyeceği şekilde ayarlayın.
/sbin :
Hayati sistem komutları. Bir zamanlar bu dosyalar /etc dizini altında yeralıyorlardı. Sadece sistem görevlisinin ihtiyacı olan komutlar, /sbin veya /usr/sbin içinde bulunur.
/tmp :
Geçici dosyaların koyulduğu dizin. Belirli zaman aralıklarında temizlenmelidir.
/usr :
Diğer önemli sistem dosyalarını tutar. Bu bölüm genelde en kalabalık dizindir, zira yeni kurulan tüm programlar buraya konulur.
·         X11R6: X Window sistemi bilgileri tutulur.
·         doc: Belge ve dökümanlar, genellikle HOWTO ve FAQ dosyaları.
·         lib: Bazı kütüphaneler
·         man: Man dosyaları
·         src: Bazı kaynak dosyaları ve linux çekirdeğini oluşturan kodları (/usr/src/linux) içeren dizin.
·         sbin : Kök dosya sisteminde yeralması gerekmeyen çalıştırılabilir sistem görevlisi dosyaları
·         /var : Sürekli değişen sistem bilgileri burada tutulur. İstisnalar dışında diğer makinalarla paylaştırılmaz.
·         adm: Sistem yönetimini ilgilendiren kayıtlar
·         preserve : Sistemin göçmesinden sonra zarar görmesi mümkün dosyaların kaydedildiği yer.
·         spool : Sonra işlenecek olan veriler buraya atılır (e-posta gibi)
Eğer sistem yöneticisi iseniz düzenli olarak dosya ve dizin yapısını kontrol etmelisiniz. Örneğinn /tmp dizini normal kullanıcıların kullanımına açık olduğu için çok kısa bir sürede dolabilir. Burayı periyodik olarak silmek için find komutu işe yarayabilir :
# find /tmp -atime +7 -exec rm -rf  {} \;
Yukarıdaki komut, tmp dizini altında yeralan tüm dosyaları kontrol edecek ve 7 günden daha eski dosyaları silecektir. Benzer şekilde, kullanıcıların dosyalarının yer aldığı /home dizini de çok kısa bir sürede dolmaya mahkumdur. Sistemde ne kadar büyük sabit disk olursa olsun bir gün gelecek burası dolacaktır. Periyodik olarak buraya da göz gezdirmek gerekir. Aşağıda yeralan kısa program, /home dizininde yeralan kullanıcı dizinlerideki disk kullanımını büyükten küçüğe doğru disk isimli dosyaya yollayacaktır. Bu dosyanın incelenmesiyle hangi kullanıcıları "cezalandıracağınızı" görebilirsiniz :)
# du -skx /home/* | sort -rn > disk
du (disk usage), sistem kullanıcılarının sıkça başvurduğu bir komuttur. Kullanılabilecek parametreler için du(1) man sayfasına bakın.
UNIX, (ve dolayısıyla Linux) iki tip aygıt tanır. Bunlardan ilki karakter aygıtları, başka bir deyişle veri alışverişini bayt bazında yapan cihazlar, diğeri de blok aygıtları, yani veri alışverişini blok cinsinden yapan cihazlardır. Karakter aygıtlarına örnek olarak seri bağlanan cihazlar ve teypler, disk aygıtlarına örnek olarak da diskler verilebilir. Bu cihazlardan bir bilgi yazılıp okunduğunda dosya sistemi altında bunları tanımlayan dosyalar (/dev/*) kullanılmış olur. Örnek olarak bir yazıcıya bilgi göndermek için,
$ cat dosya > /dev/lp1
komutunu kullanabilirsiniz. Dosya, yazıcının anlayabileceği bir yapıda olmalıdır (örneğin düz metin).
Her aygıt, bir dosya olarak dosya sisteminde kendine yer bulduğuna göre hangi aygıt dosyalarının bulunduğunu görmek mümkün olabilir.
$ ls -l /dev/cua0
crw-rw-rw- 1 root uucp 5, 64 Nov 30 1993 /dev/cua0
İlk kolondaki ilk karakter (c), bu dosyanın bir karakter aygıtına ait olduğunu belirtiyor. Normal dosyalar için buradaki karakter '-' olmalıydı. Benzer şekilde blok aygıtlar için ise 'b' kullanılr.
Aygıt sürücü desteği çekirdekte olmasa bile /dev dizini altında genellikle tüm aygıt dosyaları bulunur. Bu demektir ki /dev/sda dosyasına sahip olduğunuz halde bir SCSI sabit diski sistemde takılı olmayabilir. Tüm aygıt sürücülerinin bulunması, programların kurulumunu ve yeni donanımın eklenmesini kolaylaştırır.

5.12 Konsolda Türkçe Yazmak

Linux sanal terminallerinde bir tuşa basıldığı zaman bilgisayarın ekranda herhangi bir dildeki alfabeye ait harfi göstermesi kolayca sağlanabilir. Bunun yanında 12 fonksiyon tuşunun herbirine belirli bir dizisel değer atanabilir ve bu sayede bu tuşlara basıldığında bir komutun veya programın çalışması mümkün olur.
Aslında bunları yapabilmek için önümüzdeki iki temel sorunu aşmamız gerekiyor. Birincisi standart olmayan karakterlerin (örneğin Türkçe) ekranda görüntülenebilmesi, ikincisi de bilgisayara standart dışı bir klavye olduğunun belirtilmesidir.
Dünya üzerindeki belli başlı dillerin hepsi yıllar önce bir standart geliştirilmesi amacıyla sınıflandırıldı. Avrupa'da Slav dilleri hariç hemen tüm dillerin karakterleri ISO (Uluslararası Standartlar Organizasyonu) tarafından tek bir sınıfa yerleştirildi ve buna ISO8859-1 (latin 1) dendi. O vakit izlenen yanlış politikalar nedeniyle Türkçe bu sınıfa dahil edilmedi ve sadece Türkçe için ISO8859-9 (latin 5) isminde ayrı bir sınıf açıldı.
Türkçe yazabilme sorununu hemen her işletim sisteminde hissediyor olmalısınız. Linux altında Türkçe desteğini sağlamak için birkaç işlem yapılmalıdır. Bu işlemlerin başında Linux'a Türkçe destekli klavye ve font tanıtmak geliyor.
/usr/lib/kbd/keytables dizini altında yeralan dosyalar, çeşitli ülke dillerine ait klavye dağılımını içeriyor. Buradaki bilgileri kullanarak klavye üzerinde yeralan tuşlara basılması halinde yazılı tuş dışında bir karakterin ekranda gösterimi sağlanabilir.
Sistem açıldığı zaman -eğer kurulum aşamasında bir font beğenip sürekli onu kullanmıyorsanız- defkeymap.map dosyasında yeralan klavye dağılımını kullanacaktır. Farklı bir klavye düzeni kullanmak için .map dosyalarını yüzeysel olarak anlamanız gerekiyor. /usr/lib/kbd/keytables dizini altındaki herhangi bir dosyada 300'den fazla satır ve üç ana tanımlamayla karşılaşacaksınız. Birinci grup, "keycode", "alt", "control" gibi bir satırla, ikinci grup "string" ile, üçüncü grup ise "compose" kelimesiyle başlar.
Dosyanın yapısını daha iyi kavrayabilmek için üzerinde bir örnekle açıklamaya çalışalım. Control-Alt-Del tuşlarına basılınca bilgisayar kendini "reset"ler. Eğer yanlışlıkla bu üç tuşa basmışsanız, klavyeden girilecek bir shutdown -c komutunu yazmak ve sistemi kapanmaktan kurtarmak için sadece 3-4 saniyeniz vardır. Fakat shutdown -c komutunu bir fonksiyon tuşuna bağlar ve bu tuşa basarsanız sistem eski haline dönecektir. Örnek olarak Control-F1 tuşunu bu işe ayıralım.
Öncelikle /usr/lib/kbd/keytables dosyasında yeralan defkeymap.map dosyasındaki F1 fonksiyon tuşunun hangi tuş tanımına denk geldiğini bulmalıyız. Dosyadaki F1 ile ilgili satırlar şunlardır :
keycode  59 = F1               F13              Console_13
        control keycode  59 = F25
        shift   control keycode  59 = F37
        alt     keycode  59 = Console_1
        control alt     keycode  59 = Console_1
Linux, her satıra bir numara atar. Yukarıdaki satırda, F1 tuşunun numarasının 59 olduğu kolayca görülüyor. 59 numaralı tuşa basılınca, F1 ile tanımlanan dizi ekrana yazılacaktır. Benzer şekilde F1'e control ile birlikte basılması halinde ise F25 dizisini ekrana basar. Önceden tanımlanan değerlerden Console_1, 1 numaralı sanal konsolun ekranda gösterilmesini işaret eder. Tüm bu dizilerin içeriğini görebiliriz. Aynı dosyanın sonlarında şu satır yeralıyor :
string F1 = "\033[[A"
Bunun anlamı, F1'e basınca ESC[[A dizisini ekrana gönder demektir. sayısı, Escape tuşunun oktal (sekizli) sistemde gösterimidir.
Bu satırı veya F1'den itibaren seçeceğimiz bir fonksiyon tuşu ismini istediğimiz şekilde değiştirebiliriz. Yanlız dikkat etmemiz gereken bir husus, bu tuşun başka uygulamalar tarafından kullanılabiliyor olmasıdır. Örnek olarak F61 ve karşılık gelen dizi değeri dosyada yeralmıyor. Dosyaya küçük bir ekleme yapalım:
string F61 = "shutdown -c\n"
Dosyayı farklı bir isimde (örneğin bas.map) kaydedip çıkın. Yeni klavye dağılımını denemek için
# loadkeys bas.map
komutunu kullanın. Artık yeni klavye standardı sisteme yerleşmiştir. Sistemin çalıştığına emin olmak için Shift-Control-F1 tuşuna basın. shutdown -c komutu işletilmelidir.
Artık Türkçe yazabilmeye geldik. Bunun için standart dışı klavyeden gelen bir Türkçe karakteri ekranda gösterebilmek amacıyla bir font dosyası oluşturmamız gerekecek. Linux altında bu dosyalar /usr/lib/kbd/consolefonts dizini altında yeralıyor.
Linux'ta standart dışı bir font yüklemek için setfont komutu kullanılır. Türkçe fontları, Linux Kullanıcıları Grubu ftp arşivinden temin edebilir veya iso09 ön adlı herhangi bir fontu kullanabilirsiniz. Aşağıdaki komut, 8 piksel eni, 16 piksel boyu olan Türkçe font yükleyecektir.
setfont tr8x16.map
Türkce klavye düzenlerini içeren dosyaları ftp ile yine aynı adresten alabilirsiniz. Burada tr.map ve trq.map adlı iki dosya bulacaksınız. Bunlardan tr.map, normal klavye düzeninin yanında `alt' tuşları ile "c, g, i, s, o, u" tuşlarına basıldığında karşılık gelen özel Türkçe karakterler görüntülenir. trq.map yaygın olarak kullanılmakta olan Q-Türkçe klavye düzenini içerir.
Bash kabuğu altında Türkçe yazabilmek için aşağıdaki üç komutu .inputrc dosyanıza eklemeniz gerekir.
set meta-flag on 
set output-meta on 
set convert-meta off
less komutununu Türkçe karakterleri göstermesi için de aşağıdaki gibi LESSCHARSET değişkenini latin5 yapmak gerekiyor.
LESSCHARSET=latin5
loadkeys ve setfont komutlarını sistem açılırken aktif olmaları için bunları /etc/rc.d/rc.local dosyasına yerleştirebilirsiniz. Fontu ve klavye düzenini ayarladıktan sonra sistemde çıkın ve tekrar girin.
Artık Türkçe yazabilirsiniz.

5.13 Belirli Zamanlarda Komut İşletilmesi

crontab dosyası yardımıyla sistem üzerinde olmadığınız zamanlarda Linux'tan bazı belirli işleri yapmasını istemek mümkündür. Örneğin gereksiz trafik sıkışıklığı yaratamak için akşam geç saatlerde sistemi yedeklemek için evden İnternet'e bağlanmak yerine crontab ile bu işlemi otomatikleştirmek mümkün olur.
Bir crontab dosyasında toplam 6 alan bulunur. Bunlardan ilk beşi komutun ne zaman işleneceğini gösterirken son kısımda bu saatler içinde çalıştırılacak olan komutu gösterir. Zamanı belirten sütunlardan ilki dakikayı (0 ile 59 arası), ikincisi saati (0 ile 23 arası), üçüncüsü günü (1-31 arası), dördüncüsü ayı (1-12 arası), son kısım ise haftanın gününü (0 pazarı göstermek üzere 0-6 arası) verir. Yine crontab'ın güzel özelliklerinden birisi de bu alanların her birisinde zaman aralıklarını yazmaya izin vermesidir. Mesela haftanın üçüncü ve beşinci günleri arası, saat 4 ve 9 arası gibi. Eğer bir zaman alanına * girilirse, bunun anlamı "her zaman" olur. Örneğin saat yerine * konulması "her saat", ay yerine * konulması "her ay" anlamına gelecektir.
Önce aşağıda yeralan küçük bir crontab dosyası incelenecek, ardından crontab işlemine nasıl başlanılacağı kısaca anlatılacaktır.
40 06 * * * updatedb
Yukarıdaki örnekte birinci ve ikinci sayılar 06:40 saatini gösteriyor. Diğer zaman kısımları * ile doldurulmuş olduklarından her gün 06:40'ta updatedb isimli program çalışacaktır.
Komut yerine kullanılacak olan program ismi parametre alabilir. Bu örnekteki crontab dosyası pazartesi günleri saat 1'de, /tmp dizinindeki üç günden daha eski dosyaları siler.
0 1 * * mon find /tmp -atime 3 -exec rm -f {} \;
Bu örnekte kullanılan virgül, her ayın 9, 19 ve 29'unu gösterir. Aynı alanda birden fazla sayı kullanacaksanız arada boşluk bırakmamaya dikkat edin.
0 1 9,19,29 * * find /tmp -atime 3 -exec rm -rf {} \;
Ay isimlerinde ocak, şubat, mart, nisan, mayıs, haziran, temmuz, ağustos, eylül, ekim, kasım, aralık için sırasıyla january, february, march, april, may, june, july, august, september, october, november, december kullanabilirsiniz. Benzer şekilde pazar, pazartesi, salı, çarşamba, perşembe, cuma, cumartesi ve pazar yerine sunday, monday, tuesday, wednesday, thursday, friday ve saturday kullanın. Aşağıdaki crontab girdisi yardımıyla iki ayda bir çalıştırılan komutla önce teyp başa alınıyor, ardından /home dizini bu teybe yedekleniyor :
0 2 1 */2 * mt -f /dev/rft0 rewind; tar -cf /dev/rft0 /home
*/2 ile belirtilen zaman dilimini ikiye bölebilirsiniz. 2 yerine uygun herhangi bir tamsayı yazılabilir.
Bu girdileri bir crontab dosyasına nasıl yazacağız? Bunun için root kullanıcısı olarak girin ve aşağıdaki satırları yazın :
# crontab -e
Ekrana bilgisayar ilk kurulduğu anda ön tanımlı olarak girilen crontab satırları gelecektir. Buraya yukarıda belirtilen yapıda istediğiniz kadar crontab girdisi yapabilirsiniz. Eğer daha önceden VISUAL çevresel değişkenini uygun bir editöre ayarlamamışsanız, vi altında çalışmanız gerekecektir. Başka bir editörle çalışabilmek için bu değişkeni, editörün patikasını gösterecek şekilde değiştirin. İleride de kısaca bahsedilecek olan tin (haber grubu okuyucu yazılımı) de VISUAL değişkenine göre metin editörünün patikasını ayarlayacaktır.
# export VISUAL=/usr/bin/pico
Crontab dosyasının normal olarak işletilmesinden crond sorumludur. Sistem açılırken /etc/rc.d dizini içindeki dosyalardan bir tanesi crond programını çalıştırır ve bu andan itibaren crontab -e komutuyla yarattığınız dosyadaki emirler zamanı geldikçe yerine getirilir.

Hiç yorum yok:

Yorum Gönder