马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
装系统的时候会勾一堆包,装完之后想起来"那时候到底装了什么",或者排查问题时需要确认某个库在不在,就得会查。Ubuntu 下查已安装的软件包其实就两条路:dpkg 和 apt。两者关注的口径不一样,配合 grep 过滤,基本能覆盖绝大多数场景。
dpkg --list:看全部已装包
dpkg 是 Debian 系最底层的包管理工具,直接读本机数据库,不联网。dpkg --list 会列出系统里全部已安装的软件包,包含名称、版本号、架构和简要描述:
dpkg --list
输出大概长这样,三列主信息分别是"期望状态 / 当前状态 / 错误状态",后面才是包名:
ii qemu-common 2:6.2.0-4ubuntu6.3 all QEMU common files
ii 里的第一个 i 表示期望安装,第二个 i 表示当前已安装,看到 ii 就是正常的已装状态。
配合 grep 做过滤
dpkg --list 一屏刷下来几百上千行,真正要找的往往就几个。用 grep 按关键字拦一下:
dpkg --list | grep qemu
这样只会输出包名里带 qemu 的条目,也就是所有名称包含 qemu 的软件包。想找其他组件,把 qemu 换成关键字即可,比如 grep nginx、grep python3。
如果记得包名但不确定全称,可以用 dpkg -l 加通配符:
dpkg -l 'qemu*'
apt list --installed:从源的角度看
apt 是更高一层,负责仓库索引和依赖解析。apt list --installed 列出的是"通过包管理器安装的、当前处于已装状态"的包:
apt list --installed
同样可以过滤:
apt list --installed | grep qemu
两种列法的结果会有细微差别:
- dpkg 看的是本机状态库,手工解压塞进去的包它也算(只要写进了 status 文件);
- apt 看的是仓库视角,能顺带标出"这是手工装的还是从源里装的"(
[installed] / [installed,automatic])。
排查"这玩意儿到底谁给我装上的"时,apt 这条线更有用;确认"机器上到底有没有这个二进制"时,dpkg 更直接。
确认某个文件属于哪个包
很多时候你手上是一个路径,比如 /usr/bin/sshpass,想知道它来自哪个包,用这条:
dpkg -S /usr/bin/sshpass
# 反向查:某个包装了哪些文件
dpkg -L 包名
前者是"文件找归属",后者是"包找文件",两个方向配合着用效率最高。
要不要加 sudo
查询类命令一般不需要 root,直接跑就行。需要注意的是,以普通用户身份执行 apt list --installed 和 dpkg --list 输出是一样的,但某些环境下 apt 会提示"以 root 运行可获得更完整信息",此时前面加 sudo 即可:
sudo dpkg --list | grep 关键字
sudo apt list --installed | grep 关键字
反正这两条都是只读操作,加 sudo 不会带来副作用。
两个高频实用组合
把上面几招串起来,就是日常排查的两个常用套路:
- 确认某个组件装没装:
dpkg --list | grep 关键字,命中 ii 即为已装。
- 看清一个包的来龙去脉:
apt-cache policy 包名 看版本和源,dpkg -L 包名 看装了哪些文件,apt-cache show 包名 看依赖。
顺带一提,如果是要看装了哪些包、方便以后复现环境,那是用 dpkg --get-selections 导出清单、在新机器上 dpkg --set-selections 导入的路子,和上面"临时查一下"不是一回事。真要做环境漂移的团队,建议上配置管理(Ansible / puppet)而不是靠导包清单。
qidao123.com企服评测-应用市场 编辑提示
本文由齐道123 IT 运维社区整理,汇总 Ubuntu / Debian 下查询已安装软件包的常用命令与组合。文中命令均为只读查询,可放心在自有服务器上执行;涉及安装、升级、卸载的操作请另行确认后再进行。dpkg 与 apt 的输出口径存在差异,排查问题时应结合两者结果判断。
|