Pokud stále máte root shell, můžete mít šanci opravit váš systém. Řekněme, že jste přesunuli všechny běžné adresáře (/bin , /etc , /lib , /sbin , /usr — to jsou ty, které by mohly ztížit obnovu) pod /oops .
Nebudete moci vydat mv příkaz přímo, i když zadáte úplnou cestu /oops/bin/mv . To proto, že mv je dynamicky propojen; protože jste přesunuli /lib adresář, mv nelze spustit, protože nemůže najít knihovny, které tvoří součást jeho kódu. Ve skutečnosti je to ještě horší:mv nemůže najít dynamický zavaděč /lib/ld-linux.so.2 (název se může lišit v závislosti na vaší architektuře a variantě unixu a adresář může mít jiný název, například /lib32 nebo /lib64 ). Dokud tedy nepřesunete /lib adresář zpět, musíte explicitně vyvolat linker a musíte zadat cestu k přesunutým knihovnám. Zde je příkaz testovaný na Debianu squeeze i386.
export LD_LIBRARY_PATH=/oops/lib:/oops/lib/i386-linux-gnu
/oops/lib/ld-linux.so.2 /oops/bin/mv /oops/* /
Možná to budete muset trochu upravit pro jiné distribuce nebo architektury. Například pro CentOS na x86_64:
export LD_LIBRARY_PATH=/oops/lib:/oops/lib64
/oops/lib64/ld-linux-x86-64.so.2 /oops/bin/mv /oops/* /
Když jste něco podělali /lib , pomáhá mít staticky propojenou sadu nástrojů. Některé distribuce (nevím o CentOS) poskytují staticky propojenou kopii Busyboxu. K dispozici je také sashe, samostatný shell s mnoha vestavěnými příkazy. Pokud máte jeden z nich, můžete se odtud zotavit. Pokud jste je nenainstalovali dříve, je příliš pozdě.
# mkdir /oops
# mv /lib /bin /oops
# sash
Stand-alone shell (version 3.7)
> -mv /oops/* /
> exit
Pokud již nemáte root shell, ale stále vám naslouchá SSH démon a můžete se přihlásit přímo jako root přes ssh a máte jeden z těchto staticky propojených toolboxů, možná budete moci připojit ssh. může fungovat, pokud jste přesunuli /lib a /bin , ale ne /etc .
ssh example@unixlinux.online /oops/bin/sash
example@unixlinux.online's password:
Stand-alone shell (version 3.7)
> -mv /oops/* /
Někteří administrátoři nastaví alternativní účet se staticky propojeným shellem nebo přimějí účet root používat staticky propojený shell, právě pro tento druh problémů.
Pokud nemáte root shell a neučinili jste žádná opatření, budete muset zavést systém z živého CD/USB Linuxu (které bude fungovat, pokud bude dostatečně aktuální, aby bylo možné přistupovat k vašim diskům a souborovým systémům) a přesunout soubory zpět.
Pravděpodobně se můžete obnovit bez restartu, takže nerestartujte, dokud nevyzkoušíte nějaké jiné věci, protože se nespustí. Pokud máte stále otevřenou relaci SSH, zkuste toto:
-
Odkud se programy spouštějí, se nastavuje pomocí proměnné $PATH. Své nové skladové místo můžete přidat do cesty spuštěním
export PATH="$PATH:/newpath/to/bin:/newpath/to/usr/bin". Možná budete muset přidat odpovídající sbin adresáře také. Programy můžete také spouštět ručně přes jejich úplnou cestu/path/to/mv [from] [to]například by měl fungovat, i když je mv na jiném místě. Záludná část je v tom, že většina příkazů bude chtít získat přístup k běžným knihovnám a vy řeknete/libse přesunul, takže musíte nastavit proměnnou, kde to také je.export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/newpath/to/lib/:/newpath/to/usr/lib -
Jakmile budete moci provést některé základní příkazy, přesuňte věci zpět!
mv /path/to/subfolder/* /by bylo v pořádku! Jakmile je vše zpět na svém místě, systém by se měl chovat normálně.
Pokud to selže, spuštění JAKÉHOKOLI LiveCD a připojení jednotky by vám mělo umožnit přesunout složky zpět tam, kam patří. Nemusíte znovu instalovat nebo dokonce používat vaše distribuce livecd, stačí připojit jednotku a přesunout složky zpět na správné místo na disku. Spousta linuxových záchranných disků se specializuje na to, že vám poskytne jen několik základních konzolových nástrojů k provedení tohoto druhu opravy.
Měli byste být schopni restartovat počítač pomocí instalačního CD v režimu jednoho uživatele, připojit kořenový souborový systém a přesunout soubory zpět na Linux. Centos moc neznám, ale je to jako RHEL, takže by to mělo fungovat.