Açık Kaynak İşletim Sistemleri

5 - Komut Satırı ve Metin İşleme Araçları

Emre Can Yılmaz

Ondokuz Mayıs Üniversitesi

2026

Bu Hafta

Bu hafta odak noktamız:

Metin çıktısını okumak, filtrelemek, dönüştürmek ve komutları birlikte kullanmak

Öğrenme Hedefleri

Bu dersin sonunda şunları yapabiliyor olmanızı bekliyorum:

  • kısa ve uzun metinleri uygun araçla görüntülemek
  • metin içinde arama yapmak
  • satır / kelime / karakter saymak
  • sütun seçmek ve karakter dönüştürmek
  • basit metin değiştirme işlemleri yapmak
  • komutları | ile birleştirerek daha güçlü hale getirmek

İçerik

  • Zihinsel model: girdi, çıktı ve boru hattı
  • Görüntüleme ve gezinme: cat, tee, head, tail, more, less
  • Arama ve sayma: grep, wc
  • Dönüştürme ve düzenleme: cut, tr, sed
  • Karşılaştırma ve özetleme: diff, sort, uniq, split
  • Hangi durumda hangi komut seçilir?

Zihinsel Model: Girdi ve Çıktı

Bu hafta sık göreceğimiz üç fikir:

  • stdin: komutun okuduğu giriş
  • stdout: komutun ürettiği normal çıktı
  • pipe (|): bir komutun çıktısını başka bir komuta bağlar

Örnek:

cat /etc/passwd | grep '/bin/bash' | wc -l

Bu zincir şu soruyu yanıtlar:

Kabuk olarak /bin/bash kullanan kaç kullanıcı var?

Boru Hattını Nasıl Okumalı?

Yeni başlayanlar için en güvenilir yöntem:

Komutu soldan sağa, her adımda “bu komut ne alıyor, ne veriyor?” diye okuyun.

Örnek:

grep '/bin/bash' /etc/passwd | wc -l

Bu zinciri şöyle okuyabilirsiniz:

  1. grep dosyadan satırları okur.
  2. Eşleşen satırları çıktı olarak üretir.
  3. wc -l bu satırları sayar.

Bu düşünme biçimi, ileride daha uzun zincirleri de çözmenizi sağlar.

Önce Komutu Seç, Sonra Yaz

Yeni başlayanların en sık hatası: komutu ezberlemeye çalışmak.

Daha iyi yaklaşım:

  1. Ne yapmak istediğini söyle.
  2. İşi küçük parçalara ayır.
  3. Her parça için uygun komutu seç.

Örnek:

  • “Dosyada hata geçen satırları bul” → grep
  • “Kaç tane olduğunu say” → wc -l
  • “İlk 5 satıra bak” → head -n 5

cat

cat, dosya içeriğini standart çıkışa yazar.

Adı concatenate kelimesinden gelir; yani birden fazla dosyayı art arda da gösterebilir.

echo "Test İçeriği" > ornek.txt
cat ornek.txt

Beklenen çıktı:

Test İçeriği

cat ne zaman uygun?

Uygun olduğu durumlar:

  • kısa dosyaları hızlıca görmek
  • birden fazla dosyayı art arda göstermek
  • başka komutlara girdi vermek
echo selam > selam1.txt
echo dunya > selam2.txt
cat selam1.txt selam2.txt

Uzun dosyalarda çoğu zaman less daha uygundur.

tee

tee, gelen veriyi hem ekrana yazar hem de dosyaya kaydeder.

Bu, özellikle boru hattında çok kullanışlıdır.

echo "Merhaba" | tee metin.txt

Beklenen sonuç:

  • ekranda Merhaba görünür
  • aynı içerik metin.txt dosyasına yazılır

tee neden faydalı?

Örneğin bir komut çıktısını hem görmek hem saklamak isteyebilirsiniz:

ls -l /etc | tee liste.txt

Dosyanın sonuna eklemek için:

echo "yeni satır" | tee -a metin.txt

Not: tee, geçen haftaki > ve >> yönlendirmelerinin daha esnek bir akrabası gibi düşünülebilir.

