Ubuntu 使用问题记录贴

这篇文章来自一次 Ubuntu 桌面环境的连续排查。当时遇到的问题看起来互不相关:curl 安装失败、Bash 找不到 /dev/fd/63、用户不在 sudo 列表,以及设置图标消失。它们最后都提醒我一件事:先保留完整现象,再做最小修改,不要把“能执行”误当成“已经定位原因”。

文中的系统和软件包版本属于当时环境。下面保留原始处理过程,并把现在更值得注意的排查边界补在每个问题后面。

1. 安装软件时出现未满足的依赖关系

当时安装 curl 时看到:

下列软件包有未满足的依赖关系:
  curl : 依赖: libcurl4 (= 7.64.0-2ubuntu1.2) 但是 7.65.3-1ubuntu3 正要被安装

E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

原来的判断是 libcurl4 版本没有对上,于是直接清理后重装:

sudo apt-get purge libcurl4
sudo apt-get update
sudo apt-get install curl

Ubuntu 安装软件未满足依赖关系

现在更稳妥的排查顺序

purge 会删除软件包及其配置,不应该在没有确认依赖关系时直接使用。先把环境信息保存下来:

apt policy curl libcurl4
apt-mark showhold
cat /etc/os-release
sudo apt-get update
sudo apt-get -f install

重点看三件事:软件源是否混用、软件包是否被 hold、依赖是否来自不同发行版或不同版本的源。只有确认旧配置确实造成冲突后,才考虑删除或重新安装,并且要先检查哪些其他软件依赖它。

2. Bash 报错:/dev/fd/63: 没有那个文件或目录

这个问题来自进程替换(process substitution)。类似下面的写法:

some-command <(another-command)

Bash 会把 another-command 的输出通过一个临时的文件描述符暴露给外部命令,常见路径就是 /dev/fd/63。如果把只支持普通文件参数的命令交给了不兼容的解释器,就可能看到“没有那个文件或目录”。

bash: /dev/fd/63: 没有那个文件或目录

当时的解决思路是把进程替换改成普通标准输入重定向:

producer | bash

解决方案,使用两个 <

不要机械地把一个 < 改成两个 <。真正要确认的是:目标命令需要文件路径,还是需要从 stdin 读取内容。调试时可以先把中间结果写入临时文件,确认内容正确后再恢复管道写法。

3. 用户不在 sudo 列表

当用户没有 sudo 权限时,原来的处理步骤是进入恢复模式,以 root 身份把用户加入 sudo 组:

adduser username sudo

修改组关系后需要重新登录,必要时重启会话,再检查:

id username
groups username
sudo -v

如果系统使用的不是 Debian/Ubuntu 的默认权限组,或者账号来自集中式身份服务,不能直接照搬 sudo 组方案。先确认 /etc/sudoers 和 /etc/sudoers.d/ 的现有规则,编辑 sudo 配置时使用 visudo,不要直接用普通编辑器覆盖文件。

4. 系统设置图标消失

当时的处理方式是重新安装 GNOME 控制中心:

sudo apt update
sudo apt install gnome-control-center

Ubuntu 没有设置

如果安装后仍然没有图标,还要确认当前桌面环境、应用启动器缓存和软件包状态。可以先检查:

dpkg -l gnome-control-center
command -v gnome-control-center

不要把桌面图标消失直接等同于软件包被删除,也不要在不了解桌面环境的情况下批量重装桌面组件。

这次排查留下的经验

  • 依赖问题先看 apt policy、软件源和 hold 状态;
  • 服务问题先看 systemctl status 和 journalctl;
  • 权限问题先看 id、groups 和实际 sudo 规则;
  • Bash 问题先区分文件参数、管道和进程替换;
  • 修复后重新执行原命令,确认结果,而不是只看安装命令有没有返回。

这篇记录里的命令并不保证适用于当前 Ubuntu 版本。尤其是 purge、恢复模式和修改 sudo 规则,都应该先确认影响范围。排查系统问题时,命令越短,越需要知道它会删掉什么。

参考资料

可用性说明:本文发布于 2019 年 12 月,距今已超过五年。文中涉及的软件版本、接口、下载地址、命令参数和操作界面可能已经发生变化,部分方案在当前环境下可能失效。请结合官方最新文档核对后再操作,生产环境使用前务必先行验证。

版权声明: 本文首发于 指尖魔法屋-Ubuntu 使用问题记录贴(https://blog.thinkmoon.cn/post/650-notes-troubleshooting-ubutnu-linux/) 转载或引用必须申明原指尖魔法屋来源及源地址!