14 - Sistem yönetimi

Giriş

Sistem yönetimi çok derin bir konu. Bu bölümde her sistem yöneticisinin (hatta her kullanıcının) bilmesi gereken; zaman yönetimi, dil yönetimi, klavye ayarları gibi temel sistem yönetim görevlerinden bahsedeceğiz.

Ortam Değişkeni

Linux işletim sisteminde ortam değişkenleri oldukça sık kullanılmakta. Tanım olarak ortam değişkeni, işlemlerin okuyabildiği bir anahtar değeridir diyebiliriz. Örneğin, EDITOR değişkenine /bin/nano değeri atanmış ise, uygulamalara tercih edilen metin düzenleyicisinin nano olduğunu belirtir. Ortam değişkenleri, isimlerinin hakkını verecek şekilde, bulundukları ortama göre değişebilir. Bu yüzden eğer bir değişkenin değeri ile oynarsanız, bu değişiklik sadece bulunduğunuz oturumda (çalıştığınız terminalden başlattığınız uygulamalar tarafından) farkedilecektir.

Bazı Örnek Ortam Değişkenleri

Sık karşılaşacağınız birkaç ortam değişkeni bulunmaktadır.

DISPLAY

DISPLAY , Linux sistemine grafiksel olarak giriş yaptığınızda kullanılır. X ortamında çalışan uygulamaların, görüntüyü hangi ekrana “göndermesi” gerektiğini tanımlar. Uzaktan oturum açtığınızda, bu değişken sizin kullandığınız yerel IP adresi ve ekran numarası olarak tanımlanır. Çoğu kez, yerel olarak oturum açtığınızda, içeriği “:0.0” (sistemdeki ilk ekran) olarak ayarlıdır. Burada bahsedilen ekran donanım olan değil, çalışan X sürecine verilen tanımdır.

EDITOR

EDITOR değişkeni kullanmak istediğiniz öntanımlı metin düzenleyicisini tanımlar. Metin dosyalarını açmak isteyen uygulamalar (örneğin visudo), hangi düzenleyiciyi çalıştıracağını belirlemek için bu değişkeni kullanır.

LANG ve yerel ile ilgili değişkenler

Bir kullanıcının dil, zaman dilimi, para birimi gibi değerlerini tanımlayan (LANG ve LC_*) değişkenlerdir. Yerel ayarlarından bu bölümün ilerleyen kısımlarında bahsedeceğiz.

PATH

PATH değişkeni, sistemin (binary dosyalar ve kabuk betikleri gibi) çalıştırılabilir dosyaları bulmak için nerelere bakması gerektiğini tanımlar. Eğer yanlış ayarlanmış veya ayarlanmamışsa, komutlarınızı sistemdeki tam yolunu belirtmeden çalıştıramazsınız (kabuğa ait, echo gibi gömülü komutlar hariç, onlar çalıştırılabilir dosya değildir). Aşağıda örnek bir PATH değişkeni görülmekte:

    ~$ echo $PATH
    /usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/4.1.2:
    /opt/blackdown-jdk-1.4.2.03/bin:/opt/blackdown-jdk-1.4.2.03/jre/bin:
    /usr/kde/3.5/bin:/usr/qt/3/bin:/usr/games/bin:/home/swift/bin/

Eğer PATH ayarlı değil ise olacaklara bir örnek:

    ~$ ls
    (... bulunan dosya/dizinler listelenir ...)
    ~$ unset $PATH
    ~$ ls
    -bash: ls: No such file or directory
    ~$ /usr/bin/ls
    (... bulunan dosya/dizinler listelenir ...)

TERM

TERM değişkeni özel karakterler içeren komut satırı uygulamalarını hangi terminalde çalıştırmak istediğinizi belirtir. Bugünlerde en sık kullanılan TERM xterm olmasına rağmen, bazen kendinizi xterm bulunmayan ve uygulamaların garip göründüğü oturumlarda bulabilirsiniz. Böyle durumlarda çözümünüz TERM değişkenini vt100 gibi bir değere atamak olabilir.

Ortam Değişkeni Nasıl Ayarlanır?

