केवल पुरानी गुठली को हटाने के लिए वन-लाइनर बैश करें


23

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

मुझे एक-लाइनर होने के लिए समाधान की आवश्यकता है क्योंकि मैं पपेट से स्क्रिप्ट चला रहा हूं और मैं अतिरिक्त फ़ाइलों को झूठ नहीं बोलना चाहता हूं। अब तक मुझे निम्नलिखित मिला:

dpkg -l linux-* | awk '/^ii/{print $2}' | egrep [0-9] | sort -t- -k3,4 --version-sort -r | sed -e "1,/$(uname -r | cut -f1,2 -d"-")/d" | grep -v -e `uname -r | cut -f1,2 -d"-"` | xargs sudo apt-get -y purge

अधिक सटीक होने के लिए, यह इस समय क्या करता है:

  • सभी linux- * पैकेज को सूचीबद्ध करें और उनके नाम प्रिंट करें।
  • केवल उन लोगों को सूचीबद्ध करें जिनके पास संख्याएं हैं और उन्हें क्रमबद्ध करें, रिवर्स परिणाम लौटाएं। इस तरह, पुरानी गुठली को अंतिम रूप से सूचीबद्ध किया गया है।
  • वर्तमान कर्नेल के बाद जाने वाले परिणामों को ही प्रिंट करें
  • चूँकि कुछ linux- {image, headers} परिणाम हैं, सुनिश्चित करें कि मैं अपने वर्तमान कर्नेल से संबंधित किसी चीज़ को शुद्ध नहीं करूँगा
  • शुद्ध करने के लिए उपयुक्त कहते हैं

यह काम करता है, लेकिन मुझे यकीन है कि समाधान अधिक सुरुचिपूर्ण हो सकता है और यह उत्पादन वातावरण के लिए सुरक्षित है, क्योंकि हमारे सर्वर के कम से कम 20 सर्वर उबंटू चलाते हैं।

आपके समय के लिए धन्यवाद, एलेजांद्रो।


नेट से कुछ पुराना: tuxtweaks.com/2010/10/…
user68186

यदि आप स्क्रिप्ट फ़ाइल में सहेजे नहीं गए हैं, तो आप अपने वन-लाइनर का उपयोग कैसे करते हैं?
जर्नो

जवाबों:


25

