Birimler ve Birim Tipleri

systemd, yönettiği tüm kaynakları ve eylemleri birim (unit) adı verilen nesneler aracılığıyla tanımlar. Her birim, belirli bir türdeki bir kaynağı veya görevi temsil eder ve bir yapılandırma dosyası (unit file) ile tanımlanır. Bu dosyalar, sistemin nasıl başlatılacağını, servislerin nasıl çalışacağını, cihazların nasıl yönetileceğini ve diğer birçok sistem davranışını belirler.

Birim Dosyalarının Konumları

Birim dosyaları genellikle aşağıdaki dizinlerde bulunur ve belirli bir öncelik sırasına göre okunur:

  1. /etc/systemd/system/: Sistem yöneticisi tarafından oluşturulan veya düzenlenen birim dosyaları. Buradaki dosyalar, diğer dizinlerdeki aynı isimli dosyaları geçersiz kılar (override eder) veya tamamlar. Özel servisler veya varsayılan davranışları değiştirmek için kullanılır.

  2. /run/systemd/system/: Çalışma zamanında (runtime) oluşturulan birim dosyaları. /etc/'deki dosyalara göre önceliklidir.

  3. /usr/lib/systemd/system/: Kurulan paketler tarafından sağlanan varsayılan birim dosyaları (vendor-supplied). Bu dosyalar doğrudan düzenlenmemelidir; değişiklik yapmak için dosya /etc/systemd/system/ altına kopyalanmalı veya systemctl edit <unit> komutu kullanılmalıdır.

systemd, bir unit'i yüklerken bu dizinleri belirtilen sırayla kontrol eder ve bulduğu ilk eşleşmeyi kullanır.

Yaygın Birim Tipleri

Birim dosyalarının adları, temsil ettikleri kaynağın türünü belirten bir uzantı ile biter. En yaygın birim tipleri şunlardır:

  • .service: Sistem servislerini (daemon'ları) tanımlar. En sık kullanılan birim tipidir. Bir servisin nasıl başlatılacağını, durdurulacağını, hangi kullanıcıyla çalışacağını, bağımlılıklarını ve diğer davranışlarını belirler. (Örn: sshd.service, nginx.service)

  • .socket: Bir ağ soketini, IPC soketini veya FIFO'yu temsil eder. Genellikle soket aktivasyonu için kullanılır; yani ilgili sokete bir bağlantı geldiğinde, systemd ilişkili .service birimini otomatik olarak başlatır. Bu, servisin sürekli çalışmasına gerek kalmadan kaynak tasarrufu sağlar. (Örn: sshd.socket)

  • .target: Diğer unit'leri gruplayan bir senkronizasyon noktasıdır. Belirli bir sistem durumunu veya hedefini temsil eder. SysVinit'teki runlevel'lara benzer bir işlev görür, ancak daha esnektir ve bağımlılıklara dayanır. (Örn: multi-user.target, graphical.target, network.target, sysinit.target)

  • .mount: Bir dosya sistemi bağlama noktasını (/etc/fstab'daki bir satıra benzer şekilde) tanımlar ve yönetir. systemd, /etc/fstab girdilerini de otomatik olarak .mount birimlerine dönüştürebilir. (Örn: home.mount)

  • .automount: Bir dosya sistemi bağlama noktası için otomatik bağlama (automount) işlevselliği sağlar. İlgili dizine erişildiğinde, systemd ilişkili .mount birimini otomatik olarak etkinleştirir. Ağ paylaşımları veya isteğe bağlı bağlanan aygıtlar için kullanışlıdır. (Örn: media-usb.automount)

  • .timer: Belirli zamanlarda veya periyodik olarak başka bir unit'i (genellikle bir .service unit'ini) etkinleştirmek için kullanılır. cron işlerine modern bir alternatiftir. (Örn: backup.timer)

  • .path: Belirli bir dosya veya dizindeki değişiklikleri izler ve bir değişiklik olduğunda (örn. dosya oluşturma, değiştirme) başka bir unit'i etkinleştirir. (Örn: logwatch.path)

  • .slice: Kaynak yönetimi için kullanılan bir gruplama mekanizmasıdır. Linux Kontrol Grupları (cgroups) ile ilişkilidir ve bir grup unit'in toplam kaynak kullanımını (CPU, bellek, I/O vb.) sınırlamak veya yönetmek için kullanılır. (Örn: user.slice, system.slice)

  • .scope: slice'a benzer, ancak systemd tarafından başlatılmayan, dışarıdan oluşturulan süreçleri (örn. kullanıcı oturumları, sshd tarafından başlatılan süreçler) gruplamak için kullanılır. Kaynak yönetimi ve izleme amacıyla kullanılır.

  • .device: Çekirdek tarafından algılanan ve udev tarafından systemd'ye bildirilen donanım aygıtlarını temsil eder. Genellikle otomatik olarak oluşturulur ve bağımlılıklar için kullanılır.

Birimleri systemctl ile Yönetme

systemctl komutu sadece servisleri değil, tüm unit tiplerini yönetmek için kullanılır.

  • Unit'leri Listeleme:

    # Aktif olan tüm unit'leri listele
    systemctl list-units
    
    # Belirli bir tipteki unit'leri listele (örn. servisler)
    systemctl list-units --type=service
    
    # Tüm unit'leri (aktif olmayanlar dahil) listele
    systemctl list-units --all 
  • Unit Dosyalarını Listeleme: Sistemdeki tüm unit dosyalarını ve durumlarını (enabled, disabled, static, masked) listeler.

    systemctl list-unit-files
  • Unit Dosyasının İçeriğini Görme:

    systemctl cat sshd.service
  • Unit'in Detaylı Özelliklerini Görme:

    systemctl show sshd.service
  • Bağımlılıkları Görme:

    # Bir unit'in hangi unit'lere bağımlı olduğunu göster
    systemctl list-dependencies sshd.service
    
    # Bir unit'in hangi unit'ler tarafından istendiğini göster (ters bağımlılık)
    systemctl list-dependencies --reverse sshd.service 

Unit dosyaları ve tipleri, systemd'nin esnekliğinin ve gücünün temelini oluşturur. Bir servisin veya sistem davranışının nasıl çalıştığını anlamak için ilgili unit dosyalarını incelemek önemlidir.

Last updated