Ortam değişkenleri kullanıcıya göre değişir. Ancak üç kategoriye ayırabiliriz; oturum (sadece geçerli, açık olan terminaldeki uygulamalar için kullanılabilen), kullanıcı (sadece tek kullanıcı için geçerli ve o kullanıcının her oturum açtığında kullanabildiği) ve sistem geneli (sistemde öntanımlı olarak ayarlanmış).

Oturuma Özel

Tek oturuma özel, yani sadece kullandığınız terminalde geçerli olacak ortam değişkeni atamak istediğinizde, set veya export komutlarını kullanabilirsiniz:

    ~$ ls -z
    ls: invalid option -- z
    Try `ls --help` for more information.
    ~$ export LANG="fr"
    ~$ ls -z
    ls: option invalide -- z
    Pour en savoir davantage, faites: `ls --help`

Hangisini kullanacağınız ihtiyacınıza bağlıdır: - Set ile ayarladığınız ortam değişkenleri geçerli terminalde kullanılabilir, ancak bu terminalden başlatacağınız alt oturumlarda kullanılamayacaktır. Başka bir deyişle, set yalnızca verildiği terminali etkiler. - Export ile ayarladığınız değişken ise alt terminalleri dr etkileyecektir. Yani export, oturum bazında da olsa set’den daha globaldir.

Kullanıcıya Özel

Kullanıcıya özel ortam değişkenlerini tutabileceğiniz en iyi yer .bashrc dosyasıdır. Bir kullanıcı oturum açtığı zaman bu kullanıcının .bashrc dosyası otomatik olarak okunur (eğer bash kabuğunu kullanıyorsa). Farklı kabukların ortak okuduğu bir dosya gerekiyorsa .profile dosyasını kullanabilirsiniz. Bu dosyalarda değişkenleri ayarlarken, oturuma özel yöntemdeki komutları kullanmalısınız:

    export LANG="fr"

Sistem Genelinde Öntanımlılar

Bir ortam değişkenini tüm sistemde ayarlamak için sistemde her oturum açıldığında okunan bir dosyada saklanması gerekmektedir. Örneğin /etc/profile dosyası bunlardan birisi. Gentoo bu işlem için şık bir alternatif sunar: /etc/env.d klasörü içindeki dosyalar ile ortam değişkenleri ayarlanıp, env-update komutu ile /etc/profile dosyasının burdaki değerleri okuduğundan emin olunur.

Not /etc/profile dosyası (en az) iki sebepten dolayı /etc/env.d yapısının yerini tutamaz:

  1. /etc/env.d dizini içinde tutulan dosyalar birbirine ekleme mantığı ile çalışırlar, yani birden fazla kez atanmış değişkenler birbirlerinin değerlerinin üzerine yazılmazlar; değerlere ekleme yaparlar. Bu özellik tek başına /etc/profile dosyasına eklenmesi hem zor hem de işlevsel olmayan bir özelliktir. Sonuçta bu dosya her oturum açıldığında okunduğu için oturum açma işlemi de yavaşlayabilir.
  2. Sistem yöneticisi ufak bir değişiklik yapmak istediğinde, örneğin bir değeri silip yerine başka bir değer atamak istediğinde, tek dosya kullanılıyorsa değişiklikler anında geçerli olacaktır. Bu da doğru olmayan ortam değişkenlerinin oturumlar arasında karışıklığa neden olmasına yol açabilir.

Ortam Girdilerini Yönetmek

Linux’ta birçok komutun davranışı ortam girdilerinin (veya ortam değişkenlerinin) değerlerine göre şekillenir.

Ortam Dosyaları

/etc/env.d altında basit anahtar=değer yapısını kullanan ortam değişkenleri bulacaksınız. Örneğin /etc/env.d/20java dosyası, birkaç değişik değer dışında PATH ve MANPATH değişkenlerini etkilemekte:

    # cat /etc/env.d/20java
    ...
    MANPATH=/opt/blackdown-jdk-1.4.2.03/man
    PATH=/opt/blackdown-jdk-1.4.2.03/bin:/opt/blackdown-jdk-1.4.2.03/jre/bin

