मैं कमांड लाइन के माध्यम से apt-get package प्रबंधन इतिहास कैसे दिखा सकता हूं?


116

क्या संकुल का इतिहास दिखाने का कोई तरीका है जिसे कमांड लाइन के माध्यम से बदल दिया गया है?


जवाबों:


131

Apt (apt-get) के साथ सभी क्रियाएं लॉग होती हैं। ये फाइलें / var / log / apt / में उपलब्ध हैं। सबसे हालिया इतिहास लॉग देखने के लिए, निष्पादित करें:

less /var/log/apt/history.log

इन लॉग को घुमाया जाता है (हर महीने मुझे लगता है), पुरानी फाइलों को एक संख्या और संपीड़ित के साथ प्रत्यय दिया जाएगा। तो अगला इतिहास लॉग देखने के लिए, उपयोग करें:

zless /var/log/apt/history.log.1.gz

उपलब्ध लॉग देखने के लिए:

ls -la /var/log/apt/

4
यह उत्कृष्ट है। केवल एक चीज गायब है जो आज्ञाओं को चलाता है।
सीमित प्रायश्चित

3
@LimitedAtonement /var/log/auth.log पर एक नज़र डालें, इसमें इंस्टालेशन चलाने वाला उपयोगकर्ता हो सकता है। (यह मदद नहीं करेगा यदि स्थापना को शेल / प्रोग्राम के माध्यम से रूट के रूप में लागू किया गया था)
Lekensteyn

3
इसके अलावा उपयोगी: zgrep, zcat
ishmel

क्या यह फ़ाइल मूल apt-get के परिणामस्वरूप स्थापित निर्भरता संकुल को भी लॉग करती है?
महेश 999

2
एपीएलटी के नवीनतम संस्करण @LimitedAtonement लॉग का एक "अनुरोधित-बाय:" भाग दिखाते हैं, जो यह दिखाने के लिए कि कमांड को किस कमांड के साथ-साथ "कमांडलाइन: पैकेजिटक भूमिका = 'अपडेट-पैकेज'" या "कमांडलाइन: एप" उन्नयन "
माइकल ट्यूनेल

21

आप दिलचस्प सामग्री प्रदर्शित करने के लिए एक छोटी कमांड भी बना सकते हैं।

  • इस कस्टम फंक्शन को अपने साथ जोड़ें ~/.bashrc:

    ### pars for fun: install | remove | rollback
    function apt-history(){
    
          case "$1" in
            install)
                  grep 'install ' /var/log/dpkg.log
                  ;;
            upgrade|remove)
                  grep $1 /var/log/dpkg.log
                  ;;
            rollback)
                  grep upgrade /var/log/dpkg.log | \
                      grep "$2" -A10000000 | \
                      grep "$3" -B10000000 | \
                      awk '{print $4"="$5}'
                  ;;
            *)
                  cat /var/log/dpkg.log
                  ;;
          esac
    }
  • और इसे एक टर्मिनल में इस तरह से कॉल करें:

    kreso@h17:~$ apt-history install
    2013-08-06 14:42:36 install gir1.2-nautilus-3.0:amd64 <none> 1:3.8.2-0ubuntu1~ubuntu13.04.1
    2013-08-06 14:42:36 install python-nautilus:amd64 <none> 1.1-3ubuntu1
    2013-08-06 14:42:37 install insync-nautilus:all <none> 1.0.20
    2013-08-07 14:41:37 install powertop:amd64 <none> 2.1-0ubuntu1
    2013-08-07 18:44:10 install libdiscid0:amd64 <none> 0.2.2-3build1
    2013-08-07 18:44:11 install sound-juicer:amd64 <none> 3.5.0-0ubuntu1
    

यहां से ले गए


zgrep ... /var/log/dpkg.log*- अभिलेखागार से भी प्रविष्टियों को आउटपुट करता है।
Ctrl-C

6

आप हाल ही में स्थापित पैकेजों को सूचीबद्ध करने के लिए निम्न कमांड का भी उपयोग कर सकते हैं

grep "\ install\ " /var/log/dpkg.log

1
इससे भी बेहतर: grep "\ install\ " /var/log/apt/history.logअगर आपको किसी सूची को apt-get
mchid

2

यदि आप चाहते हैं कि उन पैकेजों को स्थापित किया गया है और बाद में अनइंस्टॉल नहीं किया गया है , तो यह प्रयास करें:

comm -23 <(grep "apt-get install" /var/log/apt/history.log | sed 's/.* //' | sort) \ 
<(grep "apt-get remove" /var/log/apt/history.log | sed 's/.* //' | sort) 

