rpm -qa --last 可查最早安装包时间,输出按安装时间倒序排列,最底部即初始安装的基础包;dpkg.log 中 grep ' install ' 可提取最早安装记录;非包管理器安装软件需查文件 mtime 或 birth time。

rpm -qa --last 查最早安装的包时间
在 RHEL/CentOS/Fedora/AlmaLinux 等 RPM 系统中,rpm -qa --last 是最直接的方式。它按安装时间倒序列出所有包,最底下那条就是系统初始化时安装的基础包(如 setup、filesystem 或 basesystem),时间戳通常贴近安装时刻。
注意三点:
- 输出里的时间是本地时区,不是 UTC;若系统时区曾被修改,该时间可能不准
-
--last显示的是“最后一次安装/重装时间”,不是初始安装时间——但对全新安装的系统,两者一致 - 如果执行后无输出或报错
error: no db path given,说明 rpm 数据库损坏或未初始化,需先运行sudo rpm --rebuilddb
dpkg.log 里找最早的 install 记录
Debian/Ubuntu 系统不记录包的“首次安装时间”,但 /var/log/dpkg.log 会逐行记下每次 install 操作。用下面命令提取最早一条:
zcat /var/log/dpkg.log.*.gz 2>/dev/null | grep ' install ' | head -n 1<br>grep ' install ' /var/log/dpkg.log | head -n 1
常见坑:
- 日志可能被轮转清理,
/var/log/dpkg.log本身只保留最近几次安装记录;老日志在/var/log/dpkg.log.1.gz等压缩文件里,得用zcat配合grep - 关键词必须带空格写成
' install ',否则会误匹配uninstall或reinstall - 容器环境或最小化安装可能压根没生成
dpkg.log,此时该路径不存在
apt history.log 的 Start-Date 不等于安装时间
/var/log/apt/history.log 看起来更规范,但它记录的是 apt 命令调用的起始时间,不是软件实际写入磁盘的时间。而且:
- 首条记录通常是系统安装后第一次
apt update或apt upgrade,不是安装当天 - 该文件默认只保留最近 12 条,且不会存档到
.gz;旧记录永久丢失 - 若管理员禁用了 apt 日志(
APT::Keep-Downloaded-Packages "false"或清空Apt::History::Enable),这个文件可能为空
非包管理器安装的软件根本没记录
从源码编译、curl | bash、二进制下载解压(如 go、node、rustup)的软件,rpm 和 dpkg 完全不感知。这时候只能退到文件系统层面:
- 查主程序二进制的
mtime:stat -c '%y %n' /usr/local/bin/mytool - 查安装目录创建时间:
stat -c '%w %n' /opt/myapp(注意:%w是 birth time,ext4/xfs 需较新内核才支持,多数情况下 fallback 到%x即 access time) - 翻
/var/log/installer/syslog(Ubuntu)或/root/install.log(某些 CentOS 安装镜像)——但这些文件只在图形/文本安装流程中生成,无人值守部署常为空
真正容易被忽略的是:没有统一机制能跨发行版、跨安装方式还原“具体某软件的原始安装时间”。包管理器日志只是快照,文件时间戳易被覆盖,而 birth time 在大多数生产环境里不可靠或不可读。











