Linux Sistemi: Tarihçe, İlkeler, Bileşenler ve Mimarisi

Bu yazıda, Linux’un hikayesi ve temel komutlar ile ilgili notları bulabilirsiniz.

Linux’un Kısa Tarihçesi

Linux ailesi bir open-source olan Unix-like’ı baz alır ve ilk çekirdek 1991 yılında öğrenci Linus Torvalds tarafından yayınlandı.

Linuxtaki 5 temel ilke:

  1. Herşey dosya temellidir.
  2. Küçük ve tek amaçlı programlar vardır.
  3. Karmaşık işlemler için programlar birbirine bağlıdır.
  4. Sabit bir kullanıcı arayüzü yoktur, bu da özgürlük demektir.
  5. Configler birer text dosyası olarak tutulur.

Linux Bileşenleri:

  • Bootloader: Bir diğer adı boot manager’dır. Bootloader, disk üzerinde ki Linux çekirdeğini çalıştırır ve çekirdeği RAM’e aktarır.
  • OS Kernel: Linux’un temel taşıdır. Donanım ile kullanıcı arasındaki işlemlerden sorumludur.
  • Daemons: Arka plan işlemleri olarakta bilinir. Linux veya Unix işletim sistemlerinde arka planda çalışan servislerdir.
  • OS Shell: Komut arayüzü, komut dili veya Shell olarak bildiğimiz bu programcık, işletim sistemi ile kullanıcı arasındadır. Bu programcık sayesinde işletim sisteminde istediğimizi yapabiliriz. Linux dünyasında arayüzden yapılan her işlem aslında arka planda bir betik programlama dili dediğimiz Shell üzerinden gerçekleşir.
  • Graphic Server: Grafik sunucusu, X11 gibi protokoller üzerinden son kullanıcı (client) ile sunucu arasındaki iletişi sağlar. Grafik sunucusu, herhangi bir grafik kullanıcı arayüzünde, özellikle pencereleme dediğimiz (windowing) sistemin önemli bir bileşenidir.
  • Window Manager: Birçok yerde “Graphical User Interface”, kısaltılmış adıdır. Pencereleme sistemini kontrol eder.
  • Utilities: Son kullanıcı olarak kullandığımız “programlar”-a verilen genel isimdir. Örneğin: Internet Tarayıcı, Text editör veya Görev Yöneticisi

Linux Mimarisi:

Linux işletim sistmelerinin mimarisinde birçok bileşen vardır. Bunlar:

  1. Donanım: Bir çoğumuzun bildiği, İngilizcesi Hardware olan fiziksel elementlerdir. İşlemci (CPU), disk (HDD, SSD, M2 vb.) veya yazıcılar bunlara en basit örneklerdir.
  2. Linux Çekirdeği: Kullanıcı olarak, donanım parçalarının uyumlu bir şekilde çalışmasını ve bu donanımları kaynak olarak kullanmamızı sağlayan yazılımdır.
  3. Shell: Linux çekirdeği vasıtası ile donanım katmanında taleplerimizi işletmemizi sağlayan arabirimdir.
  4. System Utility: Linux sistemleri üzerine ihtiyaçlarımız doğrultusunda kurabildiğimiz ve bu kapsamda kullanabileceğimiz programlardır.

Bu mantığı bir OSI katmanı gibi yorumlayacak olursak 4 katmanda inceleyebiliriz.Buna göre:

Layer 4: Applications / Utilities
Layer 3: Shell
Layer 2: Kernel
Layer 1: Hardware

Dosya Sistemi

Linux dosya sistemini bir ağaç yapısına benzetebiliriz. Linux Geliştirme Derneği (Linux Foundation) buna Filesystem Hieararchy Standard, yani FHS olarak isim vermiştir. Bu standard klasörler, alt klasörler ve verilerin olduğu dosyalardır.

Bu kapsamda en üst dizin root dizinidir ve “/” simgesiyle belirtilir. Altında ki dosyaların ve alt dosyaların listesi aşağıdaki gibidir;

  • Root /
    • /bin
    • /proc
    • /boot
    • /root
    • /dev
    • /sbin
    • /etc
    • /srv
    • /home
    • /sys
    • /lib
    • /tmp
    • /media
    • /mnt
    • /opt
    • /var
      • /cache
      • /lib
      • /log
      • /mail
      • /spool
      • /tmp
    • /usr
      • /bin
      • /include
      • /lib
      • /local
      • /sbin
      • /src

