Apt-get autoremove से पैकेज को बाहर कैसे करें?


20

मैं ऐसी स्थिति में हूं, जहां से हटाए जाने वाले अनाथ पैकेजों की सूची apt-get autoremoveमें एक पैकेज शामिल है जिसे मैं रखना चाहता हूं। जाहिरा तौर पर मैंने गलती से एक पैकेज हटा दिया है जो इस पर निर्भर था। अब मैं पैकेज को स्पष्ट रूप से वांछित के रूप में कैसे चिह्नित कर सकता हूं, ताकि apt-get autoremoveइसे हटाया न जाए?


और संबंधित प्रश्न: यह बिल्कुल अनाथ क्यों है?
bluenote10

जवाबों:


29

उपयोग apt-mark

$ man apt-mark
...
manual
       manual is used to mark a package as being manually installed, which will 
prevent the package from being automatically removed if no other packages 
depend on it.

इसलिए

sudo apt-mark manual <package-name>

अब autoremoveइसे नहीं हटाएंगे।

पूर्ववत करने के लिए

sudo apt-mark auto <package-name>

अब autoremoveपैकेज को हटा देगा यदि यह किसी अन्य पैकेज की निर्भरता नहीं है।


एक और आसान चाल यह है कि आप एक साथ कई पैकेजों को चिन्हित कर सकते हैं: sudo apt-mark मैन्युअल <package1> <package2> <package3> आदि
Msencenb

10

Google के कुछ और प्रयासों ने एक समाधान निकाला :

यह केवल स्पष्ट रूप से स्थापित करना संभव है:

sudo apt-get install <package>

या मैन्युअल रूप से स्थापित के रूप में चिह्नित करना

sudo apt-mark manual <package>

apt फिर से स्थापित नहीं होगा, उत्पादन बस की तरह दिखेगा:

$ sudo apt-get install tmux
Reading package lists... Done
Building dependency tree       
Reading state information... Done
tmux is already the newest version.
tmux set to manually installed.

0

यह पहले से ही अच्छी तरह से उत्तर दिया गया है, लेकिन मुझे ऐसी स्थिति मिली जहां मैं कई पैकेजों को "चिह्नित" नहीं करना चाहता था (और फिर उन्हें चिह्नित नहीं करता autoremove)।

जब संकुल आप की सूची चाहते autoremove को आसानी से परिभाषित किया गया है, तो आप कर सकते हैं पाइप / sed/ xargsउन्हें बाहर।

मेरे पास कई पैकेजों का एक जटिल उदाहरण नहीं है, लेकिन अगर मेरे पास निम्न परिदृश्य है:

root@fptc-rsvrd:~# apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  libluajit-5.1-2 libluajit-5.1-common linux-headers-4.4.0-141 linux-headers-4.4.0-141-generic linux-headers-4.4.0-143 linux-headers-4.4.0-143-generic linux-headers-4.4.0-146 linux-headers-4.4.0-146-generic
  linux-image-4.4.0-141-generic linux-image-4.4.0-143-generic linux-image-4.4.0-146-generic linux-image-extra-4.4.0-141-generic linux-modules-4.4.0-143-generic linux-modules-4.4.0-146-generic
  linux-modules-extra-4.4.0-143-generic linux-modules-extra-4.4.0-146-generic linux-signed-image-4.4.0-141-generic pandoc-data
0 upgraded, 0 newly installed, 18 to remove and 19 not upgraded.
After this operation, 907 MB disk space will be freed.

और मैं सिर्फ linux*पैकेज निकालना चाहता हूं , मैं यह कर सकता हूं:

root@fptc-rsvrd:~# apt-get autoremove -s | sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp'
linux-headers-4.4.0-141-generic
linux-headers-4.4.0-141
linux-headers-4.4.0-143-generic
linux-headers-4.4.0-143
linux-headers-4.4.0-146-generic
linux-headers-4.4.0-146
linux-signed-image-4.4.0-141-generic
linux-image-extra-4.4.0-141-generic
linux-image-4.4.0-141-generic
linux-modules-extra-4.4.0-143-generic
linux-image-4.4.0-143-generic
linux-modules-extra-4.4.0-146-generic
linux-image-4.4.0-146-generic
linux-modules-4.4.0-143-generic
linux-modules-4.4.0-146-generic

तो यहाँ से, सरल से xargsकमांड-लाइन तर्क के माध्यम से इन्हें पास करना आसान है apt-get remove -y:

apt-get autoremove -s \
  | sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp' \
  | xargs apt-get remove -y

आम तौर पर उपयोग करते समय xargs, मैं तर्कों में रिक्त स्थान (उदाहरण के लिए find ... -print0 | xargs -0 ...) की रक्षा करता हूं , लेकिन चूंकि पैकेज के नामों में स्थान नहीं है, इसलिए मैं नईलाइन-सीमांकित तर्कों का उपयोग करने में सहज हूं।

(मुझे लगता है कि यह अन्य परिस्थितियां हैं, यह एक पकड़ को "चिह्नित" करने के लिए अधिक उपयुक्त होगा, पैकेजों को बंद करना होगा। यह भी regexes के साथ किया जा सकता है और xargs, लेकिन शायद स्थिति इंजीनियरिंग से अधिक है।)

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