Я имею чрезвычайную ситуацию, 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
:( Спасибо!!!!
Существует несколько способов устранить эту проблему.
, Если у Вас есть доступ к оболочке (какой-либо открытый терминал), работайте:
sudo /D_bin/mv -T /D_bin /bin
sudo
находится в /usr/bin
, таким образом, нет никакой потребности выполнить его с полным путем.
другая вещь, которую можно сделать, добавляя /D_bin
к Вашему PATH
переменная среды, как это:
export PATH=$PATH:/D_bin
, Если у Вас нет доступа ни к какой оболочке:
в конце строки, которая запускается с Linux, добавьте:
init=/D_bin/bash
нажатие CTRL + x
Теперь Вы будете брошены в оболочку удара, необходимо повторно смонтировать файловую систему, как считано и перезаписываемый.
/D_bin/mount -o remount,rw /
И перемещение каталог D_bin к мусорному ведру:
/D_bin/mv -T /D_bin /bin
Затем перезагружают систему.
Это должно работать, но если ничто не работало на Вас, все еще можно загрузить систему с живым диском/usb человечности и устранить проблему.
Для решения этой проблемы, если бы у Вас нет рабочего открытого терминала я сначала попытался бы найти “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
кроме того, конечно, не выполняют материал как корень, если не абсолютно необходимо.