Bagaimana cara mengetahui `update apt-get` terakhir kali dilakukan?

24

Saya tahu bahwa perintah untuk memperbarui daftar repositori adalah apt-get update.

Bagaimana cara memeriksa apakah telah dieksekusi hari ini atau dalam 24 jam terakhir?

Saya tidak tahu apakah harus memeriksa stempel waktu beberapa file. Atau berikan perintah apt lainnya. Atau gunakan utilitas dpkg.

Tidak dapat menemukan sesuatu yang berguna di halaman manual.

cavila
sumber

Jawaban:

15

Anda dapat memeriksa riwayat perintah di terminal:

history | grep 'apt update'

Untuk memeriksanya berdasarkan waktu:

HISTTIMEFORMAT="%d/%m/%y %T " history | grep '[a]pt update'

(Bagian [a]dari ekspresi reguler hanya cocok dengan huruf atetapi memiliki efek untuk tidak cocok dengan dirinya sendiri ketika mengambil dalam sejarah.)

masukkan deskripsi gambar di sini

Semoga ini bisa membantu!

nux
sumber
2
Ini history | grep 'apt-get update':)
Lucio
7
@souravc benar. Ini tidak akan bekerja sendiri. Jika HISTTIMEFORMATtidak diatur .bashrcmaka perintah ini hanya akan memiliki cap waktu yang benar untuk perintah yang sebenarnya dieksekusi dari sesi shell saat ini . Untuk semua perintah lain yang bukan dari sesi saat ini cap waktu hanya akan menampilkan timestamp modifikasi ~/.bash_historyfile. Itu tidak dapat menampilkan stempel waktu untuk perintah dari sesi lain karena stempel waktu itu tidak disimpan dalam ~/.bash_historyfile. Itu dapat menunjukkan cap waktu untuk sesi saat ini karena perangko itu masih ada dalam memori.
Falconer
7
Ini tidak selalu berhasil. Misalnya ketika beberapa pengguna lain berlari aptatau ketika Anda .bash_historytelah dipangkas.
OrangeTux
4
Ini adalah jawaban yang sangat salah. Itu tidak memperhitungkan peningkatan tanpa pengawasan, ditambah jika Anda seseorang seperti saya yang selalu memiliki 4-5 terminal terbuka, riwayat hanya akan disimpan ketika mereka keluar (secara default), jadi Anda harus memeriksa semuanya.
retas
3
Menggemakan apa yang telah dikatakan semua orang, itu tidak akan berfungsi jika apt telah diperbarui oleh skrip, jika Anda tidak melihat riwayat yang tepat, jika riwayat telah dipangkas, atau jika pengguna lain telah melakukan pembaruan. Itu benar-benar tidak cukup dapat diandalkan untuk menyelesaikan kasus umum.
zneak
54

Periksa stempel waktu /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

Di sini waktu Jan 25 01:41ketika apt-getterakhir dieksekusi. Untuk mendapatkan waktu saja, gunakan perintah berikut di terminal,

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

Ini adalah tempat terbaik untuk memeriksa waktu pembaruan terakhir. Jika ternyata /var/lib/apt/periodic/kosong, Anda dapat mencoba,

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

Memperbarui

Ditemukan bahwa karena beberapa alasan file di atas update-success-stampatau history.logtetap tidak tersedia di beberapa sistem. Ada proposal baru dari derobert untuk melihat ke dalam file /var/cache/apt/pkgcache.bin.

pkgcache.binadalah lokasi cache paket yang dipetakan memori Apt. Itu bisa diperbarui setelah setiap pembaruan. Jadi itu adalah kandidat yang sempurna untuk mengetahui kapan terakhir kali aptdiperbarui.

Seseorang dapat menggunakan perintah berikut untuk mengetahui waktu yang tepat,

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

atau

