GNU/Linux >> Znalost Linux >  >> Linux

Co je obsahem /bin/bash a co mám dělat, když je omylem přepíšu

Nevypínejte počítač.

Máte ještě běžící shell? Je to bash? Pokud ano, jste v pořádku. (Ale už to nedělejte.)

Spustit:

sudo cp /proc/$$/exe /bin/bash

Voila, všechno je v pořádku.

Protože někdo v komentářích pochybuje, že to funguje:

[[email protected] ~]$ cat /etc/shells 
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tcsh
/bin/csh
[[email protected] ~]$ grep root /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[[email protected] ~]$ echo $0
-bash
[[email protected] ~]$ sudo rm /bin/bash
[[email protected] ~]$ bash
-bash: /bin/bash: No such file or directory
[[email protected] ~]$ sudo su -
su: /bin/bash: No such file or directory
[[email protected] ~]$ sudo cp /proc/$$/exe /bin/bash
[[email protected] ~]$ bash
[[email protected] ~]$ exit
[[email protected] ~]$ sudo su -
[[email protected] ~]# logout
[[email protected] ~]$ 

bash je shell, pravděpodobně váš systémový shell, takže se nyní dějí divné věci, zatímco části shellu jsou stále v paměti. Jakmile se odhlásíte nebo restartujete, budete mít hlubší potíže.

První věcí by tedy měla být změna vaší skořápky na něco bezpečného. Podívejte se, jaké shelly máte nainstalované

cat /etc/shells

Potom změňte svůj shell na jeden z dalších zde uvedených shellů, například

chsh -s /bin/dash

Aktualizujte, protože jste již restartovali:

Máte štěstí, že v dnešní době proces spouštění nespoléhá na bash , takže váš systém nabootuje, jen nemůžete získat příkazový řádek. Ale můžete spustit editor a upravit /etc/passwd a změňte shell v root řádek od /bin/bash/bin/dash . Odhlaste se a znovu se přihlaste. Jednoduše v tomto souboru neprovádějte žádné další změny, jinak si můžete úplně pokazit systém.

Potom zkuste znovu nainstalovat bash s

apt-get --reinstall install bash

Pokud vše proběhlo úspěšně, můžete chsh zpět na bash .

Konečně:Myslím, že kali je vysoce specializovaná distribuce, pravděpodobně není vhodná pro lidi, kteří omylem přepíší svůj shell. Vzhledem k tomu, že tato věta byla nazvána hrubá a drsná, měl bych dodat, že jsem ji napsal z vlastní zkušenosti. Když jsem byl mladší, zničil jsem si svůj systém, protože mi nikdo neřekl, abych se jako root nepletl.


Pokud se můžete přihlásit, ale nemůžete otevřít terminál nebo jinak získat přístup k shellu, ale můžete přistupovat k souborům prostřednictvím GUI, přejděte na /bin ,hledejte soubory, jejichž názvy končí sh (ale ne .sh )a spusťte jeden (poklepáním nebo kliknutím pravým tlačítkem). Hledejte zejména následující:

  • sh
  • dash
  • ash
  • ksh (nebo ksh následuje číslo; např. ksh93 )
  • zsh
  • yash

nebo jako poslední možnost

  • tcsh nebo
  • csh

Pokud se vám podaří spustit shell, zkuste Philipposovu odpověď.

Dalším přístupem je zavedení do režimu pro jednoho uživatele podle těchto pokynů, ale zadejte init=/bin/sh (nebo jeden z jiných shellů) místo init=/bin/bash .


Linux
  1. Jak Linux zpracovává více po sobě jdoucích oddělovačů cest (/home////username///soubor)?

  2. Co jsou oddělovače slov Readline?

  3. Jaký je rozdíl mezi /bin/false a /sbin/nologin jako uživatelský shell nologin

  1. Co jsou soubory /dev/zero a /dev/null v Linuxu

  2. Kdy musím použít #!/bin/bash a kdy #!/bin/sh?

  3. Rozdíl mezi /bin a /usr/bin

  1. Bash =~ Regex A Https://regex101.com/?

  2. Jaký je rozdíl mezi /sbin/nologin a /bin/false?

  3. Jaký je rozdíl mezi /tmp a /run?