head Komutu ile Dosyanın İlk Satırlarını Görüntüleme

head komutu, Linux sistemlerde bir dosyanın ilk satırlarını hızlıca görüntülemek için kullanılan temel bir araçtır. Web sunucusu log dosyalarını ve yapılandırma dosyalarını incelerken büyük dosyaları tamamen açmadan önizleme imkanı sunar. Bu yazıda head komutunun söz dizimini ve web sunucusu yönetimindeki pratik kullanım senaryolarını ele alacağız.

head Komutu ile Dosyanın İlk Satırlarını Görüntüleme

Web sunucusu yönetiminde her gün onlarca log dosyasına, konfigürasyon dosyasına ve çıktıya bakman gerekiyor. Bu dosyaların tamamını açmak hem zaman kaybı hem de gereksiz kaynak tüketimi. İşte bu noktada head komutu devreye giriyor. Basit ama bir o kadar güçlü olan bu araç, dosyanın sadece başını sana gösteriyor – ve çoğu zaman ihtiyacın olan tek şey bu.

Bu yazıda head komutunu web sunucusu yönetimi bağlamında, gerçek dünya senaryolarıyla ele alacağız.

head Komutu Nedir?

head, bir dosyanın veya standart girdi akışının ilk N satırını (ya da N byte’ını) ekrana basan bir Unix komutudur. Varsayılan davranışı ilk 10 satırı göstermektir. Hiçbir parametre vermeden kullandığında bu 10 satırı alırsın.

Temel sözdizimi şu şekilde:

head [SECENEK] [DOSYA]

Neden bu kadar önemli? Düşün: 500 MB’lık bir Nginx access log dosyan var. cat ile açmaya kalkarsan terminal çöker, less ile açsan bile dosyanın başına gitmek için zaman harcarsın. head ise anında sonucu verir.

Temel Kullanım

Varsayılan Davranış – İlk 10 Satır

head /var/log/nginx/access.log

Bu komut sana Nginx access log dosyasının ilk 10 satırını getirir. Web sunucusu yeni kurulduysa ya da log rotasyonu yapıldıysa, ilk kayıtların nasıl göründuğunu hızlıca kontrol etmek için idealdir.

Örnek çıktı:

192.168.1.100 - - [15/Jan/2025:08:23:11 +0300] "GET / HTTP/1.1" 200 1234
192.168.1.101 - - [15/Jan/2025:08:23:15 +0300] "GET /index.html HTTP/1.1" 200 5678
...

Satır Sayısını Belirleme

-n parametresiyle kaç satır görmek istediğini söyleyebilirsin:

head -n 20 /var/log/nginx/error.log

Ya da daha kısa yazımla:

head -20 /var/log/nginx/error.log

Her iki kullanım da aynı sonucu verir. Ben genellikle -20 kısa formunu tercih ederim, daha az tuşa basmak gerekiyor.

Web Sunucusu Senaryolarında Kullanım

Senaryo 1 – Nginx Konfigürasyonunun Basini Kontrol Etme

Bir sunucuya yeni bağlandında ve Nginx konfigürasyonunun genel yapısını hızlıca anlamak istediğinde:

head -30 /etc/nginx/nginx.conf

Bu komut sana konfigürasyon dosyasının ilk 30 satırını gösterir. Worker process sayısı, event modeli gibi kritik ayarlar genellikle dosyanın başında olduğu için bu yöntem oldukça etkili.

Senaryo 2 – Apache Access Log Analizi

Apache access log dosyasında en son hangi IP adreslerinin sunucuya ilk istekleri attığını görmek için:

head -50 /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c | sort -rn

Bu pipeline’da ne oluyor:

  • head -50 ilk 50 satiri alıyor
  • awk '{print $1}' sadece IP adreslerini çekiyor
  • sort | uniq -c her IP’nin kaç kez geçtiğini sayıyor
  • sort -rn en çok tekrar edenden başlayarak sıralıyor

Senaryo 3 – Birden Fazla Dosyayı Aynı Anda Kontrol Etme

Birden fazla log dosyasının basini aynı anda görmek istiyorsan:

head -5 /var/log/nginx/access.log /var/log/nginx/error.log /var/log/php8.1-fpm.log

head her dosyanın basini ayrı bir başlıkla gösterir:

==> /var/log/nginx/access.log <==
[ilk 5 satir]

==> /var/log/nginx/error.log <==
[ilk 5 satir]

==> /var/log/php8.1-fpm.log <==
[ilk 5 satir]

Bu özelliği özellikle sabahın köründe servislere ilk bakışta kullanıyorum. Tek komutla sistemin genel durumunu anlıyorum.

Senaryo 4 – SSL Sertifika Dosyasini Kontrol Etme

