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.
Bashpwd ls -la
Bir desen (uzantı, önek) kullanacaksanız, önce neleri kapsadığını görün. rm tam olarak aynı listeyi kullanacaktır.
Bashls -d *.log
Tek bir dosyayı silin
Temel komut rm'dir.
Bashrm report.txt
-i seçeneği onay ister, -v ise silinenleri ekrana yazar.
Bashrm -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.
Bashrm -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:
Bashrm -- -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.
Bashrmdir old_folder
Boş kalan üst klasörleri de kaldırmak için:
Bashrmdir -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.
Bashdu -sh old_project find old_project -type f | wc -l
Ardından onaylı olarak silin:
Bashrm -ri old_project
Binlerce dosyada onay istemek pratik olmaz. -f seçeneği onayı devre dışı bırakır:
Bashrm -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.
Bashfind /var/log/myapp -type f -name "*.log" -mtime +30
Liste beklediğiniz gibiyse:
Bashfind /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.
Bashshred -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:
Bashsudo 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.
Bashlsattr 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:
Bashfind . -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.