यह इंस्टॉल किया गया माइनस है जो किसी भी मिलान को हटाता है।

संदर्भ:


+1: अच्छा वन-लाइनर लेकिन केवल अंतिम लॉग रोटेशन अवधि के लिए मान्य है। इसके अलावा sort, sort -uदोनों मामलों में उपयोग करने के लिए डुप्लिकेट लाइनों से बचने के लिए जैसे पैकेज में oracle-java8-installerऔर कई अन्य जैसे दिखाने के लिए ।
Cbhihe

1

यहां बताया गया है कि आप वास्तव में ऐसा कैसे करते हैं, पैकेज मुटर कहते हैं:

_P=mutter &&
(cat /var/log/dpkg.log{,.1};zcat /var/log/dpkg.log.*.gz) |
egrep --text "^[^ ]* [^ ]* (configure|install|remove|status [^ ]*|trigproc|upgrade) $_P[: ]" |
sort --reverse | less

Dpkg.log का उपयोग उन ऑपरेशनों को कैप्चर करता है जो apt-get नहीं देखते हैं।

आउटपुट:

2016-12-20 09:47:35 status unpacked mutter:amd64 3.22.2-2ubuntu1~ubuntu16.10.1
2016-12-20 09:47:35 status installed mutter:amd64 3.22.2-2ubuntu1~ubuntu16.10.1
…

1
कृपया ध्यान दें कि ट्रिपल बैकटिक्स यहाँ काम नहीं करते जिस तरह से आपको लगता है कि वे करते हैं।
edwinksl

1

एक विशिष्ट पैकेज का अद्यतन इतिहास प्राप्त करने के लिए, यह स्थापित किया गया था / यहाँ एक oneliner (बैश और zgrep) के माध्यम से अद्यतन किया गया है, उदाहरण पैकेज skypeforlinux के लिए है:

package='skypeforlinux'; pregex="(${package}[^\)]+\))"; while read -r line; do [[ "$line" =~ ^Start-Date:[[:space:]]([[:digit:]].+) ]] && curdate="${BASH_REMATCH[1]} "; [[ "$line" =~ $pregex ]] && echo "$curdate ${BASH_REMATCH[1]}"; done < <(for i in `ls -tr /var/log/apt/history*`; do zgrep -B3 "$package" $i; done)

यह तारीख पाने के लिए पिछले तीन पंक्तियों सहित स्काइपफोर्लिंक्स के लिए apt के इतिहास लॉग फ़ाइलों को पूरा करता है। फिर परिणाम पर पुनरावृत्ति करता है और प्रासंगिक तिथियों और संस्करणों को गूँजता है।

अपने पैकेज के नाम के साथ पैकेज वैरिएबल मान को बदलें , यहां तक ​​कि कई पैकेजों के लिए काम करता है बशर्ते वे एक ही स्ट्रिंग से शुरू करें।

आउटपुट के साथ उदाहरण:

package='apache'; pregex="(${package}[^\)]+\))"; while read -r line; do [[ "$line" =~ ^Start-Date:[[:space:]]([[:digit:]].+) ]] && curdate="${BASH_REMATCH[1]} "; [[ "$line" =~ $pregex ]] && echo "$curdate ${BASH_REMATCH[1]}"; done < <(for i in `ls -tr /var/log/apt/history*`; do zgrep -B3 "$package" $i; done)
2017-10-19  15:00:09  apache2-utils:amd64 (2.4.18-2ubuntu3.5)
2017-11-24  14:24:45  apache-pom-java:amd64 (10-2build1, automatic)
2018-02-22  16:42:02  apache2-data:amd64 (2.4.18-2ubuntu3.5, automatic)
2018-02-26  15:34:34  apache2:amd64 (2.4.18-2ubuntu3.5)
2018-02-26  15:36:32  apache2-data:amd64 (2.4.18-2ubuntu3.5)
2018-02-26  15:40:50  apache2-data:amd64 (2.4.18-2ubuntu3.5, automatic)
2018-02-26  15:42:07  apache2:amd64 (2.4.18-2ubuntu3.5)
2018-02-26  15:42:39  apache2:amd64 (2.4.18-2ubuntu3.5)
2018-03-15  10:08:50  apache-pom-java:amd64 (10-2build1)
2018-04-20  08:55:07  apache2-data:amd64 (2.4.18-2ubuntu3.5, 2.4.18-2ubuntu3.8)
2018-07-06  08:55:11  apache2-data:amd64 (2.4.18-2ubuntu3.8, 2.4.18-2ubuntu3.9)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.