less Komutu ile Büyük Log Dosyalarını Sayfalayarak Okuma

Web sunucusu yönetirken en çok ihtiyaç duyduğun şeylerden biri büyük log dosyalarını terminali dondurmadan okuyabilmek. less komutu tam da bu iş için var ve cat’ten çok daha güçlü. Bu yazıda less’i sysadmin gözüyle ele alıyoruz.

Gece 2’de production sunucusu alarm verdi, SSH’a bağlandın, /var/log/nginx/error.log dosyasına bakmak istiyorsun. İlk refleks olarak cat /var/log/nginx/error.log yazıyorsun ve terminal binlerce satırı sana fırlatıyor. Ekran kayıyor, bir şey göremiyorsun, history’de kaybolup gidiyorsun. Tanıdık geldi mi? İşte bu yazı tam da o anın çaresi için.

less komutu, büyük dosyaları terminal oturumunu mahvetmeden, kontrollü biçimde okumanı sağlayan bir sayfalayıcı. Aslında adındaki felsefeyi seviyorum: “less is more” — yani less, more komutunun geliştirilmiş hali ve gerçekten de daha fazlasını yapıyor. Hadi her şeyi sıfırdan konuşalım.

less Nedir, Neden cat Kullanmamalısın?

cat komutu dosyayı baştan sona stdout’a basar ve çıkar. 50 MB’lık bir Nginx access log için bu tam bir felakettir. Terminal buffer’ın taşar, scroll yapmak işkenceye döner, arama yapamazsın. more komutu biraz daha iyidir ama sadece aşağı gidebilirsin — yani geri dönemezsin.

less ise dosyayı bellekte tamamen açmaz. Sadece görüntülediğin kısmı okur, bu yüzden 2 GB’lık bir log dosyasını bile anında açar. Hem yukarı hem aşağı gidebilirsin, içinde arama yapabilirsin, birden fazla dosyayı sırayla gezebilirsin. Web sunucusu yönetiminde bu araç neredeyse her gün işine yarar.

Temel Kullanım

En basit kullanım şekli dosya adını argüman olarak vermek. Birkaç yaygın senaryoya bakalım:

# Tek bir dosyayı aç
less /var/log/nginx/error.log

# Apache access log
less /var/log/apache2/access.log

# Syslog'u oku
less /var/log/syslog

# Bir config dosyasını incele
less /etc/nginx/nginx.conf

# Birden fazla dosyayı sırayla aç
less /var/log/nginx/error.log /var/log/nginx/access.log

Dosyayı açtıktan sonra sağ altta dosya adını ve yüzde kaçında olduğunu görürsün. Birden fazla dosya açtığında kaçıncı dosyada olduğun da gösterilir. Basit ama çok işe yarayan bir ayrıntı.

Bilmen Gereken Klavye Kısayolları

less’in gücü kısayollarında yatıyor. Bunları bir kere ezberleyince terminalde çok daha hızlı hareket edersin. En sık kullandıklarımı tabloda derledim:

Kısayolİşlev
Space veya PgDnBir sayfa aşağı git
b veya PgUpBir sayfa yukarı git
j veya Asagi OkBir satır aşağı git
k veya Yukari OkBir satır yukarı git
gDosyanın en başına git
GDosyanın en sonuna git
/kelimeAşağı doğru ara
?kelimeYukarı doğru ara
nSonraki arama sonucuna git
NÖnceki arama sonucuna git
qÇık
hYardım ekranını aç
:nSonraki dosyaya geç (çoklu dosyada)
:pÖnceki dosyaya geç (çoklu dosyada)
FDosyayı canlı takip et (tail -f gibi)

Özellikle F kısayoluna dikkat et. less içinde F tuşuna basarsan dosya gerçek zamanlı güncellenmeye başlar, tıpkı tail -f gibi. Üstelik istediğin zaman Ctrl+C ile canlı takipten çıkıp yine normal okuma moduna geçebilirsin. Bu, tail -f’e göre büyük avantaj çünkü geçmişe dönüp bakabiliyorsun.

