Случайно переименован / bin Help!

38

У меня есть аварийный, новичок Linux и Bash здесь и перепутал, пытаясь написать сценарий для переименования некоторых файлов. Цикл случайно поднялся по пути (запустил скрипт в папке на рабочем столе) и переименовал /bin в /D_bin ( D_ был префиксом, который я добавил), поэтому теперь система не может использовать /bin , поэтому no bash , no mv , чтобы переименовать,% %_о_%%. Файлы в sudo в порядке, не переименованы и могут копировать их, но не могут создать папку /D_bin снова без bash. Система выглядит стабильной, но очень немногие работают и не имеют доступа к файлам на рабочем столе.

Другие папки /bin , например / /lib /sbin , тоже выглядят нормально, а графический рабочий стол по-прежнему существует. Я боюсь перезагрузки, потому что я не знаю, сможет ли он загрузиться.

Есть ли оболочка в корне или способ переименовать /etc обратно в /D_bin ? Нужна помощь, пожалуйста, очень важная работа скомпрометирована.

Мой суицидальный сценарий: $:

#!/bin/bash
files=~/Desktop/folder_1/*

for j in $files
do
    cd $j
    for i in 10n*  #file names starting by 10n
    do
       find * -maxdepth 0 ! -path . -exec mv {} D_{} \;
    done
    cd ..
done

:( Спасибо !!!!

    
задан Carlos D. Zapata 02.04.2017 в 14:45
источник

2 ответа

88

Есть несколько способов устранить эту проблему.

Если у вас есть доступ к оболочке (любой открытый терминал), запустите:

sudo /D_bin/mv -T /D_bin /bin

sudo находится в /usr/bin , поэтому нет необходимости запускать его с абсолютным путем.

Другое, что вы можете сделать, это добавить /D_bin к переменной PATH среды, например:

export PATH=$PATH:/D_bin

Если у вас нет доступа к какой-либо оболочке:

  1. перезагрузите систему.
  2. , когда появляется grub, нажмите e , чтобы отредактировать grub
  3. в конце строки, которая начинается с linux, добавьте:

    init=/D_bin/bash
    
  4. нажмите CTRL + x

Теперь вы попадете в оболочку bash, вы должны переделать файловую систему как прочитанную и перезаписываемую.

/D_bin/mount -o remount,rw /

И переместите каталог D_bin в bin:

/D_bin/mv -T /D_bin /bin

Затем перезагрузите систему.

Он должен работать, но если ничего не сработало для вас, вы все равно можете загрузить систему с живым диском / usb ubuntu и исправить проблему.

    
ответ дан Ravexina 02.04.2017 в 15:04
источник
8

Чтобы устранить эту проблему, если у вас нет открытого терминала, я бы сначала попытался найти «заменитель оболочки», который вы можете использовать вместо bash. Python находится в /usr/bin , поэтому он должен работать.

Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> subprocess.call(["sudo", "/D_bin/mv", "-T", "/D_bin", "/bin"])

Если это не сработает, я бы просто загрузился с live CD / USB и исправлю все, начиная с известной разумной рабочей среды.

Как общий совет, я бы добавил Jonathan Leffler в комментарии: никогда не используйте cd .. в скриптах, это может легко привести к таким проблемам. Лучше всего только cd в каталоге $j в подоболочке , так что вам не нужно беспокоиться о возврате.

#!/bin/bash
files=~/Desktop/folder_1/*

for j in $files
do
  (
    cd "$j"
    for i in 10n*  #file names starting by 10n
    do
       find * -maxdepth 0 ! -path . -exec mv {} D_{} \;
    done
  )
done

Кроме того, конечно, не запускайте файлы как root, если это абсолютно необходимо.

    
ответ дан leftaroundabout 03.04.2017 в 14:50