Metin Dosyası İşlemleri

Dosya görüntüleme, oluşturma, filtreleme ve düzenleme komutları

Kubedo Academy’e hoş geldiniz! Bu laboratuvarda metin dosyası işleme komutlarını öğreneceksiniz.


Zorluk seviyesi: Başlangıç
Süre: Yaklaşık 35 dakika


1. Dosya Görüntüleme Komutları

Bu bölümde Linux’ta dosyaları görüntülemek, oluşturmak ve içeriklerini incelemek için kullanılan temel komutları öğreneceksiniz.


touch - Dosya Oluştur/Zaman Damgası Güncelle

touch komutu boş bir dosya oluşturur veya var olan dosyanın erişim/değiştirme zaman damgasını günceller. Bu komut, özellikle Makefile’lar ve build sistemlerinde dosya zaman damgalarını manipüle etmek için kullanılır.

Terminal
$ touch /tmp/ilkdosyam

Birden fazla dosya oluşturma:

Terminal
$ touch dosya1.txt dosya2.txt dosya3.txt
ParametreAçıklama
-aSadece erişim zamanını güncelle
-mSadece değiştirme zamanını güncelle
-t STAMPBelirli bir zaman damgası ata
-cDosya yoksa oluşturma

cat - Concatenate (Birleştir ve Görüntüle)

cat (concatenate) komutu dosya içeriklerini standart çıktıya yazdırır. Adını “concatenate” (birleştirmek) kelimesinden alır çünkü birden fazla dosyayı birleştirmek için de kullanılabilir.

Dosya içeriğini görüntüle:

Terminal
$ echo "merhaba dünya" > /tmp/dosya1.txt
cat /tmp/dosya1.txt

İki dosyayı birleştir:

Terminal
$ echo "satır 1" > /tmp/a.txt
echo "satır 2" > /tmp/b.txt
cat /tmp/a.txt /tmp/b.txt > /tmp/c.txt

Satır numarası ile görüntüle:

Terminal
$ cat -n /etc/passwd
ParametreAçıklama
-nSatır numaralarını göster
-bBoş olmayan satırları numarala
-sArdışık boş satırları teke düşür
-AGörünmez karakterleri göster

[!TIP] cat küçük dosyalar için idealdir. Büyük dosyalar için less veya more kullanın.


tac - Ters Sırada Görüntüle

tac komutu (cat tersine yazılmış) dosya içeriğini sondan başa doğru görüntüler. Her satır ters sırada yazdırılır - son satır ilk, ilk satır son olarak görünür.

Terminal
$ tac /tmp/c.txt

Kullanım alanları:

  • Log dosyalarını en son girdiden başlayarak okuma
  • Verileri ters sırada işleme
  • Script’lerde veri manipülasyonu

less - Sayfalı Görüntüleme

less komutu büyük dosyaları sayfa sayfa görüntülemenizi sağlar. more komutunun geliştirilmiş versiyonudur ve iki yönlü kaydırma imkanı sunar. “Less is more” (Az daha çoktur) sloganından adını almıştır.

Terminal
$ less /etc/passwd

Navigasyon tuşları:

Tuşİşlev
Space veya fBir sayfa ileri
bBir sayfa geri
/kelimeİleri arama
?kelimeGeri arama
nSonraki eşleşme
NÖnceki eşleşme
gDosya başına git
GDosya sonuna git
qÇıkış
ParametreAçıklama
-NSatır numaralarını göster
-SUzun satırları kırpma (kaydır)
+Ftail -f gibi canlı takip

[!IMPORTANT] less Linux sistemlerde en çok kullanılan dosya görüntüleme komutudur. Man sayfaları bile varsayılan olarak less ile açılır.


head - Dosya Başından Satır Göster

head komutu dosyanın başından belirtilen sayıda satırı görüntüler. Varsayılan olarak ilk 10 satırı gösterir.

Terminal
$ head -n 10 /etc/passwd

İlk 5 satırı göster:

Terminal
$ head -5 /etc/passwd
ParametreAçıklama
-n Nİlk N satırı göster
-c Nİlk N byte’ı göster
-qDosya adı başlığını gizle

tail - Dosya Sonundan Satır Göster

tail komutu dosyanın sonundan belirtilen sayıda satırı görüntüler. Varsayılan olarak son 10 satırı gösterir. Özellikle log dosyalarını takip etmek için çok kullanışlıdır.

Terminal
$ tail -n 10 /etc/passwd

Canlı log takibi (-f: follow):

Terminal
$ tail -f /var/log/syslog

Bu komut dosyanın sonuna eklenen yeni satırları gerçek zamanlı olarak gösterir. Log takibi için vazgeçilmezdir!

ParametreAçıklama
-n NSon N satırı göster
-fDosyayı canlı takip et
-FDosya döndürülse bile takip et
--pid=PIDBelirtilen PID sonlanana kadar takip

