आप कैसे ट्रैक करते हैं कि कौन से पैकेज उबंटू (लिनक्स) पर स्थापित किए गए थे?


38

(यह सवाल 10458 से काफी मिलता-जुलता है । यह सुझाव दिया गया था कि फेडोरा और उबंटू / डेबियन अलग-अलग जवाबों के लिए पर्याप्त हैं।)

जैसा कि मैं किसी भी Ubuntu सेटअप का उपयोग करता हूं, मैं धीरे-धीरे बेसलाइन इंस्टॉलेशन के ऊपर और ऊपर कई पैकेज स्थापित करता हूं। यदि मैं पुन: स्थापित करता हूं, या यदि मुझे एक नई मशीन स्थापित करने की आवश्यकता है, तो मैं आमतौर पर उन विशिष्ट पैकेजों को पुनर्स्थापित करना चाहता हूं, और मैं कम से कम परेशानी के साथ काम करने के लिए इसे जल्दी करना चाहता हूं। जहाँ तक मुझे पैकेज प्रबंधकों की सब को देखा है के रूप में ( apt-get, aptitudeऔर synaptic) मेरे जो संकुल स्थापित कर रहे हैं बता सकते हैं, और वे सभी लॉग (प्रत्येक उपकरण है, जो एक परेशानी है के लिए अलग-अलग यद्यपि) है। लेकिन उनमें से कोई भी मुझे नहीं बता सकता कि मैंने कौन से पैकेज लिए हैंउनकी निर्भरता या सिस्टम अपडेट के विपरीत स्थापित किया गया। यहां तक ​​कि लॉग भी मुश्किल हैं, मुझे पूरी तरह से यकीन नहीं है कि मुझे उनसे क्या निकाला जाना चाहिए, या उन्हें कैसे एकीकृत किया जाए (विभिन्न उपयुक्त परिवार के उपकरण के मामले में)। इसका मतलब यह है कि हर बार जब मैं फिर से स्थापित करता हूं, या यहां तक ​​कि सिर्फ बैकअप देता हूं, तो मुझे यकीन नहीं है कि उस सूची को फिर से कैसे बनाया जाए।

मैं जरूरी नहीं कि किसी भी उपकरण को मेरे लिए ऐसा करने की उम्मीद कर रहा हूं, लेकिन अगर वे नहीं कर रहे हैं तो मैं वर्कअराउंड की तलाश कर रहा हूं। यहां तक ​​कि पैटर्न के लिए grep, अंगूठे के अच्छे नियम, या वास्तव में क्या लॉग किया जा रहा है, इसका एक स्पष्ट विचार उपयोगी होगा। यहां "सर्वश्रेष्ठ उत्तर" नहीं हो सकता है, लेकिन अच्छे लोग बहुत सहायक होंगे।


नीचे दिए गए अधिकांश उत्तर मैं जो कुछ खोज रहा हूं, उसका कुछ अनुमान प्रदान करता हूं, और कुछ हद तक उपयोगी हैं। चुना हुआ वह एक है जो एक नए सिस्टम पर मेरे टूल को फिर से स्थापित करने के एक बहुत ही स्वचालित तरीके से सबसे करीब आता है, यहां तक ​​कि इसके सभी केवेट के साथ भी।


आप सभी लिनक्स डिस्ट्रोस के लिए आसानी से एक-साझा उत्तर प्राप्त करने की संभावना नहीं रखते हैं। पैकेज प्रबंधन विभिन्न लिनक्स डिस्ट्रोस को अलग करने के लिए एक बड़ा हिस्सा है।
टेलीमेकस

टेलीमेकस - सच। और इसे दो प्रश्नों में विभाजित करने का कोई मतलब हो सकता है। लेकिन यह एक विशेष रूप से विशिष्ट प्रश्न था, और मैं दोनों प्रणालियों का उपयोग करता हूं, इसलिए मैं इसे पहले से बहुत कम नहीं करना चाहता था। ऐसा लगता है कि यहाँ अधिकांश उत्तर dpkg / apt के लिए हैं, इसलिए rpm / yum के लिए एक अलग प्रश्न समझ में आ सकता है।
क्वार्क

