GNU/Linux >> Znalost Linux >  >> Linux

Přesunutý koš a další složky! Jak je získat zpět?

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 [email protected] /oops/bin/sash
[email protected]'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 /lib se 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.


Linux
  1. `^m` A jak se toho zbavit?

  2. Jak získat vlastní IP adresu a uložit ji do proměnné ve skriptu Shell?

  3. Jak získat všechny soubory přesahující určitou velikost a smazat je

  1. Jak zpětně vyhledávat tam a zpět?

  2. Jak získat PYTHONPATH v shellu?

  3. Jak získat pid procesu a vyvolat na něj kill -9 ve skriptu shellu?

  1. Jak najít verzi Ubuntu, kódové jméno a architekturu OS v Shell Script

  2. Jak získat název distribuce a číslo verze v jednoduchém skriptu Shell?

  3. Centos – Přesunutý koš a další složky! Jak je získat zpět?