systemctl ile Linux servislerini listelemenin tüm yolları
- 12 Eylül 2026
- 09:00
- Yazar: Adrien Roche
- Eğitimler

Bilinmesi gereken tek komut: systemctl list-units --type=service
systemd çalıştıran her dağıtımda — 15.04'ten beri Ubuntu, 8'den beri Debian, 7'den beri RHEL ve CentOS, ayrıca Fedora, Arch ve openSUSE — her servis bir systemd birimidir (unit) ve bunları listeleyen araç systemctl'dir:
systemctl list-units --type=service
Varsayılan olarak bu komut, systemd'nin o anda bellekte tuttuğu tüm servis birimlerini yazdırır: etkin olanlar, kuyruğa alınmış işleri bulunanlar veya başarısız olanlar. Kurulu olup hiç başlatılmamış servisleri göstermez. Çıktı terminalinizden uzun olduğunda systemctl onu bir sayfalayıcıya (less) aktarır — çıkmak için q tuşuna basın veya doğrudan stdout'a yazdırmak için --no-pager ekleyin.
Her satırda beş kolon bulunur:
- UNIT — birim adı, örneğin
ssh.service. Bu,systemctl status,startvestopkomutlarına verdiğiniz tam addır. - LOAD — birim dosyasının doğru ayrıştırılıp ayrıştırılmadığı:
loaded,not-found,bad-setting,errorveyamasked. - ACTIVE — üst düzey durum:
active,inactive,activating,deactivatingveyafailed. - SUB — birim tipine özgü alt düzey durum: bir servis
running,exited,deadve benzeri olabilir. - DESCRIPTION — birim dosyasındaki, insanların okuyabileceği açıklama metni.
ACTIVE/SUB ikilisini birlikte okuyun: active (running) şu anda canlı bir süreç olduğu anlamına gelir, active (exited) ise bir oneshot servisin başarıyla çalışıp bittiğini gösterir — kurulum görevleri için normaldir, düzeltilmesi gereken bir sorun değildir.
Filtreleme: çalışanlar, başarısız olanlar veya hepsi
--state= bayrağı herhangi bir LOAD, ACTIVE veya SUB değerine göre filtreler ve virgülle ayrılmış listeleri kabul eder:
# Only services with a live process
systemctl list-units --type=service --state=running
# Everything loaded, including stopped and dead services
systemctl list-units --type=service --all
# Only failures
systemctl list-units --type=service --state=failed
# Combine states
systemctl list-units --type=service --state=running,exited
systemctl --failed, başarısız filtresinin yerleşik kısayoludur ve giriş yaptığınız her makinede refleks olarak çalıştırmaya değer. Makine tarafından okunabilir çıktı için --no-legend başlık ve özet satırlarını, --plain ise madde işaretlerini kaldırır; böylece kolonlar awk veya cut için kararlı kalır. Ada göre arama yapmak için grep'e aktarın: systemctl list-units --type=service --all --no-pager | grep ssh.
Açılışta ne başlıyor: systemctl list-unit-files
list-units "şu anda ne çalışıyor?" sorusunu yanıtlar. "Açılışta ne başlayacak?" sorusunu yanıtlamak için bunun yerine diskte kurulu birim dosyalarını listeleyin:
systemctl list-unit-files --type=service
systemctl list-unit-files --type=service --state=enabled
Burada STATE kolonu çalışma zamanı durumunu değil, açılış yapılandırmasını tanımlar:
enabled— açılışta otomatik olarak başlar (veya socket/timer ile tetiklenen servislerde tetikleyicisiyle).disabled— kurulu, ancak onu otomatik olarak başlatan hiçbir şey yok.static—[Install]bölümü yok; yalnızca başka bir birimin bağımlılığı olarak çalışır ve doğrudan etkinleştirilemez.masked—/dev/nullhedefine sembolik bağ verilmiş; systemd onu başlatmayı tamamen reddeder.generated— çalışma zamanında bir generator tarafından, genellikle eski bir init betiğinden oluşturulmuş.
Güncel systemd sürümleri ayrıca dağıtımın varsayılanının ne olacağını gösteren bir preset kolonu da yazdırır (sürüme göre VENDOR PRESET veya PRESET). Kaçınılması gereken tuzak: enabled çalışıyor demek değildir, disabled da durdurulmuş demek değildir. Bir servis devre dışı olduğu hâlde biri onu elle başlattığı için çalışıyor olabilir; ya da etkin olduğu hâlde çöktüğü için ölü olabilir. Önemli olduğunda her iki listeyi karşılaştırın.
Tek tek servisler: status, is-active, is-enabled
Bir servis dikkatinizi çektiğinde yakınlaştırın:
systemctl status nginx
systemctl is-active nginx # prints: active | inactive | failed
systemctl is-enabled nginx # prints: enabled | disabled | static | masked
systemctl is-failed nginx
status tüm tabloyu gösterir: ACTIVE/SUB durumu, ana PID, çalışma süresi, bellek kullanımı, cgroup süreç ağacı ve son on günlük satırı. On satır yetmediğinde doğrudan günlüğe gidin: journalctl -xeu nginx (-u birime göre filtreler, -e sona atlar, -x açıklayıcı metin ekler).
is-* komutları betik yazmak için tasarlanmıştır: tek bir kelime yazdırır ve çıkış kodunu buna göre ayarlar — is-active yalnızca birim etkin olduğunda 0 ile çıkar, is-enabled ise devre dışı veya maskelenmiş birimler için sıfır dışı bir değerle çıkar. Çıktıyı bastırıp yalnızca çıkış kodunu tutmak için --quiet ekleyin.
Yukarıdaki tüm listeleme komutları yetkisiz bir kullanıcı olarak çalışır. Servisleri gerçekten yönetmek — start, stop, enable, disable — root gerektirir; bu nedenle durum okumanın ötesine geçmeden önce Ubuntu'da sudo ve kullanıcı değiştirmenin nasıl çalıştığını anlamak isteyeceksiniz. Ayrıca kullanıcı düzeyindeki birimlerin ayrı bir yöneticide yaşadığını unutmayın: systemctl --user list-units --type=service kendi oturumunuzda çalışan servisleri listeler; bazı servislerin sistem listesinde "eksik" görünmesinin nedeni budur.
Kopya kâğıdı: gerçekten kullanacağınız listelemeler
| Komut | Ne gösterir |
|---|---|
systemctl list-units --type=service | Bellekte bulunan etkin ve başarısız servisler |
systemctl list-units --type=service --all | Etkin olmayanlar dahil, yüklü her servis |
systemctl list-units --type=service --state=running | Yalnızca canlı bir süreci olan servisler |
systemctl --failed | Yalnızca başarısız birimler — günlük sağlık kontrolü |
systemctl list-unit-files --type=service | Kurulu her servis ve açılış ayarı |
systemctl list-unit-files --state=enabled | Açılışta otomatik başlayan birimler |
systemctl status name | Tek bir servis için tüm ayrıntılar ve son günlük satırları |
systemctl is-active name | Tek kelimelik durum ve betik dostu çıkış kodu |
systemctl is-enabled name | Tek bir servisin açılış yapılandırması |
service --status-all | /etc/init.d betiklerinin SysV tarzı listesi (uyumluluk) |
Gerçek hayattan iş akışları
1. Sürekli başarısız olan servisi bulun
systemctl --failed
systemctl status myapp.service --no-pager -l
journalctl -xeu myapp.service
systemctl reset-failed myapp.service
--failed ile geniş başlayın, ardından çıkış kodu ve son günlük satırları için status çıktısını okuyun, sonra tam izleme için günlüğe inin. Kök neden düzeltilip servis yeniden ayağa kalktığında, reset-failed eski başarısız kaydını temizler; böylece sonraki sağlık kontrolünüz temiz başlar.
2. Sonraki açılışta neyin başlayacağını denetleyin
systemctl list-unit-files --type=service --state=enabled --no-legend | awk '{print $1}'
systemd-analyze blame
İlk komut otomatik başlayacak her şeyin temiz bir listesini verir — bir sunucuyu sıkılaştırmadan önce veya aylar önce kurup unuttuğunuz bir şeyi ararken işe yarar. systemd-analyze blame ise son açılışta her birimin ne kadar sürdüğünü gösterir; yavaş başlayan servisler burada anında öne çıkar.
3. Betikler ve izleme için tek satırlıklar
systemctl is-active --quiet nginx && echo up || echo down
systemctl list-units --type=service --state=running --no-legend --plain | awk '{print $1}'
systemctl show -p ActiveState,SubState nginx
systemctl list-units --type=service -o json # systemd 246 or newer
show -p, sürümler arasında biçimi hiç değişmeyen Key=Value çiftleri yazdırır ve JSON çıktısı doğrudan jq'ya beslenir. Aynı kontrolleri her girişte tekrar tekrar çalıştırdığınızı fark ederseniz, bunları küçük bir betiğe sarın — .sh dosyaları ve kabuk betikleri rehberimiz tam olarak bu tür parçacıkları yeniden kullanılabilir bir araca dönüştürmeyi anlatıyor.
systemd yok mu? service --status-all ve OpenRC
systemctl'in var olduğunu varsaymadan önce makinenin gerçekte ne çalıştırdığını doğrulayın — işletim sistemini ve sürümünü komut satırından kontrol etmek on saniye sürer ve size hiç systemd tabanlı bir dağıtımda olup olmadığınızı söyler. systemctl yoksa SysV init veya OpenRC üzerindesiniz:
service --status-all
Debian ve Ubuntu'da bu komut /etc/init.d dizinini gezer ve çalışanlar için [ + ], durdurulmuşlar için [ - ], status komutu olmayan betikler için [ ? ] yazdırır. systemd dağıtımlarında da bir uyumluluk katmanı üzerinden çalışır, ancak yalnızca init betiklerini gördüğü için orada systemctl'i tercih edin. Alpine ve Gentoo'da init sistemi OpenRC'dir: rc-status geçerli çalışma seviyesindeki servisleri, rc-update show ise her çalışma seviyesinin neyi başlattığını listeler.
Yukarıdaki her şey, root yetkisine sahip olduğunuz ve servisleri özgürce başlatıp bozup düzeltebileceğiniz bir Linux makineniz olduğunu varsayar. Alıştırma yapmak için birine ihtiyacınız varsa — ya da gerçek iş yüklerini barındıracak temiz bir makine için — rdp.monster'dan alacağınız tam root erişimli bir Linux VPS ayrılmış CPU ve RAM, sınırsız (fair-use) bant genişliği ve KYC gerektirmeyen bir kayıtla gelir; ödeme onaylandıktan yaklaşık 10 saniye sonra teslim edilir, yani bir dakika içinde kendi sunucunuzda systemctl list-units çalıştırabilirsiniz.
Sık sorulan sorular
Bir servis neden active (running) yerine active (exited) gösteriyor?
Type=oneshot (veya RemainAfterExit=yes) olan servisler bir görevi bir kez çalıştırır — bağlama, güvenlik duvarı kurulumu, temizlik — ve çıkar. systemd sonrasında active (exited) bildirir: birim başarılı olmuştur ve "açık" sayılır, ancak arkada çalışan bir süreç kalmaz. Yalnızca nginx veya sshd gibi arka plan servisleri active (running) gösterir. Arka plan servisi olmasını beklediğiniz bir servis exited gösteriyorsa, nasıl tanımlandığını görmek için birim dosyasını systemctl cat name.service ile inceleyin.systemctl çıktısındaki renkli noktalar ne anlama gelir?
systemctl status ve systemctl list-units çıktısında birim adından önce gelen madde işareti hızlı bir durum göstergesidir: etkin için yeşil, etkin değil veya kapanmakta için beyaz, başarısız veya hata durumları için kırmızı. Başarısız satırlar listelerde de kırmızıyla vurgulanır; bu da systemctl --failed çıktısını taramayı kolaylaştırır. Renk kodlarının engel olduğu betiklerde veya günlüklerde --plain ekleyin ya da çıktıyı aktarın; süslemeler kaybolur.chkconfig --list komutunun systemctl karşılığı var mı?
chkconfig --list yerini systemctl list-unit-files --type=service komutuna bırakır; bu komut kurulu her servisi ve enabled, disabled, static ya da masked olup olmadığını gösterir. Tek bir servis için systemctl is-enabled name, chkconfig name yerine geçer; systemctl enable name ise chkconfig name on yerine geçer. Eski komut bir uyumluluk katmanı olarak hâlâ bulunabilir, ancak yalnızca eski SysV betiklerini kapsar.Bir servisin açılışta başlamasını nasıl engellerim?
sudo systemctl disable name çalıştırın; hemen durdurmak için --now ekleyin. Devre dışı bırakılmış bir servis yine elle başlatılabilir veya başka bir birimin bağımlılığı olarak devreye alınabilir. Hiç başlamamasını istiyorsanız sudo systemctl mask name kullanın; bu, birimi /dev/null hedefine bağlar ve her başlatma denemesi başarısız olur. Daha sonra systemctl unmask ile geri alın. Sonucu systemctl is-enabled name ile doğrulayın.Adrien Roche — Altyapı ve Hosting Editörü
Windows Server ve Linux filolarını 10+ yıldır işleten sistem mühendisi. Adrien, rdp.monster altyapı dokümantasyonunu yönetir ve RDP, VPS hosting, sunucu yönetimi, ağ ve gizlilik araçları üzerine rehberlerimizi yazar.
İlgili yazılar