निक्सोस पर जाएं :) (सिर्फ ट्रोलिंग)।
एलेक्सी

जवाबों:


31

किसी भी डेबियन आधारित मशीन पर, पैकेज सेट की नकल करने का यह एक सामान्य तरीका है। पुरानी मशीन पर:

dpkg --get-selections "*" > my_favorite_packages

फ़ाइल my_favorite_packagesको नई मशीन पर कॉपी करें (एक अंगूठे ड्राइव एक अच्छा विकल्प है, लेकिन scpयह भी ठीक काम करता है)। फिर इस क्रम को (रूट विशेषाधिकारों के साथ) चलाएं:

apt-get update
dpkg --set-selections < my_favorite_packages
apt-get -u dselect-upgrade

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

जहाँ तक लॉग करता है, apt-getएक लॉग रखता है /var/log/apt/history.log(टिप्पणी में इसे अपडेट करने के लिए त्सेपांग के लिए धन्यवाद); dpkgकरता है (पर /var/log/dpkg.log), लेकिन यह पार्स करने के लिए प्रसिद्ध रूप से कठिन है और केवल मूल विशेषाधिकारों के साथ पढ़ा जा सकता है; aptitudeमें एक है /var/log/aptitudeऔर आप नियमित उपयोगकर्ता विशेषाधिकारों के साथ इसके माध्यम से पेज कर सकते हैं।

जहां तक ​​मैं बता सकता हूं, आप सही हैं कि इनमें से कोई भी लॉग विशेष रूप से आपके द्वारा इंस्टॉल किए गए ऑटो-इंस्टॉल किए गए निर्भरता के विपरीत ट्रैक नहीं करता है। आप एक aptitudeखोज से, हालांकि, वह जानकारी प्राप्त कर सकते हैं । उन सभी स्थापित पैकेजों की खोज करें जो स्वचालित रूप से इंस्टॉल किए गए थे:

aptitude search '~i ~M'

यदि आप केवल वे ही इंस्टॉल करना चाहते हैं (ऑटो-निर्भरता नहीं), तो नकारें ~M:

aptitude search '~i !~M'

यदि आप चाहते हैं कि स्वरूपित हो, ताकि आपके पास केवल पैकेजों के नाम हों और शब्द "इंस्टॉल" हो, aptitudeतो वह भी कर सकते हैं। यह आपको एक सूची प्रदान करता है dpkg --get-selections:

aptitude search '~i !~M' -F "%p install"

(मुझे RedHat या RedHat- आधारित सिस्टम पर कुछ भी नहीं मिला है। क्षमा करें। वास्तव में लिनक्स प्रति se के लिए कोई जवाब नहीं है क्योंकि पैकेज प्रबंधन अलग-अलग डिस्ट्रोस को अलग बनाने का एक बड़ा हिस्सा है ।)


आपकी सलाह के संयोजन की तरह लगता है और लुडविग की चाल हो सकती है: योग्यता dpkg को खिलाने के लिए एक स्क्रिप्ट उत्पन्न कर सकती है ताकि यह स्वचालित हो जो एक गंभीर जीत है। और अगर किसी को वेनिला मशीन पर करना था, तो सूचियों में अंतर काफी करीब है जो मैं व्यावहारिक रूप से उपयोगी होने के लिए कह रहा हूं।
क्वार्क

3
ध्यान दें कि अपार्ट अब "/var/log/apt/history.log" में एक लॉग रखता है, और द्वारा प्रयोग किया जाता है apt-get, synapticऔर aptitude(अब तक मैंने देखा है के रूप में)। यह 2010 की शुरुआत के बाद से है।
tshepang

dpkg.logबयान मैं अपने चयन को आसानी से तुच्छ नहीं है, लेकिन भी मुश्किल नहीं मिल सकता है किसी भी उपयोगकर्ता के रूप में Ubuntu 14.04 में सच हो करने के लिए प्रतीत नहीं होते। awk '$3 != "install" { next } ; { gsub(/:.+/, "", $4) ; print $4 }' /var/log/dpkg.log | sort | uniq
स्टीव बुज़ोनस

