Bash หนึ่งซับเพื่อลบเฉพาะเมล็ดเก่า


23

ฉันได้เห็นเธรดมากมายเกี่ยวกับวิธีเพิ่มพื้นที่ว่างบน / boot พาร์ติชันและนั่นก็เป็นวัตถุประสงค์ของฉันเช่นกัน อย่างไรก็ตามฉันเพียง แต่สนใจที่จะลบเมล็ดเก่าเท่านั้นและไม่ได้ลบแต่ละอันออกจากเมล็ดที่เหลืออยู่ในปัจจุบัน

ฉันต้องการวิธีแก้ปัญหาให้เป็นหนึ่งซับเพราะฉันจะเรียกใช้สคริปต์จาก Puppet และฉันไม่ต้องการมีไฟล์พิเศษวางอยู่รอบ ๆ จนถึงตอนนี้ฉันได้รับสิ่งต่อไปนี้:

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} ผลลัพธ์ตรวจสอบให้แน่ใจว่าฉันจะไม่ล้างข้อมูลใด ๆ ที่เกี่ยวข้องกับเคอร์เนลปัจจุบันของฉัน
  • โทร apt เพื่อล้าง

วิธีนี้ใช้ได้ผล แต่ฉันมั่นใจว่าโซลูชันจะสวยงามกว่าและปลอดภัยสำหรับสภาพแวดล้อมการผลิตเนื่องจากอย่างน้อย 20 เซิร์ฟเวอร์ของเราใช้ Ubuntu

ขอบคุณสำหรับเวลา Alejandro


มีบางสิ่งที่เก่าจากเน็ต: tuxtweaks.com/2010/10/…
68186

คุณจะใช้สายการบินเดียวได้อย่างไรหากไม่ได้บันทึกไว้ในไฟล์สคริปต์
jarno

คำตอบ:


25

ดูดีพอมีเพียงไม่กี่ความเห็น ความคิดเห็นแรกที่สองทำให้คำสั่งปลอดภัยขึ้นในขณะที่ความคิดเห็นที่สามและที่สี่ทำให้สั้นกว่าเล็กน้อย อย่าลังเลที่จะติดตามหรือเพิกเฉยคนใดคนหนึ่ง แม้ว่าฉันจะขอแนะนำอย่างยิ่งให้ติดตามสองคนแรก คุณต้องการให้แน่ใจว่าปลอดภัยที่สุด ฉันหมายถึงอย่างจริงจัง คุณกำลังโยนsudo apt-get -y purgeรายการแพ็คเกจที่สร้างขึ้นโดยอัตโนมัติ นั่นคือความชั่วร้าย ! :)

  1. รายชื่อทั้งหมดของlinux-*คุณจะได้รับผลบวกปลอมเป็นจำนวนมากเช่น linux-sound-base(ตัวอย่างเช่นจากการแสดงผลของฉัน) แม้ว่าสิ่งเหล่านี้อาจถูกกรองในภายหลังโดยคำสั่งของคุณที่เหลือ แต่โดยส่วนตัวแล้วฉันจะรู้สึกปลอดภัยกว่าที่จะไม่แสดงรายการเหล่านั้นในตอนแรก ควบคุมแพ็คเกจที่คุณต้องการลบได้ดีขึ้น อย่าทำสิ่งที่อาจมีผลลัพธ์ที่ไม่คาดคิด ดังนั้นฉันจะเริ่มต้นด้วย

    dpkg -l linux-{image,headers}-*
  2. regex ของคุณในการ "แสดงเฉพาะคนที่มีตัวเลข" นั้นง่ายเกินไปในความคิดของฉัน ตัวอย่างเช่นมีแพ็คเกจlinux-libc-dev:amd64เมื่อคุณใช้ระบบ 64 บิต regex ของคุณจะตรงกับ คุณไม่ต้องการให้มันตรงกัน เป็นที่ยอมรับถ้าคุณทำตามคำแนะนำแรกของฉันแล้วlinux-libc-dev:amd64จะไม่ได้อยู่ในรายการ แต่ก็ยัง เรารู้เพิ่มเติมเกี่ยวกับโครงสร้างของหมายเลขเวอร์ชันมากกว่าข้อเท็จจริงง่ายๆ "มีตัวเลข" นอกจากนี้โดยทั่วไปแล้วมันเป็นความคิดที่ดีที่จะอ้างถึง regexes เพียงเพื่อป้องกันการตีความที่ผิดพลาดโดยเชลล์ ดังนั้นฉันจะทำให้คำสั่ง 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

    ฉันได้รับการลบสิ่งที่เรียงลำดับ / sed

    $ 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-*thingys และดังนั้นจึงจะถูกลบออกไปแล้ว ฉันไม่เห็นจุดเรียงลำดับของคุณ ง่ายgrep -vโดยไม่ต้อง preprocessing แฟนซีควรจะดีกว่าน่าจะดีกว่า ฉันเป็นผู้สนับสนุนหลักการ KISS มันจะทำให้คุณเข้าใจหรือแก้ไขข้อบกพร่องได้ง่ายขึ้นในภายหลัง นอกจากนี้หากไม่มีการจัดเรียงจะมีประสิทธิภาพมากขึ้นเล็กน้อย;)

  4. นี่คือ aestethic ล้วนๆ แต่คุณจะได้ผลลัพธ์เดียวกันกับตัวแปรที่สั้นกว่านี้เล็กน้อย :-)

    $ 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


