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.
$ touch /tmp/ilkdosyamBirden fazla dosya oluşturma:
$ touch dosya1.txt dosya2.txt dosya3.txt| Parametre | Açıklama |
|---|---|
-a | Sadece erişim zamanını güncelle |
-m | Sadece değiştirme zamanını güncelle |
-t STAMP | Belirli bir zaman damgası ata |
-c | Dosya 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:
$ echo "merhaba dünya" > /tmp/dosya1.txt
cat /tmp/dosya1.txtİki dosyayı birleştir:
$ echo "satır 1" > /tmp/a.txt
echo "satır 2" > /tmp/b.txt
cat /tmp/a.txt /tmp/b.txt > /tmp/c.txtSatır numarası ile görüntüle:
$ cat -n /etc/passwd| Parametre | Açıklama |
|---|---|
-n | Satır numaralarını göster |
-b | Boş olmayan satırları numarala |
-s | Ardışık boş satırları teke düşür |
-A | Görünmez karakterleri göster |
[!TIP]
catküçük dosyalar için idealdir. Büyük dosyalar içinlessveyamorekullanı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.
$ tac /tmp/c.txtKullanı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.
$ less /etc/passwdNavigasyon tuşları:
| Tuş | İşlev |
|---|---|
Space veya f | Bir sayfa ileri |
b | Bir sayfa geri |
/kelime | İleri arama |
?kelime | Geri arama |
n | Sonraki eşleşme |
N | Önceki eşleşme |
g | Dosya başına git |
G | Dosya sonuna git |
q | Çıkış |
| Parametre | Açıklama |
|---|---|
-N | Satır numaralarını göster |
-S | Uzun satırları kırpma (kaydır) |
+F | tail -f gibi canlı takip |
[!IMPORTANT]
lessLinux sistemlerde en çok kullanılan dosya görüntüleme komutudur. Man sayfaları bile varsayılan olaraklessile 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.
$ head -n 10 /etc/passwdİlk 5 satırı göster:
$ head -5 /etc/passwd| Parametre | Açıklama |
|---|---|
-n N | İlk N satırı göster |
-c N | İlk N byte’ı göster |
-q | Dosya 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.
$ tail -n 10 /etc/passwdCanlı log takibi (-f: follow):
$ tail -f /var/log/syslogBu komut dosyanın sonuna eklenen yeni satırları gerçek zamanlı olarak gösterir. Log takibi için vazgeçilmezdir!
| Parametre | Açıklama |
|---|---|
-n N | Son N satırı göster |
-f | Dosyayı canlı takip et |
-F | Dosya döndürülse bile takip et |
--pid=PID | Belirtilen 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
$ 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:
$ cd /tmp
cut -d ' ' -f 1 sirasiz.txtÖrnek - Sadece isimleri (ikinci sütun) alalım:
$ cut -d ' ' -f 2 sirasiz.txt[!TIP]
-d ' 'ile boşluk karakterini delimiter (ayırıcı) olarak tanımlıyoruz.-f1veya-f 2ile istediğimiz sütunu seçiyoruz.
| Parametre | Açıklama |
|---|---|
-d CHAR | Ayırıcı karakter (delimiter) |
-f N | N. alanı seç |
-b N | N. byte’ı seç |
-c N | N. karakteri seç |
--complement | Seçilmeyenleri göster |
sort - Sıralama
sort komutu satırları alfabetik veya sayısal olarak sıralar.
$ sort /tmp/sirasiz.txtSayısal sıralama:
$ sort -n /tmp/sirasiz.txtBelirli sütuna göre sıralama:
$ sort -k2 /tmp/sirasiz.txt| Parametre | Açıklama |
|---|---|
-n | Sayısal sıralama |
-r | Ters sıralama |
-k N | N. sütuna göre sırala |
-f | Büyük/küçük harf yoksay |
-u | Benzersiz 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:
$ cut -d ' ' -f2 /tmp/sirasiz.txt | sort | uniqBurada:
cutile sadece isim sütununu aldıksortile alfabetik sıraladık (aynı isimler yan yana geldi)uniqile tekrarları kaldırdık
Tekrar sayısını göster (-c):
$ cut -d ' ' -f2 /tmp/sirasiz.txt | sort | uniq -cBu komut her ismin kaç kez tekrar ettiğini gösterir.
Sadece tekrar edenleri göster (-d):
$ cut -d ' ' -f2 /tmp/sirasiz.txt | sort | uniq -dSadece benzersiz olanları göster (-u):
$ cut -d ' ' -f2 /tmp/sirasiz.txt | sort | uniq -u| Parametre | Açıklama |
|---|---|
-c | Her satırın tekrar sayısını başına yaz |
-d | Sadece tekrar eden satırları göster (en az 2 kez) |
-u | Sadece benzersiz (1 kez geçen) satırları göster |
-i | Bü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 -rnkombinasyonu 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:
$ 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):
$ wc -l /tmp/sirasiz.txtBu parametre en çok kullanılan parametredir. Örneğin log dosyasında kaç hata var:
$ grep -i 'error' /var/log/syslog | wc -lSadece kelime sayısı (-w):
$ wc -w /tmp/sirasiz.txtBirden fazla dosya için toplam:
$ wc -l /tmp/*.txtBu komut her dosyanın satır sayısını ve en sonda toplamı (total) gösterir.
| Parametre | Açıklama |
|---|---|
-l | Sadece satır sayısı (lines) |
-w | Sadece kelime sayısı (words) |
-c | Sadece byte sayısı |
-m | Sadece karakter sayısı (UTF-8 için farklı) |
-L | En uzun satırın karakter sayısı |
[!TIP]
wc -lparametresi 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:
$ nl /tmp/sirasiz.txtBoş satırları da numarala:
$ nl -b a /tmp/sirasiz.txtÖzel ayırıcı kullan:
$ nl -s ': ' /tmp/sirasiz.txtBu komut satır numarasından sonra : ekler.
| Parametre | Açıklama |
|---|---|
-b a | Tüm satırları numarala (boş dahil) |
-b t | Sadece dolu satırları numarala (varsayılan) |
-s CHAR | Numara ile satır arasına ayırıcı ekle |
-n ln | Sol hizalı numara |
-n rn | Sağ hizalı numara |
-n rz | Sağ hizalı, sıfır dolgulu (001, 002…) |
-w N | Numara 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:
$ echo "merhaba dünya" | tr 'a-z' 'A-Z'Sonuç: MERHABA DÜNYA
Büyük harfleri küçük harfe çevir:
$ echo "MERHABA" | tr 'A-Z' 'a-z'Belirli karakterleri sil (-d):
$ echo "merhaba dünya" | tr -d 'a'Sonuç: merhb düny (tüm ‘a’ harfleri silindi)
Rakamları sil:
$ echo "abc123def456" | tr -d '0-9'Sonuç: abcdef
Tekrar eden karakterleri sıkıştır (-s):
$ 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):
$ echo "abc123XYZ" | tr -cd '0-9'Sonuç: 123 (sadece rakamlar kaldı, diğerleri silindi)
| Parametre | Açıklama |
|---|---|
-d | Belirtilen karakterleri sil (delete) |
-s | Ardışık tekrarları teke düşür (squeeze) |
-c | Complement - belirtilenlerin dışındakileri işle |
-t | İlk seti ikinci setin boyutuna kırp (truncate) |
Özel karakter setleri:
| Set | Açıklama |
|---|---|
a-z | Küçük harfler |
A-Z | Büyük harfler |
0-9 | Rakamlar |
[:alpha:] | Tüm harfler |
[:digit:] | Rakamlar |
[:space:] | Boşluk karakterleri |
[:punct:] | Noktalama işaretleri |
[!TIP]
trkomutu ö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:
$ cut -d ' ' -f1 /tmp/sirasiz.txt > /tmp/sutun1.txt
cut -d ' ' -f2 /tmp/sirasiz.txt > /tmp/sutun2.txtŞimdi birleştirelim:
$ paste /tmp/sutun1.txt /tmp/sutun2.txtÖzel ayırıcı kullan (-d):
$ paste -d ':' /tmp/sutun1.txt /tmp/sutun2.txtSonuç: 1:Remzi, 8:remzi şeklinde : ile ayrılmış çıktı
Tek dosyayı seri olarak birleştir (-s):
$ paste -s /tmp/sutun2.txtBu komut tüm satırları tek satırda, sekme ile ayırarak gösterir.
Virgülle ayırarak tek satır yap:
$ paste -s -d ',' /tmp/sutun2.txtSonuç: Remzi,remzi,guray,necmi,...
| Parametre | Açıklama |
|---|---|
-d DELIM | Ayırıcı karakter(ler) belirt (varsayılan: TAB) |
-s | Seri birleştir (tüm satırları tek satıra) |
--zero-terminated | Satı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]
joinkomutunun ç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
| Parametre | Açıklama |
|---|---|
-1 N | Birinci dosyada N. alanı birleştirme anahtarı olarak kullan |
-2 N | İkinci dosyada N. alanı birleştirme anahtarı olarak kullan |
-t CHAR | Alan ayırıcı karakteri belirt |
-a 1 | Birinci dosyadaki eşleşmeyenleri de göster (LEFT JOIN) |
-a 2 | İkinci dosyadaki eşleşmeyenleri de göster (RIGHT JOIN) |
-v 1 | Sadece 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):
$ 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
| Parametre | Açıklama |
|---|---|
-l N | Her N satırda bir böl |
-b SIZE | Her SIZE byte’ta bir böl (K, M, G kullanılabilir) |
-n N | Tam olarak N parçaya böl |
-d | Sayısal son ek kullan (aa yerine 00, 01…) |
--verbose | Oluşturulan dosyaları göster |
[!TIP] Büyük log dosyalarını analiz ederken
splitile 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:
$ grep user /etc/passwdBu komut /etc/passwd dosyasında “user” kelimesini içeren satırları gösterir.
Komut çıktısında arama (pipe ile):
$ ls -la /etc | grep confBüyük/Küçük Harf Duyarsız Arama (-i)
$ grep -i 'remzi' /tmp/sirasiz.txtBu komut “remzi”, “Remzi”, “REMZI” gibi tüm varyasyonları bulur.
Recursive Arama (-r)
Bir dizin ve tüm alt dizinlerinde arama:
$ 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)
$ grep -v 'remzi' /tmp/sirasiz.txtBu komut “remzi” kelimesini içermeyen satırları gösterir.
Eşleşen Satır Sayısını Göster (-c)
$ grep -c 'remzi' /tmp/sirasiz.txtKaç satırda eşleşme olduğunu sayar.
Satır Numarasını Göster (-n)
$ grep -n 'remzi' /tmp/sirasiz.txtEşleşen satırın dosyadaki satır numarasını gösterir.
Tam Kelime Eşleşmesi (-w)
$ grep -w 'rem' /tmp/sirasiz.txtBu 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):
$ grep '[rR]emzi' /tmp/sirasiz.txtSatır başı (^) ve satır sonu ($):
$ grep '^1' /tmp/sirasiz.txtBu 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
| Parametre | Açıklama |
|---|---|
-i | Büyük/küçük harf duyarsız (ignore case) |
-v | Eşleşmeyen satırları göster (invert) |
-c | Eşleşen satır sayısını göster (count) |
-n | Satır numarasını göster (number) |
-r | Alt dizinlerde de ara (recursive) |
-l | Sadece dosya isimlerini göster (files with matches) |
-L | Eşleşme olmayan dosya isimlerini göster |
-w | Tam kelime eşleşmesi (word) |
-E | Extended regex kullan (egrep ile aynı) |
-o | Sadece eşleşen kısmı göster |
-B N | Eşleşmeden N satır öncesini göster |
-A N | Eşleşmeden N satır sonrasını göster |
-C N | Eşleşmeden N satır öncesi ve sonrasını göster |
--color | Eşleşen kısmı renklendir |
Yaygın Kullanım Örnekleri
Log dosyasında hata ara:
$ grep -i 'error\|warning\|failed' /var/log/syslogBir process’i bul (kendisini hariç tut):
$ ps aux | grep ssh | grep -v grepBelirli bir IP’yi loglardan bul:
grep -r '192.168.1.100' /var/log/
[!IMPORTANT]
grepLinux 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:
$ sed 's/necati/Fecati/g' /tmp/sirasiz.txtBu 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):
$ sed 's/remzi/REMZI/' /tmp/sirasiz.txtBüyük/küçük harf duyarsız değiştir:
$ sed 's/remzi/REMZI/gi' /tmp/sirasiz.txtDosyada 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]
-iparametresi geri dönüşümsüzdür! Her zaman-i.bakile yedek alın veya önce test edin.
Satır Silme (d komutu)
Belirli bir satırı sil:
$ sed '3d' /tmp/sirasiz.txtBir aralığı sil (2-5. satırlar):
$ sed '2,5d' /tmp/sirasiz.txtBelirli bir pattern içeren satırları sil:
$ sed '/remzi/d' /tmp/sirasiz.txtBoş satırları sil:
sed '/^$/d' dosya.txt
Satır Yazdırma (p komutu)
Sadece belirli satırları göster:
$ 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
| Komut | Açıklama |
|---|---|
s/eski/yeni/ | Değiştir (ilk eşleşme) |
s/eski/yeni/g | Değiştir (tüm eşleşmeler) |
s/eski/yeni/i | Büyük/küçük harf duyarsız |
d | Satır sil |
p | Satır yazdır |
-n | Otomatik yazdırmayı kapat |
-i | Dosyada kalıcı değiştir |
-e | Birden fazla komut |
[!TIP]
sedilegrepkombinasyonu ç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:
$ cp /tmp/sirasiz.txt /tmp/kopya.txtBu komut sirasiz.txt dosyasını kopya.txt adıyla kopyalar.
Birden fazla dosya kopyalama:
$ cp dosya1.txt dosya2.txt dosya3.txt /hedef/dizin/Dizin kopyalama (-r: recursive):
$ cp -r /tmp/kaynak_dizin /tmp/hedef_dizin[!IMPORTANT] Dizin kopyalamak için
-r(recursive) parametresi zorunludur!
İzinleri koruyarak kopyala (-p: preserve):
$ cp -rp /var/www/html /backup/www_backupBu komut dosyaların izinlerini, sahipliğini ve zaman damgalarını korur.
Üzerine yazmadan önce sor (-i: interactive):
$ cp -i dosya.txt /hedef/Sadece daha yeni dosyaları kopyala (-u: update):
$ cp -u *.txt /backup/İlerleme durumunu göster (-v: verbose):
$ cp -v /tmp/sirasiz.txt /tmp/kopya2.txt| Parametre | Açıklama |
|---|---|
-r, -R | Recursive - dizinleri alt dizinleriyle kopyala |
-p | Preserve - izinleri, sahipliği ve zamanları koru |
-i | Interactive - üzerine yazmadan önce sor |
-f | Force - sormadan üzerine yaz |
-u | Update - sadece daha yeni dosyaları kopyala |
-v | Verbose - yapılan işlemi göster |
-a | Archive - -rpd kombinasyonu (tam yedekleme için) |
-n | No-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
rsynckomutu 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:
$ mv /tmp/eski_isim.txt /tmp/yeni_isim.txtDosya taşıma:
$ mv /tmp/dosya.txt /home/user/Birden fazla dosya taşıma:
$ mv dosya1.txt dosya2.txt dosya3.txt /hedef/dizin/Dizin taşıma (recursive parametreye gerek yok):
$ mv /tmp/kaynak_dizin /tmp/hedef_dizin[!NOTE]
mvkomutu için-rparametresine gerek yoktur. Dizinler otomatik olarak tüm içerikleriyle taşınır.
Üzerine yazmadan önce sor (-i: interactive):
$ mv -i dosya.txt /hedef/İlerleme göster (-v: verbose):
$ mv -v /tmp/dosya.txt /home/user/| Parametre | Açıklama |
|---|---|
-i | Interactive - üzerine yazmadan önce sor |
-f | Force - sormadan üzerine yaz |
-n | No-clobber - var olan dosyaların üzerine yazma |
-v | Verbose - yapılan işlemi göster |
-u | Update - 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:
$ mkdir /tmp/yeni_klasorBirden fazla dizin oluşturma:
$ mkdir dizin1 dizin2 dizin3İç içe dizinler oluşturma (-p: parents):
$ mkdir -p /tmp/a/b/c/d/e[!IMPORTANT]
-pparametresi 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):
$ mkdir -m 755 /tmp/public_folder$ mkdir -m 700 /tmp/private_folderOluşturulan dizini göster (-v: verbose):
$ mkdir -v /tmp/yeni_dizin| Parametre | Açıklama |
|---|---|
-p | Parents - üst dizinleri de oluştur |
-m MODE | Mode - belirtilen izinlerle oluştur |
-v | Verbose - 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:
$ mkdir /tmp/bos_dizin
rmdir /tmp/bos_dizinİç içe boş dizinleri silme (-p: parents):
$ mkdir -p /tmp/a/b/c
rmdir -p /tmp/a/b/cBu komut sırasıyla c, b, a dizinlerini siler (hepsi boşsa).
| Parametre | Açıklama |
|---|---|
-p | Parents - boş üst dizinleri de sil |
-v | Verbose - silinen dizinleri göster |
[!NOTE] İçinde dosya olan dizinleri silmek için
rm -rkullanın.
rm - Dosya/Dizin Silme (Remove)
rm (remove) komutu dosya ve dizinleri siler. Linux’ta çöp kutusu yoktur - silinen dosyalar geri getirilemez!
Dosya silme:
$ rm /tmp/dosya.txtBirden fazla dosya silme:
$ rm dosya1.txt dosya2.txt dosya3.txtWildcard ile silme:
$ rm /tmp/*.logDizin ve içeriğini silme (-r: recursive):
$ rm -r /tmp/silinecek_dizinZorla silme (-f: force):
$ rm -f /tmp/dosya.txtDizin ve içeriğini zorla sil (-rf):
$ rm -rf /tmp/dizin[!CAUTION]
rm -rfkomutu çok tehlikelidir! Yanlış dizinde çalıştırırsanız tüm sisteminizi silebilirsiniz. Özelliklerm -rf /veyarm -rf /*asla çalıştırmayın!
Silmeden önce sor (-i: interactive):
$ rm -i /tmp/*.txtHer 3 dosyada bir sor (-I):
$ rm -I /tmp/*.logSilinen dosyaları göster (-v: verbose):
$ rm -v /tmp/dosya.txt| Parametre | Açıklama |
|---|---|
-r, -R | Recursive - dizinleri alt dizinleriyle sil |
-f | Force - sormadan sil, hata verme |
-i | Interactive - her dosya için sor |
-I | Her 3+ dosyada bir sor |
-v | Verbose - silinen dosyaları göster |
-d | Boş dizinleri sil |
--preserve-root | Kö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 Oluşturma (Link)
ln (link) komutu dosyalara link (bağlantı) oluşturur. Linux’ta iki tür link vardır:
- Hard Link: Aynı inode’a işaret eder, orijinal dosya silinse bile çalışır
- Symbolic Link (Symlink): Dosya yoluna işaret eder, bir kısayol gibidir
Symbolic Link (Sembolik Link) - En Yaygın Kullanım
Sembolik link bir kısayol gibidir. Windows’taki shortcut’a benzer.
Sembolik link oluşturma (-s):
$ ln -s /var/log /tmp/log_linkBu komut /tmp/log_link adında bir link oluşturur ve /var/log dizinine işaret eder.
Link’i kontrol etme:
$ 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:
$ cat /tmp/log_link/syslogBozuk (broken) linkleri bulma:
find /path -xtype l
Hard Link
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:
$ touch /tmp/orijinal.txt
echo "test" > /tmp/orijinal.txt
ln /tmp/orijinal.txt /tmp/hardlink.txtAynı inode’u paylaştığını doğrula:
$ ls -li /tmp/orijinal.txt /tmp/hardlink.txtİlk sütundaki inode numarası aynı olacaktır.
Hard link sayısını gör:
$ stat /tmp/orijinal.txt| Parametre | Açıklama |
|---|---|
-s | Symbolic - sembolik link oluştur |
-f | Force - var olan linkin üzerine yaz |
-n | No-dereference - sembolik linkin kendisini değil, link olarak işle |
-v | Verbose - oluşturulan linki göster |
-r | Relative - göreli yol kullan |
Hard Link vs Symbolic Link Karşılaştırması:
| Özellik | Hard Link | Symbolic Link |
|---|---|---|
| Dizinlere link | ❌ Hayır | ✅ Evet |
| Farklı dosya sistemleri | ❌ Hayır | ✅ Evet |
| Orijinal silinirse | ✅ Çalışır | ❌ Bozuk link olur |
| Dosya boyutu | Aynı inode | Link yolu boyutu |
ls -l görünümü | Normal dosya | l 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
| Komut | Açıklama |
|---|---|
cat | Dosya içeriğini görüntüle |
less | Sayfalı görüntüleme |
head/tail | Baştan/sondan satırlar |
cut | Sütun kesme |
sort | Sıralama |
uniq | Benzersiz satırlar |
grep | Arama/filtreleme |
sed | Metin değiştirme |
wc | Sayma |
cp/mv/rm | Kopyala/Taşı/Sil |