GNU/Linux >> Znalost Linux >  >> Linux

Jak zabráním náhodnému rm -rf /*?

Řešení 1:

Jeden z triků, které následuji, je vložit # na začátku při použití rm příkaz.

[email protected]:~# #rm -rf /

Tím se zabrání náhodnému spuštění rm ve špatném souboru/adresáři. Po ověření odeberte # od začátku. Tento trik funguje, protože v Bash je slovo začínající # způsobí, že toto slovo a všechny zbývající znaky na tomto řádku budou ignorovány. Příkaz je tedy jednoduše ignorován.

NEBO

Pokud chcete zabránit jakémukoli důležitému adresáři, existuje ještě jeden trik.

Vytvořte soubor s názvem -i v tom adresáři. Jak lze vytvořit takový zvláštní soubor? Pomocí touch -- -i nebo touch ./-i

Nyní zkuste rm -rf * :

[email protected]:~$ touch {1..4}
[email protected]:~$ touch -- -i
[email protected]:~$ ls
1  2  3  4  -i
[email protected]:~$ rm -rf *
rm: remove regular empty file `1'? n
rm: remove regular empty file `2'? 

Zde je * rozbalí -i na příkazový řádek, takže váš příkaz se nakonec změní na rm -rf -i . Příkaz se tedy zobrazí před odstraněním. Tento soubor můžete vložit do / , /home/ , /etc/ , atd.

NEBO

Použijte --preserve-root jako možnost rm . V rm zahrnuto v novějších coreutils balíčků, tato možnost je výchozí.

--preserve-root
              do not remove `/' (default)

NEBO

Použijte safe-rm

Výňatek z webové stránky:

Safe-rm je bezpečnostní nástroj, který má zabránit náhodnému smazání důležitých souborů nahrazením /bin/rm obalem, který porovná dané argumenty s konfigurovatelnou černou listinou souborů a adresářů, které by nikdy neměly být odstraněny.

Uživatelé, kteří se pokusí smazat jeden z těchto chráněných souborů nebo adresářů, tak nebudou moci učinit a místo toho se jim zobrazí varovné hlášení:

$ rm -rf /usr
Skipping /usr

Řešení 2:

Váš problém:

Právě jsem omylem spustil rm -rf /*, ale myslel jsem rm -rf ./* (všimněte si hvězdičky za lomítkem).

Řešení:Nedělejte to! Z praxe nepoužívejte ./ na začátku cesty. Lomítka nepřidávají příkazu žádnou hodnotu a způsobí pouze zmatek.

./* znamená totéž jako * , takže výše uvedený příkaz je lepší napsat jako:

rm -rf *

Zde je související problém. Často vidím následující výraz, kde někdo předpokládal, že FOO je nastaveno na něco jako /home/puppies . Viděl jsem to vlastně právě dnes, v dokumentaci od významného dodavatele softwaru.

rm -rf $FOO/

Ale pokud FOO není nastaveno, bude to vyhodnoceno jako rm -rf / , který se pokusí odstranit všechny soubory ve vašem systému. Koncové lomítko je zbytečné, takže jej z praxe nepoužívejte.

Následující způsob udělá totéž a je méně pravděpodobné, že poškodí váš systém:

rm -rf $FOO

Naučil jsem se tyto tipy tvrdě. Když jsem před 14 lety měl svůj první superuživatelský účet, omylem jsem spustil rm -rf $FOO/ ze skriptu shellu a zničil systém. Ostatní 4 systémoví správci se na to podívali a řekli:„Ano. Každý to jednou udělá. Nyní zde máte instalační médium (36 disket). Jdi to opravit.'

Ostatní lidé zde doporučují řešení jako --preserve-root a safe-rm . Tato řešení však nejsou k dispozici pro všechny varianty Un*xe a nemusí fungovat na systémech Solaris, FreeBSD a MacOSX. Kromě toho safe-rm vyžaduje, abyste nainstalovali další balíčky na každý jednotlivý systém Linux, který používáte. Pokud se spoléháte na safe-rm , co se stane, když začnete novou zakázku a oni nemají safe-rm nainstalováno? Tyto nástroje představují berličku a je mnohem lepší spoléhat se na známé výchozí hodnoty a zlepšit své pracovní návyky.

Řešení 3:

Protože je to na "Serverfault", rád bych řekl toto:

Pokud máte desítky nebo více serverů, s velkým týmem administrátorů/uživatelů, někdo přejde na rm -rf nebo chown nesprávný adresář.

Měli byste mít plán, jak postiženou službu obnovit s co nejmenší MTTR.

Řešení 4:

Nejlepším řešením je změnit své návyky a nepoužívat rm přímo.

Jedním z přístupů je spuštění echo rm -rf /stuff/with/wildcards* První. Zkontrolujte, zda výstup ze zástupných znaků vypadá rozumně, a poté použijte historii shellu k provedení předchozího příkazu bez echo .

Dalším přístupem je omezení echo příkaz k případům, kdy je oslnivě zřejmé, co budete mazat. Namísto odstranění všech souborů v adresáři odstraňte adresář a vytvořte nový. Dobrou metodou je přejmenovat existující adresář na DELETE-foo a poté vytvořte nový adresář foo s příslušnými oprávněními a nakonec odstraňte DELETE-foo . Vedlejší výhodou této metody je, že příkaz, který je zapsán do vaší historie, je rm -rf DELETE-foo .

cd ..
mv somedir DELETE-somedir
mkdir somedir                 # or rsync -dgop DELETE-somedir somedir to preserve permissions
ls DELETE-somedir             # just to make sure we're deleting the right thing
rm -rf DELETE-somedir

Pokud opravdu trváte na smazání hromady souborů, protože potřebujete, aby adresář zůstal (protože musí vždy existovat, nebo protože byste neměli oprávnění jej znovu vytvořit), přesuňte soubory do jiného adresáře a smažte tento adresář. .

mkdir ../DELETE_ME
mv * ../DELETE_ME
ls ../DELETE_ME
rm -rf ../DELETE_ME

(Stiskněte Alt +. klíč.)

Smazání adresáře zevnitř by bylo atraktivní, protože rm -rf . je krátká, a proto má nízké riziko překlepů. Typické systémy vám to bohužel neumožňují. Můžete na rm -rf -- "$PWD" místo toho s vyšším rizikem překlepů, ale většina z nich nevede k odstranění ničeho. Dejte si pozor, že to zanechá nebezpečný příkaz ve vaší historii shellu.

Kdykoli můžete, použijte správu verzí. Nemáte rm , vy cvs rm nebo cokoli jiného, ​​a to je nevratné.

Zsh má možnosti, jak vás před spuštěním rm vyzvat s argumentem, který uvádí všechny soubory v adresáři:rm_star_silent (ve výchozím nastavení zapnuto) zobrazí výzvu před provedením rm whatever/* a rm_star_wait (ve výchozím nastavení vypnuto) přidá 10sekundovou prodlevu, během níž nemůžete potvrdit. To má omezené použití, pokud jste zamýšleli odstranit všechny soubory v některém adresáři, protože výzvu již očekáváte. Může pomoci zabránit překlepům, jako je rm foo * pro rm foo* .

Existuje mnoho dalších řešení, která zahrnují změnu rm příkaz. Omezení tohoto přístupu je, že jednoho dne budete na počítači se skutečným rm a automaticky zavoláte rm , v bezpečí v očekávání potvrzení... a další věc, kterou budete obnovovat ze záloh.

Řešení 5:

Vždy můžete udělat alias, jak jste zmínil:

what_the_hell_am_i_thinking() {
   echo "Stop." >&2
   echo "Seriously." >&2
   echo "You almost blew up your computer." >&2
   echo 'WHAT WERE YOU THINKING!?!?!' >&2
   echo "Please provide an excuse for yourself below: " 
   read 
   echo "I'm sorry, that's a pathetic excuse. You're fired."
   sleep 2
   telnet nyancat.dakko.us
}

alias rm -fr /*="what_the_hell_am_i_thinking"

Můžete jej také integrovat s twitterovým klientem příkazového řádku a upozornit své přátele na to, jak jste se málem ponížili vymazáním pevného disku pomocí rm -fr /* jako kořen.


Linux
  1. Jak zabránit náhodnému smazání souboru a zotavit se z něj v Linuxu

  2. Jak VPN brání útokům DDOS

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

  1. Journalctl:Jak zabránit zkrácení textu v terminálu?

  2. Jak zabránit `ls` v třídění výstupu?

  3. Jak zabránit kybernetickému útoku

  1. jak zabránit tomu, aby nová okna ukradla fokus v gnome

  2. Jak zabránit výměně konkrétního programu?

  3. Jak zabránit přechodu na SWAP?