Восстановление после «mv / * ../»

Оставив мой ноутбук с открытой корневой оболочкой на моем столе (работающий с Ubuntu 13.10), какой-то не очень приятный человек замутил мою систему, используя «mv / * ../"

Есть ли простой способ исправить это или мне лучше сохранить то, что можно сохранить и переформатировать?

1
задан 5 January 2014 в 18:31

3 ответа

Теперь я не специалист по командам, но, похоже, это неприятно (в любом случае, зачем вам оставлять открытый компьютер у пользователя root?).

Если файлы все еще находятся в системе (маловероятно), вы можете просто переместить их назад. Но так как вы спрашиваете это, я не думаю, что они.

Лучше всего было бы переустановить систему.

И скажи себе никогда больше не покидать систему ROOT. : P

0
ответ дан 5 January 2014 в 18:31
  • 1
    но вопрос, ntpdate не установлен по умолчанию на Ubuntu, поэтому как делает Ubuntu когда-нибудь , синхронизируют время? – John Allard 28 February 2017 в 22:52
1143 В большинстве случаев отменить неправильный ход на самом деле довольно просто. Команда mv /* ../ перемещает каждый не скрытый файл в вашем каталоге верхнего уровня к родителю вашего текущего текущего рабочего каталога .

Если вы вошли в систему как root, по умолчанию ваш текущий рабочий каталог - /root. В этом случае команда mv /* ../ не имеет никакого эффекта, поскольку она эффективно переводится в mv /* /.

Так как вы упомянули, что «ваша система кирпична», я предполагаю, что вам не повезло, и ваш текущий каталог не /root (или что-то с родительским каталогом /). Допустим, вы были в каталоге /var/www. Теперь это означает, что все файлы были перемещены в каталог /var/.

Поскольку ни одна из программ не запустится (библиотеки недоступны, программы тоже не работают), я предлагаю загрузиться с Live CD и продолжить восстановление. В следующих командах замените $ROOT точкой монтирования вашей установки Ubuntu (например, /media/Ubuntu).

Давайте посмотрим, что содержится в корневом каталоге:

$ ls $ROOT
bin
boot
dev
etc
home
initrd.img    # symlink to /boot/initrd.img-3.8.0-34-generic
lib
lib32
lib64
lost+found    # special directory for ext filesystems, cannot be moved
media
mnt
opt
proc
root
run
sbin
selinux
srv
sys
tmp
usr
var
vmlinuz    # symlink to boot/vmlinuz-3.8.0-34-generic

Шаблон глобуса /* расширяется оболочкой, поэтому команда становится примерно такой:

mv /bin /boot (stripped for saving space) /usr /var /vmlinuz  /var/

Если /var/ не содержит ни одного из имен из /, то вы можете просто переместить его назад. Предполагая, что текущим рабочим каталогом является /var (cd /var), вы можете запустить:

mv bin boot (stripped for saving space) usr var vmlinuz $ROOT/

Или сделать это по одному:

mv bin $ROOT/
mv boot $ROOT/
...
mv var $ROOT/
mv vmlinuz $ROOT/

Особые случаи:

  • Если каталог в /var/ имеет то же имя, что и каталог в /, то каталог не перемещается . Это относится к /run/ и /var/run/.

Особые случаи, которые здесь не применимы, но упоминаются для полноты:

  • Когда каталог в /var/ имеет то же имя, что и элемент в / (каталог, файлы , символические ссылки и т. д.), то элемент из / будет перемещен в каталог /var/NAME. Например, если /NAME является файлом или каталогом, а /var/NAME/ является каталогом, то /NAME будет перемещено в /var/NAME/NAME. ​​
  • Если /var/NAME - это файл, а /NAME - это тоже файл, то /var/NAME заменяется на /NAME. Выздоровление здесь не так просто, как вам сейчас нужны инструменты криминалистики.
  • Если /var/NAME - это файл, а /NAME - это каталог, то ничего не произойдет (и будет напечатано сообщение об ошибке).

В следующий раз не забудьте заблокировать экран ( Ctrl + Alt + L ) и подсказку " не такой хороший парень ", что потеря данных - не хороший новогодний подарок; -)

0
ответ дан 5 January 2014 в 18:31
  • 1
    Примечание: этот принятый ответ очень устарел. На последних версиях Ubuntu (16.04 +), timedatectl используется вместо ntpdate. timedatectl, управляет systemd' s timesyncd сервис. – Corey Goldberg 11 June 2017 в 02:47

Это будет зависеть от того, в каком каталоге ваша корневая оболочка была оставлена ​​открытой. Команда mv /* ../ переместит все из папки / в родительскую папку вашего текущего каталога .

Теперь главная проблема, с которой вы столкнетесь, заключается в том, что никакие команды не будут работать, поскольку /bin теперь будет /home/bin (при условии, что рабочим каталогом вашей корневой оболочки был ваш $HOME). Эту проблему легко решить, загрузившись в живую сессию, подключив локальный диск и переместив файлы обратно.

Вы также можете попробовать запустить /home/bin/ls /home. Если это показывает вам папки, такие как /usr и /etc, вы знаете, что ваши / файлы были перемещены в / home`, и вы можете получить их обратно, запустив (из оболочки открытого корня):

/home/bin/mv /home/{bin,boot,dev,etc,lib,lib32,lib64,media,mnt,opt,proc,root,run,sbin,srv,sys,tmp,usr,var} /
0
ответ дан 5 January 2014 в 18:31

Другие вопросы по тегам:

Похожие вопросы: