Оставив мой ноутбук с открытой корневой оболочкой на моем столе (работающий с Ubuntu 13.10), какой-то не очень приятный человек замутил мою систему, используя «mv / * ../"
Есть ли простой способ исправить это или мне лучше сохранить то, что можно сохранить и переформатировать?
Теперь я не специалист по командам, но, похоже, это неприятно (в любом случае, зачем вам оставлять открытый компьютер у пользователя root?).
Если файлы все еще находятся в системе (маловероятно), вы можете просто переместить их назад. Но так как вы спрашиваете это, я не думаю, что они.
Лучше всего было бы переустановить систему.
И скажи себе никогда больше не покидать систему ROOT. : P
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 kbd> + Alt kbd> + L kbd>) и подсказку " не такой хороший парень ", что потеря данных - не хороший новогодний подарок; -)
Это будет зависеть от того, в каком каталоге ваша корневая оболочка была оставлена открытой. Команда 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} /