问题描述
这似乎是一个chicken-egg问题。使用sudo
最常见的任务是安装和删除软件。
sudo apt-get purge <appname>
但是sudo
本身可以被删除。
sudo apt-get purge sudo # Do not run this command on production computers!
这就是有趣的地方
ubuntu@ubuntu:~$ sudo
bash: /usr/bin/sudo: No such file or directory
虽然显而易见的是,没有一个正确思想的人会清除sudo
(除了我)之外,有人可能会被愚弄来运行这个命令(不是直接,以十六进制模式,或者其他任何方式),或者一个人可以伪装成技术SSH大师,做一团糟。
那么有没有办法重新安装sudo?
最佳解决思路
我可以用以下方法安装应用
pkexec apt-get install <appname>
来自man pkexec
:
pkexec allows an authorized user to execute PROGRAM as another user. If username is not specified, then the program will be executed as the administrative super user, root.
所以,我认为pkexec apt-get install sudo
应该也可以。
编辑:现在我可以确认:是的,可以使用pkexec apt-get install sudo
安装sudo
:
次佳解决思路
您始终可以启动到Recovery Mode,放到root shell并在没有sudo的情况下安装它。
第三种解决思路
是的,可以通过chroot方法重新安装sudo
包。
-
首先从Ubuntu live disk启动。
-
将以前安装的Ubuntu分区挂载到您想要的任何目录中。在我的例子中,我将它安装在
/media/ubuntu
中。sudo mkdir /media/ubuntu sudo mount /dev/sdaX /media/ubuntu # /dev/sdaX - previously installed Ubuntu partition.
-
在默认情况下,您无法在chrooted进入分区后获得Internet连接。因此,请运行以下命令使其正常工作。
for d in dev sys run proc; do sudo mount --bind /$d /media/ubuntu/$d ; done
感谢@Oli为this提供了精彩的代码。
-
现在chroot到该安装目录,
$ sudo chroot /media/ubuntu # apt-get update
-
通过运行安装
sudo
软件包,# apt-get install sudo
-
现在退出chrooted环境。
exit
-
最后启动你的Ubuntu OS.Now测试你的
sudo
命令,它肯定会起作用。
第四种思路
在内核命令行上使用额外参数init=/bin/sh
引导。这将直接将您置于根shell中,您可以从中轻松运行apt-get install sudo
然后重新启动。您可能需要先运行/etc/init.d/networking start
以获得有效的网络连接。如果你问我的话,比使用恢复CD或实时磁盘更简单。