Başlıca hangi klasörün hangi görevi aldığını inceleyelim;

  1. /: Ana dizindir. İçerisinde sadece alt klasörlerini barındırır. En üst düzey dizindir.
  2. /bin: Bin klasörü içerisinde çalıştırılabilir dosyalar bulundurulur. Örneğin bir düzenleme programı olan “vim” programı gibi.
  3. /dev: Cihaza ait sürücüleri (drivers) bulundurur.
  4. /etc: Sistem ayarlarının bulunduğu klasördür.
  5. /lib: İşletim sistemi tarafından temel kütüphaneleri bulundurur.
  6. /boot: Cihazın açılmasını sağlayan, boot dosyalarını bulundurur.
  7. /home: Kullanıcıların ana dizinidir.
  8. /mnt: CDRom gibi dışarıdan sisteme dahil edilen veri okuma donanımları burada bulunur.
  9. /tmp: Geçici olarak barındırılan dosyaları barındırır.
  10. /usr: Sistemdeki kullanıcılar tarafından kullanılan programlar, kütüphaneler gibi dosyaları barındırır.
  11. /sbin: İçerisinde sistem yöneticileri için çalıştırılabilir dosyaları barındırır.
  12. /Kernel: Linux çekirdeğinin bulunduğu dizindir.

Shell’e Giriş

Bu kısıma temel Shell komutlarına değineceğiz.

  • Whoami: Aktif olarak hangi kullanıcı da işlem yaptığınızı görebilirsiniz.
  • id: Linux’taki en kullanışlı komutlardan biridir. Aktif olarak işlem yapılan kullanıcıya dair UID, GID, Group ve Group yetkilerini gösterir.
  • Hostname: Sistemin hostname bilgisini yani sunucu adını verir.
  • Uname: Basit sistem bilgilerini verir. Detaylı bilgi istenirse -a parametresi ile kullanılır.
  • Pwd: Bulunan dizinin bilgisisni verir.
  • ifconfig: Bir diğer oldukça sık kullanılan komut. Sistemin network bilgilerini verir.
  • Top: Linux’taki görev yöneticisidir.

Dosya Komutları:

Şimdi ise temel dosya işlemlerini yapabileceğimiz komutları inceleyeceğiz.

  • Touch: Bu komut sayesinde istediğiniz uzantıda bir dosya oluşturabilirsiniz.
  • Mkdir: Dizin oluşturma komutudur.
  • Cp: Dosya veya dizin kopyalama komutudur. Temel olarak aşağıdaki gibi kullanılır;
Cp dosyaadi taşınacak_dizin/
  • Mv: Dosya veya dizin taşıma komutudur. Kullanım şekli kopyalama komutu ile aynıdır.
  • Rm: En temel silme komutudur. Dizin silmek istenirse -r parametresi ile gerçekleştirilir.
  • Cd: Dizinler arasında geçiş komutudur. Örneğin “tmp” klasörüne gitmek istersek cd /tmp/ komutu kullanılır. Bir üst dizine gitmek içinse “cd ..” ana dizine gitmek için ise “cd –“ komutu kullanılır.

Dosya ve dizin yetkilendirme ile ilgili yazıya aşağıdaki adresten ulaşabilirsiniz;

İçerik Filtreleme ve Görüntüleme

Cat

Temel kullanım:

Cat /var/log/apt/history.log

En temel ve standart içerik görüntüleme komutudur. Yalnız herhangi bir içerik filtreleme yapmadığı için pek kullanışlı bir komut değildir. Özellikle uzun ve fazla veri tutan log dosyaların okunmasında işlevsel değildir. Günlük dosya okuma işlemleri için cat veya nano gibi klasik bir editör kullanmak zorunda da değiliz. Bu iki program yerine more ve less olarak adlandırılan çok benzer programlarda mevcut. En büyük farkları ise dosya içerisinde daha fazla etkileşimde bulunarak, amacınıza daha çok yardımları bulunabilir.

More

Temel kullanım:

More /var/log/apt/history.log

Oldukça efektif olan bu program sayesinde log dosyalarını daha efektif olarak okuyabilirsiniz. Görünümü aşağı kaydırmak için “Enter” tuşunu, en aşağı inmek için “Space” tuşunu, kapatmak için ise “q” tuşunu kullanabilirsiniz.

Daha çok bilgiyi –-help parametresi ile alabilirsiniz.

Less

