Apt-get install का इतिहास कैसे देखें?


18

मैं apt-get installउन कमांड के इतिहास को कैसे देख सकता हूं जिन्हें मैंने मैन्युअल रूप से निष्पादित किया है?

यह मुझे लगता है कि उपलब्ध सभी विधियाँ सब कुछ दिखाती हैं जो उबंटू स्थापना की शुरुआत से सही स्थापित किया गया है।

मैं apt-get installउस समय के इतिहास को कैसे देख सकता हूं जब मेरी प्रणाली-स्थापना प्रक्रिया पूरी हो गई थी?


सही है। आप और क्या अपेक्षा करेंगे? क्या आप केवल उन लोगों को दिखाना चाहते हैं जो आप टर्मिनल से भागे हैं, न कि वे जो एक जीयूआई या कुछ और द्वारा चलाए गए थे? कृपया अपना प्रश्न संपादित करें और स्पष्ट करें।
टेराडन

@terdon ठीक किए गए एक नए संपादित करें
TellMeWhy

1
वहाँ के लॉग रहे हैं dpkgमें /var/log/dpkg.log*
वेलकन

1
@PranoidPanda जो विभिन्न तरीकों से विफल होता है। इतिहास ट्रंकेशन, चीजें अन्य गोले में चलती हैं, इतिहास से हटाई गई चीजें, या पहले स्थान पर कभी नहीं रखी जाती हैं, स्क्रिप्ट से स्थापित चीजें, अन्य उपयोगकर्ताओं द्वारा चलाए जाने वाली चीजें आदि आदि
स्क्वीली

1
@MrBones: मुझे पता है, और मैंने अपने जवाब में ऐसा कहा है (और इसके नीचे टिप्पणी में)। हालाँकि, ओपी ने सभी उदाहरणों को देखने का तरीका पूछा, जब उन्होंने apt-get installपैकेज को स्थापित करने के लिए मैन्युअल रूप से कमांड को निष्पादित किया है , और मैंने एक समाधान प्रदान किया है जो इस जानकारी को देता है जब तक कि इतिहास फ़ाइल को कुछ तरीकों से बदल नहीं दिया जाता है (जैसे: प्रविष्टियां हैं हटा दिया गया है)।

जवाबों:


20

मुझे लगता है कि कोस द्वारा यहां दिया गया उत्तर सबसे अच्छा तरीका है जिसे मैंने अब तक देखा है। यद्यपि सॉफ़्टवेयर सेंटर उपयोग करता है apt, लेकिन जो कुछ भी उसने स्थापित किया है वह भी सूचीबद्ध होगा।

आदेश है:

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

घर आने पर मैं इसका परीक्षण करूँगा और अगर यह काम करेगा तो इसे स्वीकार कर लेंगे :)
TellMeWhy

यह! अपडेट की जाँच करें: askubuntu.com/a/680405/320386
kos

इस का प्रयोग करें, जिस तरह से अधिक इस कार्य के लिए सुरक्षित है: zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline:(?=.* install ) \K.*' | sed '1,4d': grep -Po '^Commandline:(?=.* install ) \K.*'केवल फिल्टर करेगा apt-getयुक्त आदेशों installएक अग्रणी और अनुगामी अंतरिक्ष के साथ, sed '1,4d' हो सकता है विशिष्ट स्थापना पर निर्भर हो सकता है; खदान में 1,4, सर्वव्यापकता से आने वाली प्रविष्टियों की संख्या को हटा दिया जाता है, जिन्हें आप हटाना चाहते हैं। मुझे बताएं कि यदि आपकी स्थापना पर संख्या समान है, तो कम से कम हमारे पास आधार रेखा है: |
कोस

@ मुझे apt-get -o APT::Status-Fd=4 -o APT::Keep-Fds::=5 -o APT::Keep-Fds::=6 -q -y --no-remove install linux-genericनई कमांड के साथ अतिरिक्त लाइनें मिलती हैं । क्या वे सर्वव्यापक रेखाएँ हैं?
एरोनिकल

