क्या यह उपयुक्त-प्राप्त इंस्टॉल कमांड को पूर्ववत् करना संभव है?


67

मैंने अपने Xubuntu इंस्टॉल (एक लाइव यूएसबी) पर कारपैडियो स्थापित किया, जिसने तब 50 से अधिक पैकेजों की तरह खींचा, मुझे लगता है, रिपॉजिटरी का उबंटू पक्ष। अब मैं इसे पूर्ववत करना चाहूंगा। हालांकि मेरे सभी शिकार के लिए, मुझे इससे अधिक उपयोगी कुछ भी नहीं मिल सकता है कि मैं कैसे sudo apt को इंस्टाल कमांड प्राप्त कर सकता हूं , जो सिर्फ सुझाव देता है apt-get purge। यह उपयोगी नहीं है क्योंकि यह सब 2 पैकेज (कारपैडियो और कारपैडियो-ग्नोमेपेल) को हटा देता है।

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

इतिहास लॉग का एक छोटा सा नमूना (पूरी सूची का 1 / 5-1 / 10)

कमांडलाइन: apt-get Install cardapio-gnomepanel
स्थापित करें: libdbusmenu-qt2: amd64 (0.9.2-0ubuntu1, automatic), पायथन-पैकेजकिट: amd64 (0.7.2-4ubuntu3, automatic), कप-पीके-हेल्पर: dd64 (0.2.1.2-1ubuntu0.1, स्वचालित) , geoclue: amd64 (0.12.0-1ubuntu12, ऑटोमैटिक), एकता: amd64 (5.18.0-0ubuntu1, Automatic), इंडिकेटर-प्रिंटर: amd64 (0.1.6-0ubuntu1, Automatic), libevolution: amd64 (3.2.3- 0ubuntu6, automatic), libqt4-घोषणापत्र: amd64 (4.8.1-0ubuntu4.3, स्वचालित), libmtp9: amd64 (1.1.3-1ubuntu0.1, स्वचालित), ट्रैकर-माइनर-एफएस: amd64 (0.14.0-2ubuntu1) , स्वचालित), gir1.2-rb-3.0: amd64 (2.96-0ubuntu4.2, स्वचालित), python-aptdaemon.pkcompat: amd64 (0.43 + bzr805buntu7, स्वत:), सूक्ति-मीडिया: amd64 (3.4.0- 0ubuntu3.1, स्वचालित), मेटासिटी: amd64 (2.34.1-1ubuntu11, ऑटोमैटिक), nautilus: amd64 (3.4.2-0ubuntu6, automatic), libcompizconfig0: amd64 (0.9.7.0 ~ bzr428-0ubuntu6, Automatic), compiz- compiz- प्लग-इन-डिफ़ॉल्ट:amd64 (0.9.7.12-0ubuntu1, Automatic), libunistring0: amd64 (0.9.3-5, स्वचालित), libebackend-1.2-1: amd64 (3.2.3-0ubuntu7, ऑटोमैटिक), ubuntu-docs: amd64 (12.04.6) , स्वचालित), अजगर-माको: amd64 (0.5.0-1, स्वचालित),

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

इंस्टॉल और अनइंस्टॉल के बीच, केवल बड़ा बदलाव इंस्टॉल हो रहा था xubuntu-restricted-extras


4
इस मामले में मदद करने के लिए थोड़ा देर हो गई है, लेकिन अगली बार जब आप कुछ स्थापित करना चाहते हैं, तो पहले एक सिमुलेशन करने पर विचार करें। भागो sudo apt-get install -s packageजहां -sएक सिमुलेशन को दर्शाता है और packageउपयुक्त सॉफ़्टवेयर के नाम से बदल दिया जाएगा।

@ vasa1 हां, मैं इस बारे में अपने आप को पीट रहा हूं। apt-get पूछता है [Y / n] साथ ही, जो मेरा होना चाहिए था ..
कार्तिक टी