काफी अच्छा लग रहा है, बस कुछ टिप्पणियां। दो पहली टिप्पणियां कमांड को सुरक्षित बनाती हैं, जबकि तीसरा और चौथा इसे थोड़ा छोटा बनाते हैं। किसी भी एक का पालन करने या अनदेखा करने के लिए स्वतंत्र महसूस करें। हालांकि मैं पहले दो का पालन करने की दृढ़ता से सलाह दूंगा। आप यह सुनिश्चित करना चाहते हैं कि यह यथासंभव सुरक्षित है। मैं गंभीरता से मतलब है। आप sudo apt-get -y purgeकुछ स्वचालित रूप से उत्पन्न पैकेज सूची में फेंक रहे हैं । इतनी बुराई है ! :)

  1. सभी linux-*को सूचीबद्ध करने से आपको कई झूठी सकारात्मकताएं मिलेंगी, जैसे कि (मेरे आउटपुट से उदाहरण) linux-sound-base। हालाँकि, इन्हें बाद में आपके आदेश के अनुसार फ़िल्टर किया जा सकता है, मैं व्यक्तिगत रूप से इन्हें पहले स्थान पर सूचीबद्ध न करने के लिए सुरक्षित महसूस करूँगा। बेहतर नियंत्रण जो पैकेज आप निकालना चाहते हैं। ऐसे काम न करें जिनके अप्रत्याशित परिणाम हो सकते हैं। तो मैं बाहर शुरू होगा

    dpkg -l linux-{image,headers}-*
  2. आपका रेगेक्स "केवल उन लोगों की सूची करें जिनके पास संख्याएं हैं" मेरी राय में थोड़ा सरल है। उदाहरण के लिए, linux-libc-dev:amd6464-बिट सिस्टम पर होने पर पैकेज होता है। आपका रेगेक्स मैच करेगा। आप इसे मैच नहीं करना चाहते। बेशक, अगर आपने मेरी पहली सलाह का पालन किया, तो linux-libc-dev:amd64वैसे भी सूचीबद्ध नहीं किया जाएगा, लेकिन फिर भी। हम सरल तथ्य "एक संख्या है" की तुलना में एक संस्करण संख्या की संरचना के बारे में अधिक जानते हैं। इसके अतिरिक्त, यह आमतौर पर शेल द्वारा संभावित गलत व्याख्याओं को रोकने के लिए, रेगीक्स को उद्धृत करना एक अच्छा विचार है। इसलिए मैं उस egrep कमांड को बनाऊंगा

     egrep '[0-9]+\.[0-9]+\.[0-9]+'
  3. फिर यह छंटनी की बात है। आप क्यों छाँटते हैं? चूंकि आप वैसे भी सभी कर्नेल (वर्तमान को छोड़कर) को हटाने जा रहे हैं, क्या आपके लिए नए लोगों से पहले पुराने को हटाना महत्वपूर्ण है? मुझे नहीं लगता कि इससे कोई फर्क पड़ता है। या क्या आप केवल ऐसा कर रहे हैं ताकि आप sed"केवल वर्तमान कर्नेल के बाद जाने वाले परिणामों को प्रिंट करें" का उपयोग कर सकें ? लेकिन IMO यह बहुत अधिक जटिल लगता है। बस अपने वर्तमान कर्नेल के अनुरूप परिणामों को फ़िल्टर क्यों न करें, जैसा कि आप पहले से ही कर रहे हैं grep -v, और किया जा रहा है? ईमानदारी से, अगर मैं आपके आदेश का पहला भाग (मेरे दो पिछले सुझावों को एकीकृत) लेता हूं, तो मुझे मेरी मशीन पर मिलता है

    $ dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | sort -t- -k3,4 --version-sort -r | sed -e "1,/$(uname -r | cut -f1,2 -d"-")/d" | grep -v -e `uname -r | cut -f1,2 -d"-"`
    linux-image-3.8.0-34-generic
    linux-image-3.5.0-44-generic

    उस छँटाई / पाल सामान को हटाकर, मुझे मिलता है

    $ dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | grep -v -e `uname -r | cut -f1,2 -d"-"`
    linux-image-3.5.0-44-generic
    linux-image-3.8.0-34-generic
    linux-image-extra-3.5.0-44-generic
    linux-image-extra-3.8.0-34-generic

    तो आपकी अधिक जटिल कमांड वास्तव में मेरी मशीन पर दो पैकेजों को याद करेगी, जिसे मैं निकालना चाहता हूं (अब यह संभव है कि उन linux-image-extra-*चीज़ों पर निर्भर करता है linux-image-*और इसलिए वैसे भी हटा दिया जाएगा, लेकिन यह स्पष्ट करने के लिए चोट नहीं पहुंचा सकता है)। किसी भी दर पर, मैं आपकी छँटाई का बिंदु नहीं देखता; grep -vफैंसी प्रीप्रोसेसिंग के बिना एक सरल ठीक होना चाहिए, संभवतः बेहतर भी। मैं KISS सिद्धांत का समर्थक हूँ। इससे आपको बाद में समझने या डीबग करने में आसानी होगी। इसके अलावा, छँटाई के बिना यह थोड़ा और अधिक कुशल है;)

  4. यह पूरी तरह से सौंदर्यपूर्ण है, लेकिन आपको इस छोटे संस्करण के साथ समान आउटपुट मिलेगा। :-)

    $ dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | grep -v $(uname -r | cut -d- -f-2)
    linux-image-3.5.0-44-generic
    linux-image-3.8.0-34-generic
    linux-image-extra-3.5.0-44-generic
    linux-image-extra-3.8.0-34-generic

नतीजतन, मैं सरल और सुरक्षित कमांड के साथ समाप्त होता हूं

$ dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | grep -v $(uname -r | cut -d- -f-2) | xargs sudo apt-get -y purge

चूंकि आप वास्तव में अपने /bootविभाजन को साफ करना चाहते हैं , एक पूरी तरह से अलग दृष्टिकोण की सामग्री को सूचीबद्ध करना होगा, उन पैकेजों का निर्धारण करने के लिए /bootउपयोग dpkg -Sकरें जो व्यक्तिगत फाइलें हैं, उन लोगों को फ़िल्टर करें जो वर्तमान कर्नेल के हैं, और परिणामी पैकेजों को हटा दें। लेकिन मुझे आपका दृष्टिकोण बेहतर लगता है, क्योंकि इसमें पुराने पैकेज भी मिलेंगे जैसे कि linux-headers-*, जो कि स्थापित नहीं होते हैं /boot, लेकिन करने के लिए/usr/src


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

