function getLastAptGetUpdate()
{
local aptDate="$(stat -c %Y '/var/cache/apt')"
local nowDate="$(date +'%s')"
echo $((nowDate - aptDate))
}
function runAptGetUpdate()
{
local updateInterval="${1}"
local lastAptGetUpdate="$(getLastAptGetUpdate)"
if [[ "$(isEmptyString "${updateInterval}")" = 'true' ]]
then
# Default To 24 hours
updateInterval="$((24 * 60 * 60))"
fi
if [[ "${lastAptGetUpdate}" -gt "${updateInterval}" ]]
then
info "apt-get update"
apt-get update -m
else
local lastUpdate="$(date -u -d @"${lastAptGetUpdate}" +'%-Hh %-Mm %-Ss')"
info "\nSkip apt-get update because its last run was '${lastUpdate}' ago"
fi
}
样本输出:
<root@ubuntu><~/ubuntu-cookbooks/libraries>
# runAptGetUpdate
Skip apt-get update because its last run was '0h 37m 43s' ago
至少在 Ubuntu 系统中有一个文件 /etc/apt/apt.conf.d/15update-stamp 包含:
所以看看你是否有 /var/lib/apt/periodic/update-success-stamp 如果你有,你可以使用
命令获取最后一次“apt-get update”调用的时间。
如果您的系统没有该 apt 配置文件,您可以随时添加它。
An
apt-get update
可能不会创建或更新文件,它会更新缓存目录,因此我们可以使用它来获取上次apt-get update
运行时的时间戳:您可以检查 /var/lib/apt/lists 中文件的访问时间,这些文件在您运行 apt-get update 时更新。如果 apt-get update 是用 sudo 运行的,你应该在 /var/log/auth.log 中记录一行。
不要离开锁定文件。锁定文件不可靠,随着时间的推移,它们往往会随着新的 Linux 版本而移动,并且许多程序在使用完锁定文件后会清理(删除)锁定文件。
以下命令将为您提供所需的内容。
这是两个命令合二为一。第一个命令的结果通过管道 (|) 符号过滤到第二个。
在第一个命令中,我使用“ls”列出 /var/log/apt 目录的文件内容,该目录是存储 apt-get 的访问历史日志的目录。“-lt”部分实际上是两个开关。第一个“l”开关告诉“ls”每行列出一个文件的详细信息。第二个“t”开关告诉“ls”按日期和时间排序。“--time-style”强制日期时间以“YYYY-MM-DD HH:MM”格式显示。
在命令的“grep”部分,“-o”开关告诉 grep 只显示每行中与正则表达式完全匹配的部分。我在这里使用的正则表达式检测“ls”命令中指定格式的日期时间。您还会注意到“grep”命令的最后一个真正的小魔法,即紧跟其后的数字“1”的“-m”开关。这告诉“grep”在找到第一个匹配项后停止寻找匹配项。
因此,总而言之,我们列出了 apt 日志文件的详细信息,以便我们可以看到最后修改的日期,然后我们按日期排序并告诉 grep 将第一个日期从顶部拉出,然后返回。那是 apt-get 运行的最后日期。
然而,暂时扮演魔鬼的拥护者,对于像 Ubuntu 这样的 Debian 平台来说,将 apt-get 安排为定期运行的作业是很常见的。如果您正在寻找 apt-get 执行的另一端的人,您实际上可能会找到一台机器。您始终可以将访问日志与 apt 日志进行匹配,以查看是否有任何时间戳重合。还可以在一定程度上查看用户的命令历史记录。
希望这可以帮助!
我怀疑您可以检查文件 /var/cache/apt 上的最后修改时间,以确定最后一次更新应用于包列表的时间。
我刚刚对此进行了测试,并连续运行了两次“sudo apt-get update”,并且日期与当前值没有变化,但我怀疑这是因为没有要应用的新更新,并且缓存已启动迄今为止。
如果在最后一天没有运行更新,这是一个简单的单行程序来运行更新。
它查找更新成功标记文件,该文件在一天多前被修改。如果它找到正确年龄的文件,则运行更新。注意:必须存在 update-success-stamp 文件才能使其正常工作。
Synaptic 记录历史文件 (>File > History),aptitude 在 /var/log/aptitude 中记录历史记录,在 /var/lib/aptitude/pkgstates 中记录自动安装的软件包,因此您可以检查这些以了解最新活动。
我
/var/cache/apt
用来确定是否需要运行apt-get update
. 默认情况下,如果当前时间和缓存时间的/var/cache/apt
差小于24小时,我不需要运行apt-get update
. 可以通过将数字传递给函数来覆盖默认更新间隔runAptGetUpdate()
样本输出:
我从我的个人 github 中提取了这些函数:https ://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash
正如 fcm 在评论中所述,对 /var/lib/apt/lists/partial 进行统计。这是唯一对我有用的答案。