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 PgDn | Bir sayfa aşağı git |
| b veya PgUp | Bir sayfa yukarı git |
| j veya Asagi Ok | Bir satır aşağı git |
| k veya Yukari Ok | Bir satır yukarı git |
| g | Dosyanın en başına git |
| G | Dosyanın en sonuna git |
| /kelime | Aşağı doğru ara |
| ?kelime | Yukarı doğru ara |
| n | Sonraki arama sonucuna git |
| N | Önceki arama sonucuna git |
| q | Çık |
| h | Yardım ekranını aç |
| :n | Sonraki dosyaya geç (çoklu dosyada) |
| :p | Önceki dosyaya geç (çoklu dosyada) |
| F | Dosyayı 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ı
| Özellik | less | more |
|---|---|---|
| Geri gitme (yukarı scroll) | Evet | Hayir |
| Arama yapma | Evet (/ ve ?) | Sinirli (sadece /) |
| Canlı takip modu | Evet (F tusu) | Hayir |
| Birden fazla dosya | Evet (:n ve :p) | Kismi |
| ANSI renk desteği | Evet (-R ile) | Hayir |
| Satır numarası | Evet (-N ile) | Hayir |
| Sıkıştırılmış dosya | Evet (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.
