当前位置: 首页>>技术教程>>正文


意外重命名/bin帮助!

, ,

问题描述

我有一个紧急情况,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:

  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启动系统并修复问题。

次佳解决方案

要解决此问题,如果您没有打开正在运行的终端,我会首先尝试找到您可以使用的“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身份运行东西。

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/2029.html,未经允许,请勿转载。