Satır Numarası ile Çalışmak

Bir hata mesajında “line 342” gibi bir referans gördüğünde doğrudan o satıra atlamak isteyebilirsin. Bunun için birkaç yöntem var:

# Dosyayı satır numaralarıyla aç
less -N /var/log/nginx/error.log

# less içinde satır numaralarını aç/kapat
# less'i açtıktan sonra -N yazıp Enter'a bas

# Belirli bir satıra atla: less içinde 342g yaz
# ya da komut satırından direkt aç
less +342 /etc/nginx/nginx.conf

# İlk açılışta belirli bir kelimeyi ara
less +/"upstream" /etc/nginx/nginx.conf

Ipucu: less içinde 342g yazarsan (yani sayı + g) direkt o satıra atlar. Büyük config dosyalarında çok işine yarar, özellikle birinin sana “677. satıra bak” dediği durumlarda.

Pipe ile Kullanım — Asıl Güç Burada

less’i sadece doğrudan dosya açmak için kullanmak israfı olur. Asıl gücünü pipe’larla birleştirdiğinde ortaya çıkar. Web sunucusu senaryolarında en çok şöyle kullanıyorum:

# grep çıktısını sayfalayarak görüntüle
grep "500" /var/log/nginx/access.log | less

# Son 500 satırı oku ama sayfalayarak
tail -500 /var/log/nginx/error.log | less

# Birden fazla grep filtresi uygulayıp sayfalama
grep "POST" /var/log/apache2/access.log | grep "404" | less

# journalctl çıktısını sayfalayarak oku
journalctl -u nginx --since "2024-01-01" | less

# ps çıktısını sayfalayarak incele
ps aux | less

# Uzun bir komutun yardım çıktısını oku
nginx -T | less

nginx -T komutu tüm nginx konfigürasyonunu birleştirilmiş olarak döker. Bu çıktı bazen yüzlerce satır olabiliyor. Direkt terminale basmak yerine less’e pipe etmek hayat kurtarır.

Renk ve Çıktı Formatını Koruma

Bir sorunla karşılaşmış olabilirsin: bazı komutların renkli çıktısını less’e pipe ettiğinde renkler kayboluyor. Bu, ANSI renk kodlarının pipe üzerinden geçerken bazı araçlar tarafından ezilmesinden kaynaklanıyor. Bunu çözmek için:

# ANSI renk kodlarını koru (-R bayrağı)
grep --color=always "error" /var/log/syslog | less -R

# Kalıcı olarak ayarlamak için .bashrc veya .zshrc'ye ekle
export LESS="-R"

# Ya da alias tanımla
alias less='less -R'

# git log çıktısını renkli sayfalama
git log --oneline --color=always | less -R

# journalctl çıktısını renkli oku
journalctl -u php8.1-fpm --output=short-precise --no-pager | less -R

Ipucu: LESS ortam değişkenini .bashrc’ye eklersen her seferinde -R yazmak zorunda kalmazsın. Özellikle renkli grep çıktılarını sık kullanıyorsan bu ayarı bir kere yap ve unut.

Gerçek Dünya Senaryosu: Nginx 502 Hatalarını Araştırma

Diyelim ki bir web uygulamasında kullanıcılar intermittent 502 hatası aldığını bildiriyor. İşte bu durumda less’i nasıl kullanırdım:

# Önce son birkaç saatin error loguna bak
tail -2000 /var/log/nginx/error.log | less

# less içindeyken /502 yazarak 502 hatalarını ara
# n tuşuyla sonraki, N ile önceki hataya atla

# Daha hedefli: sadece 502 içerenleri filtrele
grep "502" /var/log/nginx/error.log | less

# Zaman damgasıyla birlikte incele
grep "2024/01" /var/log/nginx/error.log | grep "502" | less

# upstream bağlantı hatalarını ara
grep --color=always "upstream" /var/log/nginx/error.log | less -R

