意外重命名了 /bin 救命!

意外重命名了 /bin 救命!

我有一个紧急情况,我是 Linux 和 Bash 的初学者,在尝试编写一个脚本来重命名一些文件时搞砸了。循环意外地进入了路径(在桌面文件夹中运行脚本)并重命名/bin/D_binD_是我添加的前缀),所以现在系统无法使用/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:

  1. 重启系统
  2. 当 grub 出现时,按e编辑 grub
  3. 在以 linux 开头的行末尾添加:

    init=/D_bin/bash
    
  4. 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 身份运行任何东西。

相关内容