Temel kullanım:

less /var/log/apt/history.log

less programı, “more” programından daha gelişmiş özellikler sunmaktadır. Aynı more programında olduğu gibi “Enter”, “Space” ve “q” tuşlarını aynı amaçlarla kullanabilirsiniz. Yine daha fazla özellik için –-help parametresini kullanabilirsiniz.

Grep

Log dosyalarını less, more ve hatta cat ile güzelce okuyoruz. Peki bir log dosyasında aradığımız veriyi kolayca nasıl bulabiliriz? İşte burada spesifik olarak aradığımız şeyleri kolayca bulmak istiyorsak “grep” komutunu kullanıyoruz.

Örnek Kullanım:

Grep “net-tools” /var/log/dpkg.log

Yukarıdaki komut sayesinde, uygulama yükleme loglarının tutulduğu dpkg.log dosyasında, içerisinde “net-tools” geçen satırları kolayca alabiliriz.

Aşağıdaki komut ile “net-tools” isimli yüklü uygulamaları listeyebiliriz;

Apt list –installed | grep "net-tools"

Kullanıcı Yönetimi

Bu kısımda ise Linux işletim sisteminde yeni kullanıcı oluşturmayı veya kullanıcıyı başka bir gruba ekleme gibi komutları inceleyeceğiz.

Sudo

Bazı dosyaları görüntüleme veya üzerinde işlem yapabilmek için root izinlerine ihtiyacınız olabilir. Mesela her kullanıcıda bu izinler olsaydı, sistemi bilmeyen veya kötü niyetli bir kullanıcı boot dosyaları silebilir veya üzerinde değişiklikler gerçekleştirebilirdi. Bu yüzden özellikle sistem tarafından kritik işlemlerde, sistem sudo yetkisi istemektedir.

Örnek kullanım;

Sudo cat /etc/shadow

Su

Linux’ta, kullanıcı değiştirmek için işlemlerinizi kapatıp, sıfırdan başlamanız gerekmemektedir. Bu tip durumlarda “su” komutu ile root kullanıcısı dahil sistemde var olan kullanıcılar arasında geçiş yapılabilmektedir. Sudo komutu ile en büyük farkı, sudo komutunda sadece o komut için, root yetkileri kullanılırken, su komutu ile dilerseniz direk root kullanıcı ile oturum açmış gibi devam edebilirsiniz.

Kullanıcı Oluşturma

Linux sistemlerinde kullanıcı oluşturmak için useradd komutu kullanılır. Fakat bu işlem sistemi etkileyecek, kritik bir işlem olduğu için sudo komutu ile birlikte yapılmaktadır.

Örnek kullanım

Sudo useradd -m mutkus

-m parametresi ile, mutkus kullanıcısı için home dizini altında bir dizinde istediğimizi belirttik.

Şifre Oluşturma

Linux’da kullanıcı oluşturduktan sonra ayrıca şifrede belirlemek gerekmektedir. Bunun içinde sudo komutu gereklidir.

Örnek kullanım:

Sudo passwd mutkus

Bu komuttan sonra ilgili kullanıcı bir şifre oluşturmamızı ve ardından bu şifreyi doğrulamamızı isteyecektir.

Bir Kullanıcıyı Gruba Eklemek

Oluşturduğumuz kullanıcıyı bir gruba ekleyelim;

Sudo usermod -aG grup1 mutkus

Böylece mutkus kullanıcısını grup1’e ekledik.

Buradaki parametreleri inceleyelim:

-a: append demek. Mutkus kullanıcısını grup1’e ekledikten sonra ilgili grubun üyeliklerini korur. Eğer bu bu komut kullanılmazsa grup1’de ki diğer kullanıcılar, ilgili gruptan kaldırılır.

-G: Groups demek. Kullanıcının atanacağı grubu belirtir.

Paket Yönetimi

Paket yöneticisi (package manager) veya paket yönetimi (package-management), Linux işletim sistemlerinde, paket diye adlandırabileceğimiz uygulamaların kurulumu, güncellenmesi, konfigüre edilmesini veya kaldırılmasını tutarlı bir şekilde sağlayan yönetim mekanizmasıdır.