head ve tail

Bir dosyanın tamamını görmek yerine bazen sadece başını veya sonunu görmek isteriz.

  • head: ilk satırlar
  • tail: son satırlar
head -n 2 beni.oku
tail -n 2 beni.oku

Varsayılan olarak genelde 10 satır gösterirler.

head örnekleri

head beni.oku
head -n 3 beni.oku
head -c 5 beni.oku
  • -n: satır sayısı
  • -c: byte sayısı

Birden fazla dosya verilirse hangi çıktının hangi dosyaya ait olduğu başlıklarla gösterilir.

tail örnekleri

tail beni.oku
tail -n 1 beni.oku
tail -c 7 beni.oku

En önemli kullanım alanlarından biri log takibidir:

tail -f /var/log/syslog

-f, dosyaya yeni satırlar geldikçe bekleyip göstermeye devam eder.

Not

/var/log/syslog her Linux dağıtımında aynı adla bulunmayabilir. Bu yol burada örnek olarak verilmiştir.

Ters sırada görüntüleme

Bazı kaynaklarda tail -r örneğini görebilirsiniz; bu seçenek Linux sistemlerinde her zaman bulunmaz.

Linux’ta satırları ters sırada göstermek için çoğu zaman şu araç kullanılır:

tac beni.oku

Bu ayrımı bilmek önemlidir; çünkü derste hedefimiz Linux davranışını öğrenmektir.

more ve less

Uzun dosyaları sayfa sayfa görmek için kullanılır.

more /etc/passwd
less /etc/passwd

Pratikte çoğu durumda less tercih edilir; çünkü daha rahattır.

more komutunu tanımak faydalıdır; ama günlük kullanımda çoğu zaman asıl ihtiyaç duyacağınız araç less olacaktır.

Neden less daha iyi?

less ile:

  • ileri ve geri hareket edebilirsiniz
  • / ile arama yapabilirsiniz
  • g ile başa, G ile sona gidebilirsiniz
  • q ile çıkabilirsiniz

Özet fikir:

  • kısa dosya → cat
  • uzun dosya → less
  • sadece ilk/son bölüm → head / tail

grep

grep, dosyada veya komut çıktısında belirli bir deseni arar.

Temel kullanım:

grep 'ahmet' isimler.txt

Bu komut, içinde ahmet geçen satırları gösterir.

grep için temel seçenekler

  • -i: büyük/küçük harf duyarsız arama
  • -n: satır numarasını gösterme
  • -r: dizin içinde özyinelemeli arama
  • -v: eşleşmeyen satırları gösterme

Örnekler:

grep -i 'ahmet' isimler.txt
grep -n 'root' /etc/passwd
grep -r 'TODO' .

grep komut çıktısıyla da çalışır

grep, sadece dosyalarda değil, başka komutların çıktısında da çok işe yarar:

ps aux | grep 'ssh'
dpkg --list | grep 'vim'

Not: dpkg örneği Debian/Ubuntu tabanlı sistemler içindir.

Not

ps aux | grep 'ssh' örneğinde bazen grep komutunun kendisi de sonuçlarda görünebilir. Bu, grep’in yanlış çalıştığı anlamına gelmez; arama deseni kendi komut satırında da geçtiği için olur.

grep için not

Yeni başlayanlar genelde iki şeyi karıştırır:

  1. grep dosyanın tamamını değil, sadece eşleşen satırları gösterir.
  2. Varsayılan olarak büyük/küçük harf duyarlıdır.

wc

wc sayma işini yapar.

  • -l: satır sayısı
  • -w: kelime sayısı
  • -m: karakter sayısı
  • -c: byte sayısı
wc -l beni.oku
wc -w beni.oku
wc -c beni.oku

wc neden önemli?

Çünkü çok sık şu sorular sorulur:

  • “Kaç satır var?”
  • “Kaç eşleşme bulundu?”
  • “Çıktı çok mu büyük?”

Örnek:

grep -i 'error' uygulama.log | wc -l

