SSD Nodes Learn 🎉 VPS $5.50/aydan başlayan
Rehberler Matt ConnorYazan Matt Connor · Güncellendi 2026-08-13

Linux watch komutu kullanımı ve püf noktaları

Linux watch komutu ile süreçleri izlerken -n ile aralık belirleme, -d ile farkları vurgulama ve -g ile değişiklikte çıkış yapma yöntemlerini örneklerle öğrenin.

watch komutunun işlevi

watch komutu, belirtilen bir komutu sabit aralıklarla yeniden çalıştırır ve çıktısını ekranda aynı noktada günceller. Varsayılan aralık iki saniyedir. Bir değerin değişmesini beklediğiniz durumlarda; örneğin bir diskin dolması, bir container'ın ayağa kalkması, bir sertifika yenileme işleminin tamamlanması veya bir kuyruğun boşalması gibi süreçleri izlemek için kullanılır.

watch, procps-ng paketinin bir parçasıdır ve yeni kurulan bir Ubuntu veya Debian VPS üzerinde procps paketiyle birlikte hazır gelir. Aşağıdaki bayrakları kullanmadan önce sürümünüzü kontrol edin; zira faydalı seçeneklerden ikisi oldukça yenidir.

watch --version

Ubuntu 24.04 üzerinde bu komut watch from procps-ng 4.0.4 benzeri bir satır yazdırır. Şimdi en basit ve faydalı örneğe bakalım.

watch df -h /

Ekran temizlenir ve bir başlık satırı, boş bir satır ve ardından df -h / komutunun çıktısı görüntülenir:

Every 2.0s: df -h /                          server1: Sun Aug  9 10:21:44 2026

Sol tarafta yenileme aralığı ve watch tarafından çalıştırılan komutun kendisi yer alır. Sağ tarafta ise sunucu adı ve güncel saat bulunur. Saat kısmı, alt kısımdaki veriler değişmediğinde bile ekranın yenilenmeye devam ettiğini kanıtladığı için oldukça kullanışlıdır. Çıkmak için Ctrl+C tuşlarına basın.

watch, terminale sığacak şekilde tek bir çerçeve çizer. Uzun satırlar alt satıra kaydırılır; -w bayrağı kullanıldığında ise bu satırlar kesilir. Alt satırın dışına taşan içerik ise hiç görüntülenmez. Her döngü bir öncekini üzerine yazdığı için çerçeve içinde geriye dönük kaydırma (scrollback) özelliği yoktur. Bu temel gerçek, watch komutunun hangi durumlarda kullanılması gerektiğini belirler.

watch komutu ne sıklıkla yeniden çalıştırılmalıdır?

İki saniye yalnızca varsayılan değerdir. Aralığı, değerin ne kadar hızlı değiştiğine ve bir çalıştırmanın ne kadar maliyetli olduğuna göre belirleyin.

  • Sürekli değişen sayaçlar (örneğin ss -s veya bir arayüz bayt sayısı) için -n 0.5. watch komutunun kabul ettiği en küçük aralık 0.1 saniyedir.
  • Diskler ve sertifikalar için -n 30 veya -n 60. Bir gün içinde dolan bir dosya sistemi için dakikada otuz kareye gerek yoktur.

watch komutu, komutu çalıştırır, bitmesini bekler ve ancak o zaman aralık süresi kadar uyur. Çalışma süresi boşluğa eklenir; bu nedenle -n 2 altında sekiz saniye süren bir komut, size her on saniyede bir kare verir ve makineyi tüm süre boyunca meşgul eder. -p (--precise) eklediğinizde, watch komutu her çalıştırmanın başlangıcından bir sonrakinin başlangıcına kadar ölçüm yaparak, her aralık saniyesinde bir çalıştırma başlatmayı hedefler.

Her zaman farklı bir varsayılan değer kullanmak isterseniz, shell profilinizde WATCH_INTERVAL değişkenini dışa aktarın (export). Açıkça belirtilen bir -n bayrağı, her zaman bu değişkenin önüne geçer. Derlemenizin bu değişkeni okuduğunu doğrulamak için watch --help komutunu çalıştırın.

