← Bash tools
TEKNİK REHBER BASH TOOLS DOSYA GÖRÜNTÜLEME 2026

head ve tail
dosyanın başı ve kuyruğu

Büyük dosyalarda sadece ihtiyacın kadarını göster. head ilk N satırı verir; tail son N satırı ve canlı log takibini (-f) sağlar. Birlikte dosyanın herhangi bir bölümünü okuma aracına dönüşürler.

00 Ne için kullanılır?

GB'lık log dosyasını cat ile açmak terminali kilitler. head ve tail sadece ihtiyacın olan kısmı verir.

İkisinin de olmadığı durumlar nadirdir: büyük bir dosyanın biçimini anlamak için head, son hataları görmek için tail, canlı uygulama çıktısını izlemek için tail -f.

bash
# Hızlı önizleme
head -5 /etc/passwd
tail -5 /var/log/syslog

# Canlı takip
tail -f /var/log/nginx/error.log

# Dosyanın ortasını kes: 51-60. satırlar
head -60 büyük.txt | tail -10
VARSAYILAN

Hem head hem tail, bayrak verilmezse 10 satır gösterir. Bu tek akılda tutulması gereken kural.

01 head: ilk N satır ve byte

head en basit araçlardan biri — fakat byte modu ve çoklu dosya desteği sık unutulur.

bash
# İlk 10 satır (varsayılan)
head dosya.txt

# İlk N satır
head -n 20 dosya.txt
head -20 dosya.txt         # kısa form

# İlk N byte
head -c 512 binary.bin     # 512 byte
head -c 1K dosya.txt       # 1024 byte
head -c 1M buyuk.log       # 1 MB

# Çoklu dosya: başlık ekler
head -5 /etc/passwd /etc/group
==> /etc/passwd <==
root:x:0:0:root:/root:/bin/bash
...

==> /etc/group <==
root:x:0:
...

# Başlık olmadan çoklu dosya
head -q -5 *.log

# Hep başlık göster (tek dosyada da)
head -v -5 dosya.txt
-n N
İlk N satırı göster. Kısa form: -N
-c N
İlk N byte'ı göster. K/M/G sonekleri desteklenir
-q
Quiet — çoklu dosyada dosya adı başlığı bastırma
-v
Verbose — tek dosyada bile başlık göster

02 head: negatif sayı — son N hariç hepsi

GNU head'in güçlü ama az bilinen özelliği: -n -N (negatif), son N satır hariç tüm dosyayı verir.

bash
# Son 1 satır hariç hepsini göster (tail başlığını at)
head -n -1 dosya.txt

# Son 3 satır hariç hepsini göster
head -n -3 dosya.txt

# Kullanım: CSV'nin son (toplam) satırını hariç tut
head -n -1 rapor.csv | awk -F',' '{sum += $3} END {print sum}'

# Son N byte hariç hepsi
head -c -1024 dosya.bin   # son 1024 byte hariç

# Satır sayısını önce öğren, sonra hesapla (alternatif)
wc -l dosya.txt
1500 dosya.txt
head -n 1497 dosya.txt    # son 3 hariç (1500-3=1497)
GNU-ONLY

Negatif -n GNU coreutils özelliğidir. macOS'taki BSD head desteklemez. macOS'ta brew install coreutilsghead ile kullanılabilir.

03 tail: son N satır ve +N konumu

tail'in en önemli ama sık atlanan özelliği: +N ile N. satırdan başlayarak sonuna kadar okuyabilirsiniz.

bash
# Son 10 satır (varsayılan)
tail dosya.txt

# Son N satır
tail -n 30 /var/log/syslog
tail -30 /var/log/syslog    # kısa form

# Son N byte
tail -c 512 dosya.bin

# +N: N. satırdan itibaren sonuna kadar (CSV başlığını atla)
tail -n +2 veri.csv          # 1. satırı (başlık) atla
tail -n +11 dosya.txt        # 11. satırdan başla (ilk 10 atla)

# +N ile head birlikte: belirli satır aralığı
tail -n +51 dosya.txt | head -10  # 51-60. satırlar

