स्पष्ट रूप से स्थापित पैकेजों की सूची दें


53

जेंटू में वह फ़ाइल होती /var/lib/portage/worldहै जिसमें ऐसे पैकेज होते हैं जिन्हें मैंने स्पष्ट रूप से स्थापित किया है। स्पष्ट रूप से मेरा मतलब है, वे पैकेज जो मैं चुनते हैं, न कि डिफ़ॉल्ट रूप से इंस्टॉल की गई कोई भी चीज, या निर्भरता द्वारा खींचा गया।

क्या उबंटू में उस जानकारी को खोजने के लिए एक समान फाइल या एक कमांड है?

जवाबों:


46

सिर्फ कोड

aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt
wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest \
  | cut -f1 | sort -u > defaultinstalled.txt
comm -23 currentlyinstalled.txt defaultinstalled.txt

व्याख्या

इस समस्या के बारे में सोचने का एक तरीका यह है कि इसे तीन भागों में तोड़ दिया जाए:

  • मुझे आश्रितों के रूप में स्थापित पैकेजों की सूची कैसे मिलेगी?
  • मुझे डिफ़ॉल्ट रूप से स्थापित पैकेजों की सूची कैसे मिलेगी?
  • मैं इन दो सूचियों के बीच अंतर कैसे प्राप्त कर सकता हूं?

मुझे आश्रितों के रूप में स्थापित पैकेजों की सूची कैसे मिलेगी?

निम्नलिखित कमांड मेरे सिस्टम पर काम करती है:

$ aptitude search '~i !~M' -F '%p' --disable-columns | sort -u > currentlyinstalled.txt

इसी तरह के दृष्टिकोण लिंक में पाए जा सकते हैं जो गिल्स ने प्रश्न के लिए एक टिप्पणी के रूप में पोस्ट किया था। कुछ स्रोतों का दावा है कि यह केवल तभी काम करेगा जब आप संकुल को स्थापित करने के लिए उपयुक्तता का उपयोग करेंगे; हालाँकि, मैंने पैकेजों को स्थापित करने के लिए लगभग कभी भी उपयोग नहीं किया और पाया कि यह अभी भी काम कर रहा है। --disable-columnsरोकता है रिक्त स्थान है कि तुलना में नीचे में बाधा आएगी साथ पैकेज के नाम की गद्दी लाइनों से योग्यता। | sort -uप्रकार फ़ाइल और डुप्लिकेट को हटा। यह अंतिम चरण को बहुत आसान बनाता है।

मुझे डिफ़ॉल्ट रूप से स्थापित पैकेजों की सूची कैसे मिलेगी?

नोट: यह खंड एक 'गलत रास्ते' से शुरू होता है, जो मुझे लगता है कि उदाहरण है। कोड का दूसरा टुकड़ा वह है जो काम करता है।

यह थोड़ा पेचीदा मामला है। मैंने शुरू में सोचा था कि एक अच्छा सन्निकटन उन सभी संकुल का होगा जो मेटा-संकुल के निर्भरताएँ हैं ubuntu-minimal, ubuntu-standard, ubuntu-desktop, और विभिन्न लिनक्स कर्नेल संबंधित पैकेज। Google खोजों पर कुछ परिणाम इस दृष्टिकोण का उपयोग करने के लिए लग रहा था। इन निर्भरताओं की सूची प्राप्त करने के लिए, मैंने पहली बार निम्नलिखित कोशिश की (जो काम नहीं किया):

$ apt-cache depends ubuntu-desktop ubuntu-minimal ubuntu-standard linux-* | awk '/Depends:/ {print $2}' | sort -u

यह कुछ पैकेजों को छोड़ देता है जो मुझे पता है कि डिफ़ॉल्ट रूप से आना था। मेरा अब भी मानना ​​है कि अगर किसी व्यक्ति को मेटापैक की सही सूची का निर्माण करना है तो यह तरीका काम करना चाहिए।

हालांकि, ऐसा लगता है कि उबंटू दर्पण में एक "मैनिफ़ेस्ट" फ़ाइल होती है जिसमें डिफ़ॉल्ट इंस्टॉल में सभी पैकेज होते हैं। Ubuntu 12.04.3 के लिए यहाँ प्रकट होता है:

http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest

यदि आप इस पृष्ठ (या आपके करीब दर्पण का पृष्ठ) के माध्यम से खोज करते हैं:

http://mirror.pnl.gov/releases/precise/

आपको ".manifest" फ़ाइल खोजने में सक्षम होना चाहिए जो आपके द्वारा उपयोग किए जा रहे संस्करण और आर्किटेक्चर से मेल खाती है। सिर्फ पैकेज के नाम निकालने के लिए मैंने ऐसा किया:

