अंतिम बार `apt-get update` को कैसे जानें?


24

मुझे पता है कि रिपॉजिटरी लिस्ट को अपडेट करने का कमांड है apt-get update

अगर यह आज या पिछले 24 घंटों में निष्पादित किया गया है तो कैसे जांचें?

मुझे नहीं पता कि कुछ फाइल टाइमस्टैम्प की जाँच करनी चाहिए। या कोई अन्य उपयुक्त आदेश जारी करें। या dpkg उपयोगिता का उपयोग करें।

मैन पेजों पर कुछ उपयोगी नहीं मिल सका।

जवाबों:


15

आप टर्मिनल में अपना कमांड इतिहास देख सकते हैं:

history | grep 'apt update'

इसे समय से जाँचने के लिए:

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

( [a]नियमित अभिव्यक्ति का हिस्सा केवल पत्र से मेल खाता है, aलेकिन इतिहास में ग्रिप करते समय खुद से मेल नहीं खाने का प्रभाव है।)

यहाँ छवि विवरण दर्ज करें

आशा करता हूँ की ये काम करेगा !


2
यह है history | grep 'apt-get update':)
लुसियो

7
@souravc सही है। यह अपने आप काम नहीं करेगा। यदि HISTTIMEFORMATयह सेट नहीं है, .bashrcतो यह कमांड केवल उन कमांड के लिए सही टाइमस्टैम्प होगा, जो वास्तव में वर्तमान शेल सत्र से निष्पादित किए गए थे । अन्य सभी आदेशों के लिए जो वर्तमान सत्र से नहीं है, टाइमस्टैम्प केवल ~/.bash_historyफ़ाइल का संशोधन टाइमस्टैम्प दिखाएगा । यह अन्य सत्रों से कमांड के लिए टाइमस्टैम्प नहीं दिखा सकता है क्योंकि ~/.bash_historyफ़ाइल में उन टाइमस्टैम्प को सहेजा नहीं गया है। यह वर्तमान सत्र के लिए टाइमस्टैम्प दिखा सकता है क्योंकि वे स्टैम्प अभी भी मेमोरी में हैं।
बाज़

7
यह हमेशा काम नहीं करता है। जैसे जब कोई दूसरा उपयोगकर्ता चला aptया जब आपकी .bash_historyछंटनी की गई हो।
ऑरेंजट्यूक्स

4
यह बहुत गलत जवाब है। यह अप्राप्य उन्नयन के लिए जिम्मेदार नहीं है, साथ ही यदि आप मेरे जैसे कोई हैं, जिनके पास हमेशा 4-5 टर्मिनल खुले हैं, तो इतिहास केवल तभी बचता है जब वे बाहर निकलते हैं (डिफ़ॉल्ट रूप से), इसलिए आपको उन सभी की जांच करनी होगी।
हैकेल

3
यह सुनकर कि हर कोई पहले ही कह चुका है, कि यदि स्क्रिप्ट द्वारा अद्यतन नहीं किया गया है, यदि आप सही इतिहास को नहीं देख रहे हैं, यदि इतिहास ट्रिम कर दिया गया है, या यदि किसी अन्य उपयोगकर्ता ने अपडेट किया है तो यह काम नहीं करेगा। यह वास्तव में सामान्य मामले को हल करने के लिए पर्याप्त विश्वसनीय नहीं है।
zneak

54

के समय टिकट की जाँच करें /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अद्यतन किया गया था।

एक सही समय जानने के लिए निम्नलिखित कमांड का उपयोग कर सकते हैं,

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

या

stat /var/cache/apt/pkgcache.bin

मेरी /var/lib/apt/periodic/निर्देशिका खाली है
virtualxtc

मेरी निर्देशिका भी खाली है। डेबियन 7.3 मट्ठा।
कैविला

6
एक बेहतर बैकअप स्थान होगा /var/cache/apt/pkgcache.bin। इसके अलावा, कृपया आउटपुट को पार्स न करें ls; statइसके बजाय का उपयोग करें । ध्यान रखें कि lsआउटपुट लोकेल पर निर्भर करता है, फ़ाइल की उम्र पर निर्भर करता है, आदि (इसके अलावा, मुझे लगता है कि आपको केवल पहली फ़ाइल मिलती है जो आपको सुझाव देती है कि आपके पास अपडेट-नोटिफ़ायर-सामान्य स्थापित है)
derobert