यह तो दिलचस्प है। क्या आप मुझे दो आउटपुट दे सकते हैं, एक मेरे तीसरे और चौथे सुझाव के साथ कमांड के साथ, एक उनके बिना? प्लस का आउटपुट uname -r। मेरे लिए यह ठीक काम करता है। यह देखना दिलचस्प होगा कि यह आपके मामले में काम क्यों नहीं करता है।
माल्ट स्कोर्पुपा

1
मैंने आपको पीएम बनाने की कोशिश की, लेकिन मुझे कोई ईमेल पता नहीं मिला, इसलिए मैं अपना आउटपुट यहां पोस्ट करूंगा: hastebin.com/raleyigowe.vhdl uname -r से पता चलता है कि मेरा सर्वर linux-image-3.8.0-34 का उपयोग कर रहा है। कभी-कभी एक सर्वर ने एक नया कर्नेल डाउनलोड किया है लेकिन इसे अभी तक स्थापित नहीं किया है। इसलिए मैं केवल पुरानी गुठली निकालने का तरीका ढूंढ रहा था ।
एलेजांद्रो

इस कमांड ने मेरे वर्तमान कर्नेल के लिए हेडर फ़ाइल का चयन किया, जो अवांछनीय लगता है।
मार्क स्टोसबर्ग

1
@MalteSkoruppa, का uname -rउत्पादन करता है 4.8.0-36-generic , जो linux-headers-4.8.0-36सूची से बाहर करने में विफल रहता है ।
मार्क स्टोसबर्ग 14

7

मैंने यह स्क्रिप्ट लिखी है जो "linux- *" पैकेज को हटाती है जिसमें वर्तमान में बूट किए गए संस्करण की तुलना में कम संस्करण है। मुझे लगता है कि पैकेज की स्थिति का परीक्षण करना आवश्यक नहीं है। आदेश पैकेजों को शुद्ध करने से पहले पुष्टि करने के लिए कहता है। यदि आप ऐसा नहीं चाहते हैं, तो apt-get कमांड में Add -y विकल्प।

sudo apt-get purge $(dpkg-query -W -f'${Package}\n' 'linux-*' |
sed -nr 's/.*-([0-9]+(\.[0-9]+){2}-[^-]+).*/\1 &/p' | linux-version sort | 
awk '($1==c){exit} {print $2}' c=$(uname -r | cut -f1,2 -d-))

हालांकि, अतिरिक्त गुठली की विन्यास मात्रा को छोड़ने में सक्षम होने के लिए, मैं विकल्प के linux-purgeसाथ अपनी स्क्रिप्ट का उपयोग करने की सलाह देता हूं --keep। स्क्रिप्ट के बारे में अधिक जानकारी के लिए यहां देखें ।


3

TL; DR: नीचे की ओर छोड़ें।