मुझे "अनावश्यक" के रूप में सिर्फ 1 अन्य अजगर संबंधित पैकेज (अजगर-कीबाइंडर या सुमैट) मिला है क्या आपने वास्तव में cardapio-gnomepanelपैकेज को हटा दिया है?
गीर्टविज्क

@gertvdijk हां, apt-get remove carpadioउस एक को भी साथ ले लिया।
कार्तिक टी

1
@ कार्तिक फिर मैं पूरी तरह से खो गया हूं कि autoremoveआपके लिए काम क्यों नहीं कर रहा है। या तो आपने किसी भी तरह सभी पैकेजों को मैन्युअल रूप से स्थापित किया है या अब एक गलतफहमी है। यह बहुत सरल है: apt-get autoremoveबस सभी स्वचालित रूप से इंस्टॉल किए गए चिह्नित पैकेजों को बिना किसी कारण के निकाल देता है। यदि यह आपके लिए काम नहीं करता है, तो मुझे लगता है कि आपने अपने सिस्टम पर कुछ बदल दिया है जो आपने अपने प्रश्न में नहीं बताया है।
gertvdijk

जवाबों:


79

मूल रूप से, आपको apt-get removeपैकेज (या apt-get purge) दोनों का पैकेज लेना होगा औरapt-get autoremove उसके बाद चलना होगा , ताकि इसकी स्थापना वापस हो सके package-one

आइए पूरी प्रक्रिया देखें:

  • sudo apt-get install package-one यह "स्वचालित" के रूप में चिह्नित 50 निर्भरताएं स्थापित करता है क्योंकि आपके प्रश्न में लॉग अंश से भी देखा जा सकता है

  • sudo apt-get purge package-one निकालता है (purges) सिर्फ एक, लेकिन इसे चलाते हैं!

    सभी निम्नलिखित स्थापित क्रियाएं (यदि आप किसी भी चलाते हैं) में अब आवश्यक पैकेजों के साथ एक सूचना संदेश मिलेगा:

    The following packages were automatically installed and are no longer required:
      package-two package-three [...]
    Use 'apt-get autoremove' to remove them.
    

    यह सूची मूल रूप से उन सभी पैकेजों की एक सूची है जो उन पर रिवर्स निर्भरता के बिना "स्वचालित" के रूप में चिह्नित हैं। दूसरे शब्दों में, जहाँ तक पैकेज प्रबंधन का संबंध है, उनके स्थापित होने का कोई कारण नहीं है।

    नोट: कोई स्थापना की आवश्यकता है! यह केवल यह प्रदर्शित करने के लिए है कि एपीटी आपको अपने अनावश्यक पैकेजों के बारे में बताने के लिए स्मार्ट है!

  • sudo apt-get autoremove --purge इन (हटाता है)

अधिक जानकारी


2
इसमें ओपी ने एकता और उसके सभी दोस्तों को खींच लिया है। मुझे संदेह है कि कार्डियो को शुद्ध करने से ऑटोरेमोव के बाद भी एकता आदि को हटा दिया जाएगा।

@ वासा 1 क्यों? पैकेजों को 'स्वचालित रूप से स्थापित' के रूप में चिह्नित किया जाता है (जैसा कि प्रश्न में देखा जा सकता है) और यदि सिस्टम पर स्थापित होने के लिए कोई कारण नहीं पाया जा सकता है, तो उन्हें हटाने का उपयोग करने के लिए सुझाव दिया जाएगा autoremove
गीर्टविज्क

हां, मैं "स्वचालित" के बारे में सोच रहा था। यदि वह ऑटोरेमोवाल इंगित करने के लिए कार्य करता है तो अच्छा है। ओपी को तब कोई समस्या नहीं होनी चाहिए।

@ वासा 1 द्वारा @gertvdijk अच्छी पकड़, pls मेरा संपादन देखें। autoremoveकोई सहायता नहीं की।
कार्तिक टी

@gertvdijk, "बाद में स्थापित क्रियाएं" के लिए, sudo apt-get updateपर्याप्त होगा?

19

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

sudo apt-get purge package
sudo apt-get --purge autoremove

