/ bin / etc / lib64 / root / sbin cancellato o spostato dalla cartella mv / * / * mentre su


11

Il sistema operativo è Centos 6.5 a 64 bit

Ho scaricato un file tar e volevo decomprimerlo mv.

Non ho notato, poi ho eseguito accidentalmente (come root) mv folder/* /*invece di mv folder/* .bash, ho detto che non poteva sovrascrivere alcuni file, quindi ho chiesto il permesso ad altri. Ho premuto il tasto Ctrl.

Ho lasciato aperta la sessione terminale, ma sono uscita su.

Ora ho perso l'accesso alla maggior parte dei shellcomandi, non riesco ad accedere a lsnessuna directory e non posso tornare indietro su.

Il server web e i servizi sembrano ancora in esecuzione. Posso eseguire pochissimi comandi, cdè uno di questi e quando provo a cdfarlo /etco /bincon errori no directory found.

EDIT appena notato tutte le cartelle mancanti /( bin, etc, lib64, root, sbin) siamo stati spostati alla /vardirectory, ho provato /var/bin/sue ottengo: -bash: /var/bin/su: /lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory


1
Non puoi correre /var/bin/sudirettamente?
Darkhogg,

Si prega di non modificare la domanda con soluzioni. Nella rete di scambio di stack invece si aggiunge una risposta, lasciare un commento a una risposta esistente per migliorare una risposta.
Bernhard,

@Darkhogg /var/bin/su: user root does not existPenso che abbiamo deciso che non si può fare perché / etc è in / var / etc
webaholik

@Bernhard ha provato a correggere
webaholik il

Risposte:


22

Se il tuo sistema è busyboxinstallato, puoi usarlo per rimettere le cose.

busyboxè un file binario con molte utility standard integrate. Cose come mv, sh, ls, etc.

Dal tuo commento sulla risposta di Pavel, sembra che tutto sia finito /var. Puoi provare a farlo /var/bin/busybox mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /. Ciò dovrebbe rendere nuovamente operativa la maggior parte del sistema. Ci sono alcune directory come quelle /tmpche esistono anche come /var/tmp, quindi non puoi semplicemente spostarle. Spero che siano quelli che si sono mvlamentati e sono stati lasciati soli.

 

Ottenere una shell di root

Hai anche detto che hai perso la shell di root e che suti dà un ld-linuxerrore di libreria. Potresti essere in grado di utilizzare quanto segue:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/su

Nota: al momento del tentativo, non funziona. Questo perché surichiede diversi file in /etc( passwd, pam.d, e altri). Se /etcfosse ancora intatto, ciò avrebbe buone probabilità di successo.

 

Senza busybox

Se non disponi di busybox, potresti essere in grado di usare lo stesso trucco di ld-linux di su:

LD_LIBRARY_PATH=/var/lib64 /var/lib64/ld-linux-x86-64.so.2 /var/bin/mv /var/{bin,etc,lib32,lib64,root,sbin,usr} /

 

Da un CD live

Come discusso nei commenti, se hai perso la shell di root, sei praticamente bloccato. Fondamentalmente per risolvere questo problema hai bisogno dei privilegi di root. L'unico modo per arrivarci è disporre di un'utilità come suo sudoaumentare le autorizzazioni (entrambe non funzionanti a questo punto) o dirottare un altro programma già in esecuzione come root (a seconda di ciò che è in esecuzione, probabilmente non possibile).

Questo lascia l'unica opzione a essere un CD live. Una volta avviato su un live CD (o live USB, o qualsiasi altra cosa), basta montare il volume di root e spostare le directory interessate dal /varretro alla loro home originale /.


Sinossi di quello che è successo

folder/*si sarebbe esteso a qualcosa come folder/fooe folder/bar.
/*si sarebbe esteso a qualcosa del genere /bin /lib32 /lib64 /etc /home /root /var. Notando che /varè l'ultimo elemento.
Quindi quando la shell ha esteso tutti quei globs, avrebbe funzionato in questo modo:

mv folder/foo folder/bar /bin /lib32 /lib64 /etc /home /root /var

Come /varè l'ultimo elemento nell'elenco, tutto è stato spostato in esso.


Perché /var/bin/suerrori con/lib64/ld-linux-x86-64.so.2: bad ELF interpreter: No such file or directory

Quasi tutti i binari in Linux sono dinamicamente collegati ld-linux. ld-linuxè la libreria responsabile del caricamento delle altre librerie necessarie a un binario. Sul tuo sistema questo vive /lib64/ld-linux-x86-64.so.2. Da quando questa directory è stata spostata, qualsiasi eseguibile collegato dinamicamente non funzionerà più.

Il motivo per cui busybox funziona è che busybox è staticamente collegato. Non usa ld-linux.


Buona idea. In genere CentOS ha una scatola occupata installata a causa di initramfs , quindi potrebbe funzionare bene.
Pavel Šimerda,

busyboxsuona come la soluzione perfetta, purtroppo non installata, dopo che questo sarà risolto ... nel frattempo, c'è un modo per correggere il percorso che i comandi devono eseguire /var/lib64/ld-linux-x86-64.so.2invece di /lib64/ld-linux-x86-64.so.2? Questo sembra essere ciò che sta uccidendo i comandi in/var/bin
webaholik

@Patrick: Potresti per favore aggiungere le informazioni che anche il comando OP che intendi usare è sbagliato? Potrei quindi eliminare la mia risposta poiché ora è (quasi) ridondante. A proposito, è il modo giusto di utilizzare lo scambio di stack?
Pavel Šimerda,

1
E 'alla ricerca di diverse cose in /etccui non ci sono ( /etc/passwd, /etc/nsswitch, /etc/pam.d, e probabilmente più). Per sufunzionare, /etcdeve essere tornato nella sua posizione originale. A meno che tu non abbia un guscio di radice in giro, penso che tu sia bloccato :-(
Patrick

2
@ user1296209 Una volta che hai un livecd up, monta semplicemente il volume di root e sposta indietro quelle directory. Dovrebbe essere tutto ciò di cui hai bisogno per tornare a correre.
Patrick,

10

mv folder/* ./*è anche sbagliato. Dovresti stare più attento alla semantica dei comandi che esegui. Il mvcomando con più di due argomenti prende semplicemente tutti gli argomenti tranne l'ultimo e sposta i percorsi a cui puntano nella directory specificata nell'ultimo argomento.

Per spostare tutte le directory (tranne quelle nascoste) dalla cartella alla directory corrente, è necessario utilizzare:

mv folder/* .

Hai rotto il tuo sistema in esecuzione. I comandi della shell e integrati continuano a funzionare. Dovrai avviare un CD live e spostare indietro le directory. Non sono a conoscenza di un built-in bash per spostare / rinominare i file che ti permetterebbe di risolvere la situazione senza riavviare, vedi la risposta di Patrick per maggiori dettagli.


Non me ne sono reso conto: posso cd su / var / bin & / var / etc, sembra che le cartelle siano state spostate su var, comunque posso spostarle indietro? ... senza livecd?
webaholik,

Ho provato / var / bin / su & get: -bash: / var / bin / su: /lib64/ld-linux-x86-64.so.2: cattivo interprete ELF: nessun file o directory
simile

Aha ... Risolverò la risposta.
Pavel Šimerda,

quale dovrebbe essere il mio mvcomando per spostare tutti i file e le cartelle dalla cartella alla directory corrente?
webaholik,

1
@ user1296209: se avvii un sistema live, avrai sicuramente accesso root sul tuo sistema di vita. Il tuo sistema reale è solo una partizione montata senza un significato speciale per il sistema live. L'unica complicazione è che tu /e le tue /vardirectory potrebbero trovarsi su partizioni diverse, nel qual caso devi montare entrambe.
Celtschk,

2

Ho spostato accidentalmente / usr in / usr_old e tutto è andato all'inferno. Fortunatamente sono rimasto nel prompt e sono stato in grado di eseguire il comando seguente per ripristinare la cartella usr:

LD_LIBRARY_PATH=/usr_old/lib64 /usr_old/lib64/ld-linux-x86-64.so.2 /usr_old/bin/mv /usr_old /usr

Benvenuto in U&L, è stato l'unico comando che hai digitato? Fornire una procedura più dettagliata. (specialmente per una domanda di dieci mesi, non c'è bisogno di affrettarsi)
Archemar,

1
Sì dopo aver digitato quel comando tutto è stato ripristinato. Forse dovrei menzionare che ero root durante tutto questo.
Mansehr,

1

IMPORTANTE Se sei qui e hai eseguito in mvmodo errato, non puoi eseguire i shellcomandi e le cartelle mancanti dalla directory principale ( /), prima di tutto, se hai SU, NON uscire SUfino a quando non viene riparato, perché non lo riavrai. Se sei connesso in remoto, se ti disconnetti, non sarai in grado ssh, lascia il server da solo, non farlo reboot- la maggior parte dei servizi in esecuzione dovrebbe essere OK. Puoi provare una delle tante soluzioni suggerite da Patrick ... tuttavia probabilmente avrai bisogno di un accesso fisico se hai sbagliato come ho fatto io.

Una volta davanti alla macchina, l'ho riavviato. Come previsto, ho ricevuto il panico del kernel.

Ho pensato che sarebbe stata una soluzione abbastanza semplice, inserire livecd, accedere alla modalità di salvataggio FINO A QUESTO PUNTO È STATO FACILE - quindi ho dovuto provare a montare la mia directory principale. Tuttavia, avevo bisogno di qualcosa di più di un semplice comando mount.

Questo perché, come molte persone, avevo un file system lvm e questa è stata la prima volta che ho avuto a che fare con un salvataggio come questo. Ho dovuto cercare sul web per vedere cosa dovevo fare. Ho consolidato queste informazioni in questo post. Ecco il mio processo per risolvere il mio problema.

1) Centos_6.4_min inserito cd

2) L'interfaccia della GUI mi ha chiesto cosa volevo fare, ho scelto Rescue

3) Rescue ha provato a montare il sistema attuale, ma ha indicato che non avevo partizioni Linux

4) Scegli di entrare shellquando è stata data l'opzione

A questo punto ho provato molte cose per montare il sistema, senza fortuna, sono abbastanza sicuro che questi sono tutti i passi che ho dovuto fare (a causa di lvm):

5) Scansionato i miei volumi,

lvmdiskscan

6) Ran lvscan, mostrato tutto elencato come "inattivo"

lvscan

7) caricare il modulo del dispositivo

modprobe dm-mod

8) modifica i volumi esistenti in attivi

vgchange -ay

9) Eseguito lvscannuovamente, ora tutti gli elementi elencati come "attivi"

10) Crea mountpoint e monta la partizione logica

mkdir /mnt/root

mount /dev/VolGroup00/LogVol00 /mnt/root

11) Cartelle spostate indietro (potresti aver bisogno di altre):

mv /var/{bin,etc,lib64,mnt,root,sbin} /

12)reboot

13) SUCCESSO!

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.