SSL sertifikasının doğru formatta olup olmadığını hızlıca kontrol etmek için:

head -3 /etc/ssl/certs/sunucu.crt

Beklenen çıktı:

-----BEGIN CERTIFICATE-----
MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw
...

Eğer dosyanın başı -----BEGIN CERTIFICATE----- ile başlamıyorsa, yanlış dosyaya bakıyorsun ya da dosya bozuk demektir.

Uyarı: SSL sertifika dosyalarını düzenlemeden önce mutlaka yedek al. head ile sadece okuma yapıyorsun, bu yüzden güvenli, ama ileride yapacağın işlemlerde dikkatli ol.

-c Parametresi ile Byte Bazlı Okuma

head sadece satır bazlı değil, byte bazlı da çalışabilir. -c parametresi bunu sağlar:

head -c 100 /var/log/nginx/access.log

Bu komut dosyanın ilk 100 byte’ını gösterir. Peki bu ne işe yarar?

  • Dosya formatini doğrulamak için (magic bytes kontrolü)
  • Binary dosyaların basini incelemek için
  • Küçük chunk’lar halinde dosya transferi yaparken test etmek için

Örnek – bir war ya da jar dosyasinin gerçekten Java archive olup olmadığini kontrol etmek:

head -c 4 /opt/tomcat/webapps/uygulama.war | xxd

Çıktıda 504b 0304 görüyorsan (ZIP/JAR magic bytes) dosya geçerlidir.

İpucu: -c parametresini byte boyutunu hızlıca tahmin etmek için kullanabilirsin. Örneğin bir JSON response’unun ilk 200 byte’ına bakarak formatın bozuk olup olmadığını anlayabilirsin.

Pipeline ile Güçlü Kombinasyonlar

grep ile Birlikte

Nginx konfigürasyonunda ilk 50 satır içinde sadece server_name satırlarini bulmak:

head -50 /etc/nginx/sites-enabled/default | grep "server_name"

tail ile Birlikte – Belli Bir Aralik

Bir log dosyasinin 100. ile 150. satırları arasını görmek istiyorsan head ve tail komutlarını birlikte kullanabilirsin:

head -150 /var/log/nginx/access.log | tail -50

Bu kombinasyon şunu yapıyor: önce ilk 150 satırı alıyor, sonra bunların son 50 tanesini gösteriyor. Yani 101-150. satırları elde ediyorsun.

wc ile Birlikte

Log dosyasının ilk 100 satırındaki toplam karakter sayısını bulmak:

head -100 /var/log/apache2/access.log | wc -c

watch ile Birlikte – Gerçek Zamanlı Takip

Bu kombinasyon biraz farklı ama çok işe yarıyor. Bir dosyanın başi periyodik olarak değişiyorsa (örneğin bir queue dosyası veya sıralı işlem listesi):

watch -n 2 'head -20 /var/log/nginx/access.log'

Her 2 saniyede bir ilk 20 satırı yeniden gösterir. tail -f‘nin aksine bu yöntem dosyanın statik başına bakıyor, anlık takip için tail -f daha uygun ama bazı durumlarda watch + head kombinasyonu işe yarıyor.

Gerçek Dünya Senaryosu – Yeni Sunucu Kurulumunda İlk Kontroller

Bir sunucuya yeni bağlandığında şu kontrol listesini head ile hızlıca yapabilirsin:

# Sistem bilgisini kontrol et
head -5 /etc/os-release

# Hostname ve hosts dosyasi
head -10 /etc/hosts

# Nginx kurulu mu ve konfigürasyon basli mi?
head -20 /etc/nginx/nginx.conf

# PHP-FPM havuz ayarlari
head -30 /etc/php/8.1/fpm/pool.d/www.conf

# MySQL/MariaDB konfigürasyonu
head -40 /etc/mysql/mysql.conf.d/mysqld.cnf

Bu scripti bir dosyaya kaydedip yeni sunucularda çalıştırabilirsin. Beş dakika içinde sunucunun genel durumunu anlarsın.

head vs tail – Hangisini Ne Zaman Kullanmalısın?

Bu ikisi sık sık karıştırılır. Kural basit:

  • head: Dosyanın formatını anlamak, ilk kayıtları görmek, konfigürasyon dosyalarını hızlı incelemek için kullan
  • tail: En son logları, aktif hataları, gerçek zamanlı akışı takip etmek için kullan

Web sunucusu log yönetiminde genellikle tail -f kullanırsın çünkü yeni gelen istekleri anlık izlemek istersin. Ama log rotasyonu sonrası yeni oluşan dosyanın dogru başladığından emin olmak için head kullanırsın.