Bu ayarlar sayesinde MANPATH (man komutunun yardım dosyaları için arayacağı bölgeler) değişkeninin ve PATH (sistemin bir komut verdiğinizde çalıştırılabilir dosyalar için bakacağı bölgeler) değişkenine verilen dizinler de eklenmekte. Dikkat ederseniz değişkenler verilen değere direkt olarak atanmamış, önceki değerlerine verilen dizinler de eklenmiştir. Değerlerin eklenme sırası /etc/env.d dizini altındaki dosyaların başına verilen rakamlar ile belirlenir. Bu şekilde hangi dosyanın ilk yükleneceğinden haberdar olurken, dosyanın işlevini de rakamlardan sonra gelen dosya adından çıkarabilirsiniz.

Ortam Değişkenlerine Müdahale

Eğer sistem bazında bir değişkene müdahale etmek istiyorsanız, isterseniz /etc/env.d dizinine bir dosya daha eklersiniz, isterseniz de varolan bir dosyayı değiştirebilirsiniz.

Not Uygulama güncellemeleri /etc/env.d dizini altındaki dosyaları otomatik olarak güncellemekte, yani bu dizin diğer birçok ayar dosyasının aksine, korunmamaktadır. Bu yüzden, var olanı değiştirmek yerine kendi dosyanızı eklemeniz önerilir.

Eğer bir dosyada değişiklik yaptıysanız veya yeni bir dosya eklediyseniz, env-update komutu ile Gentoo’nun değişiklikleri görmesini sağlayabilirsiniz:

    # env-update

Bu komut tüm ortam dosyalarını okuyacak ve sonucu /etc/profile.env dosyasına yazacaktır. Bu dosya /etc/profile tarafından okunduğu için, her açılan yeni oturumda değişiklikler etkin hale gelecektir.

Bölgelere Özel Ayarlar

Bölgelere özel ayarlar dediğimizde, muhtemelen komşunuz ile ortak kullandığınız ayarlardan bahsetmekteyiz; dil ayarları, klavye ayarları, zaman dilimi ve para birimi ayarları… Linux/Unix ortamında, bu ayarlar klavye ve yerel ayarları isimleri altında toplanmakta.

Locale (yerel) Ayarları

Locale (yerel), bir kullanıcı veya sistem için dil, tarih/zaman biçimi, numara biçimi, zaman dilimi, gün ışığından faydalanma ve para birimi bilgilerini taşıyan bilgilere verilen isimdir. Bu bilgiler LANG değişkeninde tutulur ve isteğiniz doğrultusunda değiştirilebilir. Örneğin herşey için Amerikan İngilizcesi ayarlarını kullanıp, para birimi olarak Euro ayarlayabilirsiniz. En önemli değişkenleri kısaca listeleyelim:

Değişken Açıklaması
LANG Tüm yerel ayarları düzenleyen bir değişkendir, ancak aşağıdaki değişkenler tarafından üzerine yazılabilir
LC_COLLATE ve LC_CTYPE Karakter düzeni (hangi karakterlerin kullanılan alfabede olduğu) ve (alfabetik) sırası
LC_MESSAGES Mesaj çıktısı veren uygulamaların çıktılarında hangi dili kullanacağı
LC_MONETARY Para birimi ile ilgili ayarlar
LC_NUMERIC Sayısal değerlerin biçimlendirilmesi
LC_TIME Zaman ile ilgili ayarlar

Kullanıldığında yukarda belirtilen tüm değişkenlerin görmezden gelinmesini sağlayan bir değişken daha var: LC_ALL Yerel ayarlarınızın genel bir bilgisini almak için (desteklenen tüm değişkenleri de gösteren) locale komutunu verebilirsiniz. Bir yerel değişkeninin biçimi şu şekildedir:

    dil[_bölge][.kodlama][@düzenleyici]

Kısaca açıklayalım:

Bölüm Açıklaması
dil Kullanılan dil. Örneğin; en (İngilizce), tr (Türkçe), fr (Fransızca), zh (Çince)
bölge Kullanılan bölge ayarı. Örneğin; US (ABD), TR (Türkiye), FR (Fransa), CN (Çin)
codeset Kullanılan karakter kodlaması. Örneğin utf-8 ve iso-8859-1
düzenleyici Düzenleyici diğer tüm ayarlar aynı olan ufak değişiklik durumlarında kullanılan özel bir değişkendir. Örneğin euro ve preeuro (sadece para birimi değişikliğini etkiler).

