ढूँढें अंतिम बार अद्यतन apt-get के साथ किया गया था


30

मुझे आखिरी बार खोजने की जरूरत है कि

apt-get update

कमांड मेरे सर्वर पर चलाया गया था। मैं यह जानकारी कैसे निर्धारित कर सकता हूं?

जवाबों:


23

कम से कम उबंटू प्रणालियों में एक फ़ाइल है /etc/apt/apt.conf.d/15update-stamp:

APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};

इसलिए देखें कि क्या आपके पास / var / lib / apt / periodic / update-success-Stamp है और यदि आपके पास है, तो आप इसका उपयोग कर सकते हैं

stat -c %y /var/lib/apt/periodic/update-success-stamp

अंतिम "उपयुक्त-अद्यतन अपडेट" आह्वान का समय प्राप्त करने के लिए कमांड करें।

और अगर आपके सिस्टम में वह उपयुक्त कॉन्फ़िगरेशन फ़ाइल नहीं है, तो आप इसे हमेशा जोड़ सकते हैं।


Apt.conf लाइन को शामिल करने के लिए +1। Ubuntu 14.04 पर ऐसा लगता है कि यह फ़ाइल/var/lib/apt/periodic/update-stamp
GnP

11

आप / var / lib / apt / सूचियों में फ़ाइलों पर एक्सेस समय की जाँच कर सकते हैं जो कि जब आप apt-get अद्यतन चलाते हैं तो अद्यतन किया जाता है। अगर apt-get अपडेट को sudo के साथ चलाया जाता था तो आपके पास /var/log/auth.log में लॉग इन की गई लाइन होनी चाहिए ..


2
जैसा कि कहीं और बताया गया है, आप पा सकते हैं कि कुछ फाइलें अपडेट नहीं हुई हैं और इसलिए उन्हें फिर से डाउनलोड नहीं किया गया है। यह ठीक है अगर आप जानना चाहते हैं कि आपकी पैकेज सूचियाँ कितनी अद्यतित हैं, लेकिन यह नहीं कि आप जानना चाहते हैं कि apt-get update अंतिम बार कब हुआ था। पूर्व अधिक होने की संभावना है।
डेविड पशले

10

कोई apt-get updateफ़ाइलें नहीं बना सकता है या अपडेट नहीं कर सकता है, यह कैश डायरेक्टरी को अपडेट करता है ताकि हम अंतिम बार apt-get updateचलने पर टाइमस्टैम्प प्राप्त करने के लिए उपयोग कर सकें :

stat -c %Y /var/cache/apt/

ध्यान दें कि पैकेज इंस्टॉलेशन कैश डायरेक्टरी को भी अपडेट कर सकता है। इस के लिए एक विश्वसनीय जांच नहीं हैapt-get update
जीएनपी

3

लॉक फ़ाइलों से मत जाओ। लॉक फ़ाइलें विश्वसनीय नहीं हैं, वे नए लिनक्स रिलीज़ के साथ समय के साथ घूमने लगते हैं, और जब वे उनके साथ होते हैं तो कई प्रोग्राम क्लीन (निकालें) लॉक फ़ाइलों को साफ करते हैं।

निम्न आदेश आपको वह मिलेगा जो आप खोज रहे हैं।

ls -lt --time-style="long-iso" /var/log/apt | grep -o '\([0-9]\{2,4\}[- ]\)\{3\}[0-9]\{2\}:[0-9]\{2\}' -m 1

यह एक में दो कमांड है। पाइप के माध्यम से दूसरे में पहले कमांड फिल्टर के परिणाम (!) प्रतीक।

पहले कमांड में, मैं "ls" का उपयोग / var / log / apt निर्देशिका की फ़ाइल सामग्री को सूचीबद्ध करने के लिए कर रहा हूं, जो कि वह निर्देशिका है जो apt-get के लिए एक्सेस इतिहास लॉग को संग्रहीत करती है। "-Lt" भाग वास्तव में दो स्विच है। पहला "एल" स्विच विस्तार से एक फ़ाइल प्रति पंक्ति को सूचीबद्ध करने के लिए "ls" बताता है। दूसरा "t" स्विच दिनांक और समय के अनुसार "ls" बताता है। - "समय-शैली" प्रारूप "YYYY-MM-DD HH: MM" प्रारूप में प्रदर्शित होने के लिए समय निर्धारित करता है।

कमांड के "grep" भाग में, "-o" स्विच grep को केवल प्रत्येक पंक्ति के कुछ हिस्सों को दिखाने के लिए कहता है जो नियमित अभिव्यक्ति से बिल्कुल मेल खाते हैं। मैंने यहाँ जो नियमित अभिव्यक्ति का उपयोग किया है वह "एलएस" कमांड में निर्दिष्ट प्रारूप में दिनांक समय का पता लगाता है। आप "grep" कमांड के बहुत ही अंत में जादू के असली छोटे टुकड़े को देखेंगे जो तुरंत "1" नंबर के साथ "-m" स्विच होता है। यह "grep" बताता है कि पहले एक को खोजने के बाद मैचों की तलाश करना बंद कर दें।