stat /var/cache/apt/pkgcache.bin
souravc
sumber
/var/lib/apt/periodic/direktori saya kosong
virtualxtc
Direktori saya juga kosong. Debian 7.3 mengi.
cavila
6
Lokasi cadangan yang lebih baik /var/cache/apt/pkgcache.bin. Juga, tolong jangan menguraikan output dari ls; gunakan statsaja. Perlu diingat bahwa lsoutput tergantung pada lokal, tergantung pada usia file, dll. (Juga, saya pikir Anda hanya mendapatkan file pertama yang Anda sarankan jika Anda memiliki pembaruan-notifier-umum diinstal)
derobert
2
Tampaknya /var/cache/apt/pkgcache.binjuga tersentuh pada instalasi paket, jadi ini bukan cara yang dapat diandalkan untuk memeriksa apt-get updatemenjalankan terakhir .
GnP
3
... dan saya baru saja menemukan bahwa sistem Debian 8 di mana apt-get cleantelah dijalankan baru-baru ini tidak akan memiliki /var/cache/apt/pkgcache.bin. Saya akan mencoba menggunakan mtime dari /var/lib/apt/listsgantinya, karena itu tampaknya menjadi data mentah, non-cache yang apt-get updatebenar-benar memanipulasi.
ssokolow
6

Saya gunakan /var/cache/aptuntuk menentukan apakah saya perlu menjalankan apt-get update. Secara default, jika perbedaan antara waktu saat ini dan waktu cache /var/cache/aptkurang dari 24 jam, saya tidak perlu menjalankan apt-get update. Interval pembaruan default dapat ditimpa dengan mengirimkan angka ke fungsirunAptGetUpdate()

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
}

Output sampel:

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

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

Saya mengekstrak fungsi-fungsi ini dari github pribadi saya: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash

Nam Nguyen
sumber
2

Anda mungkin juga tertarik dengan file tersebut:

/var/log/apt/term.log

Buka dengan kurang atau kucing sebagai root .

Abdelraouf Adjal
sumber
Ini adalah tempat yang masuk akal untuk memeriksa log tindakan yang telah dilakukan pada paket database, tetapi afaik poster ingin tahu tentang apt-get update, dan itu jelas tidak dicatat.
Faheem Mitha
1

Saya menggunakan perintah ini

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

untuk menunjukkan terakhir kali diakses yaitu. menjalankan 'apt-get update' juga terakhir kali sebenarnya diperbarui.

perhatikan jika waktunya berbeda mungkin tidak ada pembaruan yang tersedia. Karena saya memiliki pembaruan dan peningkatan yang dijalankan oleh crontab pada waktu tertentu, saya dapat mengetahui apakah pembaruan saya berjalan atau tidak.

SCBB
sumber
1

Menggabungkan komentar terakhir @ ssokolow dengan jawaban dari sini , perintah ini akan berjalan apt-get updatejika belum berjalan dalam 7 hari terakhir:

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

Penjelasan:

  • -mtime -7menemukan file yang memiliki perubahan waktu dalam 7 hari terakhir. Anda dapat menggunakan -mminjika Anda peduli dengan waktu yang lebih singkat.
  • -maxdepth 0 memastikan find tidak akan masuk ke isi direktori.
  • -Hreferensi /var/lib/apt/listsjika itu tautan lunak
  • Jika karena alasan tertentu findgagal, maka perintah itu akan berjalan. Bagi saya ini seperti default yang aman. Jika Anda ingin membalik default, gunakan -ndalam tes dan -mtime +7dalam perintah find.
itsadok
sumber
0

Saya baru saja mengirim jawaban untuk pertanyaan ini pada topik berikut

Di mana saya dapat mencari riwayat pembaruan saya?

Jawabannya mungkin kurang sesuai untuk topik ini, karena secara khusus mencari "peningkatan apt-get". Ini contoh output.

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

Lihat topik lain untuk kode sumber dan penjelasan lebih lanjut.

JsinJ
sumber
Bagi saya itu seperti kode Anda mencari peningkatan, bukan pembaruan. Sebagai contoh, saya hanya menjalankan "apt-get update" (subjek pertanyaan ini) pada Ubuntu 16.04 saya dan tidak ada sedikit perubahan muncul di / var / log / apt, menyiratkan bahwa pemindaian apa pun dalam direktori itu tidak akan ada gunanya dalam menjawab pertanyaan khusus ini.
Ron Burk
1
Anda sepenuhnya benar. Terima kasih telah menunjukkannya. Saya telah mengubah jawaban saya untuk mencerminkan hal itu. Kami mencari pembaruan tanggal terakhir yang diterapkan pada mesin, alih-alih pembaruan yang baru saja diunduh.
JsinJ
0
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
mikeytown2
sumber