• Linux Sistem Yönetimi | LKD #1

    Linux Sistem Yönetimi | LKD #1

    21-30 Ağustos 2026 tarihleri arasında Linux Kullanıcıları Derneği tarafından düzenlenen Mustafa Akgül Özgür Yazılım Yaz Kampı’nda Linux Sistem Yönetimi kursunda Doruk Fişek ve Onur Akdeniz hocalarımdan aldığım ders notlarımdır.


    Linux, aslında tek başına bir işletim sistemi değil, bir çekirdektir. Çekirdek baz alınarak oluşturulmuş birçok dağıtım bulunur. Rocky Linux, Arch Linux ve Linux Mint bunlardan bazılarıdır.

    Bu dağıtımların temel ortak noktası Linux çekirdeğini kullanmaları bunun haricinde paket yöneticileri, yazılım depoları, varsayılan ayarları hitap ettikleri gruplara veya kullanım amaçlarına göre birbirlerinden ayrışır. Örneğin Ubuntu ve Debian apt, Fedora ve Rocky Linux dnf, Arch Linux ise pacman paket yöneticisini kullanırlar.

    Özetle, Linux çekirdeğinin yanında farklı sistem araçları, kütüphaneler, paketler … gibi spesifik yapıları tercih edilmesiyle dağıtımlar ortaya çıkarlar. Bu kadar fazla dağıtımın ortaya çıkabilmesi de özgür yazılım anlayışının getirdiği bir özgürlüktür

    Özgür yazılım anlayışı sayesinde kişiler, topluluklar veya kurum-kuruluşlar mevcut bir Linux dağıtımını değiştirip geliştirerek kendi dağıtımlarını oluşturabilirler. Ancak baz aldıkları yazılımların mevcut lisans koşullarına uymaları gerekir. Kendi geliştirdikleri bölümlerin lisanslarını ise kendileri belirleyebilirler.

    Bahsettiğimiz üzere tüm dağıtımlar ortak bir çekirdeği kullanırlar. Çekirdek, en basit tabirle donanıma en yakın bileşendir. İşletim sisteminde donanım erişimini yöneten parçadır. Görevleri arasında işlemci zamanını süreçler arasında paylaştırmak, bellek kullanımını yönetmek, uygulamaların bellek alanlarını yönetmek gibi işler bulunur.

    Bir yazılımın özgür sayılabilmesi için şu dört temel özgürlüğü sağlaması gerekir:

    • İstenilen amaç dahilinde (herhangi bir amaç olabilir) kullanılabilmeli,
    • Kaynak kodları incelenebilmeli,
    • Çoğaltılabilmeli ve dağıtılabilmeli,
    • Değiştirilebilmeli ve değiştirilen sürüm de dağıtılabilmeli.

    Özgür yazılımlar ücretsiz olmak zorunda değildir. Dört temel özgürlüğü koruduğumuz sürece geliştirdiğimiz özgür yazılımı para karşılığında satabiliriz. Yani free-software’deki “free” kelimesi ücretsiz olmayı değil, kullanıcıya sağlanan özgürlükleri ifade eder.

    Kamp süresince konuları işlerken sunucu dağıtımları kullanacağımız anlatıldı. Bir sunucunun 7/24 kesintisiz şekilde çalışması gerektiğinden özellikle bu dağıtımları tercih ettik. Çünkü saydığımız dağıtımların geliştiricileri, depolardaki paketlere belirli bir süre boyunca güvenlik yamaları sunmaya devam eder. Böylece olası güvenlik açıklarında sistemlerimiz daha dayanıklı olurlar. Bu süre Rocky Linux’ta yaklaşık 10 yıl, Debian’da ise yaklaşık 5 yıldır.

    Başlıca Komutlar

    Terminalde kullanabileceğimiz başlıca komutlar şöyledir: ls, pwd, cd, mkdir, rmdir, touch, cp, mv, cat, less …

    ls

    • ls komutu, dosyaları listelememizi sağlar. Bulunduğumuz dizinde ls yazdığımızda,

    gibi bir çıktı alırız.

    Buradaki sütunların hangi anlamlara geldiğini ilerleyen günlerde inceleyeceğiz.

    ls komutu gibi diğer komutları da kullanırken yardım alabileceğimiz birkaç yardımcı (komut ~ parametre) bulunur. Bu yardımcılar,

    • man
    • info
    • –help

    Not: man komutu yalnızca komutlar için değil nadiren de olsa konfigürasyon sayfaları için de yazılabilirler.

    Not 2: Komutlarla birlikte kullandığımız parametrelerde tek tire – tek harfli kısa seçenekleri ifade eder ve bunları birleştirebiliriz. Yani ls -a -l -h yazmak yerine ls -alh şeklinde kısaltarak yazabiliriz. Çift tire — ise kelime halindeki uzun seçenekleri belirtmek için kullanılır, ls –context veya ls –all gibi. Çift tireli parametreleri tek tireliler gibi birbirine bağlayamaz, her birini ayrı ayrı yazmamız gerekir.

    ls komutunun çıktısında son sütunda gördüğümüz ‘isim’ şeklindeki ifade, (üstteki resimde bunun örneğini görmüyoruz) içerisinde boşluk bulunan isimlendirmeler için kullandığımız yapıdır. Bunun haricinde \ da kullanarak boşluklu isimlendirmeyi sağlayabiliriz (bunu mehmet\ can\ duman\ ile sağlarız) .

    Standart Girdi-Çıktı Kanalları

    Linux’ta üç temel giriş-çıkış kanalı bulunur. Bunlar,

    • 0: Standart input (stdin)
    • 1: Standart çıktı (stdout)
    • 2: Standart hata (stderr)

    Komutların çıktıları aksi belirtilmedikçe varsayılan olarak 1 olurlar, başarılı çıktı terminale düşer. Yani 2 numaralı çıktıyı başka bir dosyaya yönlendirdiğimizde bizim terminalimizde 1 çıktısını görürüz.

    Örneğin,

    bash
    mehmet@debian ~$ ls -al /home/mehmet deneme 2> ilkdosya

    komutun çıktısında (ilgili dizinde deneme dosyasının bulunmadığını ve yalnızca /home/mehmet çıktısının başarılı bir şekilde üretildiğini varsayıyoruz) ilgili hata mesajı ilkdosya’ya yazılır, başarılı mesaj doğrudan terminale düşer.

    bash
    mehmet@debian ~$ ls -la /home/mehmet dosya5 > dosya 2>&1

    Bu komutun çıktısındaysa 2 ve 1 numaraları çıktılar doğrudan dosya’ya birlikte yazılırlar.

    tail ve head

    tail: Varsayılan olarak son 10 satırı verir, -n parametresiyle birlikte kullanıldığında kaç satırı vermesi gerektiğini ayarlayabiliriz.

    head: Varsayılan olarak ilk 10 satırı verir, tail ile aynı şekilde -n parametresiyle kaç satırı verebileceğini ayarlayabiliriz.

    Bu komutları tek başlarına kullanabileceğimiz gibi tek bir satırda birlikte de kullanabiliriz. Örneğin,

    bash
    mehmet@debian ~$ ls --help | head -n 10 | tail -n 5

    komutuyla ls --help çıktısının 6 ve 10. satırlar arasını aldık. İlk önce –help parametresiyle tüm çıktıyı aldık, head ile ilk 10 satırı aldık, tail ile aldığımız ilk 10 satırın son 5 satırını aldık.

    cd

    Bulunduğumuz dizini değiştirmek için kullanırız. (change directory) – parametresiyle birlikte kullanıldığında bir önceki dizine döner. .. parametresiyle birlikte kullanıldığında bir üst dizine gider. (örneğin /home/mehmet’te iken /home geçiş)

    Not: cd – bir önceki dizini bulabilmek için OLDPWD adı verilen bir değişkenini kullanır. Yazının ilerleyen kısımlarında da değineceğimiz bu değişken PWD ile beraber bulunduğumuz dizinleri tutarlar. PWD (print working directory), şu anda bulunduğumuz dizinin yolunu, OLDPWD , bir önceki geçtiğimiz dizinin yolunu tutar.

    Kendimiz bir değişken tanımlaması yapmak ya da var olan bir değişkeni güncellemek istersek export komutunu kullanarak,

    bash
    mehmet@debian ~$ export OLDPWD=/var

    şeklinde yapabiliriz (Burada var olan bir değişkende güncelleme yapıyoruz, ad=isim formatında, ayrıca export komutunu illaki kullanmak zorunda değiliz, biz bu değişkeni alt uygulamaların da kullanmasını istediğimiz için tercih ettik) .

    Yaptığımız tanımlamayı görmek istediğimizde printenv yazmamız yeterli (Bir diğer özet kullanım printenv Degisken_Adi şeklinde) .

    Not: Yaptığımız bu tanımlama yalnızca bizim için oturum süresince geçerli olacak bir tanımlamadır. Eğer kalıcı olarak sunucudaki diğer kullanıcıları da etkileyebilecek bir tanımlama yapmak istiyorsak farklı dosyalarda yazım yapmamız gereklidir.

    Not 2: Tek bir komut için de bir değişken tanımlayabiliriz, tanımladığımız değişken sadece o komutun çalışması sırasında kullanılır ve diğer komutlara uygulanmaz. Bunun için LANG="tr_TR.UTF8" nano dosya yazdığımızda — eğer nano türkçe dil paketini destekliyorsa — türkçe dilinde çalışacaktır bir seferliğine.

    Tam bu nokta da bize verilen 1.gün ödevini de yapmak istiyorum. Ödev şöyleydi:

    Bir ortam değişkenin değerini nasıl kalıcı olarak değiştirebileceğinizi, bunu hem kendiniz hem de sunucunuzda bulunan bütün kullanıcılar için nasıl uygulayacağınızı gösterin.

    Bulunduğumuz kullanıcının değişkenlerini düzenlemek için ~/.profile dosyasına girip en alt satıra,

    export KAMP_DERSI=linux yazdığımızda ardından,

    bash
    mehmet@debian ~$ source ~/.profile

    ile değişkeni anlık oturumumuzda da geçerli hale getirebiliriz (Bu yöntemin haricinde, ~/.profile dosyasına ekleme yaptıktan sonra oturumu kapatıp yeniden giriş yapmak da değişkenin kalıcı olarak kaydedilmesini sağlayacaktır)

    Not: Ben değişikliği .profile dosyasında yapmayı tercih ettim, bir başkası .bashrc dosyasında da aynı değişikliği yaparsa aynı sonucu alacaktır.

    Eğer oluşturacağımız değişkenin sistemdeki tüm kullanıcılar için geçerli olmasını istiyorsak değişkeni /etc/environment dosyasına yazarız. Yalnız burada export ifadesini kullanmayız, doğrudan KURS_DERSI=linux yazıp dosyayı kapatırız (çünkü bu bash’in doğrudan çalıştırdığı bir dosya değildir) .

    Aynı .profile dosyasında olduğu gibi oturumu yeniden başlatabiliriz veya login’i tetikleyecek herhangi bir işlem yapabiliriz (örneğin, yeniden ssh ile bağlanmak gibi)

    Not: /etc/environment dosyasında yaptığımız değişikliğin aktif olabilmesi için yeni bir oturum açmamız gerekir. Mesela SSH ile giriş yaptığımızda bize yeni bir /bin/bash kabuğu verildiği için değişikliğimiz burada aktif oldu. Ancak SCP ile dosya aktarımı yaptığımızda yalnızca şifremizi girdik ve herhangi bir kabuğa sahip olmadık. Bu yüzden yaptığımız değişiklik, hâlihazırda açık olan oturumumuza etki etmedi.

    Yazdırdığımız değişkenleri echo $degisken_adi komutu ile terminalde doğrudan yazdırabiliriz.

    Not: /etc/environment dosyasında yaptığımız değişiklikler hem mevcut kullanıcılar (oturumlarını yeniden başlattıklarında) hem de yeni eklenecek kullanıcıların tamamında geçerli olacaktır.

    Not2: Aynı anda hem ~/.bashrc hem de /etc/environment dosyalarında değişiklik yaparsak, .bashrc dosyasında yapılan değişiklik geçerli olur. Çünkü kullanıcıların kendilerine ait dosyalarında yaptığı değişiklikler global değişiklikleri override ederler.

    file

    File dosya_adi kullanımlarımızla dosyanın bir ön bilgisini ortaya çıkartabiliriz. file bu işlemi yaparken dosyanın başında yer alan ve dosyanın imzasını taşıyan veriden yararlanır. Buradaki baytlara bakarak dosyanın türüne karar verir.

    Not: Bir dosyanın uzantısını değiştirmek onun tipini doğrudan değiştirmez, hala dosyanın eski tipi görünür. Eğer kullandığımız uygulama doğrudan dosya uzantısına bakarak işlem yapmıyorsa dosya uzantısı yalnızca bir illüzyondan ibarettir.

    Görüldüğü üzere bir .txt dosyası olmasına rağmen file komutuyla dosyanın aslında bir .jpeg dosyası olduğunu görebiliyoruz.

    Devamını okumak için…