मैन्युअल रूप से स्थापित पैकेजों की सूची बनाना और व्यक्तिगत पैकेजों की क्वेरी करना


183

मैं पैकेजों की एक सूची मैन्युअल रूप से स्थापित करना चाहता हूं aptया aptitudeयह पता लगाने में सक्षम हूं कि क्या foobarपैकेज मैन्युअल रूप से या स्वचालित रूप से स्थापित किया गया था। क्या कमांड लाइन से ऐसा करने का कोई साफ तरीका है?


स्टॉक पैकेज को फ़िल्टर करने वाले समाधान के लिए unix.stackexchange.com पर यह उत्तर देखें ।
डिर्क बर्गस्ट्रॉम

संभव डुप्लिकेट? - askubuntu.com/questions/365
जेआरजी


वास्तव में अच्छा समाधान जो डिफ़ॉल्ट रूप से इंस्टॉल किए गए पैकेजों को बाहर करता है: उबंटू सूची ने स्पष्ट रूप से स्थापित पैकेजों को
PCworld

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

जवाबों:


206

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

का उपयोग कर 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 पैकेज शामिल नहीं है, जबकि दूसरी फ़ाइल करती है।

मैंने संदर्भ के रूप में विभिन्न अन्य StackExchange पोस्ट का उपयोग किया, हालांकि कोई भी काम नहीं करता है और साथ ही उपरोक्त समाधान:

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

संपादित करें: यदि आपने पिछली रिलीज़ से अपग्रेड किया है तो क्या करें:

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


7
यह मेरे लिए काम नहीं किया क्योंकि /var/log/installer/initial-status.gzगायब है। इसके अलावा, मैं जानना चाहता हूं कि क्या यह एप्टस मार्किंग के आधार पर है manualया नहीं?
अनवर

1
काश, सर्वर संस्करणों के लिए कोई प्रकट न हो।
अंटी हापला

मैंने showmanualकमांड (नीचे) चलाई । और commदो (क्रमबद्ध) सूचियों की तुलना करने के लिए उपयोग करें। showmanualपरिणाम मुझे 1,840 दिया और अधिक से अद्वितीय संकुल apt-mark showmanualनहीं इस विधि द्वारा दिखाया गया है। commNO- पैकेज इस -कमांड के आउटपुट के लिए अद्वितीय थे । मुझे लगता है कि मेरे पीसी के लिए रिकॉर्ड करना अधिक दिलचस्प है, दोनों परिणामों में 894 पैकेज सूचीबद्ध हैं। यकीन नहीं है कि इस तरह की एक विसंगति क्यों है। कुछ (कई?) पैकेज विशिष्ट रिलीज़ होते प्रतीत होते हैं। अन्य XOrg, GTK घटकों और lib*चीजों को अपडेट किया जा सकता है। वैसे भी यह जवाब बहुत अच्छी शुरुआत है।
इच्छा

मैंने सिर्फ आपके समाधान की तुलना की है apt-mark showmanual। यह दिलचस्प है कि कितने अंतर दिखाई देते हैं। आपकी सूची में 238 पैकेज हैं जबकि शोमैनुअल 1717 पैकेज हैं। 2179 स्थापित पैकेजों में, दोनों सूचियों में केवल 223 हैं, 15 केवल आप में हैं (उदाहरण: नोडज, लाइटमेड) और 223 केवल शोमैनुअल में हैं (उदाहरण: xserver-xorg, ubuntu-desktop)। ऐसा लगता है कि आपकी सूची अधिक उपयोगी है, लेकिन बिना ये जाने कि ये अंतर कहां से आया है, यह तय करना आसान नहीं है ... (लेकिन मुझे पूरा यकीन है कि मैंने मैन्युअल रूप से nginx और lightdm स्थापित किया है ...) [क्षमा करें कि मैंने अभी लिखा है वही;)]
डैनियल एल्डर

64

पैकेज apt के नए संस्करणों में, apt-mark कमांड भी है

apt-mark showmanual

35
यह मैन्युअल रूप से स्थापित किए गए से अधिक पैकेज दिखाता है।
उमंग

1
@ युमंग आप सही कह रहे हैं। मैं कहूंगा कि यह ऐसा नहीं था जब मैंने यह उत्तर लिखा था। linux-image-3.11.0-*-genericमैनुअल आदि के रूप में विचार करने के लिए मेरे सिस्टम पर कोई कारण नहीं है
डैनियल एल्डर

