问题描述
我有一个紧急情况,Linux和Bash初学者在这里搞砸了试图写一个脚本来重命名一些文件。循环意外地上升了路径(在桌面文件夹中运行脚本)并将/bin
重命名为/D_bin
(D_
是我添加的前缀),所以现在系统无法使用/bin
内容,因此没有bash
,没有mv
重命名,没有sudo
… /D_bin
中的文件没问题,没有重命名,可以copy-paste但是没有bash就无法再创建文件夹/bin
。系统看起来很稳定,但很少有工作,并且无法访问Desktop中的文件。
/
的其他文件夹如/lib
/sbin
/etc
似乎也可以,图形桌面仍然存在。我害怕重启,因为我不知道它是否能够启动。
是否有root的shell或将/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
:( 谢谢!!!!
最佳解决方案
有几种方法可以解决此问题。
如果您有权访问shell(任何打开的终端),请运行:
sudo /D_bin/mv -T /D_bin /bin
sudo
位于/usr/bin
中,因此无需使用绝对路径运行它。
您可以做的另一件事是,将/D_bin
添加到您的PATH
环境变量中,如下所示:
export PATH=$PATH:/D_bin
如果您无权访问任何shell:
-
重启系统
-
当grub出现时按
e
编辑grub -
在以linux开头的行尾,添加:
init=/D_bin/bash
-
按
CTRL
+x
现在你将被放入一个bash shell中,你应该将文件系统重新安装为可读写的。
/D_bin/mount -o remount,rw /
并将D_bin目录移动到bin:
/D_bin/mv -T /D_bin /bin
然后重启系统。
它应该可以工作,但如果没有什么对你有用,你仍然可以使用实时的ubuntu磁盘/usb启动系统并修复问题。
次佳解决方案
要解决此问题,如果您没有打开正在运行的终端,我会首先尝试找到您可以使用的“shell substitute”而不是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"])
如果这不起作用,我只需从现场CD /USB直接启动并修复known-sane运行环境中的所有内容。
作为一般建议,我在评论中第二个Jonathan Leffler:从不在脚本中使用cd ..
,它很容易导致这样的问题。最好只进入子shell中的$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身份运行东西。