← Bash tools
TEKNİK REHBER BASH TOOLS DOSYA YÖNETİMİ 2026

ls, cp, mv, rm
temel dosya işlemleri

Günde yüzlerce kez kullandığınız dört komut — ama büyük çoğunluk gücün onda birini bile kullanmıyor. Renk, sıralama, güvenli silme, akıllı kopyalama ve yeni adlandırma hileleri burada.

00 Dört aracın mental modeli

Bu araçlar basit görünür ama hatalı kullanıldığında geri dönüşü olmayan sonuçlar doğurur — özellikle rm.

ls
Dizin içeriğini listele — sıralama, gizli, uzun format, boyut
cp
Dosya veya dizin kopyala — özyinelemeli, yedekli, etkileşimli
mv
Dosyayı taşı veya yeniden adlandır — aynı partition'da atomik
rm
Sil — geri alınamaz, glob dikkatli, -i veya trash-cli öner
rm -rf GERİ ALINAMAZ

rm -rf /, rm -rf /*, rm -rf ~/ gibi komutlar sistemin tamamını silebilir. Unix'te çöp kutusu yoktur. Silmeden önce ls ile hedefi doğrulayın veya trash-put (trash-cli) kullanın.

01 ls: listeleme ve sıralama

Varsayılan ls alfabetik sıralar. Zaman, boyut, uzantı veya erişim zamanına göre sıralama da mümkün.

bash
# Temel listeleme
ls                         # mevcut dizin
ls /etc                    # belirtilen dizin
ls *.txt                   # glob ile filtrele

# Sıralama seçenekleri
ls -t                      # mtime'a göre (en yeni önce)
ls -tr                     # en eski önce (log debug için)
ls -S                      # boyuta göre (en büyük önce)
ls -Sr                     # en küçük önce
ls -X                      # uzantıya göre
ls -v                      # doğal sıralama (file2 file10'dan önce)

# Renk ve biçim
ls --color=auto            # renk (çoğu sistemde varsayılan)
ls -F                      # tür göstergesi: / = dizin, * = çalıştırılabilir, @ = link
ls -p                      # sadece dizinlere / ekle

# Sütun sayısı
ls -1                      # tek sütun (pipe için)
ls -C                      # çok sütun (varsayılan)
ls -m                      # virgülle ayrılmış liste
-t
Değişiklik zamanına göre sırala (en yeni önce)
-S
Boyuta göre sırala (en büyük önce)
-r
Sıralamayı tersine çevir
-v
Doğal sıralama — sayı bloklarını sayısal değerlendirir
-F
Tür göstergesi: / dizin, * çalıştırılabilir, @ sembolik link
-1
Tek sütun — pipe ve betikler için ideal

02 ls: uzun format ve gizli dosyalar

-l uzun format, -a gizli dosyalar. Birleştirmek ls -la veya ls -lA.

bash
# Uzun format
ls -l
total 48
drwxr-xr-x 2 user group 4096 Jan 10 12:00 dizin/
-rw-r--r-- 1 user group 2847 Jan  8 14:55 dosya.txt
lrwxrwxrwx 1 user group   15 Jan  5 10:30 link -> /etc/hosts

# Gizli dosyalar dahil (. ile başlayanlar)
ls -a
ls -A                      # . ve .. gösterme (daha temiz)
ls -la                     # uzun + gizli

# İnsan-okunur boyutlar
ls -lh
-rw-r--r-- 1 user group  2.8K Jan  8 14:55 dosya.txt

# Dizinlerin kendisini listele (içerik değil)
ls -ld /etc /var           # dizini dosya gibi göster

# İnode numarası
ls -li

# Zaman damgaları tam göster
ls -l --time-style=full-iso
-rw-r--r-- 1 user group 2847 2026-01-08 14:55:32.987654321 +0300 dosya.txt

# Yaygın alias'lar (~/.bashrc için)
alias ll='ls -lhF --color=auto'
alias la='ls -lhAF --color=auto'
alias lt='ls -lhFt --color=auto'   # en yeni önce
-l
Uzun format — izinler, sahip, boyut, zaman
-a
Gizli dosyaları göster (. ile başlayanlar)
-A
Gizli dosyaları göster, . ve .. hariç
-h
İnsan-okunur boyutlar: K, M, G
-d
Dizini listele, içeriğini değil
-i
Inode numarasını göster
--time-style=FORMAT
Zaman formatı: full-iso, long-iso, +%Y-%m-%d...

03 cp: kopyalama ve yedekleme

cp dosyaları ve dizinleri kopyalar. Üzerine yazma koruması, yedekleme ve metadata koruma seçenekleri var.

bash
# Tek dosya kopyala
cp kaynak.txt hedef.txt

# Birden fazla dosyayı dizine kopyala
cp a.txt b.txt c.txt hedef_dizin/

# Dizini özyinelemeli kopyala
cp -r kaynak_dizin/ hedef_dizin/

# Var olan dosyanın üzerine yazmadan önce sor
cp -i kaynak.txt hedef.txt

# Hedef dosya daha yeniyse atla
cp -u kaynak.txt hedef.txt   # update: sadece eski olanı güncelle

# Metadata koru (zaman, izinler)
cp -p kaynak.txt hedef.txt

# Arşiv modu: -p + sembolik link + özyinelemeli
cp -a kaynak_dizin/ hedef_dizin/

# Yedek oluştur (~ ekler)
cp --backup dosya.txt dosya.txt
# dosya.txt~ oluşturulur

# Sembolik linkleri hedef olarak değil, link olarak kopyala
cp -d link hedef/          # linki kopyala (hedefi değil)

# İlerleme göster (büyük dosyalar için)
cp --progress buyuk.iso hedef/  # GNU coreutils 8.x+
# veya:
rsync --progress kaynak hedef   # rsync her zaman ilerleme gösterir
-r / -R
Dizini özyinelemeli kopyala
-i
Etkileşimli — var olan dosyanın üzerine yazmadan önce sor
-u
Update — hedef daha yeniyse kopyalamayı atla
-p
Metadata koru: zaman damgaları, izinler, sahiplik
-a
Arşiv modu: -dR --preserve=all kısayolu
--backup
Var olan hedefin yedeğini al (.~1~ veya ~ ekler)

04 mv: taşıma ve yeniden adlandırma

mv aynı partition içinde atomik — rename(2) system call'u, önce kopyala sonra sil değil. Farklı partition'lar arası ise kopyalayıp siler.

bash
# Yeniden adlandır
mv eski_ad.txt yeni_ad.txt

# Dizine taşı
mv dosya.txt arsiv/

# Birden fazla dosyayı dizine taşı
mv *.log /var/log/old/

# Etkileşimli (var olan üzerine yazmadan önce sor)
mv -i kaynak hedef

# Daha yeniyse üzerine yazma
mv -u kaynak hedef

# Yedek al (eskinin üzerine yazarken)
mv --backup=numbered dosya.conf dosya.conf
# dosya.conf.~1~ oluşturulur

# Toplu yeniden adlandırma (bash döngüsü)
for f in *.txt; do
  mv "$f" "${f%.txt}.md"    # .txt → .md
done

# rename komutu (perl-based, daha güçlü)
rename 's/\.txt$/.md/' *.txt
rename 's/ /_/g' *         # boşlukları alt çizgiye
rename 's/^/2026-/' *.jpg   # ön ek ekle
-i
Etkileşimli — var olan hedefin üzerine yazmadan önce sor
-u
Update — hedef daha yeniyse taşımayı atla
-f
Force — var olan hedefin üzerine sor sormadan yaz
--backup=TYPE
Yedek türü: numbered, simple, existing
ATOMİK YENIDEN ADLANDIRMA

Aynı dosya sistemi içinde mv atomiktir — dosya ya eskidir ya yenidir, hiçbir zaman yarım halde değildir. Bu yüzden config güncellemelerinde: yeni dosyayı geçici adla yaz, sonra mv ile yerleştir. Diğer processler tutarsız durum görmez.

05 rm: silme ve güvenlik

rm geri alınamaz — çöp kutusu yoktur. Tehlikeli komutlar için -i veya trash-cli kullanın.

bash
# Dosya sil
rm dosya.txt

# Birden fazla dosya
rm a.txt b.txt c.txt
rm *.tmp                   # glob — DİKKATLİ: önce ls *.tmp ile kontrol et

# Dizin sil (boş dizin)
rmdir boş_dizin/

# Dizini içeriğiyle sil (özyinelemeli)
rm -r dizin/

# Etkileşimli (her dosya için onay iste)
rm -i dosya.txt
rm -ri dizin/

# Var olmayan dosya için hata gösterme
rm -f dosya_olmayabilir.txt

# Glob güvenliği: önce listele, sonra sil
ls /tmp/*.tmp              # önce kontrol et
rm /tmp/*.tmp              # sonra sil

# Güvenli alternatif: trash-cli (geri alınabilir)
trash-put dosya.txt        # çöp kutusuna gönder
trash-list                 # çöp kutusunu listele
trash-restore              # geri yükle
trash-empty                # çöp kutusunu boşalt
-r / -R
Özyinelemeli — dizini içeriğiyle sil
-i
Etkileşimli — her silme için onay iste
-I
Yarı etkileşimli — 3'ten fazla veya özyinelemeli silincelerde bir kez sor
-f
Force — var olmayan dosya için hata gösterme, onay isteme
-v
Verbose — her silinen dosyayı yazdır
--one-file-system
Farklı dosya sistemlerine geçme (mount noktaları güvende)
rm -rf ÇUKURLARI

Değişken boş olabilir: rm -rf "$TMPDIR/"TMPDIR boşsa rm -rf / çalışır. Değişkeni önce kontrol edin: [ -n "$TMPDIR" ] && rm -rf "$TMPDIR/"

Yol sonundaki boşluk: rm -rf /var/myapp / — kazara boşluk iki argüman yapar. Yolları tırnak içinde kullanın.

06 Pratik vakalar

Gerçek senaryolar: dosya organizasyonu, güvenli silme, toplu işlemler.

bash — Tarihe göre organize et
# Fotoğrafları yıl/ay klasörlerine taşı
for f in *.jpg; do
  date=$(stat -c '%y' "$f" | cut -c1-7)   # "2026-01"
  mkdir -p "photos/$date"
  mv "$f" "photos/$date/"
done
bash — Güvenli kopyalama scripti
# Önemli dizinlerin yedeğini tarihli al
BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p "$BACKUP_DIR"
cp -a /etc/ "$BACKUP_DIR/etc/"
cp -a /home/ "$BACKUP_DIR/home/"
echo "Yedek: $BACKUP_DIR"
bash — 30 günden eski log'ları temizle
# find + rm kombinasyonu (güvenli)
find /var/log/myapp -name '*.log' -mtime +30 -type f

# Yukarıdaki listeyi incele, sonra sil
find /var/log/myapp -name '*.log' -mtime +30 -type f -delete
bash — Atomik config güncellemesi
# Yeni config'i geçici dosyaya yaz, sonra mv ile yerleştir
TMPFILE=$(mktemp /etc/nginx/nginx.conf.XXXXXX)
generate_config > "$TMPFILE"
if nginx -t -c "$TMPFILE"; then
  mv "$TMPFILE" /etc/nginx/nginx.conf   # atomik
  nginx -s reload
else
  rm "$TMPFILE"
  echo "Config geçersiz, güncellenmedi"
fi

Hatırlanacaklar

  • ls -lhAF --color=auto: en bilgilendirici listeleme — alias'a ekle
  • ls -lt: en yeni dosya önce — debug için
  • cp -a: arşiv modu — metadata ve sembolik linkleri koru
  • mv aynı partition'da atomik — config güncellemesi için mktemp + mv
  • rm -I (büyük I): 3'ten fazla veya özyinelemeli silincelerde bir kez sor
  • rm *.tmp öncesi ls *.tmp — glob'u önce görün
  • [ -n "$VAR" ] && rm -rf "$VAR/" — değişken boşluğu tuzağı
  • trash-put: geri alınabilir silme (trash-cli paketi)

Devam: mkdir, touch, ln, tree — oluşturma ve bağlantılar · find — dosya sistemi sorguları