我知道我可以手动搜索已安装的软件包并将其删除。
Ubuntu是否提供更简便的方法来清理它们或防止它们显示在启动列表中?
sudo apt autoremove
linux-headers-*
和linux-image-*
。(它还会智能地处理此过程,保留一个备用版本的内核!)
首先使用最新可用的内核启动。
有多种方法可以删除旧内核。个人而言,我不会碰计算机清洁工,因为众所周知它的建议会破坏你的计算机。
Synaptic
另一种选择是Synaptic(sudo apt install synaptic
)
搜索linux-image,右键点击一个内核,选择完全删除,最后点击应用按钮来删除该内核。
uname -r
apt-get
命令行的末尾加上-y
开关是必要的,否则apt-get会询问是否确认操作,由于输入是通过管道传递的,它会直接中止操作。因此,命令应该以| xargs sudo apt-get purge -y
结尾。 - Joshxargs
命令,在删除内核之前会在控制台上询问确认。 - rubo77linux-image
和linux-headers
,为我的机器释放了4.5GB的空间。 - Andrew Maodpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
,确保它不包含任何比uname -r
显示的内核更新的内核。 - user35581linux-libc-dev
- 这是不希望的行为。你可以使用 dpkg -l 'linux-image-*' ...
来避免这种情况。 - Dimitardpkg -l 'linux-image-*' | awk '/^ii/ { print $2 }' | grep -iv $(uname -r)
。 - Haulethlinux-image$(uname -r | sed -r 's/^[0-9.]+-[^-]+//')
的软件包,它依赖于最新可用的内核镜像,所以你可能不想删除它。 - jarnoapt-get autoremove
一直存在,至少从10.04版本开始。为什么要将其标记为16.04及以上版本呢? - muruautoremove
еѓєжИСжЭ•иѓіжЧ†ж≥ХеИ†йЩ§жЧІзЪДLinuxйХЬеГПгАВ - Ziemo已安装的 linux-image-4.15.0-74-generic 软件包的后删除脚本子进程返回错误退出状态 1
dpkg:错误太多,停止处理
处理过程中遇到了错误:
linux-image-4.15.0-74-generic
由于出现了太多错误,处理过程被中断。
E:子进程 /usr/bin/dpkg 返回错误代码(1)```
请帮忙,我最近升级到了 Ubuntu 20.04,现在无法下载任何东西。
- nkhlsudo apt purge $(dpkg -l | grep '^rc linux-image' | awk '{print $2}')
。 - gcodeuname -r
请勿删除此内核!
接下来,输入下面的命令以查看/列出系统中安装的所有内核。
dpkg --list 'linux-image-*'
sudo apt-get purge linux-image-x.x.x-x-generic
sudo update-grub2
sudo apt-get purge linux-image-3.2.0-3{0..5}-generic
(删除30、31、...、35)。 - ajolinux-signed-image
软件包:sudo apt-get purge linux-signed-image-3.11.0-{12,14,24}-generic
,这将删除12、14和24版本。 - deviusdf
命令并查看/boot
目录。如果它已经满了100%,你需要进入/boot
目录,然后使用sudo rm
命令删除一些旧的内核镜像。之后用df
命令验证/boot
目录是否有一些可用空间,并继续执行上述步骤(还要清理手动删除镜像的内核)。 - 0 _purge
实际上是做什么的?除了删除相关的config-
、initrd
、System.map
和vmlinuz
文件之外,还有其他操作吗?如果我只是想暂时将旧内核移开,我可以只移动这4个文件吗? - Bobby Jacksigned
图像不会安装在非EFI系统中。 - deviusls -1v /boot/vmlinuz-*
的输出中,与已签名内核相关的那一行是什么样子吗?是否有"signed"标签出现在其中?当你使用已签名内核时,uname -r
命令的输出又是什么样子呢? - jarnouname -r
没有任何 signed
字符串。我似乎安装了一个已签名的映像,并且那个 ls
命令的输出是:/boot/vmlinuz-3.19.0-16-generic.efi.signed
。 - deviuslinux-signed-image
软件包。它们将作为常规通用linux-image
软件包的依赖项自动清除。 - jarnodpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge
-n
告诉 sed
保持安静`uname -r`
输出当前已安装的内核版本 - 我们使用反引号将其包含在命令中,以便输出作为命令的一部分(您也可能看到这样的写法:$(uname -r)
)/something/q
表示当匹配到 'something' 时停止(在本例中,something 是 uname -r
的输出)- 斜杠用于包围正则表达式p
是打印命令;
是命令分隔符,因此 /something/q;p
表示当匹配到 something 时退出,否则打印综上所述,sed -n '/'`uname -r`'/q;p'
是打印直到与当前内核名称匹配的行。
如果你像我一样多疑,你可以将最后一部分改为 xargs echo sudo apt-get -y purge
,这样旧内核清理命令会被打印出来,然后你可以在运行之前检查是否有意外的内容。
修改后的版本,去掉了标题:
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
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-get purge $(for tag in "linux-image" "linux-headers"; do dpkg-query -W -f'${Package}\n' "$tag-[0-9]*.[0-9]*.[0-9]*" | sort -V | awk 'index($0,c){exit} //' c=$(uname -r | cut -d- -f1,2); done)
也可以参考我的回答。 - jarnohead -n -2
结合起来,以保留前两个图像。 - spumedkpg -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 dpkg -P
。 - Sebastian Sastre$ 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
我发现这是最简单和最快的方法。它保留了最新的内核以及另外两个:
sudo apt-get install bikeshed
sudo purge-old-kernels
sudo purge-old-kernels --keep 3
which purge-old-kernels
找到它的位置。 - jarnopurge-old-kernels
这个工具,它没有bikeshed(一些有用但尚未有固定位置的工具)包或任何特定的包。避免使用apt-get -y
选项,就像闭上眼睛希望一切都会好起来一样。此外,在这里是_autoremove_决定保留多少旧内核的方式。 - Pablo Bianchiapt-file search purge-old-kernels
)。同意使用apt-get -y
,我会将其移除。 - bmaupinsudo apt-get autoremove
。与您提到的sudo apt autoremove
具有相同的功能。 - Dansudo apt-get autoremove
命令不会删除内核。如果你知道具体的版本,请随时更新答案! - bmaupinpurge-old-kernels
命令,结果陷入了一个无限循环,一直提示错误!找不到您的内核头文件,内核版本为3.19.0-68-generic。
经过50多次循环后,我终止了该命令,并手动运行了sudo update-grub
命令... 祈祷我的系统还能正常启动。 - Communicative Algebrapurge-old-kernels
确实释放了大约15 GB的磁盘空间。以下是我在杀死purge-old-kernels
后用来恢复的完整命令序列:sudo rm /var/lib/dpkg/lock
、sudo dpkg --configure -a
、sudo update-grub
。 - Communicative Algebra在左侧选择"Package Cleaner",从右面板选择"Clean Kernel"。
点击右下角的"解锁"按钮,输入密码。
从显示的列表中选择您希望删除的内核映像和头文件。正在使用的内核不会列出。
点击右下角的"清理"按钮以删除所选的内核映像和头文件。
从Grub菜单中删除操作系统
计算机中已删除的其他操作系统也将在以root身份运行"update-grub"命令后从菜单中删除。
菜单项是由脚本放置在Grub2菜单上的。如果您不希望其他操作系统出现在菜单中,请禁用/etc/grub.d/30_osprober文件。
运行以下命令停止该脚本的运行sudo chmod -x /etc/grub.d/30_os-prober
在/etc/default/grub中设置DISABLE_30_OS-PROBER='true'
从Grub菜单中删除Memtest86+
sudo chmod -x /etc/grub.d/20_memtest86+
注意: 在内核更新之后,GRUB菜单会添加一个新的条目。如果您希望,可以删除旧条目。然而,大多数经验丰富的用户会建议您至少保留一个备用条目,以防升级出现问题,并且您需要引导旧的内核版本进行故障排除。
删除内核条目的另一种方法(10.04之前)
适用于GRUB而非GRUB2
你可以在系统>>管理>>下找到它。
你看第二张截图,你可以选择显示多少个内核?通常我只保留一个,但是当我升级内核时,我总是在重新启动之前将其更改为2,这样如果新的内核与我的硬件有问题,我就可以选择旧的内核。一旦我知道新的内核运行良好,我就会将其改回1。
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
dpkg -l linux-* | awk '/^ii/{ print $2}' | grep -v -e `uname -r | cut -f1,2 -d"-"` | grep -e [0-9] | xargs sudo apt-get -y purge
- Dmitry Verkhoturovlinux-libc-dev:amd64
,这个不应该被删除。 - jamesadneyawk '{print "linux-image-" $0}'
才能实现。 - Markautoremove
)是否处理了linux-image-extras
文件?有人可以修改它,以便我们还可以手动选择一些不在列表顶部的内核吗? - nyxeepurge-old-kernels
在bikeshed的precise版本(1.22)中不存在。有没有一种合理/安全的方法可以获取更近期的precise版本的bikeshed?或者只需安装脚本会更简单/更安全?尽管依赖项列表很长,但我更愿意使用一个仓库。 - drevickosudo apt-get purge $(for tag in "linux-image" "linux-headers"; do dpkg-query -W -f'${Package}\n' "$tag-[0-9]*.[0-9]*.[0-9]*" | sort -V | awk 'index($0,c){exit} //' c=$(uname -r | cut -d- -f1,2); done)
(2015)sudo apt-get purge $(dpkg-query -W -f'${Package}\n' 'linux-*' | sed -nr 's/.*-([0-9]+(\.[0-9]+){2}-[^-]+).*/\1 &/p' | sort -k 1,1V | awk '($1==c){exit} {print $2}' c=$(uname -r | cut -f1,2 -d-))
(更新的?) - ChrisW//Unattended-Upgrade::Remove-Unused-Dependencies "false";
使用
Unattended-Upgrade::Remove-Unused-Dependencies "true";
"^linux-image.*";
apt-get autoremove
添加到我的每日定时任务中,实际上是在进行升级时使用的,因为它并不总是通过内置的更新管理器完成。 - Marcosdpkg -l | grep linux-image
dpkg -l | grep linux-headers
http://ubuntuforums.org/showthread.php?t=1658648
以下内容声称可以删除所有未使用的内核和头文件: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
apt-get -y
删除时不需要确认。~$ 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
linux-libc-dev
已经安装了。 - mikewhateverlinux-libc-dev
的版本号与当前内核的版本号相匹配。在这里,dpkg -l linux-libc-dev | sed '/^ii/!d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d'
打印出了linux-libc-dev:amd64。 - jarnogrep -E "(image|headers)"
。 - mikewhateverapt-cache search --names-only "^linux-.*" | cut -d' ' -f1 | grep -E -e linux-.*-[0-9]+(\.[0-9]+){2}-[^-]+
来查看不同类型的可能软件包。 - jarnosudo apt-get purge $(dpkg -l 'linux-*' | tail -n +6 | awk -v c="$(uname -r | cut -d- -f1,2)" 'match($2,"[0-9]+\\.[0-9]+\\.[0-9]+-[^-]+") && substr($2,RSTART,RLENGTH)!=c {print $2}')
或者使用更简单的 dpkg-query: sudo apt-get purge $(dpkg-query -W 'linux-*' | awk -v c="$(uname -r | cut -d- -f1,2)" 'match($1,"[0-9]+\\.[0-9]+\\.[0-9]+-[^-]+") && substr($1,RSTART,RLENGTH)!=c {print $1}')
- jarno-y
标志进行清理。 - Melroy van den Berg已经随 Ubuntu 自带的最快/简单的方法(至少适用于 12.04)是使用 apt-get
命令。如果您希望删除所有未使用的旧内核版本(除了您当前正在使用的上一个版本),请按照以下步骤操作。这样做是为了确保如果当前的内核版本出现故障,您有一种返回到之前状态的方法。请按照以下步骤操作:
sudo apt-get autoclean
sudo apt-get clean
sudo apt-get autoremove
sudo apt-get autoremove
确实会删除14.04中旧的(超过一个版本之前的)内核。在升级内核之前和之后,您可能需要运行它。当我在升级之前运行时,它只删除了旧内核的通用版本。然后,在升级内核后,它也删除了旧内核的低延迟版本。 - tekNorahsudo apt-get autoclean
命令。@tekNorah 我安装了几个旧内核,然后在Ubuntu Studio 14.04中运行了 sudo apt-get autoremove
命令。它没有删除任何内核。我只安装了低延迟内核。你为什么同时安装了 -generic 和 -lowlatency 内核? - jarnoapt-get autoremove
删除内核。我认为如果他们这样做了,这个帖子可能会有很大的不同。你对这个什么时候改变的有更准确的信息吗?顺便说一句,apt-mark showmanual | grep -E linux-.+-[0-9.]+-.+
仍然显示内核包是手动安装的。 - jarnosudo apt-get --purge autoremove
在Mythbuntu 14.04中并不能删除旧内核,但在Xubuntu 15.10中似乎可以做到。 - jarno
/etc/default/grub
中的这行代码:#GRUB_DISABLE_LINUX_RECOVERY="true"。 - pooliesudo apt-get autoremove
应该能解决问题。 - hobsapt-mark
建议来执行sudo apt-get autoremove --purge
这个答案。 - earcam