İpucu: Log rotasyonu yaptıktan hemen sonra head -5 /var/log/nginx/access.log ile yeni log dosyasının temiz başladığını doğrula. Eski kayıtlar taşınmış olmamalı.

Büyük Dosyalarda Performans Avantajı

Bu konu çok önemli ama genellikle göz ardı ediliyor. head komutu büyük dosyaları tamamen okumaz. Gerekli satır sayısına ulaştığında okumayı durdurur.

Şöyle düşün: 2 GB’lık bir Apache access log dosyan var.

# Bu komut 2 GB'yi tamamen okur - kötü fikir
cat /var/log/apache2/access.log | head -10

# Bu komut sadece ilk 10 satırı okur - iyi fikir
head -10 /var/log/apache2/access.log

Aralarındaki fark saniyeler ile milisaniyeler arasında olabilir. Üretim sunucusunda I/O yükünü düşük tutmak istiyorsan cat | head yerine doğrudan head kullan.

Uyarı: cat dosya | head -10 şeklindeki kullanım “useless use of cat” antipattern’idir. Bu kullanım gereksiz yere bir süreç daha başlatır ve büyük dosyalarda cat tüm dosyayı okumaya çalışır. Her zaman head -10 dosya formunu tercih et.

Konfigürasyon Dosyası Şablonu Oluşturma

Bazen bir konfigürasyon dosyasının sadece başındaki yorum satırlarını ve temel ayarları başka bir dosyaya kopyalamak istersin:

# Nginx konfigürasyonunun ilk 50 satirini yedege al
head -50 /etc/nginx/nginx.conf > /root/nginx_config_header_backup.txt

# Içerigini dogrula
head -10 /root/nginx_config_header_backup.txt

Ya da mevcut bir konfigürasyonu template olarak kullanmak istersen:

# Var olan konfigürasyonun basindaki genel ayarlari yeni dosyaya kopyala
head -30 /etc/nginx/sites-available/mevcut-site > /etc/nginx/sites-available/yeni-site
echo "" >> /etc/nginx/sites-available/yeni-site
echo "# Buraya yeni site ayarlarini ekle" >> /etc/nginx/sites-available/yeni-site

Sorun Giderme Senaryosu

Diyelim ki bir müşteri sana şikayetle geldi: “Sitemiz sabah 08:00-09:00 arasında yavaşlıyor.” Log analizi yapmak için:

# Kac satir log var bilgisini al
wc -l /var/log/nginx/access.log

# Ilk 100 satirin formatini kontrol et
head -100 /var/log/nginx/access.log

# Saat 08:00 ile baslayan kayıtların bu dosyada olup olmadığini kontrol et
head -500 /var/log/nginx/access.log | grep "08:0"

Bu adımlar sana log formatının doğru olup olmadığını ve problematik zaman dilimine ait kayıtların mevcut dosyada bulunup bulunmadığını gösterir.

Faydalı Aliaslar ve Fonksiyonlar

Günlük kullanım için bashrc’ne şunları ekleyebilirsin:

# Nginx loglarının basini goster
alias nginxhead='head -50 /var/log/nginx/access.log'
alias nginxerr='head -50 /var/log/nginx/error.log'

# Apache için
alias apachehead='head -50 /var/log/apache2/access.log'

# Tüm önemli log baslarini göster
function logcheck() {
    echo "=== NGINX ACCESS ==="
    head -10 /var/log/nginx/access.log
    echo ""
    echo "=== NGINX ERROR ==="
    head -10 /var/log/nginx/error.log
    echo ""
    echo "=== PHP-FPM ==="
    head -10 /var/log/php8.1-fpm.log
}

Bu aliasları tanımladıktan sonra sabah kontrol rutinini tek komutla yapabilirsin:

source ~/.bashrc
logcheck

Sonuç

head komutu, görünürde basit ama web sunucusu yönetiminde günlük hayatın vazgeçilmez parçasi. Özellikle şu durumlar için aklında tutmalısın:

  • Büyük log dosyalarına hızlı göz atmak
  • Konfigürasyon dosyalarının genel yapısını anlamak
  • Log rotasyonu sonrası yeni dosyaları doğrulamak
  • SSL sertifikası ve diğer kritik dosyaların formatını kontrol etmek
  • Pipeline’larda gereksiz I/O yükünden kaçınmak

Tek başına kullandığında bile güçlü olan head, grep, awk, tail ve watch gibi araçlarla birleşince gerçek bir güç merkezi haline geliyor. Komut satırı araçlarının güzelliği de zaten bu – birbirini tamamlayan küçük parçalar.

Bir dahaki sefere büyük bir log dosyasini analiz etmek için cat yazmaya kalktığında dur ve head‘i düşün. I/O yükünü düşür, terminali kirletme, işini hızlıca gör.