लेकिन aptक्रियाओं को पूर्ववत करने के लिए, आप apt-undoस्क्रिप्ट का उपयोग कर सकते हैं । यह एक सरल स्क्रिप्ट है जो aptउबंटू में किए गए कार्यों को पूर्ववत कर सकती है । यह ध्यान दिया जाना चाहिए कि यह स्क्रिप्ट केवल तभी काम कर सकती है जब आप इसका उपयोग apt-getअपने पैकेजों को स्थापित / अपग्रेड / निकालने / हटाने / डाउनग्रेड करने के बजाय करते हैं।

apt-undoUbuntu में स्थापित करने के लिए , टर्मिनल में निम्नलिखित कमांड चलाएं:

sudo add-apt-repository ppa:lkjoel/apt-undo
sudo apt-get update
sudo apt-get install apt-undo

उपयोग:

apt-undo install yourpackages
apt-undo remove yourpackages
apt-undo purge yourpackages
apt-undo upgrade
apt-undo dist-upgrade
apt-undo install yourpackages=old.version
apt-undo install yourpackages=new.version

पूर्ववत करने के लिए, उपरोक्त aptitudeक्रियाएं टर्मिनल में आदेशों का पालन करती हैं:

apt-undo undo

1
धन्यवाद, मैं इस पार आया, और यह बिल्कुल वैसा ही लग रहा था जैसा कि डॉक्टर ने आदेश दिया था, जब तक कि मैंने उस चेतावनी को नहीं देखा था जिसे मुझे इसे स्थापित करने के लिए उपयोग करने की आवश्यकता थी, पूर्ववत करने में सक्षम होने के लिए ..
कार्तिक टी

1
अच्छा पकड़ा। बहुत भ्रामक वाक्यविन्यास, हालांकि। और मैं वास्तव में अच्छी तरह से परीक्षण किए गए कोर एपीटी आवेदन के विकल्पों का उपयोग करना पसंद नहीं करता। अभी भी +1!
गर्टवडिज्क

7

यूनिक्स की शक्ति का उपयोग करें। आपके पास मौजूद लॉग फ़ाइल लाइन को लें, और एक कमांड का निर्माण करें जो उपयुक्त नहीं होगा। उदाहरण के लिए:

$ echo 'Install: libdbusmenu-qt2:amd64 (0.9.2-0ubuntu1, automatic), python-packagekit:amd64 (0.7.2-4ubuntu3, automatic), cups-pk-helper:amd64 (0.2.1.2-1ubuntu0.1, automatic),'|perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //'
libdbusmenu-qt2:amd64 python-packagekit:amd64 cups-pk-helper:amd64

तो आप अपने लॉग फ़ाइल से उपयुक्त लाइन को देखते हुए, गलती से इंस्टॉल किए गए इस पैकेज का उपयोग कर सकते हैं:

$ dpkg -P $(echo '(full log line here)' | perl -pe 's/ \(.*?\)//g; s/,//g; s/^Install: //')

(मैंने perlइसके बजाय इसका उपयोग किया है sedक्योंकि sedएक प्रकार की नियमित अभिव्यक्ति का उपयोग किया जाता है जो गैर-लालची मैचों का समर्थन नहीं करता है, जो कि मेरी ज़रूरत के निर्माण का सबसे आसान तरीका है)


1
अच्छी पटकथा, लेकिन यह वास्तव में केवल आज्ञाओं का क्रम होना चाहिए जिसे लोग इसे पूरा करने के लिए याद कर सकें।
gertvdijk

धन्यवाद, डराने वाली पटकथा, लेकिन मुझे डर था कि यह इस पर उतर जाएगी
कार्तिक टी

1
मैंने अपनी समान समस्या को हल करने के लिए बहुत समान कोड का उपयोग किया । मैंने कई चरणों में यह किया कि जो कुछ हो रहा था उसके बारे में अधिक सुनिश्चित हो। पहले मैंने aptएक नई फ़ाइल में लॉग से पाठ के प्रासंगिक ब्लॉक को कॉपी किया और फिर इसे इस पर लागू किया: perl -pe 's/\(.*?\)(, )?//g' /path/to/apt-history.log फिर मैंने जो किया वह उस आउटपुट के साथ sudo apt-get removeथा और मैं जाने के लिए अच्छा था!
इंस्पेरेटस