हालांकि यह थोड़ा लंबा है। मैं इसे तुम्हारे लिए तोड़ दूँगा:

  1. dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}'जैसा माल्टे ने सुझाया था। प्रासंगिक कर्नेल फ़ाइलों को सूचीबद्ध करता है।
  2. egrep '[0-9]+\.[0-9]+\.[0-9]+' इसके अलावा माल्ट द्वारा एक वर्जन नंबर की तलाश में केवल कर्नेल फ़ाइलों को बाहर निकालने का सुरक्षित तरीका है।
  3. चूंकि अब हम संभवतः छवि और हेडर पैकेज दोनों को सूचीबद्ध कर रहे हैं, इसलिए पैकेज का नामकरण अलग-अलग हो सकता है इसलिए हमारे पास यह awk वर्कअराउंड हो सकता है जो कि सॉर्ट के लिए आवश्यक है awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}'। परिणाम एक नया कॉलम है जिसका वर्जन नीचे दिए गए मूल पैकेज के नाम से पहले है।

    $ dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}'
    3.11.0-23 linux-headers-3.11.0-23
    3.11.0-23 linux-headers-3.11.0-23-generic
    3.11.0-24 linux-headers-3.11.0-24
    3.11.0-24 linux-headers-3.11.0-24-generic
    3.11.0-26 linux-headers-3.11.0-26
    3.11.0-26 linux-headers-3.11.0-26-generic
    3.11.0-23 linux-image-3.11.0-23-generic
    3.11.0-24 linux-image-3.11.0-24-generic
    3.11.0-26 linux-image-3.11.0-26-generic
    3.8.0-35 linux-image-3.8.0-35-generic
    3.11.0-23 linux-image-extra-3.11.0-23-generic
    3.11.0-24 linux-image-extra-3.11.0-24-generic
    3.11.0-26 linux-image-extra-3.11.0-26-generic
    3.8.0-35 linux-image-extra-3.8.0-35-generic
  4. वर्तमान में चल रही किसी भी नई छवियों को अनइंस्टॉल करने से रोकने के लिए अब हमें सूची को क्रमबद्ध करना होगा। sort -k1,1 --version-sort -rहमें यह दे:

    $ dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}' | sort -k1,1 --version-sort -r
    3.11.0-26 linux-image-extra-3.11.0-26-generic
    3.11.0-26 linux-image-3.11.0-26-generic
    3.11.0-26 linux-headers-3.11.0-26-generic
    3.11.0-26 linux-headers-3.11.0-26
    3.11.0-24 linux-image-extra-3.11.0-24-generic
    3.11.0-24 linux-image-3.11.0-24-generic
    3.11.0-24 linux-headers-3.11.0-24-generic
    3.11.0-24 linux-headers-3.11.0-24
    3.11.0-23 linux-image-extra-3.11.0-23-generic
    3.11.0-23 linux-image-3.11.0-23-generic
    3.11.0-23 linux-headers-3.11.0-23-generic
    3.11.0-23 linux-headers-3.11.0-23
    3.8.0-35 linux-image-extra-3.8.0-35-generic
    3.8.0-35 linux-image-3.8.0-35-generic
  5. अब वर्तमान और नई कर्नेल फ़ाइलों sed -e "1,/$(uname -r | cut -f1,2 -d"-")/d" | grep -v -e `uname -r | cut -f1,2 -d"-"`को हमें दें

    $ dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}' | sort -k1,1 --version-sort -r | sed -e "1,/$(uname -r | cut -f1,2 -d"-")/d" | grep -v -e `uname -r | cut -f1,2 -d"-"`
    3.11.0-23 linux-image-extra-3.11.0-23-generic
    3.11.0-23 linux-image-3.11.0-23-generic
    3.11.0-23 linux-headers-3.11.0-23-generic
    3.11.0-23 linux-headers-3.11.0-23
    3.8.0-35 linux-image-extra-3.8.0-35-generic
    3.8.0-35 linux-image-3.8.0-35-generic
  6. अब हम awk '{print $2}'जो चाहते हैं, उसे पाने के लिए हमने जो पहला कॉलम जोड़ा है, उसे हटा दें :

    $ dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}' | sort -k1,1 --version-sort -r | sed -e "1,/$(uname -r | cut -f1,2 -d"-")/d" | grep -v -e `uname -r | cut -f1,2 -d"-"` | awk '{print $2}'
    linux-image-extra-3.11.0-23-generic
    linux-image-3.11.0-23-generic
    linux-headers-3.11.0-23-generic
    linux-headers-3.11.0-23
    linux-image-extra-3.8.0-35-generic
    linux-image-3.8.0-35-generic
  7. अब हम पैकेज मैनेजर को वह सब कुछ स्वचालित रूप से हटाने और ग्रब को फिर से कॉन्फ़िगर करने के लिए फीड कर सकते हैं:

    मैं पहले सूखा चलाने की सलाह देता हूं (हालांकि आपके स्क्रिप्टिंग उद्देश्यों के लिए यह व्यावहारिक नहीं हो सकता है यदि आपके पास एक बड़ा वातावरण है)

    dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}' | sort -k1,1 --version-sort -r | sed -e "1,/$(uname -r | cut -f1,2 -d"-")/d" | grep -v -e `uname -r | cut -f1,2 -d"-"` | awk '{print $2}' | xargs sudo apt-get --dry-run remove

    अब अगर सब कुछ अच्छा लगता है तो आगे बढ़ें और वास्तव में इसे हटा दें:

    dpkg -l linux-{image,headers}-* | awk '/^ii/{print $2}' | egrep '[0-9]+\.[0-9]+\.[0-9]+' | awk 'BEGIN{FS="-"}; {if ($3 ~ /[0-9]+/) print $3"-"$4,$0; else if ($4 ~ /[0-9]+/) print $4"-"$5,$0}' | sort -k1,1 --version-sort -r | sed -e "1,/$(uname -r | cut -f1,2 -d"-")/d" | grep -v -e `uname -r | cut -f1,2 -d"-"` | awk '{print $2}' | xargs sudo apt-get -y purge