नहीं, वे ऐसे दिखते हैं जैसे वे सॉफ़्टवेयर अपडेटर से आए थे; उपयोगकर्ता से चलने वाले कमांड से भेद करने का कोई तरीका नहीं है और कुछ apt-getफ्रंटएंड द्वारा चलाए जाने वाले कमांड्स , Ubiquity से अलग हैं जो केवल एक बार चलता है (उदाहरण के लिए aptdaemonप्रविष्टियों को उस कमांड द्वारा भी दिखाया जाएगा)। सबसे अच्छी शर्त हालांकि अभी भी उस कमांड का उपयोग करना है, जो कम से कम यूबिकिटी प्रविष्टियों को शामिल नहीं करता है।
कोस

9

सभी इंस्टॉल लॉग देखने के लिए अपने टर्मिनल में बस निम्न कमांड टाइप करें।

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

3

@Arronical उत्तर को सरल बनाने के लिए, हाल ही में मैंने जो एक साफ-सुथरी तरकीब सीखी, वह है कि आप zcat -qftxt और txt gzipped files दोनों का उपयोग कर सकते हैं ।

zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

हो जाता है

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get install (?!.*--reinstall)\K.*'

मैन zcat से:

   -q --quiet
          Suppress all warnings.
   -f --force
          Force  compression  or  decompression  even if the file has multiple links or the corre‐
          sponding file already exists, or if the compressed data is read from  or  written  to  a
          terminal.  If  the  input  data is not in a format recognized by gzip, and if the option
          --stdout is also given, copy the input data without change to the standard  output:  let
          zcat  behave  as  cat.  If -f is not given, and when not running in the background, gzip
          prompts to verify whether an existing file should be overwritten.

2

यहां वह स्क्रिप्ट है जो केवल वर्तमान में स्थापित शीर्ष स्तर के पैकेजों को प्रिंट करता है , जहां "टॉप लेवल पैकेज" को एटीपी पैकेज के रूप में परिभाषित किया गया है, जिस पर कोई अन्य एटीपी पैकेज निर्भर नहीं करता है। यदि इस तरह के शीर्ष स्तर के प्रोग्राम atp या एक पैकेज मैनेजर जैसे कि synaptic द्वारा स्थापित किए गए थे, तो उन्हें उपयोगकर्ता द्वारा मैन्युअल रूप से चुना गया था।

#!/bin/sh
NumDaysAgo=18
find /var/lib/dpkg/info -name "*.list" -mtime -$NumDaysAgo \
    -exec stat -c $'%y\t%n' {} \; | \
sed -e 's,/var/lib/dpkg/info/,,' -e 's,\.list,,' | \
sort -r | \
while read Date Time Xxx Pkg
do 
    lncnt=$(apt-cache --installed rdepends $Pkg | wc -l)
    if [ $lncnt -eq "2" ]
        then echo "$Date $Time $Pkg"
    fi
done
echo "JOB COMPLETED: $BASH_SOURCE"

संकुल को रिवर्स ऑर्डर में इस धारणा के तहत मुद्रित किया जाता है कि उपयोगकर्ता को नई जानकारी जल्द से जल्द चाहिए, और क्योंकि कार्यक्रम धीमा है।

कार्यक्रम का प्रवाह:

  • कार्यक्रम पहले फ़ाइलनाम के तहत पढ़कर सभी स्थापित पैकेजों की सूची में इकट्ठा होता है /var/lib/dpkg/info/। फ़ाइल मॉड समय स्थापना समय है।
  • उस सूची को उल्टे क्रम में क्रमबद्ध किया जाता है।
  • प्रत्येक स्थापित पैकेज के लिए $Pkg, apt-cache rdepends $Pkg रिवर्स-निर्भरता का अनुरोध करने के लिए एक कॉल $Pkg। यदि कोई निर्भरता नहीं है, तो यह एक शीर्ष स्तर का पैकेज है और पैकेज की जानकारी मुद्रित की जाती है: दिनांक समय पैकेजेन

