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.