1

आप के बाद एक पैकेज निकालने के लिए, और आप के लिए, --purge जोड़कर इसे अच्छी तरह से हटा सकते हैं, apt-get remove --purge <package>यह आपको एक संदेश है कि पुस्तकालय संकुल उस में स्वचालित रूप से और अब आवश्यक स्थापित किए गए निकाला, इसके बाद से आप चला सकते हैं देना चाहिए apt-get autoremoveकरने के लिए उन्हें हटा दो।


धन्यवाद, लेकिन ऑटोरेमोव इस मामले में अपर्याप्त साबित हुआ। कृपया मेरा संपादन देखें।
कार्तिक टी

1

के sudo apt-get purge packagenameसाथ पालन ​​करें

sudo apt-get autoremove. 

जब तक यह रूपक नहीं है, तब तक इसका ध्यान रखना चाहिए।

यह भी देखें कि मैं मैन्युअल रूप से सभी Cardapio फाइलें कैसे निकालूं?


धन्यवाद, लेकिन ऑटोरेमोव इस मामले में अपर्याप्त साबित हुआ। कृपया मेरा संपादन देखें। एफएक्यू लिंक के लिए धन्यवाद, बहुत उपयोगी है!
कार्तिक टी

1
उन पैकेजों में से कुछ को अन्य चीजों की आवश्यकता हो सकती है और उन्हें ऑटोरेमोव्ड होने के रूप में चिह्नित नहीं किया जा सकता है। क्या आपने लिंक पर दिए निर्देशों को देखा? वो कैसे हैं?
chaskes

लिंक पर दिए गए निर्देश मूल मुद्दे के बजाय रूढ़िवादी हैं, और जैसा कि है, मैं अपने सिस्टम को फिर से स्थापित करने की दिशा में झुक रहा हूं। फिर भी धन्यवाद।
कार्तिक टी

1
  1. Apt लॉग से अवांछित पैकेजों की लंबी सूची पेस्ट करें new_file.txt
  2. निष्पादित perl -pe 's/\(.*?\)(, )?//g' /path/to/new_file.txt
  3. अंतिम कमांड के आउटपुट को क्लिपबोर्ड पर कॉपी करें या पहले स्थान पर वहां पाइप करें
  4. निष्पादित करें sudo apt-get remove[क्लिपबोर्ड की सामग्री यहां पेस्ट करें]

किया हुआ।

मूल रूप से हमें apt लॉग से संकुल की सूची को प्रारूपित करने की आवश्यकता है, जिसे कुछ-कुछ समझ सकते हैं। लघुकोष्ठक, बीच में शब्द, और अल्पविराम को जाने की आवश्यकता है, ताकि जहां पर्ल खेलने के लिए आए। हां, बेहतर (अधिक कुशल) तरीके हैं - लेकिन मैंने ऐसा किया है, इसकी समझ आसान है, और यह काम करता है।


व्यक्तिगत अनुभव और स्पष्टीकरण के लिए +1, लेकिन जैसा कि मैंने पहले उल्लेख किया है, मैंने पहले ही अपना लाइव यूएसबी रीसेट कर दिया है
कार्तिक टी

1

पिछले एप इंस्टॉल को पूर्ववत् करने के लिए आप कुछ इस तरह का उपयोग कर सकते हैं:

sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ")

यह इतिहास से अंतिम एप इंस्टॉल को पकड़ लेगा और यहां स्थापित सभी पैकेजों को शुद्ध कर देगा।

आप इसे हमेशा हाथ में रखने के लिए aptpurgelastinstall नामक एक फंक्शन बना सकते हैं (कोड को ~ / .bashrc पर जोड़ देगा):

