我非常需要你的帮助。我有 debian 10 服务器,有 2 个用户:root 和 user(添加到 sudo 组)。我使用 RDP 的用户帐户,并且“sudo”命令始终运行良好。
当我尝试执行以下操作(从用户帐户)时,问题就开始了:
$ echo 'deb http://ftp.de.debian.org/debian bookworm main' >> /etc/apt/sources.list
关于 libcrypt 有一些错误,我尝试了类似的方法(不太记得了):
$ sudo echo 'deb http://ftp.de.debian.org/debian bookworm main' >> sudo /etc/apt/sources.list
我认为问题在于我对“sudo”进行了回应?我对linux不太熟悉,我用google搜索了几天,但无法解决问题。大多数使用 sudo 的命令都会立即收到此输出,而不会提示我输入密码:
$ sudo whoami
Sorry, try again.
Sorry, try again.
sudo: 3 incorrect password attempts
如果我尝试:
$ cat /etc/sudoers
cat: /etc/sudoers: Permission denied
每个带有 sudo 访问的命令都被拒绝。我无法更改我在谷歌上搜索的配置文件。所以我只能通过 RDP 访问用户帐户,如果我尝试不使用 sudo,我会收到:
$ apt update
Reading package lists... Done
E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied)
E: Unable to lock directory /var/lib/apt/lists/
W: Problem unlinking the file /var/cache/apt/pkgcache.bin - RemoveCaches (13: Permission denied)
W: Problem unlinking the file /var/cache/apt/srcpkgcache.bin - RemoveCaches (13: Permission denied)
请帮助我理解问题并解决它。
答案1
将(= 一旦发布后将是 Debian 12)存储库添加bookworm
到 Debian 10 是一个坏主意,因为升级时您无法跳过版本:您必须先升级到 Debian 11“bullseye”,然后再升级到“bookworm” 。
幸运的是,您的第一次尝试(没有sudo
)将会失败,因为/etc/apt/sources.list
需要 root 访问权限才能写入。
/usr/bin
你记住的第二个命令的版本也不应该引起任何重大问题,假设你在执行它时还不是root用户。
sudo echo 'deb http://ftp.de.debian.org/debian bookworm main' >> sudo /etc/apt/sources.list
该命令实际上意味着“使用root权限将单引号中的文本写入标准输出,然后(作为普通用户)将其附加到当前目录中名为“sudo”的文件中(如果该文件不存在则创建该文件)所以这也不应该造成什么大的伤害,除非你的记忆有误。
如果没有(成功)使用sudo
或以其他方式拥有根访问权限,您将无法使用apt
或其他包管理命令,因为这些命令需要根权限才能工作。
我建议检查几件事:
实际状况如何/etc/apt/sources.list
?
跑less /etc/apt/sources.list
过去查看。您应该能够以普通用户身份执行此操作,无需任何特殊权限。
你做了什么实际上做?
使用history
命令查看命令历史记录,而不是依赖你的记忆。
现在发生了什么?
当您使用该命令时,您可以运行type sudo
以查看实际正在运行的内容sudo
。通常它应该响应:
sudo is /usr/bin/sudo
也许
sudo is hashed (/usr/bin/sudo)
sudo
如果它告诉您不同的信息,则说明您的 $PATH 目录之前有一些非标准命名的内容/usr/bin
,或者您已设法使用该名称定义 shell 别名或函数,sudo
并且它正在执行而不是真正的sudo command
.
如果这是问题所在,您应该能够sudo
通过完整路径指定来使用真正的命令,即/usr/bin/sudo
而不只是sudo
.
看来您已成功将bookworm
存储库添加到/etc/apt/sources.list
.如果您还安装了unattended-upgrades
软件包,系统可能已开始尝试从 Debian 10“buster”直接升级到“bookworm”(未来的 Debian 12,仍处于测试阶段),跳过 Debian 11...这不会工作。
通过尝试安装python3-dev
、添加存储库后,您还可能导致依赖级联python3.10-dev
,从而触发许多(但不是全部)系统库的升级。libpython3.10
libpython3.10-dev
python3.10
bookworm
实际上,您可能已经做了一个 FrankenDebian:来自不同版本的软件包的奇怪组合,但从未承诺可以一起工作。
/var/log/dpkg.log
是一个低级包管理日志,应记录所有最近的包管理操作,无论是手动还是自动。普通用户应该可以阅读它。您是否看到问题开始时记录的任何内容?
每行应以时间戳开头,后跟描述特定操作的单词。有趣的行应该有动作词,如、install
和/或。upgrade
remove
purge
在操作词之后,应该有包名称,然后是旧版本(或<none>
如果不适用)和新版本(或<none>
)。
如果您采用带有时间戳的行后添加 bookworm 存储库(检查 的修改时间/etc/apt/sources.list
),这些行应该准确地告诉您哪些包已被替换,最有可能是来自 的相应包bookworm
。
不幸的是,由于您显然只有 RDP 访问系统,因此如果buster
没有可以访问系统引导加载程序的人的帮助,您可能无法获得 root 访问权限并将软件包降级回适当的版本。
要恢复,可能需要从外部介质将系统引导至救援模式,然后激活网络接口并chroot
以 root 身份进入损坏的系统。然后,应该可以通过/var/log/dpkg.log
在添加存储库时或之后反转文件中列出的安装/更新/删除操作来降级错误升级的软件包bookworm
。