I know that the command to update the repository lists is apt-get update.

How to check if it has been executed today or in the last 24 hours?

I do not known if should check some file timestamp. Or issue another apt command. Or use dpkg utility.

Could not find something useful at man pages.

up vote 13 down vote accepted

You can check your command history in terminal :

history | grep 'apt update'

To check it by time :

HISTTIMEFORMAT="%d/%m/%y %T " history | grep 'apt update'

enter image description here

Hope it helps !

  • 1
    It is history | grep 'apt-get update' :) – Lucio Jan 24 '14 at 19:47
  • 5
    @souravc is right. This won't work on its own. If the HISTTIMEFORMAT is not set in .bashrc then this command will only have correct timestamps for the commands which were actually executed from the current shell session. For all the other commands which is not from the current session the timestamp will only show the modification timestamp of the ~/.bash_history file. It can't show the timestamps for commands from other sessions as those timestamps are not saved in the ~/.bash_history file. It can show timestamps for the current session because those stamps are still in the memory. – falconer Jan 25 '14 at 12:25
  • 5
    This does not always work. E.g. when some other user ran apt or when your .bash_history has been trimmed. – OrangeTux Jan 26 '14 at 20:11
  • 2
    This is a terribly wrong answer. It doesn't account for unattended upgrades, plus if you're someone like me who always has 4-5 terminals open, the history only gets saved when they exit (by default), so you would have to check all of them. – hackel May 16 '17 at 17:26
  • 2
    Echoing what everyone has already said, that won't work if apt has been updated by a script, if you're not looking at the right history, if the history has been trimmed, or if another user has done the update. That's really not reliable enough to solve the general case. – zneak Sep 25 '17 at 18:35

Check the time stamp of /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

Here the time is Jan 25 01:41 when apt-get last executed. To get the time only, use the following command in terminal,

$ ls -l /var/lib/apt/periodic/update-success-stamp | awk '{print $6" "$7" "$8}'
Jan 25 01:41

It is the best place to check the last update time. If you found /var/lib/apt/periodic/ to be empty you can try,

ls -l /var/log/apt/history.log

Update

It is found that due to some reasons above files update-success-stamp or history.log remain unavailable in some systems. There is a new proposal from derobert to look into the file /var/cache/apt/pkgcache.bin.

pkgcache.bin is Apt's memory mapped package cache location. It get renewed after each update. So it is the perfect candidate to know the last time when apt was updated.

One can use the following command to know the exact time,

ls -l /var/cache/apt/pkgcache.bin | cut -d' ' -f6,7,8

or

stat /var/cache/apt/pkgcache.bin
  • my /var/lib/apt/periodic/ directory is empty – virtualxtc Jan 25 '14 at 8:08
  • My directory is also empty. Debian 7.3 wheezy. – cavila Jan 25 '14 at 11:53
  • 5
    A better backup location would be /var/cache/apt/pkgcache.bin. Also, please don't parse the output of ls; use stat instead. Keep in mind that ls output depends on locale, depends on age of file, etc. (Also, I think you only get the first file you suggest if you have update-notifier-common installed) – derobert Mar 12 '14 at 16:12
  • 1
    It seems /var/cache/apt/pkgcache.bin is also touched on package installation, so it's not a reliable way to check for the last apt-get update run. – GnP Dec 2 '16 at 20:18
  • 3
    ...and I just discovered that a Debian 8 system where apt-get clean has been run recently will have no /var/cache/apt/pkgcache.bin. I'm going to try using the mtime from /var/lib/apt/lists instead, since that seems to be the raw, non-cached data which apt-get update actually manipulates. – ssokolow Feb 22 '17 at 10:12

I use /var/cache/apt to determine if I need to run apt-get update. By default, if the difference between the current time and cache time of /var/cache/apt is less than 24 hr, I don't need to run apt-get update. The default update interval can be overridden by passing a number to function 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
}

Sample Output:

<root@ubuntu><~/ubuntu-cookbooks/libraries>
# runAptGetUpdate 

Skip apt-get update because its last run was '0h 37m 43s' ago

I extracted these functions from my personal github: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash

  • nice. made a sanitised version here termbin.com/jq3w (doesn't leave turds in your env which might cause name space issues) – unsynchronized Jun 3 '16 at 5:20

You may also interested about the file:

/var/log/apt/term.log

Open it with less or cat as root.

  • This is a sensible place to check for logs of actions apt has performed on the package database, but afaik the poster wants to know about apt-get update, and that is obviously not logged. – Faheem Mitha Mar 12 '14 at 16:00

I use this command

stat /var/cache/apt/ | grep -i -e access -e modify

to show last time it was accessed ie. running 'apt-get update' also last time it was actually updated.

note if the times are different there may not have been an update available. Since I have my updates and upgrades running by crontab at specific times I can tell if my updates ran or not.

Combining @ssokolow's last comment with the answer from here, this command will run apt-get update if it hasn't run in the last 7 days:

[ -z "$(find -H /var/lib/apt/lists -maxdepth 0 -mtime -7)" ] && sudo apt-get update

Explanation:

  • -mtime -7 finds files that have a change time in the last 7 days. You can use -mmin if you care about shorter times.
  • -maxdepth 0 ensures find won't go into the contents of the directory.
  • -H dereferences /var/lib/apt/lists if it's a soft link
  • If for some reason find fails, then the command would run. This seems to me like the safe default. If you want to flip the default, use -n in the test and -mtime +7 in the find command.

I just posted an answer to this question on following topic

Where can I look up my update history?

The answer may be less appropriate for this topic, as it specifically looks for "apt-get upgrade". Here's sample output.

xenial% 9: ./linuxpatchdate 
2016-07-19 54
2017-02-24 363
2017-03-08 7
2017-03-09 2

See the other topic for source code and more explanation.

  • It looked to me like your code looked for upgrade, not update. For example, I just ran "apt-get update" (the subject of this question) on my Ubuntu 16.04 and not one iota of change appears in /var/log/apt, implying that scanning anything in that directory will be of no use in answer this particular question. – Ron Burk May 1 '17 at 20:56
  • 1
    You're totally right. Thanks for pointing that out. I've changed my answer to reflect that. We were looking for the last date updates were applied to the machine, rather than updates being just downloaded. – JsinJ May 4 '17 at 4:40

Your Answer

 

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.