Türkçe

Linux'ta komut satırından dosya ve klasör silme

3 min
VPS/VDS Hosting

Bu rehberin sonunda tek bir dosyayı, boş bir klasörü, iç içe geçmiş bir dizin ağacını ve ada ya da yaşa göre filtrelenmiş dosyaları silebilecek, her seferinde işlem yapmadan önce hedefi doğrulayacaksınız. Linux komut satırında çöp kutusu yoktur: silme işlemi kalıcıdır. Bu yüzden yöntem, komutun kendisi kadar önemlidir.

Ön koşullar

  • Yerel ya da SSH üzerinden erişebildiğiniz bir Linux makinesinde kabuk erişimi, örneğin bir Linux VPS
  • İlgili klasörde yazma yetkisine sahip bir kullanıcı (ya da sudo)
  • Önemli verilerinizin güncel bir yedeği

Silmeden önce hedefi doğrulayın

Doğru klasörde olduğunuzdan emin olun ve içeriğini listeleyin. Bu iki saniye sürer ve kazaların büyük bölümünü önler.

Bash
pwd ls -la

Bir desen (uzantı, önek) kullanacaksanız, önce neleri kapsadığını görün. rm tam olarak aynı listeyi kullanacaktır.

Bash
ls -d *.log

Tek bir dosyayı silin

Temel komut rm'dir.

Bash
rm report.txt

-i seçeneği onay ister, -v ise silinenleri ekrana yazar.

Bash
rm -iv report.txt

Ardından ls report.txt ile kontrol edin: "No such file or directory" mesajı dosyanın silindiğini doğrular.

Birden çok dosyayı silin

Kabuğun joker karakterleri bir grup dosyayı hedeflemenizi sağlar. Önce ls ile listeleyin, sonra silin.

Bash
rm -v *.tmp rm -v photo_{01..05}.jpg

İçeriğinden emin olmadığınız bir klasörde çıplak rm * kullanmaktan kaçının. Dosya adı tire ile başlıyorsa, seçeneklerin bittiğini belirtmek için -- kullanın:

Bash
rm -- -strange-file.txt

Boş bir klasörü silin

rmdir yalnızca boş klasörleri siler. Bu bilinçli bir tasarımdır: bir güvenlik katmanı işlevi görür.

Bash
rmdir old_folder

Boş kalan üst klasörleri de kaldırmak için:

Bash
rmdir -p project/cache/tmp

Bir klasörü ve tüm içeriğini silin

Burada özyinelemeli -r seçeneği gerekir. Önce neyi kaybedeceğinizi tahmin edin.

Bash
du -sh old_project find old_project -type f | wc -l

Ardından onaylı olarak silin:

Bash
rm -ri old_project

Binlerce dosyada onay istemek pratik olmaz. -f seçeneği onayı devre dışı bırakır:

Bash
rm -rf old_project

Bu komuta asla doğrulanmamış bir değişken koymayın. rm -rf "$DIR"/ komutunda $DIR boşsa hedefiniz kök dizin olur. Bir betikte set -u ekleyin ya da değişken boşsa çalışmayı durduran "${DIR:?}" biçimini kullanın.

Dosyaları yaşlarına göre silin

find, ad, tür, yaş ve boyut gibi kesin ölçütlere göre filtreleme yapar. İlke şudur: önce hiçbir eylem eklemeden çalıştırın, sonra -delete ekleyin.

Bash
find /var/log/myapp -type f -name "*.log" -mtime +30

Liste beklediğiniz gibiyse:

Bash
find /var/log/myapp -type f -name "*.log" -mtime +30 -delete

-mtime +30, 30 günden daha uzun süre önce değiştirilmiş dosyaları belirtir. -delete seçeneğini en sona koyun: find koşulları soldan sağa değerlendirir ve çok erkene yerleştirilmiş bir -delete her şeyi siler.

Hassas bir dosyayı daha güvenli biçimde silin

rm dosyanın girdisini kaldırır, verilerin diskten silinmesi şart değildir. shred ise silmeden önce içeriğin üzerine yazar.

Bash
shred -u -v secret.key

Bu yöntemin SSD'lerde, günlüklü dosya sistemlerinde ve anlık görüntü (snapshot) kullanan birimlerde sınırları vardır; eski veriler kalabilir. Gerçekten hassas veriler için en güvenilir çözüm, en baştan disk şifrelemesi kullanmaktır.

Sık karşılaşılan hataları giderin

Permission denied

Üst klasörde yazma yetkiniz yok (silmeyi dosya değil, üst klasör denetler). ls -ld DIRECTORY ile kontrol edin, uygunsa sudo kullanın:

Bash
sudo rm -v /path/to/file

sudo ile bile Operation not permitted

Dosyada büyük olasılıkla değiştirilemez (immutable) özniteliği vardır. Özniteliği görüntüleyin, kaldırın, ardından silin.

Bash
lsattr file.txt sudo chattr -i file.txt sudo rm file.txt

Argument list too long

Joker karakter, sistemin kabul edebileceğinden fazla argüman üretti. Dosyaları tek tek işleyen find kullanın:

Bash
find . -maxdepth 1 -type f -name "*.tmp" -delete

Directory not empty ya da Device or resource busy

rmdir ile ilk mesaj normaldir: klasörde gizli dosyalar dahil içerik vardır (ls -A). Bir bağlama noktası ya da süreç klasörü kullanıyorsa, lsof +D DIRECTORY veya findmnt ile bulun, yeniden denemeden önce serbest bırakın.

Risksiz pratik yapmak için tek kullanımlık bir örnek kullanışlıdır: bir VPS üzerinde deneme klasörü oluşturabilir, yanlış yapsanız bile sonuçlarından etkilenmezsiniz. Bu türden diğer rehberleri eğitimler bölümünde bulabilirsiniz.

FAQ

rm ile silinen bir dosya geri getirilebilir mi?

Nadiren ve garanti olmadan. extundelete ya da testdisk gibi araçlar, diske yazmayı hemen bırakırsanız bazen verileri bulabilir. Tek güvenilir koruma yedektir.

rm -r ile rm -rf arasındaki fark nedir?

rm -r özyinelemeli siler ancak yazma korumalı dosyalar için onay ister. rm -rf silmeyi zorlar ve var olmayan dosyaları sessizce yok sayar. Yalnızca hedefi zaten doğruladığınız durumlarda kullanın.

Adında boşluk bulunan bir klasörü nasıl silerim?

Adı tırnak içine alın ya da boşlukları kaçırın: rm -r "My folder" veya rm -r My\ folder. Aksi halde kabuk her kelimeyi ayrı bir öğe olarak ele alır.

Komut satırında çöp kutusu var mı?

Evet, trash-cli paketi (trash-put komutu) öğeleri silmek yerine kullanıcının çöp kutusuna taşır. Sunucularda genellikle varsayılan olarak kurulu gelmez: silmeden önce listeleme alışkanlığı edinin.

En yeni teklifler, indirimler ve özel promosyonlardan haberdar olun.

Promosyonları gör

Çerez kullanıyoruz

Sitemizdeki deneyiminizi iyileştirmek için analiz çerezleri kullanıyoruz. Hiçbir veri üçüncü taraflara satılmaz. Daha fazlasını şurada öğrenin: gizlilik politikası.