我有一个紧急情况,我是 Linux 和 Bash 的初学者,在尝试编写一个脚本来重命名一些文件时搞砸了。循环意外地进入了路径(在桌面文件夹中运行脚本)并重命名/bin
为/D_bin
(D_
是我添加的前缀),所以现在系统无法使用/bin
内容,所以不行bash
,不能mv
重命名,不行sudo
... 中的文件/D_bin
没问题,没有重命名,可以复制粘贴它们,但/bin
没有 bash 就无法再次创建文件夹。系统看起来很稳定,但很少有东西可以工作,也无法访问桌面中的文件。
其他文件夹/
似乎/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
:( 谢谢!!!!
答案1
有几种方法可以解决这个问题。
如果您可以访问 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 启动系统并解决问题。
答案2
如果您没有打开正在运行的终端,要解决这个问题,我会首先尝试找到一个可以代替 bash 的“shell 替代品”。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
当然,除非绝对必要,否则不要以 root 身份运行任何东西。