# Çoklu dosya
tail -5 /var/log/*.log

# Quiet mod (başlık olmadan)
tail -q -5 *.log
-n N
Son N satır. +N ile N. satırdan itibaren sonuna kadar
-c N
Son N byte. +N ile N. byte'tan itibaren
-q
Quiet — çoklu dosyada başlık bastırma
-v
Verbose — tek dosyada da başlık göster
+N KULLANIMI

tail -n +2 dosya.csv CSV başlığını (1. satırı) atlayarak veri satırlarını verir. Pipe'la birleşince işleme scripti için hazır: tail -n +2 data.csv | awk -F, '{...}'

04 tail -f: canlı log takibi

tail -f dosyaya yazılan yeni satırları gerçek zamanlı gösterir. Uygulama geliştirme ve sistem izlemenin vazgeçilmezi.

bash
# Canlı log takibi (Ctrl+C ile dur)
tail -f /var/log/nginx/access.log

# Son 50 satırı göster, sonra yeni gelenleri takip et
tail -n 50 -f /var/log/syslog

# grep ile filtrele: sadece ERROR satırları canlı izle
tail -f app.log | grep --line-buffered 'ERROR'

# Birden fazla dosyayı aynı anda takip et
tail -f /var/log/nginx/access.log /var/log/nginx/error.log

# Belirli PID çıkınca dur
tail -f --pid=$$ app.log     # bu kabuk kapanınca dur
tail -f --pid=1234 app.log  # PID 1234 ölünce dur

# -s: kontrol aralığı (saniye, varsayılan 1.0)
tail -f -s 0.1 app.log       # 100ms aralık, daha duyarlı
-f
Follow — dosyaya append edilen yeni satırları göster
--pid=PID
Belirtilen PID öldüğünde -f'yi durdur
-s N
Kontrol aralığı saniye (varsayılan 1.0)
--line-buffered

tail -f app.log | grep 'ERROR' bazen satırları tamponlar — çıktı geç geliyorsa grep --line-buffered ekleyin. Benzer şekilde awk için awk 'BEGIN{OFMT="%s\n"} {fflush()}' kullanılabilir.

05 tail -F: log rotasyonunu takip et

-f inode'u takip eder; log rotate olduğunda eski dosyayı izlemeye devam eder. -F ise dosya adını takip eder ve yeniden açılan dosyayla devam eder.

bash
# -F: adı takip et (logrotate/copytruncate güvenli)
tail -F /var/log/nginx/access.log

# -F = --follow=name --retry
tail --follow=name --retry /var/log/app.log

# -f ile -F farkı:
# -f  → inode takip: logrotate sonrası eski dosyayı okur
# -F  → ad takip: yeni access.log açılınca ona geçer
SeçenekNe takip ederLog rotate sonrasıDosya silinirse
-finodeEski dosyayı okumaya devamHata vermeden bekler
-FDosya adıYeni dosyayı açarDosya dönene kadar yeniden dener
ÖNERİ

Sistemde logrotate varsa (çoğu Linux sunucusunda vardır) -F kullanın. Geliştirme ortamında sabit dosyaları izlerken -f yeterlidir.

06 Çoklu dosya ve kombinasyonlar

Birden fazla dosya takibi, head + tail ile dilim alma ve araçlarla birleştirme.

bash
# Çoklu dosya canlı takip (başlık gösterir)
tail -F /var/log/nginx/*.log /var/log/app.log

# multitail varsa (renkli, bölünmüş ekran)
multitail /var/log/nginx/access.log /var/log/nginx/error.log

# journalctl ile (systemd logları)
journalctl -u nginx -f
journalctl -f                    # tüm sistem logları

# head + tail: dosyadan satır aralığı seç
sed -n '51,60p' dosya.txt       # sed ile (daha temiz)
head -n 60 dosya.txt | tail -n 10  # 51-60. satırlar
tail -n +51 dosya.txt | head -n 10  # daha verimli (tüm dosya okunmaz)

# İlk satır (başlık), sonra 100 rastgele örnek
head -1 veri.csv
tail -n +2 veri.csv | shuf | head -100

# watch ile periyodik tail (grafik terminaller için)
watch -n 2 'tail -20 /var/log/syslog'
BÜYÜK DOSYALARDA VERİMLİLİK

tail -n +51 | head -10, head -60 | tail -10'dan daha verimlidir: ikinci versiyon dosyanın ilk 60 satırını tampon belleğe alır; birinci ise 50. satıra kadar atlar ve 10 satır okur. Dosya büyüdükçe fark önemli olur.

07 Pratik vakalar

Günlük kullanımda sık karşılaşılan senaryolar.

bash — Hata logunu sadece yeni satırlarla izle
# ERROR içeren satırları renklendirerek takip et
tail -F /var/log/app/error.log \
  | grep --line-buffered --color=always -E 'ERROR|WARN|INFO'
bash — CSV başlığını koru, veriyi filtrele
# Başlığı al, veriyi filtrele, birleştir
head -1 kullanicilar.csv > sonuc.csv
tail -n +2 kullanicilar.csv | grep 'aktif' >> sonuc.csv
bash — Son N deployment logunu göster
# Deploy tarihleri /var/log/deploy.log'da
grep 'DEPLOY' /var/log/deploy.log | tail -10

# Pod logunu ilk 100 satır (crash loop debug)
kubectl logs mypod | head -100
bash — Dosya büyümesini izle
# Dosya boyutu değiştikçe son satırları tekrar göster
tail -f /var/log/syslog &
sleep 30
kill %1

# Üretilen satır hızını ölç (saniyede kaç satır?)
tail -f app.log | pv -l -r > /dev/null

Hatırlanacaklar

  • Varsayılan 10 satır — head dosya ve tail dosya eşdeğer
  • head -n -3: son 3 satır hariç hepsi (GNU'ya özgü)
  • tail -n +2: 2. satırdan sona — CSV başlığını atlamak için klasik
  • tail -f: inode takip; -F: ad takip (logrotate için doğrusu)
  • tail -n +51 | head -10 dizin aralığı için head -60 | tail -10'dan hızlı
  • grep --line-buffered: pipe'ta gerçek zamanlı çıktı için gerekli

Devam: cat, less — dosya okuma ve sayfalama · sort, uniq — sıralama ve tekilleştirme