Modern Linux dünyasında birden fazla paket yönetimini sağlayan mekanizmalar vardır. Bunlar;

  • dpkg: dpkg paket yönetimi ile, Linux tabanlı Debian işletim sistemlerinde uyguluma yükleme, kurma, kaldırma ve yönetim işlemlerini gerçekleştirebilirsiniz. Son derece kullanıcı dostu bir kullanımı vardır.
  • apt: apt komutu da Debian işletim sistemlerinde paket yönetimini sağlayabileceğiniz, .deb uzantılı paketlerini yöntebileceğiniz komut temelli bir paket yönetim aracıdır.
  • aptitude: apt paket yönetiminin bir alternatifi olan aptitude, yüksek seviyede bir paket yönetimidir.
  • gem: Ruby paketlerinin yönetiminde kullanılır.
  • snap: Canonical tarafından geliştirilen ve Linux kernellerinde kullanılan bir paket yönetimidir.
  • pip: Python paketlerinin yönetiminde kullanılır.

Advanced Package Manager (APT)

Debian tabanlı işletim sistemlerinde, paketlerin indirilmesi apt ile gerçekleştirilir.

Linux işletim sistemlerinde, her paket birbiri ile bağımlıdır. Bu yüzdende bir paketi kaldırmak veya kurmak isterseniz, o pakete bağlı bir çok paketlerde de işlemler yapmanız gerekmektedir. Örneğin siber güvenlik dünyasında sıkça kullanılan metasploit-framework kurmak istediğinizde yüzlerce kütüphaneye ihtiyacınız olacaktır. APT, bize bu kolaylığı sağlayarak, diğer kütüphane veya paketleride otomatik olarak indirip, kurmaktadır.

Linux’ta yazılımlar, repositories dediğimiz yazılım depoları aracılığı ile dağıtılır. Bu yazılım depoları, Linux topluluğu tarafından sağlanan özgür yazılımların bir araya gelmesiyle oluşur.

Linux sisteminizde kayıtlı olan repo’ları görmek için aşağıdaki komutu kullanabilirsiniz:

cat /etc/apt/sources.list

APT, istediğiniz paketlerin kolayca bulunması için bir önbellek sistemini kullanır. Örneğin “net-tools” paketini bulmak için APT önbellek veritabanını kullanır.

apt-cache search net-tools

Paket hakkında daha fazla bilgi edinmek isterseniz:

apt-cache show net-tools

Sisteminizde güncellemesi olan APT paketlerini görmek için aşağıdaki komutu kullanabilirsiniz:

sudo apt list --upgradable

Güncellemek için ise:

sudo apt upgrade

Önbelleğinizi güncellemek için:

sudo apt update

Sisteminizde var olan paketi silmek için:

sudo apt remove paketadi

Servis ve Process Yönetimi

Yazımızın başında, arka planda çalışan servisleri daemon olarak belirtmiştik. Peki servis ile process arasındaki fark nedir?

Servis, Linux işletim sisteminizde arka planda sürekli çalışarak, gelen istekleri dinler ve bu isteğe göre bir yanıt döner. Buna veritabanını örnek verebiliriz. Veritabanınızdan bir veri çekmek istediğinizde, isteği veritabanına gönderirsiniz ve ilgili servis, isteğinize göre ve kurallarınıza göre bu talebe cevap verir. Yani klasik bir sunucu-client (server-client) mantığını çalıştırır.

Process ise, ön planda veya tıpkı servis gibi arkaplanda çalışabilen komut dosyası veya uygulamadır.

Sistemde çalışan servisleri aşağıdaki komut ile görebilirsiniz:

service --status-all

Sisteminizdeki servisleri start, stop veya restart komutları ile yönetbilirsiniz.

Örneğin:

sudo service postgresql start
sudo service postgresql stop
sudo service postgresql restart

Linux’ta bir servisin 4 durumu vardır. Bunlar:

  • Running : Servisin çalıştığını gösterir.
  • Waiting : Servisin bir olayı veya sistem kaynağını beklediğini belirtir.
  • Stopped : Servisin durduğunu gösterir.
  • Zombie : Servisin durduğunu fakat process tablosunda bir giriş beklediğini belirtir.

Linux işletim sisteminde process süreçlerini kill, pkill, pgrep ve killall komutları ile de kontrol edebilirsiniz. Process kontrolü için bir sinyal göndermeniz gerekmektedir. Sinyalleri görüntülemek için aşağıdaki komutu kullanabilirsiniz:

kill -l

Bir Cevap Yazın

Bu site, istenmeyenleri azaltmak için Akismet kullanıyor. Yorum verilerinizin nasıl işlendiği hakkında daha fazla bilgi edinin.