Ubuntu 20.04 桌面映像的清单已可用这里。清单中列出的一些软件包在安装过程中被删除。例如,、、ubiquity
和都被删除了(仅举几个例子)。这可以通过查看最开始的 (现在可能已存档)来看到ubiquity-casper
,其中的部分以以下内容开头:ubiquity-frontend-gtk
ubiquity-slideshow-ubuntu
history.log
/var/log/apt/
Start-Date: ...
Requested-By: ubuntu (999)
Purge: ...
运行类似的操作apt policy ubiquity ubiquity-casper ubiquity-frontend-gtk ubiquity-slideshow-ubuntu
将会确认他们的缺席。
但是,这个自动“清除:”删除这些包的过程并没有在最开始记录下来dpkg.log
(涵盖安装过程)。
如果用户运行
zgrep "status installed ubiquity" /var/log/dpkg.log*
结果是这样的(假设相关的归档日志仍然可用),给人的印象是软件包仍然安装着:
$ zgrep "status installed ubiquity" /var/log/dpkg.log*
/var/log/dpkg.log.1:2020-04-23 07:40:38 status installed ubiquity-ubuntu-artwork:all 20.04.15
/var/log/dpkg.log.1:2020-04-23 07:40:43 status installed ubiquity-casper:all 1.445
/var/log/dpkg.log.1:2020-04-23 07:40:43 status installed ubiquity-slideshow-ubuntu:all 160
/var/log/dpkg.log.1:2020-04-23 07:42:15 status installed ubiquity-frontend-gtk:amd64 20.04.15
/var/log/dpkg.log.1:2020-04-23 07:42:18 status installed ubiquity:amd64 20.04.15
$
是不是软件的安装由 处理dpkg
,但这Purge
一步没有由 处理dpkg
?或者 dpkg 日志没有显示这些不同的软件包已被删除(如 apt 的 history.log 中正确显示的那样)的原因是什么?
我以不同的方式问同样的问题。
/var/log/history.log
这是我从安装 Ubuntu 20.04 之日起的带注释的摘录(长行被截断)
2:
。3:
为方便参考,包含了行号:
2: Start-Date: 2020-04-23 07:34:03
3: Commandline: apt-get --yes -oDebug::pkgDepCache::AutoInstall=yes install linux-generic-hwe-20.04 adduser apt apt-utils ...
4: Install: speech-dispatcher-espeak-ng:amd64 (0.9.1-4)Install: speech-dispatcher-espeak-ng:amd64 (0.9.1-4)
5: End-Date: 2020-04-23 07:39:30
7: Start-Date: 2020-04-23 07:39:39
8: Commandline: apt-get --yes -oDebug::pkgDepCache::AutoInstall=yes install lupin-casper ...
9: Install: hunspell-en-gb:amd64 (1:6.4.3-1), cryptsetup-bin:amd64 ...
10: End-Date: 2020-04-23 07:42:21
12: Start-Date: 2020-04-26 16:12:11
13: Requested-By: ubuntu (999)
14: End-Date: 2020-04-26 16:12:12
16: Start-Date: 2020-04-26 16:13:28
17: Requested-By: ubuntu (999)
18: End-Date: 2020-04-26 16:13:29
20: Start-Date: 2020-04-26 16:14:08
21: Requested-By: ubuntu (999)
22: Purge: hunspell-en-gb:amd64 ...
23: End-Date: 2020-04-26 16:19:54
25: Start-Date: 2020-04-26 16:19:57
26: Requested-By: ubuntu (999)
27: End-Date: 2020-04-26 16:19:58
29: Start-Date: 2020-04-26 16:20:00
30: Requested-By: ubuntu (999)
31: End-Date: 2020-04-26 16:20:00
33: Start-Date: 2020-04-26 16:24:48
34: Commandline: aptdaemon role='role-commit-packages' sender=':1.105'
35: Upgrade: netplan.io:amd64 (0.99-0ubuntu1, 0.99-0ubuntu2), distro-info-data:amd64 (0.43ubuntu1, 0.43ubuntu1.1), libnetplan0:amd64 (0.99-0ubuntu1, 0.99-0ubuntu2)
36: End-Date: 2020-04-26 16:25:01
因此,让我们hunspell-en-gb
以无需任何依赖项即可安装的示例为例。(您可能更喜欢使用已在第 22 行从系统中删除的其他语言版本。)
它一直已安装根据第 9 行。稍后,同一个包清除根据第 22 行。
apt policy 2>/dev/null hunspell-en-gb
可以通过运行以下命令来验证我的系统上是否存在此包:
hunspell-en-gb:
Installed: (none)
Candidate: 1:6.4.3-1
我希望查询/var/log/dpkg.log.1
(或适当的存档日志)能够反映这一点。
$ zgrep hunspell-en-gb /var/log/dpkg*
dpkg.log.1:2020-04-23 07:39:54 install hunspell-en-gb:all <none> 1:6.4.3-1
dpkg.log.1:2020-04-23 07:39:54 status half-installed hunspell-en-gb:all 1:6.4.3-1
dpkg.log.1:2020-04-23 07:39:54 status unpacked hunspell-en-gb:all 1:6.4.3-1
dpkg.log.1:2020-04-23 07:40:43 configure hunspell-en-gb:all 1:6.4.3-1 <none>
dpkg.log.1:2020-04-23 07:40:43 status unpacked hunspell-en-gb:all 1:6.4.3-1
dpkg.log.1:2020-04-23 07:40:43 status half-configured hunspell-en-gb:all 1:6.4.3-1
dpkg.log.1:2020-04-23 07:40:43 status installed hunspell-en-gb:all 1:6.4.3-1
$
如果使用 成功删除了软件包,则通常不会出现“状态未安装”的行sudo apt purge ...
。您可以检查任何第 22 行列出的包。
通常情况下,
- 如果一个软件包存在于一个系统上并且使用 安装sudo apt install
,则 dpkg 日志会在初始安装时/var/log
显示该软件包一次,然后在该软件包的每次更新时重复显示 - 如果使用 删除该软件包,则 dkpg 日志通常会反映该情况(每次删除该软件包时)。status:installed
sudo apt purge
status not-installed
为了确认,现在运行,sudo apt install hunspell-en-gb
然后运行sudo apt purge hunspell-en-gb
。然后再次查询 dpkg 日志:
$ zgrep -E “状态(未)?安装 hunspell-en-gb:”/var/log/dpkg.log* | sed 's/:/: /' | sort -k2,3 -r |列 -t /var/log/dpkg.log: 2020-05-20 15:36:09 状态未安装 hunspell-en-gb:all /var/log/dpkg.log: 2020-05-20 15:36:08 状态已安装 hunspell-en-gb:all 1:6.4.3-1 /var/log/dpkg.log: 2020-05-20 15:35:51 状态已安装 hunspell-en-gb:all 1:6.4.3-1 /var/log/dpkg.log.1: 2020-04-23 07:40:43 状态已安装 hunspell-en-gb:all 1:6.4.3-1 $
请注意,第一行(由于排序)有status not-installed
。这正是安装过程中删除的软件包的 dpkg 日志中缺少的内容。这是为什么呢?
答案1
对我来说 - 这样做是为了数据安全,并且为了在安装后出现问题时获得一些线索。
从技术上讲,这种清除或移除是通过package.prerm
或package.postrm
维护脚本位于/var/lib/dpkg/
(如果包当前已安装,则位于此处)。
例如我sysstat
的系统上安装了包,它的sysstat.postrm
脚本包含行用于/var/log/sysstat
在清除时删除其日志。
然后让我们分析一下您帖子中的包:
ubiquity
,ubiquity-frontend-gtk
-不拥有中的任何文件/var/log
,不具有文件/var/log
中提及;*.*rm
ubiquity-casper
-不拥有中的任何文件/var/log
,不具有*.*rm
文件;ubiquity-slideshow-ubuntu
-不拥有中的任何文件/var/log
,不具有*.*rm
文件。
因此这些包没有用于删除日志文件的删除后指令。