# PHP-FPM logunu da incele (502'nin kaynağı orası olabilir)
less /var/log/php8.1-fpm.log
# less içinde /error veya /fatal yazarak kritik hataları bul

Bu iş akışı sayesinde terminali boğmadan, spesifik hataları hızlıca bulabiliyorsun. Özellikle gece saatlerinde stres altında çalışırken bu tür sistematik bir yaklaşım çok değerli.

Gerçek Dünya Senaryosu: Büyük Config Dosyasını Güvenle İnceleme

Devir aldığın bir sunucuda Nginx konfigürasyonunu anlamaya çalışıyorsun. Dosya 800 satır, içinde upstream blokları, server blokları, location direktifleri iç içe geçmiş. İşte böyle bir durumda:

# Tüm nginx config'i birleştirilmiş halde oku
nginx -T 2>/dev/null | less

# less içinde /server_name yazarak virtual host'ları bul
# /upstream yazarak backend tanımlarını bul
# /ssl_certificate yazarak SSL ayarlarını bul

# Sadece nginx.conf'u satır numarasıyla aç
less -N /etc/nginx/nginx.conf

# Tüm site config'lerini sırayla incele
less /etc/nginx/sites-enabled/*
# :n ile sonrakine, :p ile öncekine geç

# Apache için .htaccess dosyalarını bul ve oku
find /var/www -name ".htaccess" | xargs less

Uyari: find + xargs + less kombinasyonunu kullanırken çok sayıda .htaccess dosyası bulunabilir. Her birine :n ile geçmek yerine önce find ile listeyi görüp, tek tek ilgilendiğin dosyaları açman daha pratik olabilir.

Sıkıştırılmış Log Dosyalarını Okuma

Linux log rotasyon sistemleri eski logları genellikle .gz formatında sıkıştırır. error.log.2.gz gibi dosyaları okumak için less’in özel bir kardeşi var: zless. Ama aslında modern less sürümleri bunu otomatik halleder.

# Sıkıştırılmış log dosyasını oku (zless)
zless /var/log/nginx/error.log.2.gz

# Ya da modern less ile doğrudan (lesspipe etkinse)
less /var/log/nginx/error.log.2.gz

# lesspipe'ı etkinleştirme (.bashrc'ye ekle)
eval "$(lesspipe)"

# Birden fazla sıkıştırılmış dosyayı sırayla oku
zless /var/log/nginx/error.log.1.gz /var/log/nginx/error.log.2.gz

# Sıkıştırılmış log içinde grep yap, çıktıyı say
zcat /var/log/nginx/access.log.1.gz | grep "404" | wc -l

Eski tarihlerdeki olayları araştırırken sıkıştırılmış logları açmak zorunda kalmak gereksiz disk kullanımı yaratır. zless veya lesspipe entegrasyonu bu sorunu tamamen ortadan kaldırır.

Yatay Kaydırma ve Uzun Satırlar

Access log dosyalarında satırlar bazen terminal genişliğini aşar. Varsayılan davranışta less bu satırları keser ve devamını görmezsin. Bunu kontrol etmek için:

# Satır kesmeden aç (yatay scroll ile)
less -S /var/log/nginx/access.log

# less içinde yatay kaydırma: Sol/Sag ok tuslari
# ya da Alt+( ve Alt+) ile kaydır

# Kombinasyon: satır numarası + satır kesme yok
less -SN /var/log/nginx/access.log

# JSON log formatındaki access loglar için özellikle kullanışlı
less -S /var/log/nginx/access.json

# Çok uzun satırlı dosyada belirli kolonu arama
less -S /var/log/nginx/access.log
# less içinde /"POST /api" yazarak API isteklerini bul

JSON formatında log tutan Nginx veya uygulama sunucularında -S bayrağı özellikle değerli. Her satır ayrı bir JSON objesi oluyor ve kesmeden görmek veri bütünlüğünü korur.

Faydalı less Bayrakları Özeti

  • -N: Satır numaralarını göster
  • -S: Uzun satırları kırpma, yatay kaydırmaya izin ver
  • -R: ANSI renk kodlarını işle, renkli çıktı göster
  • -i: Arama yaparken büyük/küçük harf farkını gözetme
  • -F: Dosya tek ekrana sığıyorsa less açmadan direkt göster, çık
  • -X: Çıkışta ekranı temizleme (çıktı terminalde kalsın)
  • -e: Dosya sonuna iki kez ulaşınca otomatik çık
  • +F: Açılışta direkt canlı takip (tail -f) modunda başla
  • -p kelime: Açılışta direkt belirtilen kelimeyi ara ve ona atla

Alias ve Konfigürasyon Önerileri

Günlük iş akışını hızlandırmak için birkaç alias ve ortam değişkeni tanımlamak işini çok kolaylaştırır. Ben .bashrc’me şunları ekledim ve artık düşünmeden kullanıyorum:

# .bashrc veya .zshrc'ye eklenecekler

# Varsayılan less bayrakları: renk + büyük/küçük harf duyarsız arama
export LESS="-R -i"

# lesspipe etkinleştir (sıkıştırılmış dosyalar için)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"

# Nginx logları için kısayollar
alias nginx-error='less /var/log/nginx/error.log'
alias nginx-access='less -S /var/log/nginx/access.log'
alias apache-error='less /var/log/apache2/error.log'

# Canlı takip kısayolları
alias nginx-live='less +F /var/log/nginx/error.log'

# Syslog takibi
alias syslog='less +F /var/log/syslog'

# .bashrc'yi yeniden yükle
source ~/.bashrc

Ipucu: LESS ortam değişkeni less’in her çalışmasında otomatik uygulanır. Bu yüzden sık kullandığın bayrakları buraya taşıyabilirsin. -i bayrağı özellikle log araştırırken çok işine yarar çünkü büyük/küçük harf farkı olmadan Error, ERROR, error hepsini bulur.

less ile more Karşılaştırması

Özelliklessmore
Geri gitme (yukarı scroll)EvetHayir
Arama yapmaEvet (/ ve ?)Sinirli (sadece /)
Canlı takip moduEvet (F tusu)Hayir
Birden fazla dosyaEvet (:n ve :p)Kismi
ANSI renk desteğiEvet (-R ile)Hayir
Satır numarasıEvet (-N ile)Hayir
Sıkıştırılmış dosyaEvet (zless/lesspipe)Hayir

Tablodan da anlaşılacağı gibi more’u kullanmak için gerçekten özel bir sebep yok. Bazı çok eski veya minimal sistemlerde less bulunmayabilir, o zaman more’a mecbur kalabilirsin. Ama eğer seçme şansın varsa her zaman less kullan.

Sonraki Adımlar

less komutunu artık temel düzeyde iyi kullanabiliyorsun. Buradan sonra şu yönlere gidebilirsin:

  • grep + less kombinasyonu: grep’in -A, -B, -C bayraklarını less ile birleştirerek hata etrafındaki bağlamı görmek çok güçlü bir yöntem. Örneğin hata satırının öncesi ve sonrasını birlikte analiz edebilirsin.
  • multitail: Birden fazla log dosyasını aynı anda, ekranı bölerek takip etmek istiyorsan multitail aracına bak. Özellikle birden fazla servis birlikte debug edilirken çok kullanışlı.
  • lnav: Log dosyaları için geliştirilmiş, renkli ve yapısal analiz yapabilen bir sayfalayıcı. JSON loglarını otomatik parse ediyor, SQL benzeri sorgular bile yazabiliyorsun.
  • gzip log rotasyonu: logrotate konfigürasyonunu öğrenmek, eski logların düzgün sıkıştırılıp yönetilmesi için çok önemli. zless ile de pekiştirdiğin bilgiyle eski logları rahatlıkla okuyabilirsin.
  • lesskey: less’in kendi konfigürasyon dosyası olan lesskey ile kişisel kısayollar tanımlayabilirsin. Çok ileri düzey bir ihtiyaç ama varoluşundan haberdar olmak iyi.

less bir terminal aracı olarak sade görünebilir ama doğru kullandığında log analizi ve dosya inceleme süreçlerini ciddi ölçüde hızlandırır. Özellikle web sunucusu yönetiminde günde onlarca kez kullandığın bir araç haline gelecek. Kısayolları ezberledikçe ve pipe kombinasyonlarına alıştıkça terminalde gerçekten uçtuğunu hissedersin.

cat Komutu: Dosya İçeriği Görüntüleme ve Birleştirme Rehberi

Linux dünyasında her gün onlarca kez kullandığın cat komutu, göründüğünden çok daha yetenekli bir araç. Dosya okumaktan log analizi yapmaya, config birleştirmekten veri akışı oluşturmaya kadar uzanan geniş kullanım alanlarını gerçek sunucu senaryolarıyla anlattım.

Sysadmin olarak yıllar içinde fark ettim ki en basit araçlar çoğu zaman en fazla işe yarayan araçlar oluyor. cat komutu tam olarak böyle bir araç. İsmini “concatenate” yani birleştirme kelimesinden alıyor ama çoğu insan onu sadece dosya okumak için kullanıyor. Oysa bir web sunucusu yönetiyorsan, log dosyalarından config karşılaştırmalarına kadar pek çok kritik işte cat sana zaman kazandırır. Gelin bu komutu gerçekten tanıyalım.

cat Nedir ve Ne Yapar?

cat, Unix/Linux sistemlerde dosya içeriklerini standart çıktıya yazan temel bir araçtır. 1971’den bu yana Unix’in ayrılmaz bir parçası olan bu komut, POSIX standardının zorunlu araçları arasında yer alır. Yani hangi Linux dağıtımında çalışıyor olursan ol, cat orada seni bekliyor olacak. Nginx mi, Apache mi, Ubuntu mu, CentOS mu — fark etmez.

Temel söz dizimi son derece basit:

# Temel kullanim
cat [secenek] [dosya...]

# Tek dosya okuma
cat /etc/hostname

# Birden fazla dosya okuma
cat /etc/hostname /etc/os-release

# Standart girdi okuma (CTRL+D ile bitir)
cat

Bu kadar basit görünen bir komutun neden ayrı bir yazı hak ettiğini sorabilirsin. Cevap şu: cat’i sadece “dosya açma” komutu olarak görmek, bir tornavidayı sadece vida sıkmak için kullanmak gibi. Gelin seçeneklere ve gerçek senaryolara geçelim.

Temel Seçenekler ve Anlamları

cat komutunun fazla seçeneği yok ama olanlar oldukça işe yarıyor. Özellikle web sunucusu config dosyalarını incelerken bunları çok kullanacaksın.

SeçenekUzun HaliAçıklama
-n–numberTüm satırlara numara ekler
-b–number-nonblankSadece boş olmayan satırlara numara ekler
-s–squeeze-blankBirden fazla boş satırı tek boş satıra indirir
-A–show-allTüm görünmez karakterleri gösterir
-E–show-endsSatır sonlarını $ ile gösterir
-T–show-tabsTab karakterlerini ^I olarak gösterir
-v–show-nonprintingYazdırılamayan karakterleri gösterir

Bu seçenekleri pratikte nasıl kullandığını görelim. Özellikle -n ve -A seçenekleri web sunucusu config dosyalarında hata ayıklarken hayat kurtarıcı oluyor.

# Satir numaralariyla nginx config dosyasini oku
cat -n /etc/nginx/nginx.conf

# Apache virtual host dosyasini satir numaralariyla goster
cat -n /etc/apache2/sites-enabled/000-default.conf

# Gizli karakterleri goster (tab ve satir sonu dahil)
# Config dosyasinda sekme/bosluk karisikligini tespit etmek icin mukemmel
cat -A /etc/nginx/sites-available/mysite.conf

# Bos olmayan satirlara numara ekle, coklu boslugu sikistir
cat -bs /etc/nginx/nginx.conf

# Sadece satir sonlarini goster (Windows CRLF sorununu tespit et)
cat -E /etc/apache2/.htaccess

Ipucu: Windows’tan FTP ile yüklenen config dosyaları bazen CRLF satır sonları içerir. cat -A komutu bu satırların sonunda ^M$ gösterir. Apache veya Nginx bunu parse edemez ve seni saatlerce hata ayıklamaya mahkum eder. Bu yüzden config dosyalarını düzenlerken her zaman -A ile bir kontrol yap.

Web Sunucusu Log Dosyalarını Okumak

Web sunucusu yönetiminin en kritik parçalarından biri log okumaktır. Apache ve Nginx’in access log ile error log dosyaları, sitenle ne olduğunu anlaman için birincil kaynakların. cat burada genellikle diğer araçlarla birlikte pipeline içinde kullanılır.

# Nginx access log dosyasini oku
cat /var/log/nginx/access.log

# Apache error log dosyasini oku
cat /var/log/apache2/error.log

# Birden fazla log dosyasini birlestirip oku
# Ornegin: birden fazla virtual host logu tek seferde
cat /var/log/nginx/site1-access.log /var/log/nginx/site2-access.log

# Log icerigini grep ile filtrele - 500 hatalarini bul
cat /var/log/nginx/access.log | grep " 500 "

# Son 100 satiri bul (cat + tail kombinasyonu)
cat /var/log/apache2/error.log | tail -100

# IP adreslerine gore erisim sayisi (cat + awk + sort)
cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20

# Belirli bir tarih icin log satirlarini filtrele
cat /var/log/nginx/access.log | grep "14/Jan/2025"

Uyari: Büyük log dosyalarında cat kullanırken dikkatli ol. Gigabaytlarca büyümüş bir access.log dosyasını cat ile açmak terminali uzun süre kitleyebilir ve sisteme gereksiz I/O yükü bindirir. Bu tür durumlarda tail, less veya grep doğrudan daha iyi tercihlerdir. cat’i büyük dosyalar için pipeline’ın başında kullanmak yerine, grep veya awk’a doğrudan dosya argümanı vermek daha verimlidir.

Dosya Birleştirme: cat’in Asıl Gücü

cat komutunun adının nereden geldiğini hatırlıyor musun? Concatenate — birleştirme. İşte bu özelliği web sunucusu yönetiminde gerçekten çok işe yarıyor. SSL sertifika dosyalarını birleştirmek, birden fazla config parçasını tek dosyaya toplamak, yedek log dosyalarını arşivlemek gibi senaryolarda cat olmadan yaşayamazsın.

# SSL sertifika zinciri olusturma (en klasik kullanim senaryosu)
# Once site sertifikasi, sonra intermediate CA, sonra root CA
cat domain.crt intermediate.crt root.crt > fullchain.pem

# Sertifika ve ozel anahtari birlestir (bazı uygulamalar ister)
cat domain.crt domain.key > combined.pem

# Let's Encrypt ile manuel zincir olusturma
cat /etc/letsencrypt/live/example.com/cert.pem 
    /etc/letsencrypt/live/example.com/chain.pem > /etc/ssl/example_fullchain.pem

# Birden fazla .htaccess parcasini birlestir
cat htaccess-security.txt htaccess-redirects.txt htaccess-cache.txt > .htaccess

# Nginx include dosyalarini tek dosyada topla (debug icin)
cat /etc/nginx/conf.d/*.conf > /tmp/nginx-all-configs.txt

# Apache config parcalarini birlestir
cat /etc/apache2/conf-enabled/*.conf > /tmp/apache-merged.conf

Ipucu: SSL sertifika zinciri oluştururken sıralama kritiktir. Her zaman domain sertifikasını önce, root CA’yı en sona koy. Sırayı karıştırırsan tarayıcılar sertifikayı güvensiz olarak işaretler ve müşterilerinden şikayet gelmeye başlar.

Dosyaya Yazmak: Yönlendirme Operatörleriyle cat

cat komutunu yönlendirme operatörleriyle birlikte kullanmak, hızlı dosya oluşturma ve içerik ekleme için son derece pratik. Özellikle bir sunucuya bağlandığında editör kurmak istemediğin durumlarda ya da script içinde hızlıca bir dosya oluşturman gerektiğinde çok işe yarıyor.

# Yeni bir dosya olustur ve icerik gir (CTRL+D ile bitir)
cat > /etc/nginx/conf.d/custom-headers.conf

# Var olan dosyaya icerik ekle (ustune yazmaz)
cat >> /var/log/deployment.log

# Heredoc ile script icinde dosya olustur
cat > /etc/nginx/conf.d/security.conf < /etc/nginx/nginx.conf.backup

# Bos dosya olustur (touch gibi ama farklı)
cat /dev/null > /var/log/myapp/app.log

# Deployment notunu log dosyasina ekle
echo "=== Deployment: $(date) ===" | cat - /tmp/changelog.txt >> /var/log/deployment.log

Uyari: Tek büyüktür işareti ( > ) hedef dosyanın üzerine yazar ve eski içeriği siler. Bunu production ortamında yanlış dosyaya yönlendirirsen geri dönüşü olmayan veri kaybı yaşarsın. Her zaman iki kez kontrol et. Mümkün olduğunca önemli dosyalara yazmadan önce yedeğini al.

Gerçek Dünya Senaryo: Web Sunucusu Sorun Tespiti

Diyelim ki gece 2’de telefon çaldı, sitenin down olduğunu söylüyorlar. SSH ile sunucuya bağlandın. Tam olarak ne kullanacaksın? İşte bu noktada cat ve arkadaşları devreye giriyor.

# Adim 1: Nginx durumunu kontrol et
systemctl status nginx

# Adim 2: Son hatalara bak
cat /var/log/nginx/error.log | tail -50

# Adim 3: Config dosyasinda syntax sorunu var mi?
cat -n /etc/nginx/nginx.conf | grep -n "server_name|listen|root"

# Adim 4: Virtual host config dosyasini incele
cat -n /etc/nginx/sites-enabled/production.conf

# Adim 5: PHP-FPM soket/port ayarini kontrol et
cat /etc/nginx/sites-enabled/production.conf | grep fastcgi_pass

# Adim 6: PHP-FPM pool config ile eslesip eslesmedigini karsilastir
cat /etc/php/8.2/fpm/pool.d/www.conf | grep "^listen"

# Adim 7: Disk dolulugunu hizlica kontrol et (full disk = log yazamiyor = crash)
cat /proc/mounts | grep -v tmpfs
df -h

# Adim 8: Erisim logunda anormal trafik var mi?
cat /var/log/nginx/access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -5

Bu akışı standart bir troubleshooting runbook’una koyabilirsin. Ekibindeki junior sysadmin’lere de öğrettiğinde, gece aramalarını azaltabilirsin.

Config Dosyası Karşılaştırma ve Yönetim

Web sunucusu yönetiminde config dosyaları kutsal metinler gibidir. Neyin ne zaman değiştiğini takip etmek, eski konfigürasyona dönmek ya da iki sunucu arasındaki farkı anlamak için cat’i diff ve diğer araçlarla birlikte sık kullanırsın.

# Mevcut nginx config ile yedeği karsilastir
diff <(cat /etc/nginx/nginx.conf) <(cat /etc/nginx/nginx.conf.backup)

# Iki sunucudaki config farkini bul (SSH uzerinden)
diff <(cat /etc/nginx/nginx.conf)  /tmp/all-nginx-configs.txt
cat /tmp/all-nginx-configs.txt

tac, zcat ve Türevleri: Bilmene Değer Kardeşler

cat’in bazı kardeşleri var ve bunlar da web sunucusu yönetiminde işe yarıyor. Bunları öğrenmek için ayrı saatler harcamana gerek yok ama isimlerini ve ne yaptıklarını bilmek, doğru zamanda doğru aracı seçmeni sağlar.

  • tac: cat’in tersine çalışır, dosyayı sondan başa okur. Log dosyasının son satırlarını önce görmek için kullanılır.
  • zcat: Sıkıştırılmış .gz dosyalarını açmadan okur. Rotasyon yapılmış log arşivlerini okurken hayat kurtarır.
  • bzcat: bzip2 ile sıkıştırılmış dosyaları okur.
  • xzcat: xz formatındaki dosyaları okur.
# Log dosyasini sondan basa oku (en yeni kayit once)
tac /var/log/nginx/access.log | head -20

# Rotasyon yapilmis gz logunu acmadan oku
zcat /var/log/nginx/access.log.1.gz

# Tum rotasyon loglarini birden ara
zcat /var/log/nginx/access.log.*.gz | grep "500"

# Eski ve yeni loglari birlestir
zcat /var/log/apache2/access.log.2.gz | cat - /var/log/apache2/access.log > /tmp/merged-access.log

# Log rotasyon arsivlerini tarih sirali birlestir
ls -t /var/log/nginx/access.log*.gz | xargs zcat | cat - /var/log/nginx/access.log > /tmp/full-history.log

Performans ve Dikkat Edilmesi Gerekenler

cat kullanırken bilmen gereken birkaç önemli nokta var. Bu noktaları göz ardı edersen, production ortamında istemediğin sonuçlarla karşılaşabilirsin.

Uyari: “Useless Use of Cat” (UUOC) olarak bilinen anti-pattern’den kaçın. Örneğin cat dosya | grep pattern yerine grep pattern dosya kullanmak hem daha hızlı hem de daha az sistem kaynağı tüketir. Büyük log dosyalarında bu fark önemli hale gelir.

Uyari: Binary dosyaları cat ile açmaya çalışma. Terminali bozabilir, beklenmedik kontrol karakterleri çalıştırabilir. Şüpheli bir dosyayı önce file komut ile kontrol et.

Ipucu: Büyük dosyalarla çalışırken cat yerine less veya more kullanmak terminali kitlemez ve geriye ileri gitme imkanı tanır. Sadece tüm içeriği pipeline’a aktarman gerektiğinde cat tercih et.

Sonraki Adımlar

cat komutunu artık sadece dosya açan bir araç olarak görmüyorsundur umarım. Web sunucusu yönetiminde bu komutu günlük rutininin bir parçası haline getirdiğinde, troubleshooting sürelerin kısalacak ve config yönetimi çok daha düzenli hale gelecek.

cat’i daha verimli kullanmak için şu araçları da öğrenmeni öneririm:

  • less ve more: Büyük dosyaları sayfalayarak okumak için. Özellikle GB’lık log dosyalarında cat’in yerini tutarlar.
  • grep: cat ile pipeline oluşturarak log filtreleme işlerini otomatize etmek için olmazsa olmaz.
  • awk ve sed: cat’ten gelen veriyi işlemek, dönüştürmek ve rapor oluşturmak için güçlü araçlar.
  • tail -f: Gerçek zamanlı log izleme için cat’in yerini tutan araç. Aktif bir web sunucusunda hataları anlık görmek için kullanılır.
  • diff: cat ile birleştirdiğinde config dosyalarını karşılaştırma süreçlerini otomatize edebilirsin.

Bir sonraki yazıda tail ve head komutlarını web sunucusu log yönetimi perspektifinden ele alacağım. O yazıda cat ile birlikte nasıl güçlü bir log analiz pipeline’ı oluşturabileceğini de göreceğiz. Sorularını yorumlara bırakabilirsin.