GNU/Linux >> Znalost Linux >  >> Linux

Zabraňte náhodnému zadání mezery mezi rm a zástupným znakem

Neexistuje způsob, jak zcela neprůstřelný systém. A dodal:"Jste si jistý?" nabádání k věcem je kontraproduktivní a vede k "Samozřejmě jsem si jistý." trhavé reakce.

Trik, který jsem pochytil z knihy v minulých letech, je nejprve udělat ls -R blah* pak proveďte rm -fr blah* pokud a jen tehdy, když se objevil výpis trefil to, co jsem chtěl.

Je dost snadné provést ls nejprve příkaz, potom , odstraňte ls -R a nahradit rm -fr .

Poslední otázka zní:„Pokud pro vás byly informace cenné, kde je vaše záloha?“


A DEBUG trap by mohl být napsán ke zrušení příkazů, které vypadají podezřele. Následující nebo jemu podobný kód lze přidat do vašeho ~/.bashrc :

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

Upravte si logiku podle chuti.

(Ve skutečnosti neočekávám, že tento přístup bude užitečný – příliš mnoho způsobů, jak destruktivně pokazit příkazy, než je najít, aby testovaly jeden po druhém – ale poskytuje doslovnou odpověď na otázku).


Dokážete se naučit používat, řekněme, rmrf místo rm -rf ?

Pokud ano, tato funkce bash vám poskytne možnost vidět, co by se skutečně stalo, než příkaz potvrdíte:

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

Chcete-li, aby tato funkce byla trvalá, přidejte tento řádek do ~/.bashrc soubor na každém počítači, který používáte.

Porovnání s běžným rm alias

Je běžné definovat alias:

alias rm='rm -i'

To má dvě omezení:

  1. Pokud na tomto aliasu začnete záviset, budete v šoku, když budete na stroji nebo v prostředí, které ho nemá. Naproti tomu pokus o spuštění rmrf na počítači bez této funkce vrátí neškodné command not found .

  2. Tento alias ve vašem případě nepomůže, protože -f možnost, kterou zadáte na příkazovém řádku, přepíše parametr -i možnost v aliasu.


Linux
  1. [Linux]:Jak zabránit náhodnému spuštění příkazu „rm -rf“.

  2. Linux – rozdíl mezi uživatelským prostorem a prostorem jádra?

  3. Rozdíl mezi potrubím a rozšířením příkazů?

  1. Naučte se rozdíl mezi příkazy „su“ a „su -“ v Linuxu

  2. Rozdíl mezi '{}' a {} v příkazu find?

  3. Rozdíl mezi cp -r a cp -R (příkaz kopírování)

  1. Rozdíl mezi příkazy „su“ a „su -“ v Linuxu

  2. Rozdíl mezi ‚A‘ na příkazovém řádku (bash)??

  3. Je povoleno místo mezi #! A /bin/bash v Shebangu?