wget -qO - http://mirror.pnl.gov/releases/precise/ubuntu-12.04.3-desktop-amd64.manifest | cut -f1 | sort -u > defaultinstalled.txt

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

मैं इन दो सूचियों के बीच अंतर कैसे प्राप्त कर सकता हूं?

यह सबसे आसान हिस्सा है क्योंकि अधिकांश यूनिक्स जैसी प्रणालियों में ऐसा करने के लिए कई उपकरण हैं। commउपकरण यह करने के लिए कई मायनों में से एक है:

comm -23 currentlyinstalled.txt defaultinstalled.txt

यह उन पंक्तियों की सूची को प्रिंट करना चाहिए जो पहली फ़ाइल के लिए अद्वितीय हैं। इस प्रकार, इसे स्थापित संकुल की एक सूची मुद्रित करनी चाहिए जो डिफ़ॉल्ट रूप से स्थापित नहीं है।


आपकी पहली पाइपलाइन क्या करती aptitude search '~i!~M' -F %pहै?
४०:०४

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

1
आप मेरी आशा को नष्ट करते हैं, मुझे लगा कि कुछ मानक आसान तरीका है :(
phunehehe

3
यह लगभग काम करता है, लेकिन अभी भी सही नहीं है। कई पैकेज और लाइब्रेरी हैं जिन्हें मैं निश्चित रूप से परिणामी सूची में मैन्युअल रूप से स्थापित नहीं करता था। मैंने इस्तेमाल किया http://releases.ubuntu.com/releases/trusty/ubuntu-14.04-desktop-amd64.manifestऔर अतिरिक्त | sed "s/ *$//"लेकिन फिर भी कोई पासा नहीं।
jmiserez

1
पहले चरण में निर्भरता के रूप में स्थापित नहीं किए गए पैकेजों की एक सूची मिलती है apt-mark showmanual | sort -u, जिन्हें अन्य उत्तरों में दिखाया गया है। सरल, और उस पर निर्भर नहीं करता है aptitudeजो डिफ़ॉल्ट रूप से स्थापित नहीं है।
स्कैडल'

24

आप इन दोनों में से किसी एक लाइनर का उपयोग कर सकते हैं। दोनों मेरी मशीन पर सटीक समान आउटपुट देते हैं और इस प्रश्न में अब तक (जुलाई 2014) प्रस्तावित सभी समाधानों की तुलना में अधिक सटीक हैं। वे दो उत्तरों (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 पैकेज शामिल नहीं है, जबकि दूसरी फ़ाइल करती है।

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


यदि आपने अपनी प्रारंभिक स्थापना के बाद से अपने सिस्टम को अपग्रेड किया है (जो कि ज्यादातर लोगों के लिए मेरे विचार से मामला है), तो अपने वर्तमान उबंटू रिलीज़ संस्करण की घोषणा फ़ाइल का उपयोग करना बेहतर है।
डिएगो वी

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

मैं प्रसन्न हूँ! मुझे एक लापता टुकड़ा मिला। उन पैकेजों के बारे में जो शुरू में स्थापित किए गए थे, लेकिन फिर मैन्युअल रूप से हटा दिए गए थे , हालांकि, बाद में मैन्युअल रूप से पुन: स्थापित किया गया ? मुझे यह एक कार्य प्रणाली में मिला।
n611x007

1
मैंने एक प्रश्न यूनिक्स किया है। ईएसई / 225330: नौकरी के थोक पते के लिए स्पष्ट रूप से हटाए गए पैकेज (उपयुक्त) सूची
n611x007

1
यह स्वीकृत समाधान से बेहतर है, क्योंकि दर्पणPnl.gov/releases/precise/… स्वीकृत समाधान में URL अब 404 है।
rmunn

9

के अनुसार man apt-mark:

apt-mark showauto
apt-mark showmanual

2
showmanualचीजों को दिखा रहा है जैसे xserver-xorg-video-vesa, जो मैं कसम खाता हूं कि मैंने मैन्युअल रूप से स्थापित नहीं किया था।
फुनेहे

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

8

यहाँ कुछ नमूना उत्पादन है cat /var/log/apt/history.log:

Start-Date: 2011-01-22  00:43:38
Commandline: apt-get --target-release experimental install libdbus-1-dev
Upgrade: libdbus-1-3:i386 (1.4.0-1, 1.4.1-1), libdbus-1-dev:i386 (1.4.0-1, 1.4.1-1)
End-Date: 2011-01-22  00:43:48

Start-Date: 2011-01-23  01:16:13
Commandline: apt-get --auto-remove purge webcheck
Purge: python-utidylib:i386 (0.2-6), python-beautifulsoup:i386 (3.1.0.1-2), libtidy-0.99-0:i386 (20091223cvs-1), webcheck:i386 (1.10.3)
End-Date: 2011-01-23  01:16:31

अपने प्रश्न के लिए, सामान को grep ( cat /var/log/apt/history.log | grep Commandline) के साथ फ़िल्टर करें ।

ध्यान दें कि इन फ़ाइलों को घुमाया जाता है, इसलिए दूसरों के लिए जांचें ताकि आपको कुछ भी याद न हो:

$ ls /var/log/apt/history.log*
-rw-r--r-- 1 root root 69120 2011-01-23 18:58 /var/log/apt/history.log
-rw-r--r-- 1 root root 19594 2011-01-01 02:48 /var/log/apt/history.log.1.gz

नोट :

  • मैंने एप्टीट्यूड और सिनैप्टिक ( क्रमशः 0.70 और 0.6.3 दोनों) की जाँच की है, और वे दोनों उस लॉग फ़ाइल पर अपनी गतिविधियों को लॉग करते हैं। उनके साथ एक झटका यह है कि उनके पास शुरू होने वाली रेखा नहीं है Commandline, इसलिए grepचाल उनके साथ काम नहीं करेगी।

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

@ जल्द ही अपडेट किया गया। मेरा जीआरपी-फू एक नौसिखिए का है, इसलिए मैं पाठक को छोड़ दूँगा। इसके अलावा, मुझे नहीं पता कि बात दूर तक घूमती है या नहीं। मुझे केवल वहां खुद फाइल करनी है।
tshepang

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

7

जब मैं इस प्रश्न की खोज कर रहा था, तो मैं इस सुंदर ऑन्लाइनर के पार आ गया

एक लाइनर है

comm -13 \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  )`

यह ऑनलाइनर सिस्टम लॉग्स के उपयोग से सिस्टम द्वारा संस्थापित पैकेज को फिल्टर करता है /var/log/installer/initial-status.gz

जब मैंने पाया कि मैं मूल थ्रेड का लिंक पोस्ट करूंगा, क्योंकि यह ऑनलाइनर मेरा नहीं है और मुझे यह याद नहीं आ रहा है कि मैंने इसे कहाँ देखा था।


3

आप इस लेख पर एक नज़र डालना चाहेंगे ।

लेख के अंत में, एक अजगर स्क्रिप्ट है जो आपको चाहिए वह करना चाहिए।

यह (k) ubuntu के लिए लिखा गया था । लेकिन उबंटू के लिए काम करना चाहिए ।


3
लिंक अब काम नहीं कर रहा है।
rog

2
इस तरह से टूटे हुए लिंक आपके जवाब में प्रासंगिक जानकारी को शामिल करना महत्वपूर्ण है।
व्हाइटहट101

2

नीचे स्टीवन डी के जवाब के लिए एक अतिरिक्त है ।

निम्न पंक्ति 32 अक्षरों पर संकुल नामों को काटती हुई प्रतीत होती है:

aptitude search '~i !~M' | cut -d" " -f4 | sort -u > currentlyinstalled.txt

यह काम करने लगता है:

aptitude search '~i !~M' -F "%p" > sort -u > currentlyinstalled.txt

इस उत्तर को देखें


1

चेक आउट /var/log/apt/term.log


2
चीजों को करने के लिए यह एक दर्दनाक तरीका है, और मैं खुद को स्थापित करने वाले पैकेजों के बीच कोई अंतर नहीं करता हूं, और उन पर निर्भरता द्वारा खींचा गया है
phunehehe

मैं सहमत हूं, लेकिन मुझे नहीं पता था कि उपयुक्त उन पर नज़र रखता है: / अब मुझे पता है, स्टीफन के लिए धन्यवाद :)
Joril

1

आप फ़ाइल को भी देख सकते हैं /var/lib/apt/extended_states

cat /var/lib/apt/extended_states | grep -B2 'Auto-Installed: 0'

यह उपयोगी है यदि आप जानना चाहते हैं कि एक पुराने विभाजन पर क्या स्थापित किया गया था।


0

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

info='/var/lib/dpkg/info/'

comm -13 > /tmp/packages \
  <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort) \
  <(comm -23 \
    <(dpkg-query -W -f='${Package}\n' | sed 1d | sort) \
    <(apt-mark showauto | sort) \
  )

while read n; do
  echo $(ls -ltr --time-style=long-iso $info$n.* $info$n:i386.* $info$n:amd64.* 2>/dev/null \
    | tail -n 1 | perl -pe 's/.*([0-9]{4}?-.*:[0-9]{2}?).*/\1/') $n
done < /tmp/packages | sort
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.