[!TIP] Birden fazla log dosyasını aynı anda takip edebilirsiniz: tail -f /var/log/*.log


2. Metin İşleme Komutları

Örnek Dosya Oluşturma

Terminal
$ cat > /tmp/sirasiz.txt <

cut - Kes (Sütun Kesme)

Kesme (cut) komutu özellikle script yazarken çok kullanışlıdır. Çıktılardan istediğiniz ayıraçlara göre verileri bölebilirsiniz.

Kesme komutu, giriş satırlarının bölümlerini çıkarır ve bunları standart çıktıda görüntüler. Giriş satırlarından nelerin kesileceğini birkaç yolla belirtebilirsiniz:

Byte’a Göre: -b veya --bytes= seçeneği ile girdiden belirtilen bayt listesini dosyadan keser.

Karaktere Göre: -c veya --characters= seçeneği ile belirtilen listeyi keser. Uygulamada, bu yöntem ve bayt yöntemi genellikle aynı sonuçları üretir.

Alana Göre: -f veya --fields= seçeneği ile belirtilen alan girdi dosyasından kesilir. Varsayılan değer olarak alanlar satır içerisinde sekmeyle ayrılmış olarak kabul edilir. Ancak sınırlayıcı karakteri -d, --delim= veya --delimiter= seçeneğiyle değiştirebilirsiniz (örn: CSV dosyalarında , veya ;).

Örnek - Boşluk karakterine göre ayrım yapalım ve ilk sütunu alalım:

Terminal
$ cd /tmp
cut -d ' ' -f 1 sirasiz.txt

Örnek - Sadece isimleri (ikinci sütun) alalım:

Terminal
$ cut -d ' ' -f 2 sirasiz.txt

[!TIP] -d ' ' ile boşluk karakterini delimiter (ayırıcı) olarak tanımlıyoruz. -f1 veya -f 2 ile istediğimiz sütunu seçiyoruz.

ParametreAçıklama
-d CHARAyırıcı karakter (delimiter)
-f NN. alanı seç
-b NN. byte’ı seç
-c NN. karakteri seç
--complementSeçilmeyenleri göster

sort - Sıralama

sort komutu satırları alfabetik veya sayısal olarak sıralar.

Terminal
$ sort /tmp/sirasiz.txt

Sayısal sıralama:

Terminal
$ sort -n /tmp/sirasiz.txt

Belirli sütuna göre sıralama:

Terminal
$ sort -k2 /tmp/sirasiz.txt
ParametreAçıklama
-nSayısal sıralama
-rTers sıralama
-k NN. sütuna göre sırala
-fBüyük/küçük harf yoksay
-uBenzersiz satırları göster

uniq - Benzersiz ve Tekrar Eden Satırlar

uniq komutu ardışık olarak tekrar eden satırları filtreler veya raporlar. Bu komutun çok önemli bir özelliği vardır: sadece yan yana (ardışık) olan tekrarları algılar. Bu nedenle genellikle sort komutu ile birlikte kullanılır.

Neden sort ile kullanılır?

Dosyanızda aynı satırlar farklı yerlerde ise, uniq bunları tekrar olarak algılamaz. Örneğin:

remzi
guray
remzi    <- Bu "remzi" algılanmaz çünkü ardışık değil

Bu yüzden önce sort ile sıralamalısınız ki aynı satırlar yan yana gelsin.

Örnek - Benzersiz isimleri listele:

Terminal
$ cut -d ' ' -f2 /tmp/sirasiz.txt | sort | uniq

Burada:

  1. cut ile sadece isim sütununu aldık
  2. sort ile alfabetik sıraladık (aynı isimler yan yana geldi)
  3. uniq ile tekrarları kaldırdık

Tekrar sayısını göster (-c):

Terminal
$ cut -d ' ' -f2 /tmp/sirasiz.txt | sort | uniq -c

Bu komut her ismin kaç kez tekrar ettiğini gösterir.

Sadece tekrar edenleri göster (-d):

Terminal
$ cut -d ' ' -f2 /tmp/sirasiz.txt | sort | uniq -d

Sadece benzersiz olanları göster (-u):

Terminal
$ cut -d ' ' -f2 /tmp/sirasiz.txt | sort | uniq -u
ParametreAçıklama
-cHer satırın tekrar sayısını başına yaz
-dSadece tekrar eden satırları göster (en az 2 kez)
-uSadece benzersiz (1 kez geçen) satırları göster
-iBüyük/küçük harf farkını yoksay
-f Nİlk N alanı karşılaştırmadan atla
-s Nİlk N karakteri karşılaştırmadan atla

[!TIP] uniq -c | sort -rn kombinasyonu ile en çok tekrar eden satırları bulabilirsiniz!


wc - Kelime/Satır/Byte Sayma

wc (word count) komutu dosyadaki satır sayısını, kelime sayısını ve byte (karakter) sayısını gösterir. Bu komut özellikle log analizi, dosya boyutu kontrolü ve script’lerde çok kullanılır.

Temel kullanım:

Terminal
$ wc /tmp/sirasiz.txt

Çıktı formatı: SATIR KELIME BYTE DOSYA_ADI

Örneğin 10 10 75 sirasiz.txt çıktısı şu anlama gelir:

  • 10 satır
  • 10 kelime
  • 75 byte (karakter)

Sadece satır sayısı (-l):

Terminal
$ wc -l /tmp/sirasiz.txt

Bu parametre en çok kullanılan parametredir. Örneğin log dosyasında kaç hata var:

Terminal
$ grep -i 'error' /var/log/syslog | wc -l

Sadece kelime sayısı (-w):

Terminal
$ wc -w /tmp/sirasiz.txt

Birden fazla dosya için toplam:

Terminal
$ wc -l /tmp/*.txt

Bu komut her dosyanın satır sayısını ve en sonda toplamı (total) gösterir.

ParametreAçıklama
-lSadece satır sayısı (lines)
-wSadece kelime sayısı (words)
-cSadece byte sayısı
-mSadece karakter sayısı (UTF-8 için farklı)
-LEn uzun satırın karakter sayısı

[!TIP] wc -l parametresi script’lerde çok kullanılır. Örneğin: if [ $(wc -l < dosya.txt) -gt 100 ]; then ...


nl - Satır Numaralandırma

nl (number lines) komutu dosyadaki her satıra numara ekler. cat -n komutuna benzer ama daha fazla özelleştirme imkanı sunar.

Temel kullanım:

Terminal
$ nl /tmp/sirasiz.txt

Boş satırları da numarala:

Terminal
$ nl -b a /tmp/sirasiz.txt

Özel ayırıcı kullan:

Terminal
$ nl -s ': ' /tmp/sirasiz.txt

Bu komut satır numarasından sonra : ekler.

ParametreAçıklama
-b aTüm satırları numarala (boş dahil)
-b tSadece dolu satırları numarala (varsayılan)
-s CHARNumara ile satır arasına ayırıcı ekle
-n lnSol hizalı numara
-n rnSağ hizalı numara
-n rzSağ hizalı, sıfır dolgulu (001, 002…)
-w NNumara genişliği

tr - Karakter Dönüştürme (Translate)

tr (translate) komutu stdin’den okuduğu karakterleri dönüştürür, değiştirir veya siler. Bu komut dosyaları doğrudan değil, pipe üzerinden işler.

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

Terminal
$ echo "merhaba dünya" | tr 'a-z' 'A-Z'

Sonuç: MERHABA DÜNYA

Büyük harfleri küçük harfe çevir:

Terminal
$ echo "MERHABA" | tr 'A-Z' 'a-z'

Belirli karakterleri sil (-d):

Terminal
$ echo "merhaba dünya" | tr -d 'a'

Sonuç: merhb düny (tüm ‘a’ harfleri silindi)

Rakamları sil:

Terminal
$ echo "abc123def456" | tr -d '0-9'

Sonuç: abcdef

Tekrar eden karakterleri sıkıştır (-s):

Terminal
$ echo "merhaba     dünya" | tr -s ' '

Sonuç: merhaba dünya (birden fazla boşluk tek boşluğa dönüştü)

Satır sonu karakterlerini değiştir (DOS -> Unix):

tr -d '\r' < dosya.txt > dosya_unix.txt

Complement: Belirtilenlerin dışını işle (-c):

Terminal
$ echo "abc123XYZ" | tr -cd '0-9'

Sonuç: 123 (sadece rakamlar kaldı, diğerleri silindi)

ParametreAçıklama
-dBelirtilen karakterleri sil (delete)
-sArdışık tekrarları teke düşür (squeeze)
-cComplement - belirtilenlerin dışındakileri işle
-tİlk seti ikinci setin boyutuna kırp (truncate)

Özel karakter setleri:

SetAçıklama
a-zKüçük harfler
A-ZBüyük harfler
0-9Rakamlar
[:alpha:]Tüm harfler
[:digit:]Rakamlar
[:space:]Boşluk karakterleri
[:punct:]Noktalama işaretleri

[!TIP] tr komutu özellikle veri temizleme ve format dönüştürme işlemlerinde çok kullanışlıdır.


paste - Dosyaları Yan Yana Birleştir

paste komutu iki veya daha fazla dosyanın satırlarını yan yana birleştirir. Her dosyadan aynı satır numarasındaki satırlar sekme (TAB) karakteri ile birleştirilir.

cat komutu dosyaları alt alta birleştirirken, paste komutu yan yana birleştirir.

Örnek - İki sütunu birleştir:

Önce örnek dosyalar oluşturalım:

Terminal
$ cut -d ' ' -f1 /tmp/sirasiz.txt > /tmp/sutun1.txt
cut -d ' ' -f2 /tmp/sirasiz.txt > /tmp/sutun2.txt

Şimdi birleştirelim:

Terminal
$ paste /tmp/sutun1.txt /tmp/sutun2.txt

Özel ayırıcı kullan (-d):

Terminal
$ paste -d ':' /tmp/sutun1.txt /tmp/sutun2.txt

Sonuç: 1:Remzi, 8:remzi şeklinde : ile ayrılmış çıktı

Tek dosyayı seri olarak birleştir (-s):

Terminal
$ paste -s /tmp/sutun2.txt

Bu komut tüm satırları tek satırda, sekme ile ayırarak gösterir.

Virgülle ayırarak tek satır yap:

Terminal
$ paste -s -d ',' /tmp/sutun2.txt

Sonuç: Remzi,remzi,guray,necmi,...

ParametreAçıklama
-d DELIMAyırıcı karakter(ler) belirt (varsayılan: TAB)
-sSeri birleştir (tüm satırları tek satıra)
--zero-terminatedSatır sonu yerine NUL karakteri kullan

join - Dosyaları Ortak Alana Göre Birleştir (SQL JOIN)

join komutu iki dosyayı ortak bir alana (sütuna) göre birleştirir. Veritabanlarındaki JOIN işlemine benzer şekilde çalışır.

[!IMPORTANT] join komutunun çalışması için her iki dosyanın da birleştirme alanına göre sıralı olması gerekir!

Örnek için iki dosya oluşturalım:

# dosya1.txt (ID ve isim)
1 Ahmet
2 Mehmet
3 Ayşe

# dosya2.txt (ID ve şehir)
1 İstanbul
2 Ankara
3 İzmir

Birleştirme:

join dosya1.txt dosya2.txt

Sonuç:

1 Ahmet İstanbul
2 Mehmet Ankara
3 Ayşe İzmir

Farklı sütunlara göre birleştir:

join -1 2 -2 1 dosya1.txt dosya2.txt
  • -1 2: Birinci dosyanın 2. sütunu
  • -2 1: İkinci dosyanın 1. sütunu
ParametreAçıklama
-1 NBirinci dosyada N. alanı birleştirme anahtarı olarak kullan
-2 Nİkinci dosyada N. alanı birleştirme anahtarı olarak kullan
-t CHARAlan ayırıcı karakteri belirt
-a 1Birinci dosyadaki eşleşmeyenleri de göster (LEFT JOIN)
-a 2İkinci dosyadaki eşleşmeyenleri de göster (RIGHT JOIN)
-v 1Sadece birinci dosyada olup ikincide olmayanları göster

split - Büyük Dosyaları Parçalara Ayır

split komutu büyük dosyaları daha küçük parçalara böler. E-posta ile gönderilemeyen, yüklenemeyen veya işlenemeyen büyük dosyalar için idealdir.

Satır sayısına göre böl (-l):

Terminal
$ split -l 100 /var/log/syslog /tmp/log_parca_

Bu komut her 100 satırda bir yeni dosya oluşturur:

  • /tmp/log_parca_aa
  • /tmp/log_parca_ab
  • /tmp/log_parca_ac

Boyuta göre böl (-b):

split -b 10M buyuk_dosya.tar /tmp/parca_

Her parça 10 MB olur.

Sayısal son ek kullan (-d):

split -d -l 1000 dosya.txt parca_

Sonuç: parca_00, parca_01, parca_02 (aa, ab yerine)

Parçaları tekrar birleştir:

cat parca_* > orijinal_dosya.txt
ParametreAçıklama
-l NHer N satırda bir böl
-b SIZEHer SIZE byte’ta bir böl (K, M, G kullanılabilir)
-n NTam olarak N parçaya böl
-dSayısal son ek kullan (aa yerine 00, 01…)
--verboseOluşturulan dosyaları göster

[!TIP] Büyük log dosyalarını analiz ederken split ile parçalayıp her parçayı ayrı işleyebilirsiniz.


3. grep - Arama ve Filtreleme (Global Regular Expression Print)

grep komutu Linux’ta en çok kullanılan komutlardan biridir. Dosyalar içinde veya komut çıktılarında metin aramak için kullanılır. Adı “Global Regular Expression Print” ifadesinden gelir.

Temel Kullanım

Bir dosyada kelime ara:

Terminal
$ grep user /etc/passwd

Bu komut /etc/passwd dosyasında “user” kelimesini içeren satırları gösterir.

Komut çıktısında arama (pipe ile):

Terminal
$ ls -la /etc | grep conf

Büyük/Küçük Harf Duyarsız Arama (-i)

Terminal
$ grep -i 'remzi' /tmp/sirasiz.txt

Bu komut “remzi”, “Remzi”, “REMZI” gibi tüm varyasyonları bulur.

Recursive Arama (-r)

Bir dizin ve tüm alt dizinlerinde arama:

Terminal
$ grep -r 'error' /var/log/

Sadece belirli dosya türlerinde ara:

grep -r --include="*.log" 'error' /var/log/

Eşleşmeyen Satırları Göster (-v)

Terminal
$ grep -v 'remzi' /tmp/sirasiz.txt

Bu komut “remzi” kelimesini içermeyen satırları gösterir.

Eşleşen Satır Sayısını Göster (-c)

Terminal
$ grep -c 'remzi' /tmp/sirasiz.txt

Kaç satırda eşleşme olduğunu sayar.

Satır Numarasını Göster (-n)

Terminal
$ grep -n 'remzi' /tmp/sirasiz.txt

Eşleşen satırın dosyadaki satır numarasını gösterir.

Tam Kelime Eşleşmesi (-w)

Terminal
$ grep -w 'rem' /tmp/sirasiz.txt

Bu komut sadece tam kelime olarak “rem” içeren satırları bulur. “remzi” kelimesi eşleşmez.

Regex ile Arama

Karakter sınıfı (büyük veya küçük harf):

Terminal
$ grep '[rR]emzi' /tmp/sirasiz.txt

Satır başı (^) ve satır sonu ($):

Terminal
$ grep '^1' /tmp/sirasiz.txt

Bu komut “1” ile başlayan satırları bulur.

Extended regex (-E):

grep -E 'remzi|guray' /tmp/sirasiz.txt    # remzi VEYA guray
grep -E '^[0-9]+' /tmp/sirasiz.txt        # Rakamla başlayan satırlar

Bağlam Satırları (Context)

Eşleşmenin etrafındaki satırları da göster:

grep -B 4 'error' /var/log/messages  # Before: 4 satır öncesini göster
grep -A 2 'error' /var/log/messages  # After: 2 satır sonrasını göster
grep -C 2 'error' /var/log/messages  # Context: Öncesi ve sonrası

Sadece Eşleşen Dosya İsimlerini Göster (-l)

grep -l 'error' /var/log/*.log

Bu komut sadece eşleşme bulunan dosyaların isimlerini listeler.

Önemli Parametreler Tablosu

ParametreAçıklama
-iBüyük/küçük harf duyarsız (ignore case)
-vEşleşmeyen satırları göster (invert)
-cEşleşen satır sayısını göster (count)
-nSatır numarasını göster (number)
-rAlt dizinlerde de ara (recursive)
-lSadece dosya isimlerini göster (files with matches)
-LEşleşme olmayan dosya isimlerini göster
-wTam kelime eşleşmesi (word)
-EExtended regex kullan (egrep ile aynı)
-oSadece eşleşen kısmı göster
-B NEşleşmeden N satır öncesini göster
-A NEşleşmeden N satır sonrasını göster
-C NEşleşmeden N satır öncesi ve sonrasını göster
--colorEşleşen kısmı renklendir

Yaygın Kullanım Örnekleri

Log dosyasında hata ara:

Terminal
$ grep -i 'error\|warning\|failed' /var/log/syslog

Bir process’i bul (kendisini hariç tut):

Terminal
$ ps aux | grep ssh | grep -v grep

Belirli bir IP’yi loglardan bul:

grep -r '192.168.1.100' /var/log/

[!IMPORTANT] grep Linux sistem yönetiminde en vazgeçilmez komuttur. Log analizi, konfigürasyon dosyası inceleme, process takibi gibi günlük işlerde sürekli kullanılır. Bu komutu çok iyi öğrenin!


4. sed - Stream Editor (Akış Düzenleyici)

sed (Stream Editor) komutu metin akışlarını düzenlemek için kullanılır. Dosyadaki metinleri değiştirmek, silmek veya eklemek için ideal bir araçtır. Script’lerde ve otomasyon işlemlerinde çok kullanılır.

Temel Sözdizimi

sed 's/eski/yeni/' dosya.txt      # İlk eşleşmeyi değiştir
sed 's/eski/yeni/g' dosya.txt     # Tüm eşleşmeleri değiştir

Değiştirme (Substitution)

Temel değiştirme:

Terminal
$ sed 's/necati/Fecati/g' /tmp/sirasiz.txt

Bu komut “necati” kelimesini “Fecati” ile değiştirir. g flag’i satırdaki tüm eşleşmeleri değiştirir.

Sadece ilk eşleşmeyi değiştir (g olmadan):

Terminal
$ sed 's/remzi/REMZI/' /tmp/sirasiz.txt

Büyük/küçük harf duyarsız değiştir:

Terminal
$ sed 's/remzi/REMZI/gi' /tmp/sirasiz.txt

Dosyada Kalıcı Değişiklik (-i)

sed -i 's/eski/yeni/g' dosya.txt

Yedek dosya oluşturarak değiştir (-i.bak):

sed -i.bak 's/eski/yeni/g' dosya.txt

Bu komut değişiklik yapmadan önce dosya.txt.bak adında bir yedek oluşturur.

[!CAUTION] -i parametresi geri dönüşümsüzdür! Her zaman -i.bak ile yedek alın veya önce test edin.

Satır Silme (d komutu)

Belirli bir satırı sil:

Terminal
$ sed '3d' /tmp/sirasiz.txt

Bir aralığı sil (2-5. satırlar):

Terminal
$ sed '2,5d' /tmp/sirasiz.txt

Belirli bir pattern içeren satırları sil:

Terminal
$ sed '/remzi/d' /tmp/sirasiz.txt

Boş satırları sil:

sed '/^$/d' dosya.txt

Satır Yazdırma (p komutu)

Sadece belirli satırları göster:

Terminal
$ sed -n '1,3p' /tmp/sirasiz.txt

-n ile sadece belirtilen satırlar görüntülenir.

Metin Ekleme

Satır sonuna ekle:

sed 's/$/ - EKLENDI/' dosya.txt

Satır başına ekle:

sed 's/^/PREFIX: /' dosya.txt

Birden Fazla Komut Çalıştırma

-e ile:

sed -e 's/eski1/yeni1/g' -e 's/eski2/yeni2/g' dosya.txt

Pratik Örnekler

HTML tag’lerini kaldır:

sed 's/<[^>]*>//g' dosya.html

Yorum satırlarını kaldır (# ile başlayan):

sed '/^#/d' config.txt

Dosya yolundaki / karakterini değiştir:

sed 's|/old/path|/new/path|g' dosya.txt   # | ayırıcı olarak kullanılır
KomutAçıklama
s/eski/yeni/Değiştir (ilk eşleşme)
s/eski/yeni/gDeğiştir (tüm eşleşmeler)
s/eski/yeni/iBüyük/küçük harf duyarsız
dSatır sil
pSatır yazdır
-nOtomatik yazdırmayı kapat
-iDosyada kalıcı değiştir
-eBirden fazla komut

[!TIP] sed ile grep kombinasyonu çok güçlüdür: grep 'pattern' dosya.txt | sed 's/eski/yeni/g'

5. Dosya İşlem Komutları

Bu bölümde Linux’ta dosya ve dizin işlemleri için kullanılan temel komutları öğreneceksiniz: kopyalama, taşıma, silme ve link oluşturma.


cp - Dosya/Dizin Kopyalama (Copy)

cp (copy) komutu dosya ve dizinleri kopyalar. Linux’ta en temel ve en çok kullanılan komutlardan biridir.

Temel dosya kopyalama:

Terminal
$ cp /tmp/sirasiz.txt /tmp/kopya.txt

Bu komut sirasiz.txt dosyasını kopya.txt adıyla kopyalar.

Birden fazla dosya kopyalama:

Terminal
$ cp dosya1.txt dosya2.txt dosya3.txt /hedef/dizin/

Dizin kopyalama (-r: recursive):

Terminal
$ cp -r /tmp/kaynak_dizin /tmp/hedef_dizin

[!IMPORTANT] Dizin kopyalamak için -r (recursive) parametresi zorunludur!

İzinleri koruyarak kopyala (-p: preserve):

Terminal
$ cp -rp /var/www/html /backup/www_backup

Bu komut dosyaların izinlerini, sahipliğini ve zaman damgalarını korur.

Üzerine yazmadan önce sor (-i: interactive):

Terminal
$ cp -i dosya.txt /hedef/

Sadece daha yeni dosyaları kopyala (-u: update):

Terminal
$ cp -u *.txt /backup/

İlerleme durumunu göster (-v: verbose):

Terminal
$ cp -v /tmp/sirasiz.txt /tmp/kopya2.txt
ParametreAçıklama
-r, -RRecursive - dizinleri alt dizinleriyle kopyala
-pPreserve - izinleri, sahipliği ve zamanları koru
-iInteractive - üzerine yazmadan önce sor
-fForce - sormadan üzerine yaz
-uUpdate - sadece daha yeni dosyaları kopyala
-vVerbose - yapılan işlemi göster
-aArchive - -rpd kombinasyonu (tam yedekleme için)
-nNo-clobber - var olan dosyaların üzerine yazma
--backupÜzerine yazmadan önce yedek oluştur

Pratik örnekler:

# Tam yedekleme (-a = archive mode)
cp -a /var/www /backup/www_$(date +%Y%m%d)

# Sadece .txt dosyalarını kopyala
cp *.txt /hedef/dizin/

# Yedek oluşturarak kopyala
cp --backup=numbered dosya.txt /hedef/

[!TIP] Büyük dosyaları kopyalarken rsync komutu daha verimlidir: rsync -av kaynak/ hedef/


mv - Dosya/Dizin Taşıma ve Yeniden Adlandırma (Move)

mv (move) komutu dosya ve dizinleri taşır veya yeniden adlandırır. Aslında iki işlem aynı komutla yapılır:

  • Taşıma: Farklı bir dizine taşı
  • Yeniden adlandırma: Aynı dizinde farklı isimle taşı

Dosya yeniden adlandırma:

Terminal
$ mv /tmp/eski_isim.txt /tmp/yeni_isim.txt

Dosya taşıma:

Terminal
$ mv /tmp/dosya.txt /home/user/

Birden fazla dosya taşıma:

Terminal
$ mv dosya1.txt dosya2.txt dosya3.txt /hedef/dizin/

Dizin taşıma (recursive parametreye gerek yok):

Terminal
$ mv /tmp/kaynak_dizin /tmp/hedef_dizin

[!NOTE] mv komutu için -r parametresine gerek yoktur. Dizinler otomatik olarak tüm içerikleriyle taşınır.

Üzerine yazmadan önce sor (-i: interactive):

Terminal
$ mv -i dosya.txt /hedef/

İlerleme göster (-v: verbose):

Terminal
$ mv -v /tmp/dosya.txt /home/user/
ParametreAçıklama
-iInteractive - üzerine yazmadan önce sor
-fForce - sormadan üzerine yaz
-nNo-clobber - var olan dosyaların üzerine yazma
-vVerbose - yapılan işlemi göster
-uUpdate - sadece daha yeni ise taşı
--backupÜzerine yazmadan önce yedek oluştur

Pratik örnekler:

# Tüm .log dosyalarını arşiv dizinine taşı
mv *.log /var/log/archive/

# Tarihli yedek oluşturarak taşı
mv --backup=numbered dosya.txt /hedef/

# Toplu yeniden adlandırma (rename komutu ile)
rename 's/.txt/.bak/' *.txt

mkdir - Dizin Oluşturma (Make Directory)

mkdir (make directory) komutu yeni dizin oluşturur.

Tek dizin oluşturma:

Terminal
$ mkdir /tmp/yeni_klasor

Birden fazla dizin oluşturma:

Terminal
$ mkdir dizin1 dizin2 dizin3

İç içe dizinler oluşturma (-p: parents):

Terminal
$ mkdir -p /tmp/a/b/c/d/e

[!IMPORTANT] -p parametresi olmadan iç içe dizin oluşturmaya çalışırsanız hata alırsınız çünkü üst dizinler mevcut değildir.

Belirli izinlerle oluşturma (-m: mode):

Terminal
$ mkdir -m 755 /tmp/public_folder
Terminal
$ mkdir -m 700 /tmp/private_folder

Oluşturulan dizini göster (-v: verbose):

Terminal
$ mkdir -v /tmp/yeni_dizin
ParametreAçıklama
-pParents - üst dizinleri de oluştur
-m MODEMode - belirtilen izinlerle oluştur
-vVerbose - oluşturulan dizinleri göster

Pratik örnekler:

# Proje yapısı oluşturma
mkdir -p project/{src,bin,lib,docs,tests}

# Tarihli yedek dizini oluşturma
mkdir -p /backup/$(date +%Y/%m/%d)

# Gizli dizin oluşturma
mkdir ~/.config/myapp

rmdir - Boş Dizin Silme (Remove Directory)

rmdir (remove directory) komutu sadece boş dizinleri siler. İçinde dosya veya alt dizin varsa hata verir.

Boş dizin silme:

Terminal
$ mkdir /tmp/bos_dizin
rmdir /tmp/bos_dizin

İç içe boş dizinleri silme (-p: parents):

Terminal
$ mkdir -p /tmp/a/b/c
rmdir -p /tmp/a/b/c

Bu komut sırasıyla c, b, a dizinlerini siler (hepsi boşsa).

ParametreAçıklama
-pParents - boş üst dizinleri de sil
-vVerbose - silinen dizinleri göster

[!NOTE] İçinde dosya olan dizinleri silmek için rm -r kullanın.


rm - Dosya/Dizin Silme (Remove)

rm (remove) komutu dosya ve dizinleri siler. Linux’ta çöp kutusu yoktur - silinen dosyalar geri getirilemez!

Dosya silme:

Terminal
$ rm /tmp/dosya.txt

Birden fazla dosya silme:

Terminal
$ rm dosya1.txt dosya2.txt dosya3.txt

Wildcard ile silme:

Terminal
$ rm /tmp/*.log

Dizin ve içeriğini silme (-r: recursive):

Terminal
$ rm -r /tmp/silinecek_dizin

Zorla silme (-f: force):

Terminal
$ rm -f /tmp/dosya.txt

Dizin ve içeriğini zorla sil (-rf):

Terminal
$ rm -rf /tmp/dizin

[!CAUTION] rm -rf komutu çok tehlikelidir! Yanlış dizinde çalıştırırsanız tüm sisteminizi silebilirsiniz. Özellikle rm -rf / veya rm -rf /* asla çalıştırmayın!

Silmeden önce sor (-i: interactive):

Terminal
$ rm -i /tmp/*.txt

Her 3 dosyada bir sor (-I):

Terminal
$ rm -I /tmp/*.log

Silinen dosyaları göster (-v: verbose):

Terminal
$ rm -v /tmp/dosya.txt
ParametreAçıklama
-r, -RRecursive - dizinleri alt dizinleriyle sil
-fForce - sormadan sil, hata verme
-iInteractive - her dosya için sor
-IHer 3+ dosyada bir sor
-vVerbose - silinen dosyaları göster
-dBoş dizinleri sil
--preserve-rootKök dizini silmeyi engelle (varsayılan)

Güvenli silme pratikleri:

# Önce ne silineceğini görün
ls /tmp/*.log

# Sonra silin (veya -i ile tek tek onaylayın)
rm -i /tmp/*.log

# Tehlikeli komutları test edin
rm -rf /yol/dizin --dry-run    # (bazı sistemlerde)
echo rm -rf /yol/dizin         # Komutu yazdır ama çalıştırma

[!TIP] Önemli dosyaları silmeden önce mv dosya.txt /tmp/ ile geçici bir yere taşıyın. Emin olduktan sonra silin.


ln (link) komutu dosyalara link (bağlantı) oluşturur. Linux’ta iki tür link vardır:

  1. Hard Link: Aynı inode’a işaret eder, orijinal dosya silinse bile çalışır
  2. Symbolic Link (Symlink): Dosya yoluna işaret eder, bir kısayol gibidir

Sembolik link bir kısayol gibidir. Windows’taki shortcut’a benzer.

Sembolik link oluşturma (-s):

Terminal
$ ln -s /var/log /tmp/log_link

Bu komut /tmp/log_link adında bir link oluşturur ve /var/log dizinine işaret eder.

Link’i kontrol etme:

Terminal
$ ls -la /tmp/log_link

Çıktıda l harfi ve -> işareti link olduğunu gösterir:

lrwxrwxrwx 1 root root 8 Jan  1 12:00 log_link -> /var/log

Symlink ile dosya okuma:

Terminal
$ cat /tmp/log_link/syslog

Bozuk (broken) linkleri bulma:

find /path -xtype l

Hard link aynı veriyi işaret eden başka bir isimdir. Orijinal dosya silinse bile hard link çalışmaya devam eder.

Hard link oluşturma:

Terminal
$ touch /tmp/orijinal.txt
echo "test" > /tmp/orijinal.txt
ln /tmp/orijinal.txt /tmp/hardlink.txt

Aynı inode’u paylaştığını doğrula:

Terminal
$ ls -li /tmp/orijinal.txt /tmp/hardlink.txt

İlk sütundaki inode numarası aynı olacaktır.

Hard link sayısını gör:

Terminal
$ stat /tmp/orijinal.txt
ParametreAçıklama
-sSymbolic - sembolik link oluştur
-fForce - var olan linkin üzerine yaz
-nNo-dereference - sembolik linkin kendisini değil, link olarak işle
-vVerbose - oluşturulan linki göster
-rRelative - göreli yol kullan

Hard Link vs Symbolic Link Karşılaştırması:

ÖzellikHard LinkSymbolic Link
Dizinlere link❌ Hayır✅ Evet
Farklı dosya sistemleri❌ Hayır✅ Evet
Orijinal silinirse✅ Çalışır❌ Bozuk link olur
Dosya boyutuAynı inodeLink yolu boyutu
ls -l görünümüNormal dosyal ve -> işareti

Pratik kullanım örnekleri:

# Yapılandırma dosyası için symlink
ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/

# Aktif versiyon için symlink
ln -sf /opt/app-v2.0 /opt/app-current

# Log dizini için symlink (disk alanı yönetimi)
ln -s /mnt/bigdisk/logs /var/log/myapp

[!TIP] Sembolik linkler mutlak yol (/var/log) veya göreli yol (../log) ile oluşturulabilir. Taşınabilirlik için göreli yol tercih edilebilir.


Komut Özet Tablosu

KomutAçıklama
catDosya içeriğini görüntüle
lessSayfalı görüntüleme
head/tailBaştan/sondan satırlar
cutSütun kesme
sortSıralama
uniqBenzersiz satırlar
grepArama/filtreleme
sedMetin değiştirme
wcSayma
cp/mv/rmKopyala/Taşı/Sil

Sonraki Adım

Dosya Bulma ve Erişim Yönetimi →