एक बार फिर इस "वन-लाइनर" के पूरे बिंदु को वर्तमान में चल रहे कर्नेल की तुलना में केवल गुठली OLDER को हटाना है (जो किसी भी नए स्थापित कर्नेल को अभी भी उपलब्ध है)

धन्यवाद मुझे बताएं कि यह आपके लिए कैसे काम करता है और यदि आप इसे सुधार सकते हैं!


मेरे जवाब की
jarno

1

आप 'ls' कमांड का उपयोग करने वाले कर्नेल संस्करणों को देखने के लिए बस / बूट निर्देशिका को सूचीबद्ध कर सकते हैं। फिर 'sudo apt-get -y purge "xxx" का उपयोग करें जहां "xxx" को उस वर्जन नंबर से बदल दिया जाता है जिसे आप हटाना चाहते हैं। ध्यान रखें कि यह वह संस्करण नहीं है जिसे आप वर्तमान में चला रहे हैं !!।


1
वे वन-लाइनर कमांड चाहते थे। आपको समाधान की आवश्यकता है 1 से अधिक लाइन
अनवर

1

इंस्टॉल करें bikeshed( apt install bikeshed) और purge-old-kernelsरूट के रूप में कॉल करें ।

$ sudo purge-old-kernels

शुद्ध-पुराने-गुठली को हटा दिया गया है, "उपयुक्त ऑटोरेमोव" के पक्ष में। यदि आपको कोई समस्या है, तो कृपया apt के खिलाफ बग दर्ज करें। देखें bugs.launchpad.net/bikeshed/+bug/1569228/comments/7
Amedee वान Gasse

0

एक त्वरित जवाब, अनुरोध पर स्पष्टीकरण:

dpkg -l 'linux-image-[0-9]*' | 
awk -v current="$(uname -r)" '!/^i/ || $2~current {next} {print $2}' |
sed '$d' | 
xargs echo sudo apt-get autoremove

2
मैं सुझाव देता हूं (या, यदि आप चाहें, तो स्पष्टीकरण को शामिल करने के लिए इसका विस्तार करें)। :)
एलियाह कगन

@ एलियागन, मुझे लगता है कि स्क्रिप्ट का कोई मतलब नहीं है। उन पैकेजों को क्यों छोड़ें जिन्हें इंस्टॉल करने की इच्छा नहीं है? स्क्रिप्ट वर्तमान की तुलना में कुछ नई गुठली निकाल सकती है, या sed '$d'कमांड द्वारा कुछ पुराने को बचा सकती है । स्क्रिप्ट हटाए जाने वाले कर्नेल पैकेज से संबंधित किसी भी लिनक्स-हेडर पैकेज या अन्य पैकेज को नहीं हटाता है, इसके अलावा यह पैकेजों की कॉन्फ़िगरेशन फ़ाइलों को नहीं हटाता है। मैं इसके बजाय अपने उत्तर का उपयोग करने की सलाह दूंगा।
जारो

@EliahKagan सक्रिय रूप से स्क्रिप्ट किसी भी पैकेज को नहीं हटाती है, लेकिन कमांड (द्वारा echo) apt-getजिसे आप चला सकते हैं।
जारो

0

मैं वास्तव में इस अनावश्यक जटिलता से थक गया और पायथन पैकेज बनाया, जो वन-लाइनर को तुच्छ बनाता है:

ubuntu-old-kernel-cleanup | xargs sudo apt-get -y purge

इसके साथ स्थापित करें

sudo pip install git+http://github.com/mrts/ubuntu-old-kernel-cleanup.git

Https://github.com/mrts/ubuntu-old-kernel-cleanup पर अधिक देखें ।

आशा है कि इससे दूसरों को भी मदद मिलेगी।


यह कोशिश की, लेकिन मुझे त्रुटि मिली: "ubuntu-old-kernel-cleanup: command not found"
अनुदान

तब यह आपके निष्पादन योग्य खोज पथ में नहीं है। क्या आपने इसे sudo pip install ...ऊपर वर्णित के साथ स्थापित किया था ? sudoवास्तव में महत्वपूर्ण है, अन्यथा pipइसे कुछ उपयोगकर्ता निर्देशिका में स्थापित करेगा और शेल निष्पादन योग्य फ़ाइलों के लिए इस निर्देशिका को नहीं खोज सकता है।
एमआरटीएस

0
sudo dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo apt-get -y purge

हर समय काम करता है, और यहां तक ​​कि ubuntu 17.10


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