2
ऐसा लगता /var/cache/apt/pkgcache.binहै कि इसे पैकेज इंस्टॉलेशन पर भी छुआ गया है, इसलिए यह अंतिम apt-get updateरन के लिए जांचने का एक विश्वसनीय तरीका नहीं है ।
GnP

3
... और मुझे पता चला कि apt-get cleanहाल ही में चलाए गए एक डेबियन 8 सिस्टम में कोई नहीं होगा /var/cache/apt/pkgcache.bin। मैं /var/lib/apt/listsइसके बजाय माइम का उपयोग करने की कोशिश करने जा रहा हूं , क्योंकि यह कच्चा, गैर-कैश्ड डेटा प्रतीत होता है जो apt-get updateवास्तव में हेरफेर करता है।
ssokolow

6

मुझे /var/cache/aptयह निर्धारित करने के लिए उपयोग किया जाता है कि मुझे चलाने की आवश्यकता है या नहीं apt-get update। डिफ़ॉल्ट रूप से, यदि वर्तमान समय और कैश समय के बीच का अंतर /var/cache/apt24 घंटे से कम है, तो मुझे चलाने की आवश्यकता नहीं है 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

मैंने अपने व्यक्तिगत गिथब से ये कार्य निकाले: https://github.com/gdbtek/ubuntu-cookbooks/blob/master/lbooks/util.bash


2

आप फ़ाइल के बारे में भी दिलचस्पी ले सकते हैं:

/var/log/apt/term.log

इसे जड़ के रूप में कम या बिल्ली के साथ खोलें ।


यह पैकेज डेटाबेस पर प्रदर्शन किए गए कार्यों के लॉग की जांच करने के लिए एक समझदार जगह है, लेकिन पोस्टर के बारे में जानना चाहता है apt-get update, और यह स्पष्ट रूप से लॉग नहीं है।
फहीम मीठा

1

मैं इस कमांड का उपयोग करता हूं

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

अंतिम बार दिखाने के लिए इसे एक्सेस किया गया था। आखिरी बार 'एप-गेट अपडेट' को चलाना भी वास्तव में अपडेट था।

ध्यान दें कि यदि समय अलग-अलग हो तो अपडेट उपलब्ध नहीं हो सकता है। चूँकि मेरे पास मेरे अपडेट और अपग्रेड हैं जो विशिष्ट समय पर crontab द्वारा चल रहे हैं, मैं बता सकता हूं कि मेरे अपडेट चले या नहीं।


1

यहाँ से जवाब के साथ @ 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 सुनिश्चित करें कि निर्देशिका की सामग्री में नहीं जाना होगा।
  • -Hdereferences /var/lib/apt/listsयदि यह एक नरम लिंक है
  • यदि किसी कारणवश findविफल हो जाता है, तो कमांड चलेगी। यह मुझे सुरक्षित डिफ़ॉल्ट की तरह लगता है। यदि आप डिफ़ॉल्ट फ्लिप करना चाहते हैं, -nतो परीक्षण -mtime +7में और खोज कमांड में उपयोग करें।

0

मैंने सिर्फ निम्नलिखित विषय पर इस प्रश्न का उत्तर पोस्ट किया है

मैं अपना अपडेट इतिहास कहां देख सकता हूं?

इस विषय के लिए उत्तर कम उपयुक्त हो सकता है, क्योंकि यह विशेष रूप से "उपयुक्त-अपग्रेड" के लिए दिखता है। यहाँ नमूना उत्पादन है।

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

स्रोत कोड और अधिक स्पष्टीकरण के लिए अन्य विषय देखें।


यह मुझे ऐसा लगा जैसे आपका कोड अपग्रेड की तलाश में था, अपडेट का नहीं। उदाहरण के लिए, मैंने सिर्फ अपने Ubuntu 16.04 पर "apt-get update" (इस प्रश्न का विषय) चलाया और न कि परिवर्तन का एक iota / var / log / apt में प्रकट होता है, जिसका अर्थ है कि उस निर्देशिका में कुछ भी स्कैन करने का कोई फायदा नहीं होगा। इस विशेष प्रश्न के उत्तर में।
रॉन बुर्क

1
तुम बिलकुल ठीक कह रहे हो। यह बात बताने के लिए धन्यवाद। मैंने अपना उत्तर बदल दिया है कि यह प्रतिबिंबित हो सके। हम मशीन को लागू करने की अंतिम तारीख की तलाश कर रहे थे, बजाय इसके कि अपडेट को सिर्फ डाउनलोड किया जाए।
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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.