टिप्पणियाँ:

  • स्क्रिप्ट आउटपुट स्वरूप पर निर्भर करता है apt-cache rdepends $Pkgजिसका उद्देश्य मानव आंखों के लिए था और भविष्य के संस्करणों में बदल सकता है।
  • / Var / lib / dpkg / info / underix के पार्ट पार्ट फाइलिंग के लिए कोड इस unix.stackexexhange पोस्ट से आया है । जैसा कि उस पोस्टर 'मिकेल' ने बताया है, dpgkइतिहास लॉगफ़ाइल्स विश्वसनीय नहीं हैं क्योंकि उन्हें एक निश्चित मात्रा तक पहुँचने के बाद घुमाया जाएगा।
  • के लिए मैन पेज apt-chache
  • कॉल apt-cache rdepends ...बहुत ही धीमी गति से होता है क्योंकि प्रत्येक कॉल की गणना सभी निर्भरताओं के माध्यम से होती है। इसलिए उपर्युक्त स्क्रिप्ट उपयोगकर्ता को यथासंभव तत्काल संतुष्टि प्रदान करने के लिए नवीनतम इंस्टॉल से शुरू होती है।
  • --installedध्वज के बाद apt-cacheजांच करता है कि dpkg-इंस्टॉल किए गए पैकेज भी उपयुक्त से स्थापित कर रहे हैं। यदि उपयोगकर्ता या कोई अन्य इंस्टॉल सॉफ़्टवेयर ने बायपास किया और सीधे dpkg का उपयोग किया, तो यह संभव होगा। इस मामले का परीक्षण नहीं किया गया है, लेकिन मुझे लगता है कि कुछ ध्यान देने योग्य या तो मानक या त्रुटि आउटपुट में मुद्रित किया जाएगा
  • आउटपुट में मैन्युअल रूप से चुने गए पैकेज शामिल नहीं हैं जो बाद में उच्च पैकेज द्वारा निर्भर हो गए। आउटपुट में वे पैकेज भी शामिल हो सकते हैं जो अन्य थर्ड पार्टी इंस्टॉल सॉफ़्टवेयर द्वारा apt के माध्यम से इंस्टॉल किए गए थे, और इसलिए वास्तव में मैन्युअल रूप से इंस्टॉल नहीं किए गए हैं। हालाँकि, यदि आउटपुट का उद्देश्य बैकअप /homeडायरेक्टरी से रिस्टोर किए गए लिनक्स को स्थापित करने के लिए एक आधार के रूप में है, जिसमें थर्ड पार्टी सॉफ्टवेयर शामिल है, तो यह आउटपुट उपयुक्त होगा।
  • कुछ पैकेज नामों में संस्करण संख्याएँ शामिल हैं, और कुछ नहीं। केवल तथ्य को जागरूकता लाने के लिए उल्लेख किया।

1

यदि आप चाहते हैं कि आपके द्वारा चलाए गए सभी चीजें देखें:

sudo apt-get install [package]

और आपने बैश इतिहास के साथ कोई खिलवाड़ नहीं किया है, न ही आप किसी अन्य उपयोगकर्ता (या सभी उपयोगकर्ताओं) के लिए इस प्रकार के इंस्टॉलेशन प्रकार के इतिहास को देखना चाहते हैं, तो आप बस चला सकते हैं:

history | grep "apt-get install"

और यह आपको ज्यादातर प्रासंगिक परिणाम प्राप्त करना चाहिए।


1
क्या मुझे इसके साथ सारा इतिहास मिलेगा ?
TellMeWhy

@DevRobot: जब तक आपने फ़ाइल apt-get installमें उनके साथ प्रविष्टियों को मैन्युअल रूप से बदल नहीं दिया है .bash_history, या इस फ़ाइल को हटा दिया है, तब कमांड आपको सभी उदाहरण दिखाएगा जब आपने apt-get installअपने उपयोगकर्ता खाते पर स्ट्रिंग के साथ एक कमांड निष्पादित किया है (यहां तक ​​कि आप भी कमांड को रूट के रूप में चलाएं और इसलिए आपके उपयोगकर्ता खाते के समान बिल्कुल नहीं - जो कि कमांड चला रहा है sudo)।