वास्तव में, मुझे लगता है कि यह उतना आसान नहीं है जितना मैंने शुरू में सोचा था, पिछली awk स्क्रिप्ट में दोष अनइंस्टॉल किए गए पैकेजों पर ध्यान नहीं देता है। निम्नलिखित awk '$3 !~ /install|remove|purge/ { next } { gsub(/remove|purge/, "uninstall", $3) ; gsub(/:.+/, "", $4) ; a[$4]=$3 } END { for (p in a) { if (a[p] == "install") { print p } } }' /var/log/dpkg.log | sort -uकरता है।
स्टीव बुज़ोनास

7

dpkg -l '*' > jaunty.originalहौसले से स्थापित सिस्टम पर सभी इंस्टॉल किए गए पैकेजों को फिर से तैयार करने के लिए उपयोग करें ।

आपके द्वारा अपने सभी अतिरिक्त पैकेज स्थापित करने के बाद dpkg -l '*' > mysystem.2009017

अतिरिक्त पैकेज सिर्फ अंतर हैं: diff jaunty.original mysystem.2009017


3
मूल विचार मजबूत है: वर्तमान में स्थापित अनुप्रयोगों की सूची को डंप करने के लिए कमांड लाइन का उपयोग करें, और फिर नई मशीन पर उन पैकेजों को स्थापित करने के लिए कमांड लाइन का उपयोग करें। आप दृष्टिकोण के साथ बहुत रचनात्मक और विशिष्ट प्राप्त कर सकते हैं।
pcapademic

1
मैं dpkg --get-selections
CesarB

हालांकि यह उन पैकेजों को ट्रैक नहीं करता है जिन्हें मैंने उनकी निर्भरता से अलग जोड़ा है, यह निश्चित रूप से एक उपयोगी सूची बनाता है।
क्वार्क

3

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

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

मैं अपने ब्लॉग पर दो पोस्टों में वह सब करने का तरीका बताता हूं: डेबियन जीएनयू / लिनक्स की सफाई और डेबियन जीएनयू / लिनक्स (या उबंटू) की सफाई, आश्चर्य । संक्षेप में, आप जिस उत्तर की तलाश कर रहे हैं, वह है:

aptitude search ~i | grep -v "i A"

पिछली बार जब मैंने उसके साथ काम किया था, अगर आपने apt-get का उपयोग किया था, तो यह काम नहीं किया। इसलिए मैं हमेशा योग्यता की सलाह देता हूं और जहां तक ​​मुझे पता है, डेबियन अभिवृत्ति के पक्ष में उपयुक्तता प्राप्त कर रहे हैं।

मुझे नहीं पता कि फेडोरा पर इसे कैसे करना है और आपको शायद एक अलग सवाल से अलग होना चाहिए। फेडोरा और उबंटू अलग-अलग ऑपरेटिंग सिस्टम हैं और उन्हें इस तरह से माना जाना चाहिए (भले ही वे अपनी कर्नेल और कुछ अन्य सामान साझा करते हैं)।


2
मुझे लगता है कि आपको बिना जरूरत के वह जानकारी मिल सकती है grep: aptitude search '~i !~M'चाल चलनी चाहिए।
टेलीमेकस

1
इसके अलावा, apt-getपदावनत नहीं किया जाता है। डेबियन aptitudeकमांड लाइन पर पैकेज प्रबंधन के लिए सिफारिश करता है , लेकिन यह पदावनत करने से बहुत दूर है apt-get
टेलीमेकस

यहाँ कुछ सूक्ष्म है। तीसरे कॉलम में "ए" की तलाश में उन पैकेजों को चिह्नित करना प्रतीत होता है जो मुझे पता है कि निर्भरता के रूप में स्थापित हैं। लेकिन यह स्पष्ट रूप से उन सभी को नहीं पकड़ रहा है: अधिकांश सूची निश्चित रूप से मेरे स्पष्ट अनुरोध द्वारा स्थापित नहीं की गई थी।
क्वार्क

@Telemachus। आपका कमांड और पैटर्न वाला एक समान काम नहीं करता है: दो सूचियों में अलग-अलग सामग्री होती है। मैं आपको यह बताने के लिए पर्याप्त योग्यता के बारे में नहीं जानता कि हालांकि।
क्वार्क