1
@ युमैंग शायद इससे आपको askubuntu.com/questions/432743/… से मदद मिलेगी , लेकिन जवाब स्वीकार नहीं किया जाता है। तथ्य यह है कि, एक ताजा स्थापना के कई पैकेज पहले से ही मैनुअल के रूप में चिह्नित हैं। लेकिन अभी भी कुछ अजीब चीजें हैं। मेरे उदाहरण के साथ रहने के लिए: linux-image-3.13.0-24-genericमैनुअल है लेकिन वर्तमान linux-image-3.13.0-27-genericस्वचालित है। ऐसा लगता है कि एक संदर्भ पैकेज का उन्नयन (इस मामले में linux-image-generic, जिसने निर्भरताएं बदल दीं), मैनुअल चिह्न स्वचालित रूप से सेट है
डैनियल एल्डर

5
@DanielAlder को नए इंस्टॉलेशन के कुछ पैकेजों को मैनुअल के रूप में चिह्नित किया जाना चाहिए। यदि कोई पैकेज मैनुअल के रूप में चिह्नित नहीं है, तो पूरे सिस्टम को हटा दिया जा सकता है apt-get autoremove। यह निश्चित रूप से वह नहीं है जो आप चाहते हैं।
एंटोन के

2
यदि प्रारंभिक OS स्थापना के बाद उपयोगकर्ता द्वारा "मैन्युअल रूप से इंस्टॉल किया गया" का अर्थ "इंस्टॉल किया गया" है, तो यह सही उत्तर नहीं है।
सीमस

21

Ubuntu 16.04 के लिए, लॉग फ़ाइल देखें /var/log/apt/history.log

उदाहरण के लिए:

zgrep 'Commandline: apt' /var/log/apt/history.log /var/log/apt/history.log.*.gz

यह सही नहीं है, लेकिन यह बिल्कुल स्पष्ट है कि मैंने हाथ से क्या स्थापित किया है। -B 1यह स्थापित करने के लिए देखने के लिए grep पर रखें ।

उदाहरण आउटपुट

Commandline: apt install postgresql-9.5-plv8
Commandline: aptdaemon role='role-install-file' sender=':1.85'
Commandline: apt install task
Commandline: apt autoremove
Commandline: apt install atom
Commandline: apt upgrade
Commandline: apt-get install asciinema
Commandline: apt install iperf3
Commandline: apt upgrade
Commandline: apt-get install chromium-browser
Commandline: apt install joe cpanminus build-essential postgresql libdbd-pg-perl libcrypt-openssl-bignum-perl libcrypt-openssl-rsa-perl libio-socket-ssl-perl libnet-ssleay-perl libssl-dev
Commandline: aptdaemon role='role-commit-packages' sender=':1.2314'
Commandline: apt install git
Commandline: apt install sqlite
Commandline: apt install whois
Commandline: apt install libdbd-pg-perl
Commandline: apt install perl-doc
Commandline: apt upgrade

यकीन नहीं होता कि यह उठा aptitudeया नहीं। यह Ubuntu सॉफ्टवेयर डेस्कटॉप ऐप से इंस्टॉल लेने के लिए प्रतीत नहीं होता है।


1
वर्षों में सभी उत्तरों में से, यह एकमात्र ऐसा है जो 18.04 सर्वर के करीब आता है।
क्वेंटिन स्कूसन

20

apt-mark showauto | grep -iE '^foobar$' यदि पैकेज स्वचालित रूप से स्थापित किया गया था, तो "फोबार" का उत्पादन होगा, अन्यथा कुछ भी नहीं।

aptitude search '!~M ~i'उन पैकेजों को सूचीबद्ध करेगा जो स्वचालित रूप से इंस्टॉल नहीं किए गए थे। यह अफ़सोस है कि 10.10 से शुरू होने वाले उबंटू डेस्कटॉप पर डिफ़ॉल्ट इंस्टॉल का हिस्सा नहीं होगा।


aptitude searchसभी संकुल नहीं कि केवल वे जो मैन्युअल रूप से स्थापित कर रहे हैं पता चलता (मैं क्या ओ पी चाहता था मान लेते हैं कि)
ओली

1
@ ऑली: एप्टीट्यूड सर्च पैटर्न में देखें; पैटर्न मैं वहाँ उपयोग कर रहा हूँ बिल्कुल वही करना चाहिए जो ओपी चाहता है।
ली लो

मैंने उसे दौड़ाया । यह उन पैकेजों का एक पूरा लोड दिखाता है जो स्थापित नहीं हैं।
ओली

