`alias rm =“ rm -i ”` dianggap berbahaya?

17

Saya telah membaca beberapa waktu lalu (tidak dapat menemukan referensi) yang menggunakan alias seperti alias rm="rm -i"itu sangat buruk.

Apakah ada bukti historis atau penjelasan akal sehat untuk fakta itu?

Saya akan membayangkan bahwa itu memberi pengguna kebiasaan buruk mengandalkan konfirmasi untuk memeriksa perintahnya, yang dapat menyebabkan bencana jika ia melakukannya pada profil lain yang tidak memiliki alias.

Dunaril
sumber
Saya pikir saya menemukan topik yang Anda sebutkan.
Daniel Beck
1
@Daniel memang jawaban yang paling tervotifikasi dari utas ini menyebutkan praktik buruk ini, tetapi sebenarnya bukan topik utama pertanyaan.
Dunaril

Jawaban:

36

Kamu benar.

Ini buruk karena Anda terbiasa. Jika Anda menggunakan sistem yang tidak memilikinya, dan Anda rm, ia segera mulai menghapus dan Anda bertanya-tanya apa yang terjadi.

Banyak pengguna terbiasa SSH'ing ke sistem yang berbeda; jadi menggunakan banyak sistem berbeda, terkadang tanpa pengaturan akun pengguna yang dipersonalisasi (termasuk alias), agak umum.

Sebagai gantinya, gunakan misalnya alias rmi='rm -i'dan belajarlah untuk menggunakannya. Jika itu tidak diatur pada sistem yang berbeda, Anda tidak secara tidak sengaja menghapus file dan selalu dapat kembali mengetik perintah lengkap.

Daniel Beck
sumber
4

Seperti yang dikatakan @Daniel, itu tidak berbahaya di dalam dan dari dirinya sendiri, selain melatih Anda untuk mengharapkannya ada di sana. Bahkan, ini adalah pengaturan default pada CentOS (dan dengan ekstensi RHEL, saya kira - sudah terlalu lama sejak saya menggunakan satu) mesin, dan itu adalah rasa sakit yang luar biasa di tuchus . Untuk sisa waktu saya di pertunjukan itu, saya mengetik / bin / rm untuk menghindari pengaturan "Linux untuk orang-orang yang seharusnya tidak memiliki akses root".

Andrew Beals
sumber
3
RHEL memiliki ini secara default, Anda benar, setidaknya sistem yang saya gunakan.
Daniel Beck
4

Saya pikir bahayanya adalah orang-orang akan mengandalkan sesuatu seperti ini untuk menyaring bola dunia. Bayangkan Anda ingin menghapus beberapa gambar dari direktori, tetapi tidak semuanya:

rm -i pics/*.jpg

Anda dapat menggunakannya untuk memfilter glob secara manual, yang akan sepenuhnya masuk akal. Tapi, jika Anda telah alias dan menggunakan rmdan kebetulan mendarat di shell tanpa alias itu dan coba ... Anda baru saja menghapus semua gambar Anda, oops!

Secara pribadi saya juga menemukan alias ini berbahaya bagi tekanan darah saya;). Tapi itu hanya aku.

Kesalahan fatal
sumber
Contoh yang bagus. Tentu saja jika Anda suka bahaya, atau berjudi ..
Dunaril
2

Selain apa yang dikatakan Daniel Beck, saya menemukan diri saya menggunakan -funtuk memotong -i, yang berpotensi berbahaya karena menghasilkan penggunaan rm -fdan rm -rftidak perlu. Entah bagaimana terkait: cara untuk mencegah rm -rfmasalah adalah dengan membuat file bernama "-i" seperti yang dijelaskan dalam jawaban atas pertanyaan ini: Bagaimana cara mencegah rm -rf / * yang tidak disengaja? .

Tapi sekali lagi, jika alias itu tidak ada, saya tidak akan menggunakan -f, dan semuanya tidak akan menjadi masalah.

lupincho
sumber
3
Sepertinya Anda menemukan cara untuk membuat praktik buruk ini semakin buruk :)
Dunaril
0

Ini jauh lebih tidak berbahaya, berdasarkan pengalaman saya bekerja dengan ratusan pengguna di masa lalu:

rm ()  # must be a function, must require single answer for all targets
{
    ls -FCsd "$@"
    local reply ; echo -n 'remove[ny]? ' ; read reply
    if [ "_$reply" = "_y" ] ; then
        /bin/rm -rf "$@" ; else echo '(cancelled)'
    fi
}
  • Pengguna dilatih untuk menggunakan wildcard dengan benar, bukan hanya '*' dan kemudian bergantung pada permintaan y / n untuk memilih file
  • Pengkondisian untuk menggunakan wildcard yang benar sering menyelamatkan dari bencana ketika mereka digunakan rmdalam konteks lain yang tidak memiliki fungsi ini atau rm -ialias.
  • Saya menghabiskan lebih sedikit waktu untuk memulihkan file di mana pengguna mengetik 'y' terlalu banyak
  • Pengguna hanya perlu merespons sekali - memberikan umpan balik positif yang tajam untuk menggunakannya
  • Control-c mengganggu pekerjaan dan dilaporkan tidak melakukan apa-apa
  • Bukan skrip, jadi yang asli rmtidak tersentuh, membiarkan program lain tidak gentar.

Gaya kode sebagian besar kompatibel dengan sh (kecuali digunakan echo .... | tr -d '\012'untuk cangkang pra-bash), jangan ragu untuk membuat bash-spesifik milik Anda sendiri. Saya tidak memposting untuk membagikan kode itu sendiri, tetapi untuk membagikan perubahan pengalaman pengguna yang menyertainya.

Alex North-Keys
sumber
Kamil: Jawaban saya mencakup bahwa secara rm -ihistoris (dalam pengalaman saya memiliki ratusan pengguna) menghasilkan penghapusan file yang salah, dan bahwa fungsi yang disertakan telah melatih pengguna untuk menggunakan wildcard yang benar sebagai gantinya, menurunkan tingkat kesalahan. Jadi saya telah membahas masalah-masalah utama yang mengganggu rm -i dan memberikan solusi demi kenyamanan, dan fakta bahwa poin-poin yang ada di bawah fungsi tersebut tidak mencegah mereka menjadi erat.
Alex North-Keys