意外重命名 /etc 后,如何将其重命名回来?

意外重命名 /etc 后,如何将其重命名回来?

我正在使用 Ubuntu 18.04。

我把/etc文件夹改名为apache2。这是我最大的错误

现在我无法将其重命名,因为我需要使用sudo,但是当我尝试时出现错误

sudo: unknown uid 1000

我该如何修复这个问题?我没有可以启动的实时系统,在恢复模式下,根终端打开但随后关闭并显示cannot open password database

答案1

解决此类问题的一个简单方法通常是从实时系统启动、挂载根分区/mnt ,然后重命名文件。

如果您没有实时系统或创建实时系统的方法,或者您无法物理访问系统但可以重新启动并获取 GRUB 菜单,则可以使用 GRUB 编辑器获取 root shell 并重命名文件。

重新启动或关闭电源,打开电源,如果您在启动时通常看不到 GRUB 菜单,请按ShiftEsc进入 GRUB 菜单。

向下移动光标至Ubuntu 的高级选项然后按enter,然后按e编辑启动选项(仅限一次 - 此处的更改不是永久性的,因此我们不必事后清理)。

您将看到类似如下的屏幕

GRUB 菜单编辑器的屏幕截图

将光标向下移动到以 开头的行,然后将光标移动到该行的末尾,或该行的内核启动参数中的任何位置。请确保您位于正确的行上并在此处小心输入,因为如果没有到位,linux系统可能无法启动。/etc

添加文本init=/bin/bash并按下F10启动。

这将使用 Bash shell 作为 init 启动系统。您将获得一个 root shell,并且文件系统将以只读方式挂载。2要使文件系统可写,请输入命令

mount -o remount,rw /

现在您可以重命名/etc(您可能首先想要重命名ls

mv /apache2 /etc

现在您可以重新启动,或者通过让 root shell 用正常的 init 系统3替换自身来从这里正常完成启动:

exec systemd 

我在 Ubuntu MATE 18.04 上测试了此过程。


1 非常感谢库尔菲从 VirtualBox 获取 GRUB 编辑器的高质量屏幕截图!
2虽然在这种情况下无法从配置文件中设置 PATH /etc,但 Bash 会自动设置一个.
3如果exec systemd对您不起作用,exec /sbin/init应该可以解决问题。如果还是不行,readlink -e /sbin/init应该给出应该运行的任何 init 程序的路径,然后您可以exec使用其完整路径。如果您无法通过这种方式继续,只需输入reboot

答案2

如果您有一个实时 USB,您应该能够启动它并挂载您现有的文件系统,然后/etc从那里重命名您的。这里是一个关于如何创建实时 USB 的教程(如果您需要的话)。

一旦启动到实时 USB(如果使用 Ubuntu 18.04 驱动器),选择“尝试 Ubuntu 而不安装”,它实际上会为您提供一个完整的 Ubuntu 安装实例,该实例在关机后不会保留。启动后,您有几个选项:

命令行方式

打开终端并运行lsblk。查找原始安装驱动器的卷,并记下它的编号 (/dev/sd#)

然后,使用 为驱动器创建挂载点mkdir -p /mnt/directory,然后使用 挂载驱动器sudo mount /dev/sd# /mnt/directory。使用 导航到目录cd /mnt/directory,您现在应该位于安装的根目录中,但现在有一个有效的sudo命令。运行sudo mv apache2 etc并重新启动进入假设工作的操作系统。

图形方式

通过搜索磁盘打开磁盘实用程序。选择看起来像您的安装驱动器的卷并安装它。打开文件管理器并选择已安装的卷,右键单击您的/apache2文件夹并将其重命名为/etc,然后重新启动。

答案3

  1. 按照图示制作可启动 USB这里。

  2. 按下图示按键从 USB 启动这里。

  3. 运行 找出你的文件系统分区gparted。假设它是 sdxy。

  4. 在终端运行sudo mount /dev/sdxy /mnt

  5. 在终端运行sudo mv /mnt/apache2 /mnt/etc

  6. 检查 /mnt 中的文件系统的名称是否更改。

  7. 在终端运行sudo reboot

  8. 出现提示时,拔下 USB 并按 Enter

相关内容