इसलिए, सारांश में, हम apt लॉग फ़ाइल विवरण सूचीबद्ध कर रहे हैं ताकि हम अंतिम संशोधित तिथि देख सकें, हम फिर तिथि के अनुसार क्रमबद्ध करते हैं और grep को शीर्ष से पहली तारीख खींचने के लिए कहते हैं, जो तब वापस आ जाता है। वह आखिरी तारीख है, जिसे दौड़ना है।

एक पल के लिए शैतान के वकील की भूमिका निभाने के लिए, हालांकि, उबंटन जैसे डेबियन प्लेटफार्मों के लिए यह उपयुक्त है कि वे नियमित रूप से नौकरी पाने के लिए उपयुक्त हों। यदि आप उपयुक्त-निष्पादन के दूसरे छोर पर व्यक्ति की तलाश कर रहे हैं, तो आप वास्तव में एक मशीन पा सकते हैं। आप किसी भी समय टिकटों को देखने के लिए उपयुक्त लॉग के साथ हमेशा एक्सेस लॉग से मेल खा सकते हैं। उपयोगकर्ता के कमांड इतिहास को एक हद तक देखना भी संभव है।

उम्मीद है की यह मदद करेगा!


1
दुर्भाग्य से काम नहीं कर रहा है। में /var/log/aptयह भी लॉग जब मैं उदाहरण के लिए एक कर रहा है apt-get install some-package। असल में उबंटू पर यह तब कुछ लॉग नहीं करता है जब मैं करता हूंapt-get update
एलेक्स

2

मुझे संदेह है कि आप संकुल सूचियों पर अंतिम अद्यतन लागू होने पर यह पता लगाने के लिए फ़ाइलों / var / cache / apt पर अंतिम संशोधित समय की जांच कर सकते हैं।

मैंने अभी-अभी इसका परीक्षण किया, और एक पंक्ति में दो बार "sudo apt-get update" चलाया, और दिनांक उनके वर्तमान मूल्य से नहीं बदले, लेकिन मुझे संदेह है कि यह लागू करने के लिए कोई नया अपडेट नहीं था, और यह कि कैश ऊपर हैं तारीख तक।



1

Synaptic एक इतिहास फ़ाइल (> फ़ाइल> इतिहास) लॉग करता है, एप्टीट्यूड / var / log / aptitude और auto-install संकुल दोनों इतिहास को / var / lib / aptitude / pkgstates में लॉग करता है, इसलिए आप नवीनतम गतिविधि के लिए इनकी जाँच कर सकते हैं।


1

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

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


उत्तर अपूर्ण है। क्या है infoऔर isEmptyString? इसके अलावा, infoफ़ंक्शन नाम का एक खराब विकल्प है क्योंकि यह भी एक कमांड है। इसके अलावा, अच्छा समाधान!
रॉनी एंडरसन

@RonnyAndersson, इस लिबास में सभी: github.com/gdbtek/ubuntu-cookbooks/blob/master/lbooks/…
Nam Nguyen

0

/var/log/dpkg.log जो किया गया था उसका इतिहास रखेगा, लेकिन जरूरी नहीं कि कौन सा ऐप जिसे dpkg (synaptic, apt-get, etc) कहा जाए।


0

लिपि में लपेटो-पहले एक फ़ाइल में टाइमस्टैम्प लिखता है, और फिर सामान्य काम करता है। इस तरह, आप टाइमस्टैम्प प्रारूप और स्थान को परिभाषित कर सकते हैं;)


सुजॉय, इसे स्क्रिप्ट में लपेटना व्यावहारिक नहीं है यदि आपके पास सैकड़ों सर्वर हैं, और आप अभी तक एक और स्क्रिप्ट को बनाए रखने की इच्छा नहीं रखते हैं जो अगली बार आपके उपयुक्त-पैकेज को अपडेट करने में समस्या पैदा कर सकती है। मुझे लगता है कि अनुरोधकर्ता एक ऐसे उत्तर की तलाश में है जो उसके कंप्यूटर में पहले से मौजूद जानकारी का उपयोग करता है।
pdwalker

0

यदि अंतिम दिन में इसे नहीं चलाया गया है तो अपडेट को चलाने के लिए एक सरल वन-लाइनर है।

(find /var/lib/apt/periodic/update-success-stamp -mtime +1 | grep update-success-stamp) && (/usr/bin/apt-get update)

यह अपडेट-सक्सेस-स्टैंप फाइल के लिए दिखता है, जिसे एक दिन पहले संशोधित किया गया है। यदि यह सही उम्र की फ़ाइल पाता है, तो यह अद्यतन चलाता है। नोट: काम करने के लिए अद्यतन-सफलता-स्टैम्प फ़ाइल मौजूद है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.