Se hai ancora una shell di root, potresti avere la possibilità di riparare il tuo sistema. Diciamo che hai spostato tutte le directory comuni (/bin
, /etc
, /lib
, /sbin
, /usr
— questi sono quelli che potrebbero rendere difficile il recupero) sotto /oops
.
Non sarai in grado di emettere il mv
comando direttamente, anche se specifichi il percorso completo /oops/bin/mv
. Questo perché mv
è collegato dinamicamente; perché hai spostato il /lib
directory, mv
non può essere eseguito perché non riesce a trovare le librerie che costituiscono parte del suo codice. Anzi, è anche peggio di così:mv
non riesce a trovare il caricatore dinamico /lib/ld-linux.so.2
(il nome può variare a seconda della tua architettura e variante unix, e la directory potrebbe avere un nome diverso come /lib32
o /lib64
). Pertanto, fino a quando non hai spostato il /lib
directory, è necessario richiamare esplicitamente il linker e specificare il percorso delle librerie spostate. Ecco il comando testato su Debian squeeze i386.
export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /
Potrebbe essere necessario modificarlo un po' per altre distribuzioni o architetture. Ad esempio, per CentOS su x86_64:
export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /
Quando hai sbagliato qualcosa /lib
, aiuta avere una cassetta degli attrezzi collegata staticamente in giro. Alcune distribuzioni (non conosco CentOS) forniscono una copia collegata staticamente di Busybox. C'è anche sash, una shell autonoma con molti comandi incorporati. Se hai uno di questi, puoi fare il tuo recupero da lì. Se non li hai installati prima del fatto, è troppo tardi.
# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit
Se non hai più una shell di root, ma hai ancora un demone SSH in ascolto e puoi accedere direttamente come root su ssh, e hai una di queste toolbox collegate staticamente, potresti essere in grado di accedere con ssh. può funzionare se hai spostato /lib
e /bin
, ma non /etc
.
ssh [email protected] /oops/bin/sash
[email protected]'s password:
Stand-alone shell (version 3.7)
> -mv /oops/* /
Alcuni amministratori configurano un account alternativo con una shell collegata staticamente o fanno in modo che l'account root utilizzi una shell collegata staticamente, solo per questo tipo di problemi.
Se non disponi di una shell di root e non hai preso precauzioni, dovrai eseguire l'avvio da un CD/USB live di Linux (qualsiasi funzionerà purché sia abbastanza recente da poter accedere ai tuoi dischi e filesystem) e sposta indietro i file.
Probabilmente puoi ripristinare senza riavviare, quindi non riavviare fino a quando non hai provato altre cose perché non si avvierà. Se hai ancora la tua sessione SSH aperta, prova questi:
-
Da dove vengono eseguiti i programmi viene impostato utilizzando la variabile $PATH. Puoi aggiungere la tua nuova collocazione al percorso eseguendo
export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin"
. Potrebbe essere necessario aggiungere il corrispondente sbin anche le directory. Puoi anche eseguire i programmi manualmente tramite il loro percorso completo/path/to/mv [from] [to]
ad esempio dovrebbe funzionare anche se mv si trova in una posizione diversa. La parte difficile è che la maggior parte dei comandi vorrà accedere alle librerie comuni e tu dici/lib
è stato spostato, quindi è necessario impostare una variabile per dove si trova anche quella.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib
-
Una volta che puoi eseguire alcuni comandi di base, sposta indietro le cose!
mv /path/to/subfolder/* /
sarebbe in ordine! Una volta che tutto è tornato a posto, il sistema dovrebbe comportarsi normalmente.
Se ciò fallisce, l'avvio di QUALSIASI LiveCD e il montaggio dell'unità dovrebbero consentire di spostare le cartelle al loro posto. Non è necessario reinstallare o utilizzare il livecd delle distribuzioni, è sufficiente montare l'unità e spostare le cartelle nella posizione corretta sul disco. Molti dischi di ripristino basati su Linux sono specializzati nel darti solo alcuni strumenti di console di base per eseguire questo tipo di riparazione.
Dovresti essere in grado di riavviare il computer con un CD di installazione in modalità utente singolo, montare il filesystem di root e spostare i file su Linux. Non conosco molti centos, ma è come RHEL, quindi dovrebbe funzionare.