rm rekursi hanya berfungsi dengan benar?
rm -r x yakan menghapus xdan ysemua yang ada di dalamnya (jika itu adalah direktori), tetapi bukan orang tua mereka atau apa pun di luar mereka.
Menjalankan: sudo rm -R *.QTFSakan menghapus semua file * .QTFS di direktori saat ini dan anak-anaknya, benar?
Tidak. Ini akan menghapus semua file yang diberi nama *.QTFS, file apa pun secara rekursif di dalam direktori yang disebut *.QTFS, dan direktori itu sendiri. Jika Anda menginginkan perilaku penghapusan lainnya, gunakan find -delete.
direktori saat ini seperti yang ditampilkan oleh ls -lhajuga berisi .dan ..tautan karena tidak ada kata yang lebih baik, jadi mengapa rekursi tidak mengikuti ini di pohon direktori? Apakah ada batasan buatan pada aplikasi rm, atau .dan ..bukan hal-hal nyata?
Ini batas buatan rm.
Ini tidak sepenuhnya buatan, meskipun - itu satu-satunya cara yang bisa berhasil. Jika rmmengikuti ..tautan induk , setiap orang rm -rakan menghapus setiap file di sistem, dengan mengikuti semua ..tautan kembali ke /. rmmelihat ..dan .entri di setiap direktori ketika daftar konten, dan secara eksplisit mengabaikannya karena alasan itu.
Anda bisa mencobanya sendiri. Jalankan rm -r .dan sebagian besar rmimplementasi akan menolak untuk bertindak, melaporkan kesalahan secara eksplisit:
$ rm -r .
rm: refusing to remove ‘.’ or ‘..’ directory: skipping ‘.’
(pesan itu dari GNUrm ; yang lain serupa). Ketika bertemu entri ini secara implisit, bukan sebagai argumen eksplisit, itu hanya mengabaikan mereka dan melanjutkan. Perilaku itu diperlukan oleh POSIX . Di GNU rmdan banyak BSD, ini disediakan secara otomatis oleh fts_readkeluarga fungsi hierarki-traversal.
atau .dan ..bukan hal-hal nyata?
.dan ..yang umumnya entri direktori nyata, walaupun itu adalah filesystem-spesifik. Mereka hampir selalu disajikan seolah-olah mereka adalah entri nyata untuk semua kode pengguna, terlepas dari itu. Banyak perangkat lunak (bukan hanya rm) khusus-kasus perilaku mereka untuk menangkap atau mencegah pelarian atau rekursi yang tidak diinginkan.