ขอบคุณสำหรับการตอบกลับของคุณ @ Malte ขอบคุณสำหรับการป้อนข้อมูลของคุณ ฉันพบว่าทั้งสองขั้นตอนแรกของคุณให้ความกระจ่างและพวกเขาทำให้ผู้เผยแพร่ออนไลน์ปลอดภัยยิ่งขึ้นอย่างแน่นอน อย่างไรก็ตามฉันเชื่อว่าสองขั้นตอนสุดท้ายของคุณจะไม่สนใจเมล็ดที่ใหม่กว่านี้และกำจัดพวกมันด้วย อย่างน้อยฉันก็ลองวิธีแก้ปัญหาของคุณบนเซิร์ฟเวอร์ของฉันและมันก็มีสิ่งที่ไม่ต้องการถอนการติดตั้ง
Alejandro

นั่นดูน่าสนใจ. คุณสามารถส่งเอาต์พุตสองรายการให้ฉันได้หรือไม่หนึ่งรายการที่มีคำสั่งที่มีข้อเสนอแนะที่สามและสี่ของฉันรวมอยู่ด้วยโดยที่ไม่มีคำสั่งเหล่านั้นหรือไม่ uname -rบวกการส่งออกของ สำหรับฉันมันใช้งานได้ดี มันน่าสนใจที่จะดูว่าทำไมมันไม่ทำงานในกรณีของคุณ
Malte Skoruppa

1
ฉันพยายามที่จะ PM คุณ แต่ฉันไม่พบที่อยู่อีเมลใด ๆ ดังนั้นฉันจะโพสต์ผลลัพธ์ของฉันที่นี่: hastebin.com/raleyigowe.vhdl uname -r แสดงให้เห็นว่าเซิร์ฟเวอร์ของฉันใช้ linux-image-3.8.0-34 บางครั้งเซิร์ฟเวอร์ดาวน์โหลดเคอร์เนลใหม่กว่า แต่ยังไม่ได้ติดตั้ง นั่นเป็นเหตุผลที่ฉันกำลังมองหาวิธีที่จะลบเมล็ดเก่าเท่านั้น
Alejandro

คำสั่งนี้เลือกไฟล์ส่วนหัวสำหรับเคอร์เนลปัจจุบันของฉันซึ่งดูเหมือนว่าไม่พึงประสงค์
Mark Stosberg

1
@MalteSkoruppa uname -rผลิต4.8.0-36-generic ซึ่งล้มเหลวในการแยกlinux-headers-4.8.0-36ออกจากรายการ
Mark Stosberg

7