7
इसके साथ कुछ सही नहीं है, मैं उपयोग कर रहा हूं aptitude search '!~M ~i'और यह 1043 पैकेजों को सूचीबद्ध करता है। कोई तरीका नहीं है कि मैंने कई पैकेजों को मैन्युअल रूप से स्थापित किया है।
ThatGraemeGuy

यह निश्चित रूप से अनुरोध के अनुसार काम नहीं करता है, पहले से स्थापित पैकेजों को भी प्रिंट करता है।
इरफी

9

निम्न स्क्रिप्ट उन सभी पैकेजों को प्रिंट कर लेगी जो स्वचालित इंस्टॉल पर सेट नहीं हैं और इसलिए मैन्युअल रूप से इंस्टॉल किए गए थे:

#!/usr/bin/python

try:
    import apt_pkg
except ImportError:
    print "Error importing apt_pkg, is python-apt installed?"
    sys.exit(1)

apt_pkg.init()
STATE_FILE = apt_pkg.config.find_dir("Dir::State") + "extended_states"
auto = set()
tagfile = apt_pkg.TagFile(open(STATE_FILE))
while tagfile.step():
    pkgname = tagfile.section.get("Package")
    autoInst = tagfile.section.get("Auto-Installed")
    if not int(autoInst):
        auto.add(pkgname)
print "\n".join(sorted(auto))

यह इस बात पर आधारित है कि स्वचालित रूप से इंस्टॉल किए गए पैकेजों पर apt-mark कैसे प्रिंट करता है।


यार तुम ठीक हो सर। यह वास्तव में स्वीकृत उत्तर के विपरीत काम करता है।
इरफी

मेरे लिए पैकेज के एक जोड़े को दिखाएं --- निश्चित रूप से उनमें से बहुत कुछ गायब है।
रमनो

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

अजगर के नए संस्करणों में एक त्रुटि के sys.exit(1)बिना उपयोग कर import sysसकते हैं। या तो import sysउपयोग करें exit(1)
विदेहोनथ

7

सभी पैकेजों की एक सूची प्राप्त करने के लिए (स्थापित नहीं, उपयोगकर्ता द्वारा स्थापित या डिफ़ॉल्ट रूप से, सभी PPAs में स्थापित), aptनिम्नलिखित कार्य करता है:

apt list [option]

इसके लिए उपयोगी संभावित विकल्प हैं:

--installed केवल उन पैकेजों को प्रदर्शित करने के लिए जो सिस्टम पर इंस्टॉल किए गए हैं (कुछ 50,000+ में से)

--manual-installedउन पैकेजों को सूचीबद्ध करने के लिए जो स्पष्ट रूप से एक कमांड द्वारा सीधे या निर्भरता के रूप में स्थापित किए गए थे ।

वैकल्पिक रूप से, आप कर सकते हैं:

apt list --manual-installed | grep -F \[installed\] उन पैकेजों की एक सूची प्राप्त करने के लिए जो केवल उपयोगकर्ता कमांड और उनकी निर्भरता से उत्पन्न हुए थे, और उन पर अतिरिक्त जानकारी प्राप्त करने के लिए जैसे कि संस्करण और आर्किटेक्चर समर्थित (x86, x86_64, amd64, all, आदि)


5

जैसा कि कई लोगों ने टिप्पणी की है, apt-mark शोमैनुअल थोड़ा बुग्गी लगता है (और मैंने इसे बग 72729999 के रूप में रिपोर्ट किया है )। जब मैं इसका उपयोग कर रहा हूं, यह वास्तव में बहुत सारे सामानों की रिपोर्ट करता है जो लॉग इन नहीं किए गए हैं / var / lib / apt / Extended_states (जहां यह संग्रहीत किया जाना है) और apt-get लॉगिंग चीजों को इंस्टॉल किए गए अनुसार नहीं है / var / lib / apt / Extended_states (सिर्फ / var / lib / dpkg / स्थिति में)। ऊपर txwikinger द्वारा अजगर स्क्रिप्ट सीधे / var / lib / apt / Extended_states से आ रही है, लेकिन अगर आप आज इसका उपयोग कर रहे हैं तो सिंटैक्स काम नहीं कर सकता है (मेरा सिर्फ Kubuntu 13.10 के साथ त्रुटियों को उत्पन्न करना शुरू हुआ)। अद्यतन वाक्यविन्यास है:

#!/usr/bin/python
import sys

try:
    import apt_pkg
except ImportError:
    print "Error importing apt_pkg, is python-apt installed?"
    sys.exit(1)