Bu komut, error geçen satır sayısını verir.

Küçük uygulama

Aşağıdaki zinciri sözlü olarak açıklayın:

cat /etc/passwd | grep '/bin/bash' | wc -l

Beklenen açıklama:

  1. dosya okunur
  2. yalnızca /bin/bash geçen satırlar süzülür
  3. kalan satırlar sayılır

Komut zincirini anlayabilmek, tek tek komutları bilmekten daha değerlidir.

Ek not

Bu örnek veri akışını göstermek için özellikle zincir halinde verildi. Aynı iş daha kısa olarak şu şekilde de yazılabilir:

grep '/bin/bash' /etc/passwd | wc -l

diff

diff, iki metin dosyasını satır satır karşılaştırır.

a.txt
-----
emre
can
yilmaz

b.txt
-----
emre
cezmi
cezmi
can
yilmaz

diff çıktısı nasıl okunur?

diff a.txt b.txt

Örnek çıktı:

1a2,3
> cezmi
> cezmi

Yorum:

  • ilk dosyanın 1. satırından sonra
  • ikinci dosyada 2 ve 3. satırlar eklenmiş

Bu komut özellikle yapılandırma dosyaları veya metin değişiklikleri için yararlıdır.

cut

cut, satır içinden belirli sütunları seçer.

En çok şu seçeneklerle kullanılır:

  • -d: ayraç
  • -f: alan numarası
  • -c: karakter aralığı

Örnek veri:

emrecan:x:1000:1000:Emre Can Yılmaz:/home/emrecan:/bin/zsh

cut örnekleri

/etc/passwd dosyasında alanlar : ile ayrılır.

cut -d ':' -f1 /etc/passwd
cut -d ':' -f1,7 /etc/passwd

Bu komutlar sırasıyla:

  • kullanıcı adlarını
  • kullanıcı adı ve kabuk bilgisini

gösterir.

tr

tr, karakter düzeyinde dönüştürme yapar.

Yapabildikleri:

  • karakter değiştirme
  • karakter silme
  • tekrar eden karakterleri sıkıştırma

Genellikle stdin’den okur, stdout’a yazar.

tr örnekleri

Küçük harfleri büyük harfe çevirmek:

echo 'pardus' | tr 'a-z' 'A-Z'

Rakamları silmek:

echo '1 GNU 2 Pardus 3 Linux' | tr -d '[:digit:]'

Birden fazla boşluğu teke indirmek:

echo 'GNU         Linux' | tr -s '[:space:]' ' '

tr ne yapamaz?

Önemli sınır:

tr, satır veya kelime değil karakter üzerinde çalışır.

Yani şu tip işler için uygun değildir:

  • “bir kelimeyi başka kelimeyle değiştir”
  • “sadece 3. satırı düzenle”

Bu tür işler için çoğu zaman sed gerekir.

sed

sed, akış içindeki metni kurallara göre dönüştürür.

En temel kullanım alanı: bul ve değiştir.

echo 'iyi gunler' | sed 's/gun/gece/'

Beklenen çıktı:

iyi geceler

sed ifadesini parçalara ayıralım

s/gun/gece/

Parçalar:

  • s → substitute (değiştir)
  • ilk bölüm → aranacak ifade
  • ikinci bölüm → yeni ifade

Varsayılan davranış: satırdaki ilk eşleşmeyi değiştirir.

sed örnekleri

sed 's/bir/BIR/' numbers.txt
sed 's/bir/BIR/g' numbers.txt
sed '3 s/bir/BIR/' numbers.txt
sed '/dort/d' numbers.txt
sed '3d' numbers.txt

Yorum:

  • yalnız ilk eşleşmeyi değiştir
  • satırdaki tüm eşleşmeleri değiştir
  • yalnız 3. satırda değiştir
  • eşleşen satırları sil
    1. satırı sil

cut, tr, sed Nasıl Ayrılır?

Bu üç araç sık karıştırılır. Kısa karar mantığı:

  • Alan seçmek istiyorsanız: cut
  • Karakter dönüştürmek / silmek istiyorsanız: tr
  • Desene göre değiştirmek / silmek istiyorsanız: sed

