En son ne zaman 'apt-get update' işlemi yapıldı biliyorsunuz?


24

Depo listelerini güncelleme komutunun olduğunu biliyorum apt-get update.

Bugün veya son 24 saat içinde yürütülmüş olup olmadığı nasıl kontrol edilir?

Bazı dosya zaman damgasını kontrol etmeli mi bilmiyorum. Veya başka bir apt komutu verin. Veya dpkg yardımcı programını kullanın.

Man sayfalarında faydalı bir şey bulunamadı.

Yanıtlar:


15

Komut geçmişinizi terminalden kontrol edebilirsiniz:

history | grep 'apt update'

Zamana göre kontrol etmek için:

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

( [a]Normal ifadenin bir kısmı yalnızca harfle eşleşir, aancak tarihe geçerken kendisiyle eşleşmeme etkisine sahiptir.)

görüntü tanımını buraya girin

Umarım yardımcı olur !


2
Bu history | grep 'apt-get update':)
Lucio

7
@souravc haklı. Bu kendi başına çalışmaz. Eğer HISTTIMEFORMATiçinde ayarlı değil .bashrco zaman bu komut sadece aslında dan infaz edildi komutları için doğru zaman damgalarını olacak anki kabuk oturumunun . Geçerli oturumdan olmayan diğer tüm komutlar için zaman damgası yalnızca ~/.bash_historydosyanın değiştirme zaman damgasını gösterir . Diğer oturumlardan gelen komutların zaman damgalarını bu zaman damgaları ~/.bash_historydosyaya kaydedilmediğinden gösteremez . Geçerli oturum için zaman damgalarını gösterebilir, çünkü bu pullar hala bellektedir.
Şahin

7
Bu her zaman işe yaramaz. Örneğin, başka bir kullanıcı kaçtığında aptveya .bash_historykestirdiğinizde.
OrangeTux

4
Bu çok yanlış bir cevap. Katılımsız yükseltmeleri hesaba katmaz, artı her zaman 4-5 terminali açık olan benim gibi biriyseniz, tarih yalnızca çıktıklarında kaydedilir (varsayılan olarak), bu nedenle hepsini kontrol etmeniz gerekir.
Hackel

3
Herkesin söylediklerini yinelemek, apt bir komut dosyası tarafından güncellendiyse, doğru tarihe bakmıyorsanız, geçmiş kesilmişse veya başka bir kullanıcı güncellemeyi yaptıysa işe yaramaz. Bu genel davayı çözecek kadar güvenilir değil.
zneak

54

Zaman damgasını kontrol edin /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

İşte zamanı Jan 25 01:41ne zaman apt-getson idam. Sadece zaman kazanmak için terminalde aşağıdaki komutu kullanın,

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

Son güncelleme zamanını kontrol etmek için en iyi yer. /var/lib/apt/periodic/Boş bulduysanız deneyebilirsiniz,

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

Güncelleştirme

Yukarıdaki dosyalarda bazı nedenlerden dolayı update-success-stampveya history.logbazı sistemlerde kullanılamaz kaldığı tespit edilmiştir. Yeni Orada öneri dan derobert dosyasına bakmak için /var/cache/apt/pkgcache.bin.

pkgcache.binApt'nin bellek eşlemeli paket önbellek yeri. Her güncellemeden sonra yenilenir. Bu yüzden en son ne zaman aptgüncellendiğini bilmek mükemmel bir aday .

Kişi tam zamanı bilmek için aşağıdaki komutu kullanabilir,

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

veya

stat /var/cache/apt/pkgcache.bin

Benim /var/lib/apt/periodic/dizin boş
virtualxtc

Dizinim de boş. Debian 7.3 hırıltılı.
cavila,

6
Daha iyi bir yedekleme konumu olacaktır /var/cache/apt/pkgcache.bin. Ayrıca, lütfen çıktısını ayrıştırmayın ls; kullanmak statyerine. Unutmayın lsçıkış yerel ayara bağlıdır, dosyanın yaşı, vb (Ayrıca, güncelleme-notifier-ortak yüklü olup olmadığını yalnızca önermek ilk dosyayı almak düşünüyorum) bağlıdır
derobert