2
यदि आपको 200 से अधिक कमांड दर्ज किए गए हैं, तो यह एक समस्या हो सकती है
Arronical

2
दावों को करते समय @Arronical सबूत की उम्मीद की जाती है ;-)
रिनविंड

1
मैं खुद को डिफ़ॉल्ट मानूँगा ( gnu.org/software/bash/manual/html_node/… )।
रिन्जविंड

1

यदि आप चाहते हैं कि apt-get installकमांड्स का इतिहास निम्नलिखित कमांड का उपयोग करें:

grep "apt-get install" .bash_history

आउटपुट:

ravan@ravan:~$ grep "apt-get install" .bash_history

sudo apt-get install --no-install-recommends ubuntu-mate-core ubuntu-mate-desktop
sudo apt-get install xfce4
sudo apt-get install xfce4.12
sudo apt-get install pgadmin
sudo apt-get install touchegg
sudo apt-get install aptitude
sudo apt-get install aptitude
sudo gedit .bash_history | grep "apt-get install" 
sudo apt-get installvim
grep "apt-get install" .bash_history
cat .bash_history | grep "apt-get install" 

अन्य जानकारी के लिए अतिरिक्त जानकारी देखें

वहाँ भी में अधिक विस्तृत स्थापना जानकारी है /var/log/apt/में history.logऔर history.log.X.gzफ़ाइलों और term.logऔर term.log.X.gzफ़ाइलें

यदि आप केवल apt-getशामिल आदेशों का इतिहास चाहते हैं , तो

history | grep apt-get


apt-mark showmanualजब वास्तव में मैन्युअल रूप से स्थापित किया गया था, न कि केवल ओएस स्थापित होने पर, स्थापित किए गए सभी पैकेज दिखाता है। यह व्यवहार करने के लिए यह एक अजीब तरीका है!
दोपहर

1
यह आवश्यक रूप से इतिहास के रूप में विशिष्ट विवरण नहीं देता है। लोगों को क्या देखने की जरूरत है /var/log/apt/history.logऔर इसी तरह की फाइलें हैं। आपको केवल मैन्युअल रूप से चयनित और स्वतःपूर्ण पैकेजों की सूची मिलती है। आप इस जवाब से क्या स्थापित किया गया था, क्या हटाया गया था, क्या उन्नत किया गया था, आदि का कोई कालानुक्रमिक इतिहास नहीं देते हैं ।
थॉमस वार्ड

@ एरोनिकल - मैन पेज कहां के लिए है apt -mark showmanual? मैं इसके लिए Ubuntu 16.04 LTS मैन पेज पर नहीं देख सकता apt: < manpages.ubuntu.com/manpages/xenial/en/man8/apt.8.html >।
क्रेग हिक्स


0

यह देखने के लिए कि आपने क्या स्थापित किया है और हटा दिया है, फिर से इंस्टॉल किया है, आदि। apt-get installs की यात्रा के बारे में अधिक जानकारी ।

उत्तर को एक उपनाम में संशोधित किया जा सकता है:

alias apted='zcat /var/log/apt/history.log.*.gz | cat - /var/log/apt/history.log | fgrep Commandline: | cut -d " " -f 2- | grep -P "^|install"'

0

ध्यान दें कि कुछ तर्क इंस्टॉल करने से पहले सेट किए जा सकते हैं, जैसे कि वर्चुअमिन स्क्रिप्ट इंस्टॉल के दौरान कर रहा है: apt-get -y install packame।

इसलिए यदि आप सभी इंस्टॉल कमांड को कैप्चर करना चाहते हैं, तो आपको रेगेक्स क्वेरी को बदलना होगा।

zcat -qf /var/log/apt/history.log* | grep -Po '^Commandline: apt-get.*install (?!.*--reinstall)\K.*'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.