Yani, birkaç örnek vermemiz gerekirse:

    LANG="en"
    LANG="tr_TR"
    LANG="en_US.utf-8"
    LANG="fr_FR@euro"

Bu ayarlar uygulamalar tarafından ortam değişkenleri olarak kabul görür (ilerde bahsedeceğiz). Yerel ayarlarını sistem genelinde düzenleyebilirsiniz, ancak tavsiye edilen yöntem kullanıcı bazında ayarlamanız. Bu yüzden ~/.bashrc dosyanıza aşağıdakine benzer bir ekleme yapmanızı öneririm (/etc/skel/.bashrc dosyasına eklerseniz yeni oluşturulacak kullanıcılar da bu ayarı otomatik olarak alacaktır):

    $ nano -w ~/.bashrc
    ...
    # Buraya istediğinizi ekleyin
    LANG="tr_TR.utf-8"

Klavye Düzeni Ayarları

Öntanımlı qwerty dizilimini kullanmıyorsanız, sisteminizin klavye yapılandırmasını değiştirmelisiniz. Gentoo bu işlemi sizin için kolaylaştırmakta: /etc/conf.d/keymaps dosyasını düzenleyip, keymap değişkenine ihtiyacınız olan klavye düzenini atamanız yeterli:

    # nano -w /etc/conf.d/keymaps
    ...
    keymap="tr"

Desteklenen klavye düzenleri /usr/share/keymaps dizininin altında bulunabilir. Eğer bir klavye düzenini test etmek isterseniz, loadkeys komutu ile yükleyebilirsiniz:

    # loadkeys <klavyeduzeni>

Tarih/Saat Ayarları

Sistem zamanını değiştirmek için date komutunu kullanabilirsiniz. Örneğin tarihi 30 Eylül 2008, saati de 17:34 yapmak için:

    # date 093017342008

İnternet erişiminiz varsa, ntp kurmak mantıklı bir davranış olacaktır (net-misc/ntp gibi). ntpdate veya benzer araçlar ile ntp sunucularına bağlanıp sistem zaamnını saniyesi saniyesine ayarlamak mümkün.

    # ntpdate pool.ntp.org

Eğer işletim sisteminizin gösterdiği saati donanımınızın tuttuğu saatinizin üzerine yazmak isterseniz, hwclock uygulamasını kullanabilirsiniz:

    # hwclock --systohc

Görev Zamanlayıcısı

Unix/Linux ile gelen görev zamanlayıcılar cron olarak adlandırılır. Kullanabileceğiniz birkaç cron uygulaması bulunmaktadır. Örneğin popüler vixie-cron veya fcron, bcron, anacron… Kurduktan sonra cron servisini başlatabilirsiniz (öntanımlı çalışma seviyesine de eklemeniz gerek):

    # rc-update add vixie-cron default
    # /etc/init.d/vixie-cron start

Cron servisi çalıştığı sürece her kullanıcı, bir veya daha fazla komutu sistemde periyodik olarak çalışması için ayarlayabilir. Kullanıcınızın zamanlı çalışacak görevlerini ayarlamak için crontab -e komutunu kullanın:

    $ crontab -e

Öntanımlı metin düzenleme uygulamanız ile cron dosyanız açılacaktır. Bir crontab girdisi 6 sütundan oluşur:

Sütun Açıklama
Dakika Saatin dakikası (0-59)
Saat Günün saati (0-23)
Gün Ayın günü (1-31)
Ay Yılın ayı (1-12 veya İngilizce ismi ile)
HaftaGünü Haftanın günü (0-7 veya ismi ile, 0/7 Pazar ile başlar)
Komut Çalıştırılacak komut

Numaraları belirtirken, aralık (başlama-bitiş), belirli zamanlar (1,3,5), adımlar (0-23/2) ve düzenli ifadeler kullanabilirsiniz. Örneğin ntpdate pool.ntp.org komutunu her 15 dakikada bir çalıştırmak için:

    */15 * * * * ntpdate ntp.pool.org

veya

    0,15,30,45 * * * * ntpdate ntp.pool.org

Eğer zamanlanmış komutlarınızı sadece görmek isterseniz crontab -l kullanabilrsiniz.