Случайно переименованная / Справка мусорного ведра!

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

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

Есть ли оболочка в корне или способе переименовать /D_bin назад к /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

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

39
задан 22 November 2017 в 09:08

2 ответа

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

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

sudo /D_bin/mv -T /D_bin /bin

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

другая вещь, которую можно сделать, добавляя /D_bin к Вашему PATH переменная среды, как это:

export PATH=$PATH:/D_bin

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

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

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

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

/D_bin/mount -o remount,rw /

И перемещение каталог D_bin к мусорному ведру:

/D_bin/mv -T /D_bin /bin

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

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

89
ответ дан 23 November 2019 в 00:09

Для решения этой проблемы, если бы у Вас нет рабочего открытого терминала я сначала попытался бы найти “shell substitute”, что можно использовать вместо удара. 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"])

, Если бы это не работает, я просто прямо загрузился бы с живого 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

кроме того, конечно, не выполняют материал как корень, если не абсолютно необходимо.

8
ответ дан 23 November 2019 в 00:09

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

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