De fiecare dată când instalez un nou kernel de Linux, acesta e lăsat în grub_config, de a face boot menu mai mult de fiecare dată.
Știu că pot căuta manual prin pachetele instalate și a le elimina.
Se Ubuntu oferă nici o modalitate mai ușoară de a le curăța sau de a le menține la arată în lista de boot?
sudo apt autoremove
Această comandă elimină pachetele care au fost instalate în mod automat pentru a rezolva o dependență, dar acum nu mai depindea. Aceasta include versiunile mai vechi de linux-headers -* " și " linux-image-*
. (Este, de asemenea, inteligent despre acest proces, lăsând o rezervă versiune a kernel-ului în jurul valorii de ca o rezervă!)
Cele mai recente versiuni de Grub2 instalat în Ubuntu afișa în mod automat cele mai recente kernel-ul și se ascunde mai vechi de kernel pe care le-ați instalat.
Dacă nu-ți vezi grub - apoi amintiți-vă să apăsați Schimbare în timp ce boot-area.
După cum puteți vedea, numai cele mai recente kernel-ul este afișat.
Dacă selectați opțiunea indicată (apăsați Enter), atunci toate nucleele devin vizibile și disponibile pentru a boot-eze de.
Primul boot cu cele mai recente kernel disponibil.
Există o serie de moduri de a șterge vechiul kernel. Personal, nu am't touch Computer de Serviciu deoarece acest lucru este recunoscut de a sparge calculatorul dvs. cu sugestii.
sinaptice
O alternativă este Synaptic (sudo apt instala sinaptice
)
căutare pentru linux-image, clic dreapta pe un kernel-ul și alegeți îndepărtarea completă și în cele din urmă faceți clic pe Aplica buton pentru a șterge kernel.
Repetați de căutare, dar de data asta pentru linux-antet - puteți șterge asociate antete pentru imaginea de nucleu alese anterior.
Synaptic dacă nu va încerca pentru a verifica ceea ce sunteți încercarea de a elimina... ai putea accidental șterge mai nou kernel - sau chiar de a sterge toate nucleele prin intermediul acestui instrument, lăsându-vă cu un unbootable Ubuntu!.
Amintiți-vă pentru a verifica ce kernel utilizați tipul:
uname -r
Rezultatul ar fi similar cu:
Amintiți-vă de rezultat și de numărul - asigurați-vă că don't a șterge imaginea corespunzătoare sau antet.
Recomandarea mea este de a păstra cel puțin de două sau de preferință trei boabe, inclusiv cele mai recente. Motivul pentru recomandarea este că veți avea cel puțin una/două alte kernel la boot, dacă pentru ce motiv cele mai recente kernel nu sunt în măsură să boot-eze cu sau introducerea unui regresat capacitate, cum ar fi spart wireless.
În primul rând, reporniți Sistemul pentru a fi sigur că este, folosind cele mai recente kernel. Apoi deschideți terminal și verificați kernel-ul curent:
uname -r
NU SCOATEȚI ACEST KERNEL!
Apoi, tastați comanda de mai jos pentru a vizualiza/lista tuturor instalat kernel de pe sistemul dumneavoastră.
dpkg --list 'linux-image-*'
Găsi toate nucleele care mai mic decât actualul kernel. Când știi ce kernel pentru a elimina, continua mai jos pentru a elimina. Rulați comenzile de mai jos pentru a elimina kernel-ați selectat.
sudo apt-get purge linux-image-x.x.x-x-generic
În cele din urmă, rulați comenzile de mai jos pentru a actualiza grub2
sudo update-grub2
Reporniți sistemul.
dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge
Explicație (amintiți-vă, |
foloseste datele de ieșire ale comenzii anterioare ca intrare la alta)
dpkg --list
listează toate pachetele instalategrep linux-image
pare pentru instalat linux imaginifel -V
pune elementele în ordine în funcție de numărul de versiunesed -n '/'
uname -r'/q;p'
imprimă linii înainte de a kernel-ul curentxargs sudo apt-get -y purjare
epurări găsit boabeRelaxare sed
invocare:
-n
spune sed
să fie liniște`uname -r
ieșiri de curent instalat kernel-ul release - am include în backticks astfel încât producția se include ca parte a comenzii (s-ar putea vedea, de asemenea, în acest ca
$(uname -r)` /ceva/q
spune stop atunci când meci de 'ceva' (în acest caz, ceva de ieșire de uname -r
) a /
înconjoară o expresie regulată;
este comanda separtor, deci /ceva/q;p
spune renunțe atunci când se potrivesc cu ceva, altceva printîn total, sed -n '/'
uname -r'/q;p'
se imprima linii până când se potrivește cu actualul kernel numele.
Daca're paranoic (ca mine), puteți face ultima parte `xargs echo sudo apt-get -y curăța, astfel încât comanda să curețe vechi de kernel este imprimat, apoi puteți să verificați că nimic neașteptat este inclus înainte de a rula.
Versiune modificată pentru a elimina anteturile:
dpkg --list | grep 'linux-image' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge
dpkg --list | grep 'linux-headers' | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p' | xargs sudo apt-get -y purge
Notă: sed
invocare este modificat. "$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"
extracte numai versiunea (de exemplu, "3.2.0-44") , fără "-generic" sau similare din uname -r
All-in-one versiune pentru a elimina imaginile și antete (combină cele două variante de mai sus):
echo $(dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p') $(dpkg --list | grep linux-headers | awk '{ print $2 }' | sort -V | sed -n '/'"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"'/q;p') | xargs sudo apt-get -y purge
$ sudo apt autoremove
...
The following packages will be REMOVED:
linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic linux-tools-4.4.0-57 linux-tools-4.4.0-57-generic
Am găsi acest lucru să fie cel mai simplu și mai rapid mod. Se păstrează cele mai recente kernel, precum și două mai mult:
sudo apt-get install bikeshed
sudo purge-old-kernels
Pentru a modifica numărul de nucleele suplimentare, care sunt păstrate:
sudo purge-old-kernels --keep 3
Eliminarea Intrări de la Grub 2 Înregistrările ar trebui să fie eliminate prin editarea sau eliminarea fișierele din /etc/grub.d folder. /Boot/grub/grub.cfg este doar în citire și nu ar trebui în mod normal necesită editare.
Prea Multe Boabe?
Dacă nu sunteți sigur de kernel pe care îl utilizați în prezent, într-un terminal de tip uname -r.
Nucleele eliminate prin intermediul APT (Sinaptice, "apt-get a elimina", etc.) se va actualiza automat grub.cfg și nici o acțiune de utilizator este necesar.
Un instrument excelent pentru eliminarea sâmburilor (și intrări de meniu) este Ubuntu Tweak, un seif și ușor de utilizat GUI app.
Instala ubuntu tweak
Ubuntu Tweak-ul va fi disponibil în Aplicații > Instrumente de Sistem.
Scoateți Kernel Mai Vechi De Intrări
Selectați "Pachet Curat" pe stânga și "Curat Kernel" din panoul din dreapta.
Apăsați "de a Debloca" buton în colțul din dreapta jos, introduceți parola.
Selectați din lista afișată kernel imagini și antete care doriți să eliminați. Kernel-ul într-o utilizați nu este listată.
Apăsați "Curatare" butonul din dreapta jos pentru a elimina selectat kernel imagini și anteturile.
Scoateți Sisteme de Operare din meniul Grub
Alte Sisteme de Operare care au fost eliminate de pe computer va fi, de asemenea, eliminate din meniu o dată "update-grub" este rulat ca root.
Elementele de meniu sunt plasate pe meniul Grub2 de script-uri. Dacă tu nu't vrei alte Sisteme de Operare pentru a fi introduse în meniul, dezactiva /etc/grub.d/30_osprober
Rulați această comandă pentru a opri script de funcționare
sudo chmod -x /etc/grub.d/30_os-prober
DISABLE_30_OS-PROBER='adevărat' in /etc/default/grub
Scoateți Memtest86+ din Meniul Grub
sudo chmod -x /etc/grub.d/20_memtest86+
Notă: După kernel se adaugă o nouă intrare în meniul GRUB.Puteți elimina una mai veche, dacă vrei.Cu toate acestea, cei mai mulți utilizatori experimentați vă va sfătui să păstreze cel puțin un schimb de intrare în cazul în care ceva nu merge bine cu un upgrade și aveți nevoie pentru a porni o mai veche versiune de kernel pentru scopuri de depanare.
Modalitate alternativă de a elimina Kernel intrări (înainte de 10.04)
pentru GRUB nu GRUB2
Îl puteți găsi în Sistem>>Administrare>> Vezi în cea de-a doua captură de ecran puteți selecta cât de multe nuclee pentru a arăta? Eu, în general, doar păstrați-l pe 1, dar atunci când am obține o actualizare de nucleu întotdeauna am schimba la 2 înainte de repornirea ca sa pot selecta mai vechi de kernel dacă noul kernel-ul are probleme cu hardware-ul meu. O dată știu că noul kernel-ul este de lucru bine am schimba-l înapoi la 1.
Pur commandline, acest lucru va elimina toate, dar actual și al doilea cel mai actuale (prin intermediul "-2" în cap de comanda de mai jos):
OLD=$(ls -tr /boot/vmlinuz-* | head -n -2 | cut -d- -f2- |
awk '{print "linux-image-" $0 " linux-headers-" $0}' )
if [ -n "$OLD" ]; then
apt-get -qy remove --purge $OLD
fi
apt-get -qy autoremove --purge
Update: purjare-vechi-nucleele
este învechit în zilele noastre.
Am făcut un script pentru purjare nucleele chiar și în condiții dificile. Este numit `linux-purjare poti gasi aici.
Dacă doriți doar pentru a curăța boabele (și a pachetelor conexe) care sunt mai mari decât cele utilizate în prezent de kernel, atunci când sistemul nu este rupt, ai putea folosi acest script.
Există, de asemenea, un Ubuntu pagina de documentare pe care am contribuit și eu privind scoaterea vechi boabe de aici.
Puteți urmări Folosind "nesupravegheat-upgrade-uri" pachet secțiunea de Automat Actualizări de Securitate articolul pe Ubuntu Wiki pentru a efectua acest lucru.
Aveți nevoie pentru a schimba următoarea linie în/etc/apt/apt.conf.d/50unattended-upgrade-uri** fișier;
//Unattended-Upgrade::Remove-Unused-Dependencies "false";
cu
Unattended-Upgrade::Remove-Unused-Dependencies "true";
pentru a elimina automat pachete vechi, inclusiv kernel.
De asemenea, elimina sau de a comenta pe linie
"^linux-image.*";
în "NeverAutoRemove" secțiune a fișierului /etc/apt/apt.conf.d/01autoremove.
Cel mai rapid/mai simplu mod (Aplicabile cel puțin de 12.04) posibil ca deja vine cu Ubuntu este de apt-get
. Efectuați următoarele, dacă doriți să eliminați toate kernel mai vechi versiuni care nu sunt în uz (cu Excepția celui anterior, care nu utilizează. Acest lucru este de a face sigur că, dacă actuala versiune de kernel nu reușește într-un fel, aveți o modalitate de a merge înapoi la o stare anterioară). Faceți următoarele:
sudo apt-get autoclean
Acest lucru va elimina orice fișiere vechi (Inclusiv versiuni de nucleu) ați putea avea. Rețineți că, dacă aveți mai multe versiuni vechi, va dura ceva timp, deoarece trebuie să se asigure că eliminarea de la versiunea de kernel are nici probleme de. Pentru mine, eliminarea ultimele 12 versiuni de nucleu a luat aproximativ 2 minute. De asemenea, puteți face următoarele:
sudo apt-get clean
Care va elimina tot ceea ce descărcate și stocate în folderul cache de apt. În cele din urmă trebuie:
sudo apt-get autoremove
care ar verifica pentru orice cantitate neutilizată de pachete și eliminați-le dacă este necesar. Acest lucru este mare pentru acele biblioteci și dependența de pachete care nu mai sunt necesare byt orice aplicație instalată.
Să-mi dau seama ce kernel și antetele sunt instalate utilizare
dpkg -l | grep linux-image
dpkg -l | grep linux-headers
Puteți apoi scoateți-le unul câte unul sau împreună, doar asigurați-vă că pentru a menține cele mai recente.
Există, de asemenea, unele comenzi la îndemână și script-uri pentru a automatiza de îndepărtare.
http://ubuntuforums.org/showthread.php?t=1658648
Următoarele afirmații pentru a elimina toate neutilizate boabe și antetele:
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | grep -v hwe | xargs sudo apt-get purge
(folosi apt-get -y` pentru a elimina fără îndoială)
Aici este ceea ce se întâmplă atunci când rula pe 18.04.1:
~$ dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]
\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'|grep -E "(image|headers|modules)" | xargs sudo apt-get -y purge
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
linux-headers-4.15.0-33* linux-headers-4.15.0-33-generic* linux-headers-4.15.0-34* linux-headers-4.15.0-34-generic* linux-image-4.15.0-33-generic* linux-image-4.15.0-34-generic*
linux-modules-4.15.0-33-generic* linux-modules-4.15.0-34-generic* linux-modules-extra-4.15.0-33-generic* linux-modules-extra-4.15.0-34-generic*
0 upgraded, 0 newly installed, 10 to remove and 1 not upgraded.
After this operation, 671 MB disk space will be freed.
(Reading database ... 227403 files and directories currently installed.)
Removing linux-headers-4.15.0-33-generic (4.15.0-33.36) ...
Removing linux-headers-4.15.0-33 (4.15.0-33.36) ...
Removing linux-headers-4.15.0-34-generic (4.15.0-34.37) ...
Removing linux-headers-4.15.0-34 (4.15.0-34.37) ...
Removing linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...
Removing linux-image-4.15.0-33-generic (4.15.0-33.36) ...
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-4.15.0-33-generic
/etc/kernel/postrm.d/zz-update-grub:
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-36-generic
Found initrd image: /boot/initrd.img-4.15.0-36-generic
Found linux image: /boot/vmlinuz-4.15.0-34-generic
Found initrd image: /boot/initrd.img-4.15.0-34-generic
Adding boot menu entry for EFI firmware configuration
done
Removing linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...
Removing linux-image-4.15.0-34-generic (4.15.0-34.37) ...
I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.15.0-36-generic
I: /initrd.img.old is now a symlink to boot/initrd.img-4.15.0-36-generic
/etc/kernel/postrm.d/initramfs-tools:
update-initramfs: Deleting /boot/initrd.img-4.15.0-34-generic
/etc/kernel/postrm.d/zz-update-grub:
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-4.15.0-36-generic
Found initrd image: /boot/initrd.img-4.15.0-36-generic
Adding boot menu entry for EFI firmware configuration
done
Removing linux-modules-4.15.0-33-generic (4.15.0-33.36) ...
Removing linux-modules-4.15.0-34-generic (4.15.0-34.37) ...
(Reading database ... 156180 files and directories currently installed.)
Purging configuration files for linux-image-4.15.0-34-generic (4.15.0-34.37) ...
Purging configuration files for linux-modules-4.15.0-33-generic (4.15.0-33.36) ...
dpkg: warning: while removing linux-modules-4.15.0-33-generic, directory '/lib/modules/4.15.0-33-generic' not empty so not removed
Purging configuration files for linux-modules-4.15.0-34-generic (4.15.0-34.37) ...
Purging configuration files for linux-image-4.15.0-33-generic (4.15.0-33.36) ...
Purging configuration files for linux-modules-extra-4.15.0-34-generic (4.15.0-34.37) ...
Purging configuration files for linux-modules-extra-4.15.0-33-generic (4.15.0-33.36) ...
~$ uname -r
4.15.0-36-generic
Computerul Îngrijitor curățenie la vechiul kernel și cred că este instalat în mod implicit în Ubuntu (dar nu Kubuntu).
GRUB 1, daca're folosind asta, are o opțiune în/boot/grub/menu.lst` pentru a specifica cât de multe boabe ar trebui să arate la maxim. GRUB 2, în măsura în care pot spune, nu.
În scopul de a elimina mai veche imagine de Linux kernel, primul boot în kernel doriți să le păstrați.
Puteți verifica, de asemenea, versiunea de kernel folosind comanda uname -r
, astfel încât tu nu't a elimina una greșită, din greșeală.
Acum du-te la synaptic package manager și de căutare pentru linux-image
și elimina versiunile mai vechi, cu excepția celui indicat de către superior de comandă. În general, prefer să merg cu cea mai recentă.
Acum când reporniți te'll vedea o mai curat meniul grub.
Personal, îmi place folosind Synaptic`. Asta mă face să mă simt mai sigură despre ceea ce's întâmplă. App numai am'am folosit, care are o opțiune pentru a elimina vechi de kernel este Ubuntu Tweak.
Cum pentru a elimina boabele nu sunt utilizați:
Puteți dezinstala vechiul kernel (linux-image-...
pachete) folosind Synaptic, și că le va elimina din meniul de boot. Aveți grijă să nu pentru a elimina rulează kernel (puteți verifica versiunea sa cu uname -r
).
Bear în minte că avea un unul sau două versiuni mai vechi vă poate ajuta să depanați, ar trebui să meargă ceva în neregulă.
Alternativ, puteți edita/elimina intrările manual (gksu gedit /boot/grub/grub.cfg
), dar acestea vor fi re-generat atunci când actualizarea de la un nucleu.
Dacă sunteți de gândire despre eliminarea recovery mode
opțiuni - don't. Ei pot veni la îndemână, dacă te rupe ceva care te împiedică pornirea.
Consultați această pagină.
Aceasta este o pură linie de comanda soluție.
Prima genera o listă a tuturor instalat versiuni de nucleu, cu excepția în prezent rulează în kernel:
dpkg-query -W -f='${Package}\n' |
grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
grep -v $(uname -r | cut -d- -f1,2))
Alternativ pentru a genera o listă a tuturor instalat versiuni de nucleu, cu excepția ultimelor două:
dpkg-query -W -f='${Package}\n' |
grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
sort -V | head -n -2)
Examinați lista. Asigurați-vă că nucleul versiuni doriți să păstrați nu fac parte din listă. Folosiți comanda uname -r
, pentru a vedea versiunea de kernel care rulează în prezent.
Dacă sunteți mulțumit cu rezultatele pe care le poate folosi apt-get
pentru a elimina pachetele.
Prima o centrare uscat (folosind prima generator ca exemplu):
sudo apt-get --dry-run purge $(
dpkg-query -W -f='${Package}\n' |
grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
grep -v $(uname -r | cut -d- -f1,2)))
Apoi o centrare reală:
sudo apt-get purge $(
dpkg-query -W -f='${Package}\n' |
grep -f <(ls -1 /boot/vmlinuz* | cut -d- -f2,3 |
grep -v $(uname -r | cut -d- -f1,2)))
Dacă doriți să automatizați procesul apoi se adauga ... da
parametru:
sudo apt-get --yes purge $(
...)
Avantajul acestui răspuns este nativ Ubuntu Bash este folosit fără a instala aplicații de la terți. Utilizatorii de kernel-uri custom care nu't folosi `apt " sau " dpkg poate modifica acest script bash pentru a se potrivi nevoilor lor. Acest răspuns se bazează pe (https://askubuntu.com/questions/892076/how-to-selectively-purge-old-kernels-all-at-once/892077#892077).
Zenity oferă o interfață GUI frumos la terminal pentru a procesa o listă și a selecta elemente cu radio-butoane:
După cum indică și titlul actualul kernel-ai dat cu nu poate fi eliminat și este't incluse în listă. Dimensiunea raportat este cât de mult vor fi salvate în/bootdirector. Mai este salvat pe disc deoarece kernel binare locuiesc în alte domenii. **27 iulie, 2017 notă:** directoarele
/usr/src/kernel_version " și " /lib/modules/kernel_version` sunt acum incluse la fel de bine.
La Data modificării este descoperit cu ajutorul de stat de comandă. Pe sistemul meu care data este "atins" de fiecare dată când kernel-ul este pornit folosind acest (https://askubuntu.com/questions/841810/how-do-you-find-out-when-a-specific-kernel-version-was-last-booted) cron reporniți script. Cu toate acestea, pe sistemul dvs. la o dată care va fi nucleul data de lansare, nu ultima dată când ai pornit-o.
apt-get purge
vă oferă șansa de a abandonaȚi se dă o ultimă șansă de a vedea tot ce se va fi curățit și văd total de pe disc (oarecum înșelătoare) că vor fi recuperate:
The following packages will be REMOVED:
linux-headers-4.7.1-040701* linux-headers-4.7.1-040701-generic*
linux-headers-4.7.2-040702* linux-headers-4.7.2-040702-generic*
linux-headers-4.7.3-040703* linux-headers-4.7.3-040703-generic*
linux-headers-4.8.1-040801* linux-headers-4.8.1-040801-generic*
linux-headers-4.8.10-040810* linux-headers-4.8.10-040810-generic*
linux-headers-4.8.11-040811* linux-headers-4.8.11-040811-generic*
linux-headers-4.8.4-040804* linux-headers-4.8.4-040804-generic*
linux-headers-4.8.5-040805* linux-headers-4.8.5-040805-generic*
linux-image-4.7.1-040701-generic* linux-image-4.7.2-040702-generic*
linux-image-4.7.3-040703-generic* linux-image-4.8.1-040801-generic*
linux-image-4.8.10-040810-generic* linux-image-4.8.11-040811-generic*
linux-image-4.8.4-040804-generic* linux-image-4.8.5-040805-generic*
0 upgraded, 0 newly installed, 24 to remove and 2 not upgraded.
After this operation, 2,330 MB disk space will be freed.
Do you want to continue? [Y/n]
Copiați acest cod pentru un fișier executabil numit rm-kernel " in " /usr/local/bin
:
#!/bin/bash
# NAME: rm-kernels
# PATH: /usr/local/bin
# DESC: Provide zenity item list of kernels to remove
# DATE: Mar 10, 2017. Modified Jul 28, 2017.
# NOTE: Will not delete current kernel.
# With 10 kernels on an SSD, empty cache from sudo prompt (#) using:
# # free && sync && echo 3 > /proc/sys/vm/drop_caches && free
# First time for `du` 34 seconds.
# Second time for `du` 1 second.
# PARM: If any parm 1 passed use REAL kernel size, else use estimated size.
# By default `du` is not used and estimated size is displayed.
# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
zenity --error --text "root access required. Use: sudo rm-kernels"
exit 99
fi
OLDIFS="$IFS"
IFS="|"
choices=()
current_version=$(uname -r)
for f in /boot/vmlinuz*
do
if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version
[[ $f =~ vmlinuz-(.*) ]]
v=${BASH_REMATCH[1]} # example: 4.9.21-040921-generic
v_main="${v%-*}" # example: 4.9.21-040921
# Kernel size in /boot/*4.9.21-040921-generic*
s=$(du -ch /boot/*-$v* | awk '/total/{print $1}')
if [[ $# -ne 0 ]] ; then # Was a parameter passed?
if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
# Kernel headers size in /usr/src/*4.9.21-040921*
s2=$(du -ch --max-depth=1 /usr/src/*-$v_main* | awk '/total/{print $1}')
else
s2="0M" # Linux Headers are not installed
fi
# Kernel image size in /lib/modules/4.9.21-040921-generic*
s3=$(du -ch --max-depth=1 /lib/modules/$v* | awk '/total/{print $1}')
else
# Estimate sizof of optional headers at 125MB and size of image at 220MB
if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
s2="125M"
else
s2="0M" # Linux Headers are not installed
fi
s3="220M"
fi
# Strip out "M" provided by human readable option of du and add 3 sizes together
s=$(( ${s//[^0-9]*} + ${s2//[^0-9]*} + ${s3//[^0-9]*} ))
t=$(( t + s ))
s=$s" MB"
d=$(date --date $(stat -c %y $f) '+%b %d %Y') # Last modified date for display
choices=("${choices[@]}" false "$v" "$d" "$s")
done
# adjust width & height below for your screen 640x480 default for 1920x1080 HD screen
# also adjust font="14" below if blue text is too small or too large
choices=(`zenity \
--title "rm-kernels - Total: $t MB excluding: $current_version" \
--list \
--separator="$IFS" \
--checklist --multiple \
--text '<span foreground="blue" font="14">Check box next to kernel(s) to remove</span>' \
--width=640 \
--height=480 \
--column "Select" \
--column "Kernel Version Number" \
--column "Modified Date" \
--column " Size " \
"${choices[@]}"`)
IFS="$OLDIFS"
i=0
list=""
for choice in "${choices[@]}" ; do
if [ "$i" -gt 0 ]; then list="$list- "; fi # append "-" from last loop
((i++))
short_choice=$(echo $choice | cut -f1-2 -d"-")
header_count=$(find /usr/src/linux-headers-$short_choice* -maxdepth 0 -type d | wc -l)
# If -lowlatency and -generic are purged at same time the _all header directory
# remains on disk for specific version with no -generic or -lowlatency below.
if [[ $header_count -lt 3 ]]; then
# Remove all w.x.y-zzz headers
list="$list""linux-image-$choice- linux-headers-$short_choice"
else
# Remove w.x.y-zzz-flavour header only, ie -generic or -lowlatency
list="$list""linux-image-$choice- linux-headers-$choice"
fi
done
if [ "$i" -gt 0 ] ; then
apt-get purge $list
fi
NOTĂ: Ai nevoie de sudo permisiunea de a crea fișierul deci utilizați:
gksu gedit /usr/local/bin/rm-kernels
Pentru a face fișierul executabil de utilizare:
sudo chmod +x /usr/local/bin/rm-kernels
rm-kernel-server
este versiunea de server pentru a șterge selectiv nucleele toate la o dată. În loc de un GUI (graphical) caseta de dialog unui text casetă de dialog este folosit pentru a selecta kernel pentru purjare.
sudo apt dialog instala
Dialog este în mod implicit Ubuntu Desktop-ul de instalare dar nu în Ubuntu Server.
rm-kernel-server
bash cod#!/bin/bash
# NAME: rm-kernels-server
# PATH: /usr/local/bin
# DESC: Provide dialog checklist of kernels to remove
# Non-GUI, text based interface for server distro's.
# DATE: Mar 10, 2017. Modified Jul 28, 2017.
# NOTE: Will not delete current kernel.
# With 10 kernels on an SSD, empty cache from sudo prompt (#) using:
# # free && sync && echo 3 > /proc/sys/vm/drop_caches && free
# First time for `du` 34 seconds.
# Second time for `du` 1 second.
# PARM: If any parm 1 passed use REAL kernel size, else use estimated size.
# By default `du` is not used and estimated size is displayed.
# Must be running as sudo
if [[ $(id -u) != 0 ]]; then
echo "root access required. Use: sudo rm-kernels-server"
exit 99
fi
# Must have the dialog package. On Servers, not installed by default
command -v dialog >/dev/null 2>&1 || { echo >&2 "dialog package required but it is not installed. Aborting."; exit 99; }
OLDIFS="$IFS"
IFS="|"
item_list=() # Deviate from rm-kernels here.
current_version=$(uname -r)
i=0
for f in /boot/vmlinuz*
do
if [[ $f == *"$current_version"* ]]; then continue; fi # skip current version
[[ $f =~ vmlinuz-(.*) ]]
((i++)) # Item List
v=${BASH_REMATCH[1]} # example: 4.9.21-040921-generic
v_main="${v%-*}" # example: 4.9.21-040921
# Kernel size in /boot/*4.9.21-040921-generic*
s=$(du -ch /boot/*-$v* | awk '/total/{print $1}')
if [[ $# -ne 0 ]] ; then # Was a parameter passed?
if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
# Kernel headers size in /usr/src/*4.9.21-040921*
s2=$(du -ch --max-depth=1 /usr/src/*-$v_main* | awk '/total/{print $1}')
else
s2="0M" # Linux Headers are not installed
fi
# Kernel image size in /lib/modules/4.9.21-040921-generic*
s3=$(du -ch --max-depth=1 /lib/modules/$v* | awk '/total/{print $1}')
else
# Estimate sizof of optional headers at 125MB and size of image at 220MB
if [[ -d "/usr/src/linux-headers-"$v_main ]] ; then
s2="125M"
else
s2="0M" # Linux Headers are not installed
fi
s3="220M"
fi
# Strip out "M" provided by human readable option of du and add 3 sizes together
s=$(( ${s//[^0-9]*} + ${s2//[^0-9]*} + ${s3//[^0-9]*} ))
t=$(( t + s ))
s=$s" MB"
d=$(date --date $(stat -c %y $f) '+%b %d %Y') # Last modified date for display
item_list=("${item_list[@]}" "$i" "$v ! $d ! $s" off)
done
cmd=(dialog --backtitle "rm-kernels-server - Total: $t MB excluding: $current_version" \
--title "Use space bar to toggle kernel(s) to remove" \
--column-separator "!" \
--separate-output \
--ascii-lines \
--checklist " Kernel Version --------- Modified Date Size" 20 60 15)
selections=$("${cmd[@]}" "${item_list[@]}" 2>&1 >/dev/tty)
IFS=$OLDIFS
if [ $? -ne 0 ] ; then
echo cancel selected
exit 1
fi
i=0
choices=()
for select in $selections ; do
((i++))
j=$(( 1 + ($select - 1) * 3 ))
choices[i]=$(echo ${item_list[j]} | cut -f1 -d"!")
done
i=0
list=""
for choice in "${choices[@]}" ; do
if [ "$i" -gt 0 ]; then list="$list- "; fi # append "-" from last loop
((i++))
short_choice=$(echo $choice | cut -f1-2 -d"-")
header_count=$(find /usr/src/linux-headers-$short_choice* -maxdepth 0 -type d | wc -l)
# If -lowlatency and -generic are purged at same time the _all header directory
# remains on disk for specific version with no -generic or -lowlatency below.
if [[ $header_count -lt 3 ]]; then
# Remove all w.x.y-zzz headers
list="$list""linux-image-$choice- linux-headers-$short_choice"
else
# Remove w.x.y-zzz-flavour header only, ie -generic or -lowlatency
list="$list""linux-image-$choice- linux-headers-$choice"
fi
done
if [ "$i" -gt 0 ] ; then
apt-get purge $list
fi
NOTĂ: În apelul la dialog "directiva" --ascii-liniieste trecut pentru a înlocui line-trage extins set de caractere (care
sshnu't ca) cu "+-----+" pentru desen cutii. Dacă nu vă place acest aspect poti folosi
... nu-linii directive pentru nici o cutie, la toate.
Mărimea calculată a fiecărui nucleu a fost luat de la /boot/*kernel_version*
care au fost 5 fișiere în valoare totală de ~50 MB. Formula s-a schimbat pentru a include fișiere în /usr/src/*kernel_version* " și " /lib/modules/*kernel_version*
. Mărimea calculată pentru fiecare nucleu este acum ~400 MB. Codul de mai sus pentru rm-kernel " și " rm-kernel-server` a fost actualizat. Cu toate acestea, proba ecrane de mai sus nu reflectă aceste schimbări încă.
Implicit este de a estima dimensiunea de fișiere pentru linux-headers la 125 de MB si linux-image la 220 MB pentru du
poate fi dureros de lent excepția cazului în care fișierele sunt în cache. Pentru a obține mărimea reală folosind du
trece orice parametru pentru a script-ul.
Numărul total de kernel dimensiuni (cu excepția curentă versiune care nu pot fi eliminate) este acum arată în bara de titlu.
Caseta de dialog folosită pentru a afișa fiecare Nucleu's Ultima accesare Data de. Această dată poate obține masa suprascrise pentru toate nucleele în timpul de backup sau operațiuni similare. Caseta de dialog afișează acum Data modificării în loc.
Acceptat răspunsul folosind sed
pentru a elimina mai mari boabe permanent are unele defecte, dacă cineva nu a repornit computerul după actualizarea kernel comanda va elimina nucleu de asemenea.
Aici este o soluție alternativă, care va lua în considerare toate situațiile pentru a elimina efective mai mari nucleele numai:
#!/bin/bash
kernels=( $(grep -Po "^linux-image-[^-]+-[^-]+-generic\b" < <(dpkg --get-selections)) )
cur_rel=$(grep -Po ".*(?=-[a-z]*$)" < <(uname -r))
for kernel in "${kernels[@]}"; do
ker_rel=$(grep -Po "[0-9].*(?=-[a-z]*)" <<< "$kernel")
dpkg --compare-versions "$ker_rel" gt "$cur_rel" && echo "Please Restart your computer first" && break
dpkg --compare-versions "$ker_rel" lt "$cur_rel" && sudo apt-get remove "$kernel"
done
Dacă aveți orice versiune care este mai nou decât cel actual acest lucru vă va oferi un avertisment pentru a reporni calculatorul. De asemenea, rețineți că cele mai mari nucleele sunt conservate din cauza un motiv bun pentru care este dacă cumva să-ți strici curent kernel face sistemul instabil atunci ar trebui să fie în măsură să boot-eze în orice kernel mai vechi.
O modalitate ușoară de a scăpa de aproape toate pachete învechite, pachete nu mai este în orice pachet de listă, împreună cu depășite boabe este de a face una din următoarele:
dpkg --purge $(aptitude search ?obsolete)
Cu toate acestea, acest lucru va fi dor de pachete care sunt încă recomandate de alte pachete, și -R/ - fără-recomandă argument nu rezolvă această problemă.
dselect după comutarea în modul sortare cu 'o' va afișa toate pachete învechite inclusiv cele de aptitudini dor, dar unii oameni don't ca folosind-o.
mare are caracteristica de a scoate vechiul kernel precum și neutilizate configurații. Eu personal l elimina manual din synaptic. Puteți instala mare de getdeb, precum și ppa