@ पाब्लो: आपके लॉग के लिंक टूटे हुए लगते हैं। यदि आप उन्हें ठीक कर सकते हैं तो मैं निश्चित रूप से उन्हें पढ़ना चाहता हूँ।
क्वार्क

2

डेबियन एप्ट-शो-वर्जन में स्थापित पैकेजों के संस्करणों को दिखाता है।


का उल्लेख किया। यह Ubuntu पर स्थापित (डिफ़ॉल्ट रूप से) प्रतीत नहीं होता है।
क्वार्क

1

उपयुक्त-आधारित प्रणालियों पर /var/log/apt/term.log को देखें। मेरे लिए, जहां स्थापना समाप्त हो गई है और जहां मेरी स्थापना शुरू हुई थी, उसे खींचने के लिए एक बहुत स्पष्ट रेखा है।


मेरे लिए कम उपयोगी है, क्योंकि मैन्युअल इंस्टॉल और सिस्टम अपडेट का एक इंटरमिक्सिंग है। इसके अलावा, आपके सेटअप के आधार पर। शब्द अंतत: पुराने हो जाएंगे और हटा दिए जाएंगे, इसलिए जहां तक ​​मुझे इसकी आवश्यकता है, यह वापस नहीं जाएगा।
क्वार्क

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

1

से man aptitude-create-state-bundle:

एप्टीट्यूड-क्रिएट-स्टेट-बंडल एक कंप्रेशर आर्काइव तैयार करता है, जो उन फाइलों को स्टोर करता है, जिन्हें वर्तमान पैकेज आर्काइव स्टेट को दोहराने के लिए आवश्यक होता है।

यह वही जानकारी रखेगा aptitudeजो पैकेजों पर मैन्युअल रूप से स्थापित की गई थी।

इसका उपयोग करने के लिए किया जाता है aptitude-run-state-bundle:

aptitude-run-state-बंडल को दिए गए aptitude-create-state-बंडल (1) द्वारा बनाई गई aptitude-state बंडल को एक अस्थायी डायरेक्टरी में भेज देता है, उस पर सप्लाई के साथ इनवॉइस करता है, और उसके बाद टेम्परेरी डायरेक्टरी को हटा देता है।


1

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

उसके लिए, आप इन दो में से किसी एक लाइनर का उपयोग कर सकते हैं। दोनों मेरी मशीन पर सटीक समान आउटपुट देते हैं और इस प्रश्न में अब तक प्रस्तावित सभी समाधानों की तुलना में अधिक सटीक हैं। वे दो उत्तरों (1) और (2) का संयोजन हैं । ध्यान दें कि मैंने मूल रूप से यह उत्तर यहां पोस्ट किया है

का उपयोग कर apt-mark:

comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

का उपयोग कर aptitude:

comm -23 <(aptitude search '~i !~M' -F '%p' | sed "s/ *$//" | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)

बहुत कम संकुल अभी भी, दरारें के माध्यम से गिर हालांकि मैं इन पर शक कर रहे हैं या तो सही जैसे भाषा स्थानीयकरण सेटअप के माध्यम से स्थापना या कुलदेवता कोडेक इंस्टॉलर के माध्यम से करने के बाद, उपयोगकर्ता द्वारा वास्तव में स्थापित किया। इसके अलावा, लिनक्स-हेडर संस्करण भी जमा होने लगते हैं, भले ही मैंने केवल गैर-संस्करण-विशिष्ट रूपक स्थापित किया हो। उदाहरण:

libreoffice-help-en-gb
openoffice.org-hyphenation
gstreamer0.10-fluendo-mp3
linux-headers-3.13.0-29    

यह कैसे काम करता है

  1. मैन्युअल रूप से स्थापित पैकेजों की सूची प्राप्त करें। अभिरुचि के लिए, अतिरिक्त sedस्ट्रिप्स लाइन के अंत में शेष व्हाट्सएप से बाहर निकलते हैं।
  2. ताजा स्थापित करने के ठीक बाद स्थापित पैकेजों की सूची प्राप्त करें।
  3. फ़ाइलों की तुलना करें, केवल फ़ाइल 1 में मौजूद लाइनों को आउटपुट करें जो फ़ाइल 2 में मौजूद नहीं हैं।

