Ubuntu: How to know last time `apt-get update` was executed?



Question:

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.


Solution:1

You can check your command history in terminal :

history | grep 'apt-get update'  

To check it by time :

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

enter image description here

Hope it helps !


Solution:2

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  


Solution:3

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


Solution:4

You may also interested about the file:

/var/log/apt/term.log  

Open it with less or cat as root.


Solution:5

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.


Solution:6

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.


Solution:7

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.


Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Previous
Next Post »