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.
-i veya trash-cli önerrm -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.
# 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
/ dizin, * çalıştırılabilir, @ sembolik link02 ls: uzun format ve gizli dosyalar
-l uzun format, -a gizli dosyalar. Birleştirmek ls -la veya ls -lA.
# 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
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.
# 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
-dR --preserve=all kısayolu.~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.
# 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
numbered, simple, existingAynı 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.
# 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
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.
# 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
# Ö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"
# 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
# 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 eklels -lt: en yeni dosya önce — debug içincp -a: arşiv modu — metadata ve sembolik linkleri korumvaynı partition'da atomik — config güncellemesi içinmktemp + mvrm -I(büyük I): 3'ten fazla veya özyinelemeli silincelerde bir kez sorrm *.tmpöncesils *.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ı