apt_pkg.init()
STATE_FILE = apt_pkg.config.find_dir("Dir::State") + "extended_states"
auto = set()
tagfile = apt_pkg.TagFile(open(STATE_FILE))
while tagfile.step():
    pkgname = tagfile.section.get("Package")
    autoInst = tagfile.section.get("Auto-Installed")
    if not int(autoInst):
        auto.add(pkgname)
print "\n".join(sorted(auto))

मेरे लिए यह 5 आइटमों की एक बहुत छोटी सूची थी जो सटीक भी नहीं लगती है।


1
अजगर के नए संस्करणों में एक त्रुटि के sys.exit(1)बिना उपयोग कर import sysसकते हैं। या तो import sysउपयोग करें exit(1)
विदेहोनथ

4

मैं एक GUI समाधान देना चाहूंगा।

यहां छवि विवरण दर्ज करें

  1. खुला Synaptic Package Manager

  2. के लिए जाओ Status

  3. क्लिक करें Installed (manual)

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

दुर्भाग्य से मुझे यह पता लगाने के लिए कोई विकल्प नहीं मिला Custom Filtersकि क्या कोई foobarपैकेज मैन्युअल रूप से या स्वचालित रूप से स्थापित किया गया था।

यदि पैकेज के तहत है, Installedलेकिन Installed (manual)उसके तहत नहीं है तो यह स्वचालित रूप से स्थापित किया गया था। यदि पैकेज के तहत है Installed (manual)तो इसे मैन्युअल रूप से स्थापित किया गया था।


2

अगर कोई आपको apr-something कमांड का उपयोग करके एक अच्छा जवाब नहीं देता है तो आप इसे कठिन तरीके से कर सकते हैं । Apt-get अपनी जानकारी को / var / lib / apt / Extended_states में संग्रहीत करता है। स्वचालित रूप से स्थापित की गई कोई भी फ़ाइल इस फ़ाइल में जोड़ दी जाएगी। यदि आप मैन्युअल रूप से इस फ़ाइल में पहले से ही एक पैकेज स्थापित करते हैं, तो पैकेज इस फ़ाइल में रहेगा लेकिन दूसरी पंक्ति में ऑटो-स्थापित: 0 के साथ। इसे हटाया नहीं गया है।

नोट: अपेक्षित बेहतर उत्तर के रूप में यदि फ़ाइल प्लेसमेंट परिवर्तन दिखाई दिए हैं तो काम करने की संभावना है। मैं सिर्फ उस स्थिति में रखता हूं जब फ़ाइल स्थान की जानकारी उपयोगी होती है।


1
नहीं, मैंने उस फ़ाइल को देखने के लिए एक त्वरित रूप से देखा कि जीवनरक्षक को ऑटो-इंस्टॉल के रूप में चिह्नित किया गया था। मैंने किया apt-get install lifereaऔर यह स्थापित नहीं हुआ, लेकिन मुझे आउटपुट मिला जो "मैन्युअल रूप से इंस्टॉल किए गए" के प्रभाव के लिए कुछ था। अब जीवन रेखा अभी भी फ़ाइल में है, सिवाय इसके कि अगली पंक्ति में 0इसके बजाय एक है 1। इसके अलावा, आपको अपने रेगेक्स पैटर्न को " foobar$"केवल के बजाय बदलना चाहिए foobar
उमंग

यह सच है। मेरी गलती, मेरे सिस्टम में 0 के साथ कोई रेखा नहीं है, लेकिन यह एक दुर्लभ घटना होनी चाहिए। मैं उत्तर केवल मामले में अद्यतन करता हूं।
जेवियर रिवर

2

बहुत गुगली करने के बाद, मैं इस स्क्रिप्ट को इकट्ठा करने में कामयाब रहा। यह मेरे लिए ठीक काम करता है:

# List of all packages currently installed
current=$(dpkg -l | awk '{print $2}' | sort | uniq)

# List of all packages that were installed with the system
pre=$(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort | uniq)

# List of packages that don't depend on any other package
manual=$(apt-mark showmanual | sort | uniq)

# (Current - Pre) ∩ (Manual)
packages=$(comm -12 <(comm -23 <(echo "$current") <(echo "$pre")) <(echo "$manual") )

for pack in $packages; do
    packname=$(echo $pack | cut -f 1 -d ":")
    desc=$(apt-cache search "^$packname$" | sed -E 's/.* - (.*)/\1/')
    date=$(date -r /var/lib/dpkg/info/$pack.list)

    echo "# $desc"
    echo "# $date"
    echo "sudo apt-get install $pack"
    echo -e ""
done

