不小心重命名 /etc 后,如何将其重命名?

Bip*_*ipa 37 sudo etc

我正在使用 Ubuntu 18.04。

我将/etc文件夹重命名为apache2. 那是我最大的错误

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

sudo: unknown uid 1000
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?我没有可从中启动的实时系统,在恢复模式下,根终端打开但随后关闭说cannot open password database.

Zan*_*nna 62

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

如果您没有实时系统或制作系统,或者您没有对系统的物理访问权限但可以重新启动并获得 GRUB 菜单,则可以使用 GRUB 编辑器获取 root shell 并重命名文件。

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

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

您将看到一个类似于1的屏幕:

GRUB 菜单编辑器的屏幕截图

将光标向下移动到以 开头的行,linux然后将光标移动到该行的末尾,或内核引导参数中的任何位置。确保您在正确的行上并在此处仔细键入,因为系统可能无法在未/etc就位的情况下启动。

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

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

mount -o remount,rw /
Run Code Online (Sandbox Code Playgroud)

现在你可以重命名/etc(你可能想ls先)

mv /apache2 /etc
Run Code Online (Sandbox Code Playgroud)

现在您可以重新启动,或者通过将 root shell 替换为正常的 init system 3 来正常从这里完成启动:

exec systemd 
Run Code Online (Sandbox Code Playgroud)

我在 Ubuntu MATE 18.04 上测试了这个程序。


1 非常感谢Kulfy从 VirtualBox 获得高质量的 GRUB 编辑器截图!
2虽然/etc在这种情况下无法从配置文件中设置 PATH ,但 Bash 会自动设置一个.
3如果exec systemd不适合你,exec /sbin/init应该做的伎俩。如果没有,readlink -e /sbin/init应该给出应该运行的任何 init 程序的路径,然后你可以exec使用它的完整路径。如果您不能以这种方式进行,只需输入reboot

  • 非常彻底,包括截图+1 :) (4认同)
  • @Kulfy 非常感谢!太好了:DI 不能使用 VB,因为我没有足够的 RAM。非常感谢您帮助改进我的答案 (3认同)
  • 我想我截取的截图太大了:P ;-) 并感谢您的截图积分 :) (3认同)

Min*_*nty 8

如果你有一个实时 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,然后重新启动。

  • @AJMansfield 当然在实时系统上无关紧要,但通常我们应该使用 `sudo -H nautilus` 来避免让 root 成为 `$HOME` 中配置文件的所有者,这可能会使它们无法被以以下方式运行的程序访问一个普通用户。你可能知道这一点,但我是为其他读者提的。 (2认同)

Vij*_*jay 6

  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