-d ile nelerin değiştiğini vurgulama

Aynı metin yığınını okuyarak değişen tek bir alanı bulmak zordur. -d (--differences) bu işlemi sizin yerinize yapar.

watch -n 30 -d 'df -h / /var'

Önceki kareden farklı olan karakterler ters video modunda gösterilir; bu sayede Use% hücresi hareket ettiği anda aydınlanır ve diğer her şey sabit kalır. Eğer /var ayrı bir dosya sistemi değilse, kök dosya sistemini iki kez listelenmiş halde görürsünüz; bu, sunucunun nasıl bölümlendiğini öğrenmenin hızlı bir yoludur.

Karşılaştırma konumsal olarak yapılır; yani watch, yeni kareyi eski kareyle karakter karakter hizalar. Sütun genişliği değişen çıktılar neredeyse tamamen aydınlanacaktır, bu nedenle sabit düzeni olan komutları tercih edin. Güncel procps-ng ayrıca watch --differences=permanent parametresini de kabul eder; bu parametre, yalnızca en son değişikliği değil, değişen her konumu vurgulanmış halde tutar. Buna güvenmeden önce watch --help ile doğrulayın.

watch komutunun çıktı değiştiğinde sonlanmasını nasıl sağlarım?

-g (--chgexit) bayrağı, çıktı bir önceki çalıştırmadan farklı olduğu anda watch komutunu durdurur. Komut satırı isteminiz geri döneceği için, aynı satırda bu komuttan sonra başka bir işlem çalıştırabilirsiniz.

watch -n 10 -g 'systemctl is-active myapp' ; echo 'state changed'

Bu bayrak, watch komutunu "dağıtım tamamlandığında bana haber ver" aracına dönüştürür. Herkesin düştüğü tek bir tuzak vardır: karşılaştırma tüm çıktıyı kapsar; bu nedenle çıktıdaki herhangi bir saat veya PID (süreç tanımlayıcı) ilk yenilemede değişirse watch hemen sonlanır. systemctl status myapp geçen süreyi ve bellek kullanımını yazdırdığı için, üzerinde -g kullanmak işlevsizdir. Komutu, beklediğiniz tek ve kararlı veriye indirgeyin; systemctl is-active size bunu sağlar.

Daha yeni procps-ng sürümleri, çıktının belirtilen döngü sayısı boyunca aynı kalması durumunda sonlanan --equexit <cycles> adlı zıt bir test eklemiştir. Bu, "burası sessizleştiğinde bana haber ver" sorusuna yanıt verir. Eski sürümlerde bulunmadığı için watch --help üzerinden kontrol sağlayın.

watch neden pipe ve glob ifadelerimi görmezden geliyor?

Bu, herkesin en az bir kez karşılaştığı bir hatadır ve nedeni watch aracında değil, kullandığınız shell yapısındadır.

watch docker compose ps | grep web

Etkileşimli shell'iniz, herhangi bir işlem başlamadan önce satırın tamamını okur ve bu satırı pipe karakterinden böler. watch docker compose ps komutunu başlatır ve watch'un kendi ekran çıktısını grep komutuna bağlar. watch artık bir terminale yazmadığı için görüntü bozuk veya boştur; grep ise konteyner listesi yerine yeniden çizim çıktısını filtrelemektedir.

Tüm pipeline ifadesini tırnak içine alın; böylece tek bir argüman olarak iletilir.

watch 'docker compose ps | grep web'

watch bu dizgiyi sh -c komutuna iletir ve shell, pipeline'ı her döngüde bir kez çalıştırır. Glob ifadeleri de benzer bir kurala tabidir ancak belirtileri daha az belirgindir.