2
/var/cache/apt/pkgcache.binPaket kurulumuna da değiniyor gibi gözüküyor , bu nedenle son apt-get updateçalışmayı kontrol etmek için güvenilir bir yol değil .
GnP

3
... ve az apt-get cleanönce yeni çalıştırılan bir Debian 8 sisteminin de olmayacağını öğrendim /var/cache/apt/pkgcache.bin. Ben mtime kullanarak /var/lib/apt/listsyerine denemek için gidiyorum , çünkü bu apt-get updategerçekten manipüle ham, önbelleğe alınmamış veriler gibi görünüyor .
ssokolow

6

/var/cache/aptKoşmam gerekip gerekmediğini belirlemek için kullanıyorum apt-get update. Varsayılan olarak, geçerli saat ile önbellek süresi arasındaki fark /var/cache/apt24 saatten azsa, çalıştırmam gerekmez apt-get update. Varsayılan güncelleme aralığı, bir sayı fonksiyona geçirilerek geçersiz kılınabilirrunAptGetUpdate()

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
}

Örnek çıktı:

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

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

Bu fonksiyonları kişisel github'umdan aldım: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/libraries/util.bash


2

Ayrıca, dosyayla da ilgilenebilirsiniz:

/var/log/apt/term.log

Kök olarak daha az veya kedi ile açın .


Burası paket veritabanında apt eylemlerinin gerçekleştirdiği eylem kayıtlarını kontrol etmek için mantıklı bir yerdir, ancak posterin bilmek istediği apt-get updateve açıkça kaydedilmediği açıktır.
Faheem Mitha

1

Bu komutu kullanıyorum

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

yani erişildiği son zamanı göstermek için. 'apt-get update' (son güncelleme) 'de çalışıyor.

sürelerin farklı olması durumunda mevcut bir güncelleme olamayabileceğini unutmayın. Güncellemelerim ve güncellemelerim belirli zamanlarda crontab tarafından çalıştığım için güncellemelerimin çalışıp çalışmadığını söyleyebilirim.


1

@ Ssokolow'un son yorumunu buradan gelen cevapla birleştirerek , bu komut apt-get updateson 7 gün içinde çalışmadıysa çalışacaktır:

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

Açıklama:

  • -mtime -7Son 7 gün içerisinde değişiklik süresi olan dosyaları bulur. Daha -mminkısa sürelere önem veriyorsanız kullanabilirsiniz .
  • -maxdepth 0 Bulunmanın dizinin içeriğine girmemesini sağlar.
  • -H/var/lib/apt/listsyumuşak bir bağlantı varsa başvurular
  • Herhangi bir nedenden dolayı findbaşarısız olursa, o zaman komut çalışır. Bu bana güvenli varsayılan gibi görünüyor. Varsayılanı çevirmek istiyorsanız -n, testte ve -mtime +7find komutunda kullanın.

0

Bu konuyu az önce aşağıdaki konuyu yanıtladım.

Güncelleme geçmişime nereden bakabilirim?

Cevap, özellikle "apt-get upgrade" ifadesini aradığı için bu konu için daha az uygun olabilir. İşte örnek çıktı.

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

Kaynak kodu ve daha fazla açıklama için diğer konuya bakın.


Güncelleme değil, kodunuzun yükseltme için baktığı gibi bana baktı. Örneğin, Ubuntu 16.04'te "apt-get update" (bu sorunun konusu) kullandım ve / var / log / apt'de bir değişiklik iota görünmüyor, bu dizinde herhangi bir şey taramanın faydası olmayacağını ima ediyordum. cevap olarak bu özel soru.
Ron Burk

1
Tamamen haklısın. Gösterdiğin için teşekkürler. Cevabımı bunu yansıtacak şekilde değiştirdim. Makineye sadece güncellemeler indirilmek yerine güncellemeler uygulandı.
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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.