Örnek sorular:

  • : ile ayrılmış veride 1. alanı al” → cut
  • “Tüm küçük harfleri büyük yap” → tr
  • error kelimesini uyari ile değiştir” → sed

sort

sort, satırları sıralar.

sort isimler.txt
sort -n isimler.txt
sort -f isimler.txt
sort -r isimler.txt
  • -n: sayısal sıralama
  • -f: büyük/küçük harf farkını yok say
  • -r: ters sırala

uniq

uniq, art arda gelen aynı satırları teke indirir.

Buradaki kritik nokta şudur:

uniq tüm tekrarları değil, yan yana gelen tekrarları birleştirir.

Bu yüzden çoğu zaman önce sort kullanılır.

sort a.txt | uniq

uniq örnekleri

sort a.txt | uniq
sort a.txt | uniq -c
sort a.txt | uniq -d
  • -c: kaç kez tekrar ettiğini gösterir
  • -d: yalnız tekrar edenleri gösterir

Bu ikili (sort | uniq) log ve liste analizinde çok kullanılır.

split

split, büyük bir dosyayı parçalara ayırır.

İki yaygın kullanım:

  • -l: satır sayısına göre bölme
  • -b: byte boyutuna göre bölme
split -l 1000 buyuk.txt
split -b 500k arsiv.tar

split sonrası birleştirme

Parçalar çoğu zaman xaa, xab, xac gibi adlarla oluşur.

Birleştirmek için:

cat x* > birlestirilen_dosya

Doğrulama için metin dosyalarında diff, ikili dosyalarda ise cmp veya özet (hash) araçları daha uygundur.

Not: Parçaların doğru sırayla birleşmesi gerekir. Varsayılan xaa, xab, xac adlandırması bu yüzden kullanışlıdır.

Hızlı Karar Rehberi

İhtiyaç Komut
Kısa dosyayı göster cat
Uzun dosyada gez less
İlk / son satırları gör head, tail
Belirli satırları bul grep
Sayı üret wc
Sütun seç cut
Karakter dönüştür tr
Metin değiştir sed
Dosya farkı gör diff
Sırala sort
Tekrarları sadeleştir uniq
Büyük dosyayı böl split

Sık Yapılan Hatalar

  • uzun dosyayı cat ile açıp ekrana boğulmak
  • grep kullanırken büyük/küçük harf duyarlılığını unutmak
  • uniq komutunun sıralama yapmadığını sanmak
  • tr ile kelime değiştirmeye çalışmak
  • pipe zincirinde her komutun ne aldığını düşünmemek

Bu hafta hedef, sadece komut yazmak değil; komutun veri akışındaki rolünü anlamak.

Alıştırmalar

Bu bölümde amaç, komutu sıfırdan hatırlamak değil; doğru aracı doğru işe eşleştirmektir.

  1. /etc/passwd dosyasındaki kullanıcı adlarını listeleyin.
cut -d ':' -f__ /etc/passwd
  1. Kabuğu /bin/bash olan kullanıcı sayısını bulun.
grep '/bin/bash' /etc/passwd | wc -_
  1. Aşağıdaki veriyi oluşturun; sonra tekrar eden satırları sayın.
printf 'ankara\nizmir\nankara\nbursa\nizmir\nizmir\n' > tekrarlar.txt
sort tekrarlar.txt | uniq __
  1. Bir log dosyasının son 20 satırını görüntüleyin; sonra canlı izleme komutunu yazın.
tail -_ 20 /var/log/syslog
tail -_ /var/log/syslog

Bu Haftanın Özeti

Bu hafta şunu öğrendik:

  • her komutun ayrı bir güçlü yönü vardır
  • asıl güç, komutları birlikte kullanınca ortaya çıkar
  • terminalde metin işlemek, sistem yönetiminin temel becerilerinden biridir

Bir sonraki aşamada bu araçları kabuk betikleri ve yönlendirme mantığıyla daha sistemli birleştireceğiz.

Sorular?