Linux Komut Satırında Veri Analizi: grep, awk ve sed ile Güçlü Arama ve Dönüştürme Teknikleri
Linux komut satırında grep, awk ve sed araçlarını kullanarak verileri nasıl analiz edebileceğinizi ve dönüştürebileceğinizi öğrenin. Teknik mülakatlarda sıkça sorulan bu konuları pratik örneklerle keşfedin.
Caner Serbest
Sistem ve Altyapı
5 min read
Veri analizi ve dönüştürme, Linux sistemlerinde ve teknik mülakatlarda sıkça karşılaşılan kritik bir yetenektir. Özellikle büyük log dosyaları, konfigürasyon dosyaları veya veri tabanı çıktıları üzerinde çalışırken, doğru araçları kullanmak işinizi büyük ölçüde kolaylaştırabilir. Bu yazıda, grep, awk ve sed komutlarını derinlemesine inceleyecek ve gerçek dünya senaryolarında nasıl kullanabileceğinizi göstereceğiz.
1. grep: Metin Arama ve Filtreleme Aracı
grep (Global Regular Expression Print), metin dosyalarında belirli desenleri aramak için kullanılan en temel Linux komutlarından biridir. Teknik mülakatlarda sıkça sorulan bu araç, log dosyalarını analiz ederken, kod içerisinde hata ayıklarken veya basit metin aramalarında oldukça kullanışlıdır.
Temel Kullanım
# Bir dosyada belirli bir kelimeyi arama
grep "error" /var/log/syslog
# Büyük/küçük harf duyarlılığını kaldırma
grep -i "warning" /var/log/nginx/error.log
# Satır numaralarını gösterme
grep -n "404" /var/log/nginx/access.log
# Birden fazla desen arama
grep -e "error" -e "warning" /var/log/syslog
Gelişmiş Kullanım
# Belirli bir desenle eşleşen satırları dışarıda bırakma
grep -v "success" /var/log/application.log
# Düzenli ifadelerle arama
grep -E "(error|fail)" /var/log/nginx/error.log # -E, extended regex kullanır
# Dosya adlarını bulma (örneğin, .conf uzantılı dosyalar)
find /etc -type f -name "*.conf" | xargs grep "server_name"
Teknik Mülakatta Karşılaşabileceğiniz Sorular
-
grepkomutunda-rve-lseçeneklerinin farkı nedir?-r: Rekürsif arama (alt dizinlere de bak).-l: Eşleşen desenleri içeren dosya adlarını listele.
-
Bir log dosyasında son 100 satırda “timeout” kelimesini nasıl ararsınız?
tail -n 100 /var/log/nginx/error.log | grep “timeout”
---
## **2. awk: Metin İşleme ve Raporlama Aracı**
`awk`, metin dosyalarını satır satır okuyarak, belirli sütunları çıkarmak, hesaplamalar yapmak ve raporlar oluşturmak için kullanılan güçlü bir komuttur. Özellikle CSV dosyaları, log dosyaları veya yapılandırılmış metin verileri üzerinde çalışırken oldukça faydalıdır.
### **Temel Kullanım**
```bash
# Bir dosyada belirli bir sütunu çıkarma
awk '{print $1}' /etc/passwd # İlk sütunu (kullanıcı adı) yazdır
# Belirli bir sütuna göre filtreleme
awk '$3 > 1000 {print $1}' /etc/passwd # 3. sütun değeri 1000'den büyük olan satırların 1. sütununu yazdır
# Ayraç değiştirme
awk -F: '{print $1}' /etc/passwd # : ayracını kullanarak sütunları ayır
Gelişmiş Kullanım
# Bir log dosyasından IP adreslerini ve istek sayılarını çıkarma
awk '{print $1}' /var/log/nginx/access.log | sort | uniq -c | sort -nr
# Toplam istek sayısını hesaplama
awk '{sum += $9} END {print sum}' /var/log/nginx/access.log
# Belirli bir durum kodu için sayım yapma (örneğin, 404)
awk '$9 == 404 {count++} END {print count}' /var/log/nginx/access.log
Teknik Mülakatta Karşılaşabileceğiniz Sorular
-
awkkomutundaBEGINveENDbloklarının kullanımı nedir?BEGIN: Dosya okunmaya başlamadan önce çalıştırılacak komutlar.END: Dosya okunması tamamlandıktan sonra çalıştırılacak komutlar.
-
Bir log dosyasından en sık erişilen URL’leri nasıl bulursunuz?
awk ‘{print $7}’ /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 10
---
## **3. sed: Metin Dönüştürme ve Düzenleme Aracı**
`sed` (Stream Editor), metin akışlarını düzenlemek, değiştirmek ve dönüştürmek için kullanılan bir komuttur. Özellikle dosyaların içinde toplu değişiklikler yaparken, yer değiştirme (replace) işlemlerinde ve metin biçimlendirmede oldukça kullanışlıdır.
### **Temel Kullanım**
```bash
# Bir dosyada belirli bir kelimeyi değiştirme
sed 's/old_word/new_word/g' dosya.txt
# Belirli satırları silme
sed '5,10d' dosya.txt # 5. ile 10. satırlar arasında olanları sil
# Satırları ekrana yazdırırken belirli bir desenle eşleşenleri değiştirme
sed -n 's/foo/bar/p' dosya.txt # -n, sadece değiştirilen satırları gösterir
Gelişmiş Kullanım
# Birden fazla değiştirme işlemi yapma
sed -e 's/foo/bar/g' -e 's/baz/qux/g' dosya.txt
# Dosyaya doğrudan değişiklik yapma (orijinal dosyayı değiştirir)
sed -i 's/old/new/g' dosya.txt
# Düzenli ifadelerle karmaşık değişiklikler
sed -E 's/([0-9]{3})-([0-9]{3})-([0-9]{4})/(\1) \2-\3/g' dosya.txt # Telefon numarası formatlama
Teknik Mülakatta Karşılaşabileceğiniz Sorular
-
sedkomutunda-iseçeneği ne işe yarar?-i: Dosyaya doğrudan değişiklik yapar (orijinal dosyayı değiştirir).
-
Bir log dosyasındaki tarihleri
YYYY-MM-DDformatına nasıl dönüştürürsünüz?
sed -E ‘s/([0-9]{2})/([0-9]{2})/([0-9]{4})/\3-\1-\2/g’ /var/log/syslog
---
## **4. Gerçek Dünya Senaryolarında Kullanım**
### **Senaryo 1: Web Sunucusu Loglarını Analiz Etme**
Bir web sunucusunun log dosyasında (`/var/log/nginx/access.log`), son bir saatte en çok istek alan URL'leri bulmak istiyorsunuz. Bunun için aşağıdaki komutları kullanabilirsiniz:
```bash
# Son 1 saatteki logları filtreleme
tail -n 1000 /var/log/nginx/access.log | grep "$(date +'%d/%b/%Y:%H:%M:%S')"
# En çok istek alan URL'leri bulma
awk '{print $7}' /var/log/nginx/access.log | sort | uniq -c | sort -nr | head -n 5
Senaryo 2: Kullanıcı Hesaplarını Listeleme
Sistemdeki kullanıcı hesaplarını listelemek ve UID (User ID) değeri 1000’den büyük olanları filtrelemek istiyorsunuz:
awk -F: '$3 > 1000 {print $1, $3}' /etc/passwd | sort -k2 -n
Senaryo 3: Konfigürasyon Dosyalarında Değişiklik Yapma
Birden fazla .conf dosyasında server_name değerini değiştirmek istiyorsunuz:
# Tüm .conf dosyalarında server_name değerini değiştirme
find /etc/nginx -type f -name "*.conf" -exec sed -i 's/server_name old_domain.com/server_name new_domain.com/g' {} \;
5. Teknik Mülakatta Başarılı Olmak İçin İpuçları
-
Pratik Yapın: Bu komutları gerçek log dosyaları üzerinde deneyin. Örneğin,
/var/log/syslogveya/var/log/nginx/access.logüzerinde çalışın. -
Düzenli İfadeleri Öğrenin:
grep,awkvesedkomutlarında sıkça kullanılan düzenli ifadeleri (regex) öğrenin. Örneğin,^,$,*,+,[ ],( )gibi semboller. -
Komutları Zincirleme Kullanın: Birden fazla komutu
|(pipe) operatörüyle zincirleyerek daha karmaşık işlemler yapabilirsiniz. -
Man Sayfalarını Kullanın: Her komutun detaylı kullanımını öğrenmek için
man grep,man awkveman sedkomutlarını kullanın. -
Sık Karşılaşılan Sorulara Hazırlıklı Olun: Mülakatlarda sıkça sorulan sorulara yukarıda yer verdik. Bunları ezberlemek yerine, mantığını anlamaya çalışın.
Sonuç
Linux komut satırında veri analizi yapmak, teknik mülakatlarda ve gerçek dünya senaryolarında oldukça değerli bir yetenektir. grep, awk ve sed komutları, metin dosyalarını analiz etmek, filtrelemek ve dönüştürmek için güçlü araçlardır. Bu komutları etkili bir şekilde kullanmayı öğrenerek, sistem yönetimi, hata ayıklama ve veri analizi gibi alanlarda daha verimli çalışabilirsiniz.
Unutmayın, pratik yapmak bu konuda ustalaşmanın en iyi yoludur. Gerçek log dosyaları üzerinde çalışarak ve farklı senaryolar deneyerek bu komutların kullanımını iyice pekiştirin. İyi çalışmalar!
Kaynaklar:
- Linux man sayfaları (
man grep,man awk,man sed) - GNU Awk Kullanım Kılavuzu
- Sed ve Awk ile Metin İşleme
Yazar Hakkında: Caner Serbest, Linux sistemleri ve açık kaynak yazılımlar üzerine uzmanlaşmış bir yazılım mühendisidir. Teknik mülakatlara hazırlanan adaylara ve sistem yöneticilerine yönelik içerikler üretmektedir.
Bu yazı Mistral ile otomatik oluşturulmuştur.