GNU/Linux >> Belajar Linux >  >> Linux

Cegah pengguna mengetik ruang yang tidak disengaja antara rm dan wildcard

Tidak ada cara untuk sistem yang benar-benar antipeluru. Dan menambahkan "Apakah Anda yakin?" petunjuk untuk hal-hal yang kontraproduktif dan mengarah ke "Tentu saja saya yakin." reaksi spontan.

Trik yang saya ambil dari sebuah buku beberapa tahun yang lalu adalah dengan melakukan ls -R blah* terlebih dahulu lalu, lakukan rm -fr blah* jika dan hanya jika daftar yang muncul mencapai apa yang saya inginkan.

Cukup mudah untuk melakukan ls perintah terlebih dahulu, lalu , hapus ls -R dan ganti dengan rm -fr .

Pertanyaan terakhirnya adalah, "Jika informasi itu berharga bagi Anda, di mana cadangan Anda?"


A DEBUG trap dapat ditulis untuk membatalkan perintah yang terlihat mencurigakan. Berikut ini, atau kode yang mirip dengannya, dapat ditambahkan ke ~/.bashrc Anda :

shopt -s extdebug
checkcommand() {
  if [[ $BASH_COMMAND = 'rm -r'*' *' ]]; then
    echo "Suppressing rm -r command ending in a wildcard" >&2
    return 1
  fi
  # check for other commands here, if you like
  return 0
}
trap checkcommand DEBUG

Sesuaikan logika dengan selera.

(Saya sebenarnya tidak berharap pendekatan ini berguna -- terlalu banyak cara untuk mengacaukan perintah secara destruktif untuk menemukan mereka menguji satu per satu -- tetapi ini memberikan jawaban literal untuk pertanyaan tersebut).


Bisakah Anda melatih diri untuk menggunakan, katakanlah, rmrf di tempat rm -rf ?

Jika demikian, fungsi bash ini akan memberi Anda kesempatan untuk melihat apa yang sebenarnya terjadi sebelum mengonfirmasi perintah:

rmrf() { echo rm -rf "[email protected]"; read -p "Proceed (y/N)? "; [ "${REPLY,,}" = y ] && rm -rf "[email protected]"; }

Untuk membuat fungsi ini permanen, tambahkan baris ini ke ~/.bashrc file di setiap komputer yang Anda gunakan.

Perbandingan dengan rm umum alias

Adalah umum untuk mendefinisikan sebuah alias:

alias rm='rm -i'

Ini memiliki dua batasan:

  1. Jika Anda bergantung pada alias ini, maka Anda akan terkejut saat berada di mesin atau di lingkungan yang tidak memilikinya. Sebaliknya, mencoba menjalankan rmrf pada mesin tanpa fungsi itu akan mengembalikan command not found yang tidak berbahaya .

  2. Alias ​​​​ini tidak membantu dalam kasus Anda karena -f opsi yang Anda berikan pada baris perintah menggantikan -i opsi di alias.


Linux
  1. [Linux]:Bagaimana mencegah eksekusi perintah "rm -rf" yang tidak disengaja

  2. Perbedaan Antara ' Dan ” Di Command Line (bash)??

  3. Perbedaan Antara Pengguna Sudo Dan Pengguna Root?

  1. Cara Mengunci dan Membuka Kunci Pengguna di Linux

  2. Bash - Perintah tanggal dan spasi

  3. Perbedaan antara '{}' dan {} dalam perintah find?

  1. Apakah Ruang Diizinkan Antara #! Dan /bin/bash Di Shebang?

  2. Linux – Perbedaan Antara Ruang Pengguna dan Ruang Kernel?

  3. Perbedaan Antara Perpipaan Dan Ekspansi Perintah?