Saya baru saja kehilangan beberapa data di folder A yang ada di dalam folder B setelah melakukan rm -rf B
. Sebelum saya menyadari apa yang telah saya lakukan, semuanya sudah berakhir. Sekarang sebuah pelajaran telah dipelajari, saya ingin membuat beberapa dari folder saya idiot-proof untuk menghindari waktu berikutnya ketika saya melakukan sesuatu yang serupa dan ingin bunuh diri.
Salah satu cara yang dapat saya pikirkan adalah menulis fungsi bash dan menambahkannya ke rm
. Fungsi ini akan melihat ke setiap sub-folder untuk file tersembunyi seperti .dontdelete
. Ketika ditemukan, ia akan bertanya apakah saya benar-benar ingin melanjutkan. Saya tidak dapat membuatnya dilindungi dari penulisan karena ada proses yang terus-menerus menulis ke folder ini. Apakah ada cara yang lebih baik untuk melakukannya?
sumber
rm
untukrm -i
:> -i prompt sebelum setiap penghapusan atau> -saya minta sekali sebelum menghapus lebih dari tiga file, atau ketika menghapus secara rekursif. Tidak terlalu mengganggu daripada -i, sambil tetap memberikan perlindungan terhadap sebagian besar kesalahan. Anda dapat menuliskannya dengan flag lain kapan saja.safe-rm
tmpwatch
untuk menghapus file dari folder ini setiap jam.Jawaban:
Dalam meneliti pertanyaan Anda, saya menemukan teknik ini yang mungkin membantu Anda di masa depan.
Anda tampaknya dapat menyentuh file di direktori seperti ini:
Sekarang ketika Anda menjalankan perintah
rm -fr *
di direktori tempat-i
hadir Anda akan disajikan dengan prompt interaktif darirm
.Hal yang sama dapat dicapai dengan hanya meninggalkan alias di tempat
rm
agar selalu dilakukanrm -i
. Ini bisa mengganggu. Seringkali yang saya lihat dilakukan adalah menempatkan alias ini di tempatnya, dan kemudian menonaktifkannya ketika Anda benar-benar ingin menghapus tanpa diminta.Sekarang di direktori Anda akan disambut seperti ini:
Untuk mengganti alias:
Namun ini masih tidak berhenti
rm -fr
. Tapi itu memberi Anda perlindungan.Referensi
sumber
--force
sesuatu, Anda benar-benar bersungguh-sungguh.rm -I
(huruf besari
) mungkin berguna dalam alias, karena sedikit kurang mengganggu (menurut halaman manual, hanya meminta jika Anda menghapus lebih dari tiga file atau secara rekursif).touch ./-i
trik ini hanya berfungsi dengan GNUrm
dan hanya jika variabel POSIXLY_CORRECT tidak disetel (perintah POSIX tidak mengenali opsi setelah argumen).Banyak kemungkinan:
alias rm='rm -i'
- rm akan bertanya - kecuali jika Anda menentukan-f
...chmod -w dir
- melindungi file secara langsung di direktori itu.chattr +i
jika Anda benar-benar bersungguh-sungguhTetapi cara yang lebih baik mungkin adalah memiliki cadangan yang baik dan menyimpan data penting dalam beberapa jenis kontrol versi (seperti
git
), yang juga membawa banyak keuntungan lainnya.sumber
rm -i
tetapi seperti yang diharapkan, itu tidak bekerja dengan-f
opsi. Saya menggunakan git untuk banyak tujuan lain, tetapi bagaimana jika saya secara tidak sengaja juga melakukannyarm -rf *
di git?Gunakan perangkat lunak kontrol versi ingin
git
merangkum proyek Anda.Selama Anda tidak menghapus seluruh proyek, Anda harus mengetik dengan sengaja
rm -rf .*
untuk menghapus.git
direktori dan kehilangan semua data yang diperlukan untuk rollback.Ini memiliki manfaat tambahan bahwa Anda dapat mendorong cadangan barang-barang Anda ke server jarak jauh seperti github atau bitbucket.
sumber
Begini cara
rm -rf dir
kerjanya:dir
, dan daftar isinya.unlink
saja.Jika Anda dapat, untuk daftar direktori, kembalikan nama file khusus terlebih dahulu, dan jika Anda dapat menyebabkan proses melakukan
unlink
pada file itu mati, itu akan menyelesaikan masalah. Itu bisa dilakukan dengan menggunakan sistem file sekering.Sebagai contoh, Anda bisa mengadaptasi
loopback.pl
contoh dari modul Fuse perl yang hanya mengimplementasikan sistem file dummy yang hanya pass-through ke sistem file nyata di bawahnya seperti itu (lihat juga tambalan di bawah):.{{do-not-delete}}.
, tambahkan daftar entri dengan dua file:.{{do-not-delete}}!error
dan.{{do-not-delete}}!kill
unlink
yang pertama, kembalikanEPERM
kode sehinggarm
menampilkan pesan kesalahanunlink
yang kedua, prosesnya terbunuh.Di sini tambalan untuk diterapkan di atas
loopback.pl
contoh itu sebagai bukti konsep:sumber
Saya telah membuat skrip untuk mempermudah tugas ini. Script shell memodifikasi izin baca / tulis dan flag chattr dari daftar folder yang diberikan secara interaktif, tanpa meminta kata sandi root. Anda dapat mengunduh file zip dari tautan yang diberikan di bawah ini.
https://drive.google.com/file/d/0B_3UYBZy2FVsMVpBSWdSWnFBYk0/edit?usp=sharing
Saya juga menyertakan skrip instalasi untuk mempermudah pengaturan. Instruksi terlampir dalam file zip.
sumber