Answers:
您可以在终端中查看命令历史记录:
history | grep 'apt update'
要按时间检查:
HISTTIMEFORMAT="%d/%m/%y %T " history | grep '[a]pt update'
([a]
正则表达式的部分仅与字母匹配,a
但是在历史记录中grepping时会导致其自身不匹配。)
希望能帮助到你 !
HISTTIMEFORMAT
未设置,.bashrc
则此命令将仅具有从当前Shell会话实际执行的命令的正确时间戳。对于并非来自当前会话的所有其他命令,时间戳将仅显示~/.bash_history
文件的修改时间戳。它无法显示来自其他会话的命令的时间戳,因为这些时间戳未保存在~/.bash_history
文件中。它可以显示当前会话的时间戳,因为这些标记仍在内存中。
apt
或.bash_history
修剪时。
检查的时间戳/var/lib/apt/periodic/update-success-stamp
。
$ ls -l /var/lib/apt/periodic/update-success-stamp
-rw-r--r-- 1 root root 0 Jan 25 01:41 /var/lib/apt/periodic/update-success-stamp
在这里,时间是Jan 25 01:41
在apt-get
最后执行。仅获取时间,请在终端中使用以下命令,
$ ls -l /var/lib/apt/periodic/update-success-stamp | awk '{print $6" "$7" "$8}'
Jan 25 01:41
这是检查上次更新时间的最佳位置。如果发现/var/lib/apt/periodic/
自己空着,可以尝试,
ls -l /var/log/apt/history.log
更新资料
发现由于某些原因上述文件update-success-stamp
或history.log
在某些系统中仍然不可用。有一个新的建议,从derobert 寻找到该文件/var/cache/apt/pkgcache.bin
。
pkgcache.bin
是Apt的内存映射包缓存位置。每次更新后都会更新。因此,了解上一次apt
更新时间是理想的选择。
可以使用以下命令知道确切的时间,
ls -l /var/cache/apt/pkgcache.bin | cut -d' ' -f6,7,8
要么
stat /var/cache/apt/pkgcache.bin
/var/lib/apt/periodic/
目录为空
/var/cache/apt/pkgcache.bin
。另外,请不要解析ls
; 的输出。使用stat
代替。请记住,ls
输出取决于语言环境,文件年龄等。(另外,我认为如果安装了update-notifier-common,您只会得到建议的第一个文件)
/var/cache/apt/pkgcache.bin
软件包安装似乎也涉及到这一点,因此这不是检查上次apt-get update
运行的可靠方法。
apt-get clean
最近运行的Debian 8系统将没有/var/cache/apt/pkgcache.bin
。我将尝试使用from中的mtime /var/lib/apt/lists
,因为这似乎是apt-get update
实际操作的原始非缓存数据。
我/var/cache/apt
经常确定是否需要跑步apt-get update
。默认情况下,如果当前时间与的缓存时间之间的/var/cache/apt
差小于24小时,则无需运行apt-get update
。可以通过向函数传递数字来覆盖默认更新间隔runAptGetUpdate()
function trimString()
{
local -r string="${1}"
sed -e 's/^ *//g' -e 's/ *$//g' <<< "${string}"
}
function isEmptyString()
{
local -r string="${1}"
if [[ "$(trimString "${string}")" = '' ]]
then
echo 'true'
else
echo 'false'
fi
}
function info()
{
local -r message="${1}"
echo -e "\033[1;36m${message}\033[0m" 2>&1
}
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
我从我的个人github提取了这些功能:https : //github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash
您可能还对该文件感兴趣:
/var/log/apt/term.log
用更少或猫为根打开它。
apt-get update
显然没有被记录。
将@ssokolow的最新评论与的答案相结合 此处,则该命令将apt-get update
在最近7天未运行时运行:
[ -z "$(find -H /var/lib/apt/lists -maxdepth 0 -mtime -7)" ] && sudo apt-get update
说明:
-mtime -7
查找最近7天内具有更改时间的文件。-mmin
如果您想缩短时间,可以使用。-maxdepth 0
确保查找不会进入目录的内容。 -H
取消引用 /var/lib/apt/lists
如果是软链接,则find
失败,那么该命令将运行。在我看来,这似乎是安全的默认设置。如果要翻转默认值,请-n
在测试和-mtime +7
find命令中使用。我刚刚针对以下主题发布了该问题的答案
答案可能不太适合该主题,因为它专门查找“ apt-get升级”。这是示例输出。
xenial% 9: ./linuxpatchdate
2016-07-19 54
2017-02-24 363
2017-03-08 7
2017-03-09 2
请参阅另一个主题以获取源代码和更多说明。
LAST_UPDATED=$( stat --format="%X" /var/cache/apt/pkgcache.bin )
UNIX_TIME=$( date +%s )
TIME_DIFF=$(( UNIX_TIME - LAST_UPDATED ))
if [[ "${TIME_DIFF}" -gt 43200 ]]
then
# It's been 12 hours since apt-get update was ran.
fi
history | grep 'apt-get update'
:)