ฉันเขียนสคริปต์นี้เพื่อลบแพ็คเกจ "linux- *" ที่มีเวอร์ชันน้อยกว่าเวอร์ชั่นที่บูตอยู่ในปัจจุบัน ฉันคิดว่ามันไม่จำเป็นที่จะทดสอบสถานะของแพ็คเกจ คำสั่งถามเพื่อยืนยันก่อนที่จะกำจัดแพคเกจ หากคุณไม่ต้องการให้เพิ่มตัวเลือก -y ในคำสั่ง apt-get

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}'เช่นเดียวกับ Malte ที่แนะนำ แสดงรายการเคอร์เนลไฟล์ที่เกี่ยวข้อง
  2. egrep '[0-9]+\.[0-9]+\.[0-9]+' Malte ยังแนะนำให้เป็นวิธีที่ปลอดภัยกว่าในการเลือกเฉพาะเคอร์เนลไฟล์โดยค้นหาหมายเลขเวอร์ชัน
  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

จุดรวมทั้งหมดของ "one-liner" นี้คือการลบเฉพาะเคอร์เนลเก่ากว่าเคอร์เนลที่รันอยู่ในปัจจุบัน (ซึ่งทำให้เมล็ดที่ติดตั้งใหม่ยังคงมีอยู่)

ขอบคุณแจ้งให้เราทราบว่ามันทำงานอย่างไรสำหรับคุณและถ้าคุณสามารถปรับปรุงได้!


ตรวจสอบคำตอบ
jarno

1

คุณสามารถลิสต์ไดเร็กตอรี่ / boot เพื่อดูรุ่นเคอร์เนลที่คุณใช้โดยใช้คำสั่ง 'ls' จากนั้นใช้ 'sudo apt-get -y purge "xxx"' โดยที่ "xxx" ถูกแทนที่ด้วยหมายเลขเวอร์ชันที่คุณต้องการลบ ระวังว่ามันไม่ใช่เวอร์ชั่นที่คุณใช้อยู่ในปัจจุบัน !!


1
พวกเขาต้องการคำสั่งหนึ่งซับ โซลูชันของคุณต้องการมากกว่า 1 บรรทัด
Anwar


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
ฉันขอแนะนำ (หรือถ้าคุณต้องการขอ) ขยายสิ่งนี้เพื่อรวมคำอธิบาย :)
Eliah Kagan

@EliahKagan ฉันคิดว่าสคริปต์ไม่สมเหตุสมผล เหตุใดจึงข้ามแพ็คเกจที่ไม่ต้องการติดตั้ง สคริปต์อาจลบเคอร์เนลที่ใหม่กว่ากว่าอันปัจจุบันหรือบันทึกบางอันที่เก่ากว่าโดยsed '$d'คำสั่ง สคริปต์ไม่ได้ลบแพ็คเกจส่วนหัว linux ใด ๆ หรือแพ็คเกจอื่น ๆ ที่เกี่ยวข้องกับเคอร์เนลแพ็กเกจที่จะลบนอกจากนี้จะไม่ลบไฟล์การกำหนดค่าของแพ็คเกจ ฉันอยากจะแนะนำให้ใช้คำตอบของฉันแทน
jarno

@EliahKagan จริงๆแล้วสคริปต์ไม่ได้ลบแพ็คเกจใด ๆ แต่พิมพ์ (โดยecho) apt-getคำสั่งที่คุณสามารถเรียกใช้ได้
jarno

0

ฉันรู้สึกเบื่อหน่ายกับความซับซ้อนที่ไม่จำเป็นทั้งหมดและสร้างแพ็คเกจ Python ที่ทำให้เป็นเรื่องง่าย:

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: ไม่พบคำสั่ง"
สิทธิ์

จากนั้นจะไม่อยู่ในพา ธ การค้นหาที่สามารถเรียกใช้งานได้ของคุณ คุณติดตั้งด้วยsudo pip install ...ตามที่อธิบายไว้ข้างต้นหรือไม่? sudoมีความสำคัญจริง ๆ มิฉะนั้นpipจะติดตั้งในไดเร็กทอรีผู้ใช้บางอันและเชลล์อาจไม่ค้นหาไดเร็กทอรีนี้เพื่อหาไฟล์ปฏิบัติการ
mrts

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ที่ไม่พึงประสงค์
Malte Skoruppa
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.