आप sort -uइसके बजाय उपयोग कर सकते हैं sort | unique। जैसा कि apt-markआर्किटेक्चर प्रदर्शित नहीं करता है, आपको सेट संचालन (या उपयोग dpkg-query -W -f='${Package}\n') से पहले इसे dpkg के आउटपुट से अलग करना चाहिए । इसके अलावा, dpkg कुछ पैकेजों को सूचीबद्ध कर सकता है जो वर्तमान में स्थापित नहीं हैं। "Desc" के लिए, आप 'dpkg-query -W -f =' # $ {बाइनरी: सारांश} \ n '$ पैक का उपयोग कर सकते हैं, जो कि तेज़ है।
जर्नो

ओह, apt-markकुछ पैकेजों के लिए वास्तुकला प्रदर्शित कर सकते हैं, लेकिन इतने सारे के लिए नहीं dpkg -l
जारो

apt-cache searchधीमा है। अग्रिम में की तरह कुछ का उपयोग कर स्थापित दिनांकों की सूची प्राप्त करना help.ubuntu.com/community/ListInstalledPackagesByDate अधिक कुशल हो सकता है
opticyclic

1

जैसा कि ली लो ने कहा, apt-mark showautoआपको स्वचालित रूप से स्थापित चीजों की एक मोटी सूची प्राप्त करनी चाहिए।

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

नोट: यह इस बात का अधिक चित्रण है कि आप अपने सभी दोस्तों को बड़े पैमाने पर बैश आदेशों का भंडाफोड़ करते हुए कितने शांत दिखेंगे।

comm -3  <(dpkg-query --show -f '${Package} ${Status}\n' | \n
grep "install ok installed" | cut --delimiter=' ' -f 1) <(apt-mark showauto)

मैंने इसे पठनीयता के लिए दो लाइनों पर तोड़ दिया। यह क्या करता है?

  • पहले हम स्थापित किए गए पैकेजों की सूची के लिए dpkg को क्वेरी करते हैं।
  • हम उन लोगों के लिए फ़िल्टर करते हैं जो वास्तव में स्थापित हैं (न कि केवल अवशिष्ट विन्यास)
  • हम स्टेटस को काट देते हैं
  • हम उस सूची की तुलना स्वचालित सूची से करते हैं apt-mark
  • हम बाहर रॉक क्योंकि हम कर सकते हैं।

मुझे शक है कि यह सही है, क्योंकि dpkg अक्सर उन पैकेजों को दिखाता है जो स्थापित नहीं हैं
txwikinger

मुझे पता है कि आपका क्या मतलब है लेकिन मेरा बैश-फू काफी मजबूत नहीं है। मुझे पता है कि आप dpkg-query से स्थिति दिखा सकते हैं, नीचे grep कर सकते हैं और फिर स्थिति को बंद कर सकते हैं। मुझे जाना होगा।
ओली

comm -3 <(dpkg -l | grep '^ii' | cut -d \ -f 3|sort) <(apt-mark showauto|sort)ठीक से बेहतर है;)
17:00 पर LassePoulsen

-1

यह बिना सिस्टम के सभी मैन्युअल रूप से स्थापित पैकेजों की सूची देगा: निर्भरता, अनइंस्टॉल किए गए पैकेज, सिस्टम स्थापना के दौरान स्थापित पैकेज।

unopts() {
  in=`cat`
  echo "$in" | sed -r 's/ --[^ ]+//g;s/ -[^ ]+//g'
}

list() {
  cat '/var/log/apt/history.log' |
  grep --color=never -v '\-o APT::Status-Fd=4 \-o APT::Keep-Fds::=5 \-o APT::Keep-Fds::=6' |
  egrep --color=never "Commandline: apt-get.* $1" |
  sed -r "s/Commandline: apt-get//;s/ $1//" |
  unopts |
  tr ' ' '\n' |
  sed '/^$/d'
}

hapt() {
  tmp=`mktemp -d`
  installed=$tmp/installed
  deleted=$tmp/deleted
  dpkg=$tmp/dpkg
  list 'install' > $installed
  list '(remove|purge|autoremove)' > $deleted
  dpkg --get-selections |
  grep -v 'deinstall' |
  cut -f 1 > $dpkg
  while read package
  do
    sed -i "0,/$package/{//d;}" $installed
  done < $deleted
  while read package
  do
    if [ -z "`grep --color=never "^$package$" $dpkg`" ]
    then
      sed -i "0,/$package/{//d;}" $installed
    fi
  done < $installed
  cat $installed
  rm -r $tmp
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.