Quali sono i contenuti di / bin / bash e cosa devo fare se li sovrascrivo accidentalmente


24

Ho accidentalmente sovrascritto il file / bin / bash con uno script stupido che avevo intenzione di mettere nella cartella / bin.

Come posso recuperare il contenuto di quel file? C'è un modo per trovare i contenuti sul Web e copiarli di nuovo? Quali sono le mie opzioni qui, considerando che il terminale dà un errore parlando di "Troppi collegamenti simbolici?"

Sono ancora un nuovo arrivato in questo genere di cose e apprezzo tutto l'aiuto che posso ottenere.

Modifica: ho dimenticato di menzionare che sono su Kali 2.2 Rolling, che è praticamente debian con alcune funzionalità aggiunte.

Modifica 2: ho anche riavviato la macchina, poiché non avevo realizzato l'errore fino a pochi giorni fa. Questo rende un po 'più difficile.


9
Cancellato bash? Usa zsh :-) </troll>
Kevin,


fisico o VM?
Ben Aveling,

9
Per la prossima volta: non inserire oggetti nelle directory di sistema . Se vuoi script e cose personalizzate, creane uno $HOME/.bine aggiungilo al tuo PATHo utilizzalo /usr/local/binse ne hai bisogno per essere a livello di sistema. O, ancora meglio, crea un pacchetto.
extra

Risposte:


33

bashè una shell, probabilmente la shell di sistema, quindi ora accadono cose strane, mentre parti della shell sono ancora nella memoria. Dopo esserti disconnesso o riavviato, avrai problemi più profondi.

Quindi la prima cosa da fare è cambiare la shell in qualcosa di sicuro. Vedi quali shell hai installato

cat /etc/shells

Quindi cambia la tua shell con una delle altre shell elencate lì, per esempio

chsh -s /bin/dash

Aggiornamento, perché hai già riavviato:

Sei fortunato che al giorno d'oggi il processo di avvio non si affida bash, quindi il tuo sistema si avvia, non puoi ottenere una riga di comando. Ma puoi avviare un editor per modificare /etc/passwde cambiare la shell nella rootlinea da /bin/basha /bin/dash. Disconnettersi e riconnettersi. Basta non apportare altre modifiche a quel file, altrimenti potresti incasinare completamente il tuo sistema.

Quindi provare a reinstallare bashcon

apt-get --reinstall install bash

Se tutto è riuscito puoi chshtornare a bash.

Infine: penso, il kali sia una distribuzione altamente specializzata, probabilmente non adatta a persone che accidentalmente sovrascrivono il loro guscio. Dato che questa frase è stata definita maleducata e aspra, dovrei aggiungere che l'ho scritta per esperienza personale. Quando ero più giovane, ho rovinato il mio sistema perché nessuno mi ha detto di evitare di fare casino come root.


3
@ dr01: dato come funziona l'escaping bash, può trattarsi di una citazione fuori posto. Pensa command > /bin/bash ...contro command > (/bin/bash ...).
Salterio,

7
L'ultima frase fu dura ... :)
James Reinstate Monica Polk,

6
@MSalters Una citazione fuori posto viene eseguita come root . Sono due errori. Il secondo, ovviamente, sta provando le tue complicate pipeline come root, non come utente non privilegiato.
derobert,

12
@JamesKPolk no, non è affatto duro. È la semplice verità. Kali è uno strumento professionale progettato per essere utilizzato da esperti . Lo dichiarano persino sulla loro pagina web. Se non sei un esperto, davvero non hai affari con Kali.
terdon

3
L'ultima frase non è dura. È la pura verità.
Andrea Lazzarotto,

65

Non spegnere la macchina.

Hai ancora una shell in esecuzione? È bash? Se è così, stai bene. (Ma non farlo di nuovo.)

Correre:

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

Voila, va tutto bene.


Dal momento che qualcuno nei commenti dubita che funzioni:

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

18
In ogni caso, dopo questo, si consiglia di reinstallare bash dalla propria distribuzione, ad esempio per le autorizzazioni corrette (alcuni cacciatori di rootkit potrebbero essere sorpresi delle modifiche lì), anche per ripristinare hard link o symlink (ad esempio a /bin/sho rbash)
Giacomo Catenazzi,

4
@GiacomoCatenazzi, in realtà, questo metodo conserva le autorizzazioni, che è l'impostazione predefinita quando rootviene eseguita cp. Gli hard link sono un buon punto, però.
Wildcard il

1
La macchina è stata riavviata. Non riesco ad aprire una shell normale, ma posso modificare i contenuti tramite la GUI. Come detto prima, ricevo un errore che dice "Impossibile eseguire il processo figlio / bin / bash. (Troppi livelli di collegamenti simbolici)."
Garruk Apex,

5

Se riesci ad accedere, ma non puoi aprire un terminale o accedere in altro modo a una shell, ma puoi accedere ai file tramite la GUI, vai a /bin, cerca i file i cui nomi finiscono con sh(ma non .sh) ed esegui uno (facendo doppio clic o tasto destro del mouse). In particolare, cerca quanto segue:

  • sh
  • dash
  • ash
  • ksh (o kshseguito da un numero; ad es.  ksh93)
  • zsh
  • yash

o, come ultima risorsa,

  • tcsh o
  • csh

Se riesci a far funzionare una shell, prova la risposta di Philippos .

Un altro approccio consiste nell'avvio in modalità utente singolo seguendo queste istruzioni ma specificando init=/bin/sh(o una delle altre shell) anziché init=/bin/bash.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.