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.