echo 'aptpurgelastinstall () { sudo apt purge $(grep "Install:" /var/log/apt/history.log | tail -n 1 | tr " " "\n" | grep ":amd64\|:i386" | tr "\n" " ") ; }' >> .bashrc

अब आपको केवल अंतिम इंस्टॉलेशन को फिर से करने के लिए शेल में aptpurgelastinstall टाइप करना होगा।


सुझाए गए संपादन की टिप्पणी पर प्रतिक्रिया : "मेरी अपनी पोस्ट में सुधार (इससे पहले कि मैं पंजीकृत था)।" आप अपने खातों को मर्ज करने के लिए कह सकते हैं, askubuntu.com/help/merging-accounts देखें ।
मेलेबियस

0

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

1) pet को /etc/apt/source.list से निकालें। उस समय को याद करें जब आपने ppa जोड़ा था। यदि आप भाग्यशाली हैं, तो आपको सटीक होने की आवश्यकता नहीं है।

2) एक सूची बनाएं कि आप पीपीए को स्थापित करने के लिए किस समय से पुन: स्थापित करें: cat /var/log/dpkg.log | grep 'नवीनीकरण'

3) एक सूची बनाएं कि आपको किस क्षण से पीपीए स्थापित करना है: cat /var/log/dpkg.log | grep 'स्थापित'

4) चरण 3 से सभी पैकेजों को हटा दें: sudo apt-get remove {सूची 3 से पैकेजों की सूची}

5) चरण 2 से सभी पैकेजों को पुनर्स्थापित करें: sudo apt-get install --reinstall {चरण 2 से पैकेजों की सूची}

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


0

मुझे पता है कि यह एक बहुत पुराना सवाल है, लेकिन मैं यहां मदद की तलाश में आया था और शायद मैं किसी की मदद कर सकता हूं। मेरे पास स्थापित करने के बाद @ कार्तिक-टी के समान स्थिति थी unity8-desktop-session-mir। मुझे पता है कि यह एक बड़ी बात है। इसने उसके साथ 233 पैकेट खींचे।

का उपयोग कर autoremoveमैं उनमें से केवल 34 को हटा दिया। मुद्दा यह है कि unity8-desktop-session-mirस्थापना के दौरान , इसने दो पैकेजों ( python3-aptdaemon.pkcompatऔर evolution-data-server-online-accounts) को हटा दिया । यह अनुभाग के /var/log/apt/history.logबाद बताया गया है Install

एकता 8 स्थापना को पूरी तरह से पूर्ववत करने के लिए मैंने अनुसरण जारी किया:

  1. sudo apt-get purge unity8-desktop-session-mir
  2. sudo apt-get --purge autoremove
  3. sudo apt-get install python3-aptdaemon.pkcompat evolution-data-server-online-accounts (यह एकता 8 से संबंधित 8 पैकेजों को हटा दिया गया)
  4. sudo apt-get --purge autoremove

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

पुनश्च: शायद autoremoveचरण दो आवश्यक नहीं है, जैसा कि मैंने चरण चार पर फिर से जारी किया है।


0

तकनीकी रूप से "हटाएं" या "ऑटोरेमोव" ऑपरेशन "पूर्ववत" नहीं हैं, हालांकि उन्हें ज्यादातर समय अच्छा काम करने के लिए बनाया जा सकता है।

जब तक आप निर्दिष्ट नहीं करेंगे, तब तक apt-get संकुल को पीछे छोड़ देगा -o APT::Suggests-Important=0 -o APT::Recommends-Important=0

उपयुक्त पर एक नज़र रखना history.logऔर सभी स्थापित पैकेजों की स्थापना रद्द करना अधिक विश्वसनीय है। मैंने प्रक्रिया को आसान बनाने के लिए एक छोटा नोड-आधारित स्क्रिप्ट बनाया है:

https://github.com/rolfen/apt-history

इसके अलावा, यहाँ "रोलिंग बैक" परिवर्तनों के लिए एक और मैनुअल तरीका है:

https://unix.stackexchange.com/a/236711

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.