watch ls -l /var/log/*.log
watch 'ls -l /var/log/*.log'

İlk satır, glob ifadesini siz Enter tuşuna bastığınız anda shell içinde bir kez genişletir. watch daha sonra donmuş bir dosya listesini tekrar tekrar çalıştırır; bu nedenle bir dakika sonra oluşturulan bir log dosyası asla görünmez. İkinci satır ise glob ifadesini watch'a iletir; watch bunu her döngüde sh içinde genişletir, böylece yeni dosyalar otomatik olarak görünür hale gelir.

Tırnak işaretleri, bir değişkenin veya komut ikamesinin ne zaman değerlendirileceğine de karar verir. watch "echo $(date)", date komutunu shell'inizde bir kez çalıştırır ve ardından bu sabit dizgiyi sürekli ekrana basar. watch 'echo $(date)' ise date komutunu her döngüde yeniden çalıştırır. Tek tırnak "daha sonra" anlamına gelir. Çift tırnak "şimdi" anlamına gelir.

sh -c kullanımının iki sonucu daha vardır:

  • Alias'lar ve shell fonksiyonları bunun içinde mevcut değildir. watch ll komutu sh: 1: ll: not found hatasıyla başarısız olur, çünkü sh -c hiçbir zaman .bashrc dosyanızı okumaz. Komutu açıkça yazın veya yalnızca etkileşimli PATH ortamınızda bulunan bir binary için tam yolu belirtin.
  • Standart hata çıktısını yakalamak faydalıdır. Hata metninin ekrana saçılmasını değil, çerçeve içinde düzenli görünmesini istiyorsanız 2>&1 ifadesini tırnak içine ekleyin.

Tırnak kullanımı zorlaştığında, -x (--exec) komutu, sh -c üzerinden geçmek yerine doğrudan çalıştırır. Boşluk içeren argümanlar daha kolay yönetilir; ancak pipe ve glob ifadeleri tamamen çalışmayı durdurur çünkü onları yorumlayacak bir shell kalmamıştır.

Ayrıcalıklar da aynı mantığı izler, çünkü watch sıradan bir süreçtir. watch 'sudo ss -tulpn', göremediğiniz veya giriş yapamadığınız bir parola istemine takılır. Bunun yerine sudo watch 'ss -tulpn' komutunu çalıştırın ve siz Ctrl+C tuşlarına basana kadar tüm döngünün root yetkileriyle çalıştığını unutmayın.

Bir VPS üzerinde izlenmeye değer dört durum

Dolmakta olan bir disk

watch -n 30 -d 'df -h / /var'

df, çekirdeğin halihazırda tuttuğu verileri sorguladığı için sürekli tekrarlanması oldukça düşük maliyetlidir. du -sh /var/log ise her döngüde dosya ağacındaki tüm dosyaları taradığı için maliyetlidir. İzleme altında diski sürekli okur ve teşhis etmeye çalıştığınız makineyi yavaşlatır. du komutunu bir kez çalıştırın veya ncdu kullanın, ardından sayının artmaya devam edip etmediğini görmek için df komutunu izlemeye bırakın.

Sürekli yeniden başlayan bir container

cd /srv/myapp
watch -n 5 -d 'docker compose ps'

Durum sütunu, her container'ın ne kadar süredir ayakta olduğunu gösterir. Bir çökme döngüsündeki (crash loop) container sürekli "Up 2 seconds" durumuna döner ve -d bunu bir bakışta görünür kılar. Öncelikle ilgili dizine geçin; çünkü watch, kendisini başlatan kabuğun çalışma dizinini devralır ve docker compose kendi proje dizinine ihtiyaç duyar. watch, bir yeniden başlatmanın gerçekleştiğini bildirir. docker compose logs -f web ise nedenini açıklar. Nedeni öğrendikten sonra, cevabı sizin yerinize container'ı yeniden başlatan bir Compose sağlık kontrolü olarak kodlayın; böylece kimsenin ekran başında beklemesine gerek kalmaz.

Sertifika yenileme süreci

sudo -i
watch -n 60 -g 'openssl x509 -noout -enddate -in /etc/letsencrypt/live/example.com/fullchain.pem'

Komut, notAfter=Nov 7 09:14:22 2026 GMT şeklinde tek bir satır çıktısı verir ve başka hiçbir şey yazdırmaz; bu nedenle -g, dosya yenisiyle değiştirildiği anda tetiklenir. /etc/letsencrypt/live altındaki dosyalar yalnızca root tarafından okunabilir, bu yüzden bu işlem bir root kabuğunda çalıştırılır. Diskteki sertifikayı izlediğine dikkat edin. Çalışan bir web sunucusu, yeniden yüklenene kadar eski sertifikayı bellekte tutar; bu yüzden echo | openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -enddate ile gerçekte neyin sunulduğunu kontrol edin ve bu komutu halka açık bir sunucuya karşı iki saniyelik aralıklarla çalıştırmayın. Yenileme işleminin kendisi bir systemd servisi ve zamanlayıcısına aittir ve systemctl list-timers bir sonraki çalışma zamanını gösterir.

Boşalan bir kuyruk

watch -n 15 'postqueue -p | tail -n 1'

Bu, -- 24 Kbytes in 6 Requests. veya bittiğinde Mail queue is empty gibi bir özet satırı yazdırır. Aynı yapı, sayabildiğiniz her kuyruk için geçerlidir: watch -n 5 'find /srv/queue/incoming -type f | wc -l'.

Burada watch kendi sınırlarına ulaşır. Bir kareyi bir öncekiyle karşılaştırır ve bir koşulu test edemez; bu yüzden size asla "sayı sıfıra ulaştı" diyemez. Basit bir kabuk döngüsü, her geçişte sayıyı yakalamak için komut ikamesi kullanarak bunu yapabilir:

until [ "$(find /srv/queue/incoming -type f | wc -l)" -eq 0 ]; do sleep 5; done; echo 'queue drained'

watch komutunun yanlış araç olduğu durumlar

watch komutu, çalıştırdığınız komutu önceki çalıştırmalara dair hiçbir bilgi tutmadan ve komutun ne yaptığını bilmeden tekrar tekrar çalıştırır. Bu durum df için uygundur. Ancak dört durumda hatalı bir tercihtir.

  • Log kayıtları. watch sabit bir çerçeveyi yeniden çizer; bu nedenle iki döngü arasında beliren ve kayan satırlar kaybolur. Bunun yerine, yeni satırları yazıldıkları anda akıtan journalctl -fu nginx veya tail -f kullanın.
  • Yüksek maliyetli komutlar. du -sh / veya yoğun bir veritabanına yapılan sorgu, watch her seferinde yeniden başlattığı için her aralıkta kalıcı bir arka plan yüküne dönüşür.
  • Yan etkileri olan işlemler. Yazma, gönderme, yeniden başlatma veya yükleme yapan bir komut, her döngüde bu işlemi tekrarlar. Bir API'ye iki saniyede bir yapılan curl, günde 43,200 istek demektir; ücretsiz bir API anahtarının askıya alınma sebebi budur.
  • Uzun süreli kontroller. watch terminalinizde çalışır ve oturumunuz kapandığında sonlanır. Dizüstü bilgisayarınızı kapattığınızda kimseyi uyarmaz ve geçmiş tutmaz. Bunun için Uptime Kuma gibi gerçek bir durum izleyici veya sunucuda çalışan zamanlanmış bir kontrol mekanizması gerekir.

Dürüst sınır zamandır. watch, gerçekleşmesini beklediğiniz belirli bir şey için harcadığınız on dakikalık süre içindir. Yarın da kontrol edilmesi gereken her şey, zamanlanmış bir görev veya gerçek bir izleme aracı gerektirir.

SSH üzerindeyken tmux içinde watch çalıştırmak

SSH üzerinden çalışırken watch komutunun ömrü bağlantının kalitesine bağlıdır. Bağlantı koptuğunda kabuğunuz SIGHUP sinyali alır ve watch sürecini sonlandırır. tmux bu sorunu çözer ve watch komutunu uzak bir sunucuda gerçekten kullanışlı kılan yöntem budur.

tmux new -As ops
watch -n 30 -d 'df -h /'

Bağlantıyı kesmek için Ctrl+b ve ardından d tuşlarına basın. Döngü sunucu üzerinde çalışmaya devam eder. Daha sonra tmux attach -t ops ile yeniden bağlandığınızda, başlık kısmındaki saatten de anlaşılacağı üzere ekran güncellenmeye devam edecektir. Pencereyi bölerek bir tarafta watch, diğer tarafta journalctl -f çalıştırabilirsiniz; tmux tabanlı bir terminal çalışma alanı oluşturmanın temel mantığı budur. Aynı soru birden fazla sunucu için geçerli olduğunda, watch pencereleriyle uğraşmak yerine birden fazla Linux sunucusunu yönetmek için tasarlanmış bir araç kullanmak daha uygundur.

Burada alıntılanan ekran görüntüleri örnektir. Sütun düzeni ve sürüm dizeleri dağıtımlar ve procps-ng sürümleri arasında farklılık gösterebilir; bu nedenle kendi makinenizdeki man watch komutunu okuyarak derlemenizin desteklediği bayrakları doğrulayın.

FAQ

Neden watch, watch mycmd | grep foo içindeki pipe işaretini görmezden gelir?

Kabuğunuz, watch başlamadan önce satırı pipe işaretinden böler. Bu nedenle watch'un kendi ekran çizimi grep içine aktarılır ve komutun çıktısı hiçbir zaman filtrelenmez. Bunun yerine tüm pipeline'ı tırnak içine alın: watch 'mycmd | grep foo'. watch, bu tek argümanı sh -c aracına iletir ve pipeline her döngüde bir kez çalıştırılır. Aynı kural glob ifadeleri ve komut yerleştirmeleri için de geçerlidir.

watch ile hangi aralığı kullanmalıyım?

Aralığı, değerin ne kadar hızlı değiştiğine ve komutun ne kadar kaynak tükettiğine göre belirleyin. Yarım saniye hızlı sayaçlar için uygundur; 0.1 saniye ise watch'un kabul ettiği en küçük aralıktır. Diskler ve sertifikalar için otuz ila altmış saniye yeterlidir. -p bayrağını kullanmadığınız sürece komutun çalışma süresi bekleme süresine eklenir; bu yüzden -n 1 altında yavaş bir komut, duraksamadan arka arkaya çalışır.

watch bir log dosyasını takip edebilir mi?

Hayır. watch tek bir kareyi yeniden çizer ve geçmiş tutmaz; bu nedenle iki döngü arasında beliren ve kayan satırlar kalıcı olarak kaybolur. journalctl -fu <unit> ve tail -f, yeni satırları geldikçe akıtır; loglar için gereken budur. watch'u disk yüzdesi veya kuyruk uzunluğu gibi mevcut bir durumu olan değerler için kullanın.

Beklediğim durum gerçekleştiğinde watch'un durmasını nasıl sağlarım?

-g (--chgexit) kullanın ve bu araca, beklediğiniz olay gerçekleşene kadar çıktısı aynı kalan bir komut verin. Saat veya PID içeren çıktılar ilk yenilemede değişir ve komutun hemen sonlanmasına neden olur; bu yüzden systemctl status myapp yerine systemctl is-active myapp daha uygundur. Bir sayacın sıfıra ulaşması gibi gerçek bir koşul için bir kabuk until döngüsü kullanın, çünkü watch yalnızca çıktının değiştiğini algılayabilir.

Neden watch, kabuğumda çalışan bir şey için command not found hatası veriyor?

watch, komutu sh -c aracına iletir ve bu kabuk .bashrc dosyasını okumaz; bu nedenle alias'larınız ve kabuk fonksiyonlarınız orada mevcut değildir. Hata mesajı genellikle sh: 1: ll: not found şeklindedir. Gerçek komutu açıkça yazın veya yalnızca etkileşimli PATH ortamınızda bulunan bir binary için tam yolu kullanın.