Saya pikir cukup banyak orang di sini keliru ' rm -rf
' direktori salah, dan mudah-mudahan itu tidak menyebabkan kerusakan besar .. Apakah ada cara untuk mencegah pengguna melakukan kisah horor unix serupa ?? Seseorang menyebutkan (di bagian komentar di tautan sebelumnya ) itu
... Saya cukup yakin sekarang setiap kursus atau perusahaan unix yang menggunakan set unix rm -fr untuk menonaktifkan akun orang yang mencoba menjalankannya atau menghentikan mereka menjalankannya ...
Apakah ada implementasi itu di distro Unix atau Linux saat ini? Dan apa praktik umum untuk mencegah kesalahan itu bahkan dari sysadmin (dengan akses root)?
Tampaknya ada beberapa perlindungan untuk direktori root ( /
) di Solaris (sejak 2005) dan GNU (sejak 2006). Apakah ada juga untuk menerapkan cara perlindungan yang sama ke beberapa folder lain juga ??
Untuk memberikan kejelasan lebih lanjut, saya tidak bertanya tentang saran umum tentang rm
penggunaan (dan saya telah memperbarui judul untuk menunjukkan lebih banyak), saya ingin sesuatu yang lebih seperti perlindungan folder root: agar rm -rf /
Anda harus melewati parameter tertentu: rm -rf --no-preserve-root /
.. Apakah ada implementasi yang serupa untuk direktori yang dikustomisasi? Atau bisakah saya menentukan file selain untuk /
dilindungi oleh opsi preserve-root ?
sumber
rm
perintah dengan yang tidak memiliki fitur itu.rm -rf
dapat menjadi acara pembuatan resume. Periksa dan cek tiga kali sebelum menjalankannyaJawaban:
Untuk menghindari kesalahan
rm -rf
, jangan mengetikrm -rf
.Jika Anda perlu menghapus pohon direktori, saya sarankan alur kerja berikut:
mv directory-to-delete DELETE
DELETE
dan periksa apakah memang itu yang ingin Anda hapusrm -rf DELETE
Jangan pernah panggil
rm -rf
dengan argumen selainDELETE
. Melakukan penghapusan dalam beberapa tahap memberi Anda kesempatan untuk memverifikasi bahwa Anda tidak menghapus hal yang salah, baik karena kesalahan ketik (seperti dalamrm -rf /foo /bar
bukanrm -rf /foo/bar
) atau karena braino (oops, tidak, saya bermaksud menghapusfoo.old
dan menyimpanfoo.new
) .Jika masalah Anda adalah Anda tidak bisa memercayai orang lain untuk tidak mengetik
rm -rf
, pertimbangkan untuk menghapus hak admin mereka. Ada banyak lagi yang bisa salah daripadarm
.Selalu buat cadangan .
Verifikasi secara berkala bahwa cadangan Anda berfungsi dan terbaru.
Simpan segala sesuatu yang tidak dapat dengan mudah diunduh dari suatu tempat di bawah kontrol versi.
Dengan sistem unix dasar, jika Anda benar-benar ingin membuat beberapa direktori tidak terhapus oleh
rm
, ganti (atau bayangan yang lebih baik)rm
dengan skrip khusus yang menolak argumen tertentu. Atau olehhg rm
.Beberapa varian unix menawarkan lebih banyak kemungkinan.
chmod +a 'group:everyone deny delete_child' somedir
(ini tidak mencegah penghapusan file di subdirektori: jika Anda ingin itu, atur ACL pada subdirektori juga).rm
untuk memodifikasi direktori tertentu.sumber
--no-preserve-root
opsi, untuk folder penting lainnya .. Dan itu tampaknya tidak ada bahkan sebagai praktik ...rm -rf
sudah berarti "hapus ini, ya saya yakin saya tahu apa yang saya lakukan". Jika Anda menginginkan lebih, gantirm
dengan skrip yang menolak untuk menghapus direktori tertentu.rm
mengakses direktori tertentu. Juga, karena pertanyaan Anda bukan hanya tentang Linux, saya seharusnya menyebutkan OSX, yang memiliki sesuatu yang sedikit seperti yang Anda inginkan.Jika Anda menggunakan
rm *
dan zsh, Anda dapat mengatur opsirmstarwait
:Sekarang shell memperingatkan ketika Anda menggunakan
*
:Ketika Anda menolaknya (
n
), tidak ada yang terjadi. Kalau tidak, semua file akan dihapus.sumber
zsh -f
digunakan?Untuk melindungi dari kecelakaan
rm -rf *
dalam direktori, buat file bernama "-i" (Anda dapat melakukan ini dengan emacs atau program lain) di direktori itu. Shell akan mencoba menafsirkan -i dan akan menyebabkannya masuk ke mode interaktif.Misalnya: Anda memiliki direktori bernama
rmtest
dengan file bernama-i
inside. Jika Anda mencobarm
segala sesuatu di dalam direktori,rm
pertama-tama akan-i
diteruskan ke sana dan akan masuk ke mode interaktif. Jika Anda meletakkan file seperti itu di dalam direktori yang ingin Anda proteksi, mungkin membantu.Perhatikan bahwa ini tidak efektif terhadap
rm -rf rmtest
.sumber
> -i
EDIT seperti yang disarankan oleh komentar:
Anda dapat mengubah atribut untuk mengubah file atau direktori dan kemudian tidak dapat dihapus bahkan oleh root sampai atribut dihapus.
chattr +i /some/important/file
Ini juga berarti bahwa file tidak dapat ditulis atau diubah dengan cara apa pun , bahkan oleh root . Atribut lain yang tampaknya tersedia yang belum saya gunakan adalah atribut append (
chattr +a /some/important/file
. Kemudian file hanya dapat dibuka dalam mode append, artinya tidak ada penghapusan juga, tetapi Anda dapat menambahkannya (katakan file log). Ini berarti Anda tidak akan dapat mengeditnyavim
misalnya, tetapi Anda dapat melakukannyaecho 'this adds a line' >> /some/important/file
. Menggunakan>
alih-alih>>
akan gagal.Atribut ini dapat tidak disetel menggunakan tanda minus, yaitu
chattr -i file
Kalau tidak, jika ini tidak cocok, satu hal yang saya praktekkan adalah selalu
ls /some/dir
terlebih dahulu, dan alih-alih mengetik ulang perintah, tekan panah CTL-A, lalu hapusls
dan ketik sayarm -rf
jika saya membutuhkannya. Tidak sempurna, tetapi dengan melihat hasil ls, Anda tahu sebelumnya apakah itu yang Anda inginkan.sumber
Jika Anda mengerti bahasa pemrograman C, saya pikir mungkin untuk menulis ulang kode sumber rm dan membuat sedikit patch untuk kernel. Saya melihat ini di satu server dan tidak mungkin untuk menghapus beberapa direktori penting dan ketika Anda mengetik 'rm -rf / direcotyr' itu mengirim email ke sysadmin.
sumber
Salah satu pilihan yang mungkin adalah berhenti menggunakan
rm -rf
dan mulai menggunakanrm -ri
.i
Parameter tambahan ada untuk memastikan bahwa ia bertanya apakah Anda yakin Anda ingin menghapus file.Mungkin taruhan terbaik Anda adalah
rm -ri
memasukkan sesuatu yang berkesankill_it_with_fire
. Dengan cara ini setiap kali Anda ingin mengeluarkan sesuatu, teruskan dan bunuh dengan api.sumber
f
itu kebalikan darii
opsi ?? Saya mencobanya dan bekerja ...r
di sana. Perbaiki saja.Saya suka menempatkan nama direktori terlebih dahulu seperti ini:
sumber