अन्य संभावनाएं भी काम नहीं करती हैं:

  • का उपयोग करते हुए ubuntu-14.04-desktop-amd64.manifestफ़ाइल ( यहाँ Ubuntu 14.04 के लिए) के बजाय /var/log/installer/initial-status.gz। अधिक पैकेज मैन्युअल रूप से इंस्टॉल किए गए दिखाए जाते हैं भले ही वे नहीं हैं।
  • के apt-mark showautoबजाय का उपयोग कर /var/log/installer/initial-status.gzapt-markउदाहरण के लिए, xserver-xorg पैकेज शामिल नहीं है, जबकि दूसरी फ़ाइल करती है।

दोनों उपरोक्त समाधान की तुलना में अधिक संकुल को सूचीबद्ध करते हैं।


0

मैं पक्षपाती हूं, और मेरे द्वारा प्रस्तुत समाधान हमेशा संभव नहीं है, लेकिन मैं इस स्थिति से थक गया हूं। इसका परिणाम यह है कि मैं अब अपडेट / पैकेज मैनेजर टूल के साथ कुछ भी इंस्टॉल नहीं करता हूं।

मैंने हालांकि काफी कठिन रास्ता अपनाया (मुझे संस्करणों के लिए सख्त आवश्यकताएं थीं)। मैंने एक विशाल मेकफाइल बनाया जो मेरे होम डायरेक्टरी में हर पैकेज (प्रोग्राम, लाइब्रेरी, जो भी हो) को डाउनलोड, संकलित और स्थापित करता है। मैंने इसे स्टेप वाइज विकसित किया, पीस बाय पीस। मेकफ़ाइल सब कुछ डाउनलोड करता है और संकलित करता है, यहां तक ​​कि कंपाइलर भी।

जब मैं एक नई प्रणाली में जाता हूं, या फिर से इंस्टॉल होता हूं, तो मैं सिर्फ मेकफाइल (प्लस कुछ सहायक सामान) की प्रतिलिपि बनाता हूं, दुनिया बना देता हूं और अगले दिन वापस आता हूं।

मेरे द्वारा विकसित किए जाने वाले कुछ कार्यक्रमों के लिए (इसलिए मेरा नियंत्रण है), मैं एक उपकरण का उपयोग करता हूं जो मैंने क्रमादेशित किया, चेस्टनट पैकेज मैनेजर । MacOSX पर .app फ़ोल्डरों की तरह। सब कुछ पैकेज में है, इसलिए मुझे पता है कि किसी भी समय क्या स्थापित किया गया है, और मुझे पता है कि यह स्वयं निहित है और पर्याप्त आत्म है (सिस्टम के कामों को छोड़कर)


आप पैकेज मैनेजर को स्क्रिप्ट में कमांड स्थापित करने के लिए बस एक ही प्रभाव डाल सकते हैं; यह मानते हुए कि आपको जिस कोड की आवश्यकता है वह पैक किया गया है। आपका दृष्टिकोण gentoo के समान है।
wenenen

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

हां, लेकिन अतिरिक्त मुद्दे के साथ कि ubuntu / fink / darwinports सामान हर जगह क्रॉस प्लेटफॉर्म पर काम नहीं करता है (मैं एक बार डिजिटल और एक आईबीएम 4 पर था)। मुझे नहीं लगता कि यह जाने का एक अच्छा तरीका है। मैं सिर्फ यह कहता हूं कि यह काम करता है, भले ही बदसूरत, बदबूदार तरीके से, और मैं पूरी तरह से अपने सिस्टम पर नियंत्रण रखता हूं।
स्टेफानो बोरीनी

बेशक, मैं इन दिनों में से एक को वास्तव में उभरने और इसके साथ सब कुछ पुनः प्राप्त करने के लिए एक गंभीर रूप लेने का फैसला कर सकता था।
स्टेफानो बोरीनी जूल

यह पथ इन दिनों अधिक सामान्य है जब आप शेफ और कठपुतली जैसे उपकरणों पर विचार करते हैं।
स्टीव बुज़ोनस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.