AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 2793
Accepted
Hans
Hans
Asked: 2010-08-21 19:37:01 +0800 CST2010-08-21 19:37:01 +0800 CST 2010-08-21 19:37:01 +0800 CST

如何删除旧内核版本以清理启动菜单?

  • 772

每次我安装新的 Linux 内核时,它都会留在 grub_config 中,每次都使启动菜单变长。

我知道我可以手动搜索已安装的软件包并将其删除。

Ubuntu 是否提供任何更简单的方法来清理它们或阻止它们显示在引导列表中?

grub2 kernel cleanup
  • 30 30 个回答
  • 1193238 Views

30 个回答

  • Voted
  1. Best Answer
    fossfreedom
    2012-02-03T16:06:07+08:002012-02-03T16:06:07+08:00

    16.04 和更新版本的 Ubuntu

    sudo apt autoremove
    

    此命令删除为解决依赖关系而自动安装但现在不再依赖的软件包。这包括旧版本的linux-headers-*和linux-image-*。(这个过程也很聪明,留下一个备用的内核版本作为后备!)

    11.10 和更新版本的 Ubuntu

    GRUB2 及其所有内核的显示

    安装在Ubuntu中的最新版本的Grub2会自动显示最新的内核并隐藏您可能已经安装的旧内核。

    GNU GRUB

    如果您没有看到您的grub - 请记住Shift在启动时按。

    如您所见,仅显示最新的内核。

    如果您选择显示的选项(按Enter),那么所有旧内核都将变为可见并可从中引导。

    GNU GRUB 以前的版本

    如何永久删除旧内核

    首次使用最新的可用内核启动。

    有多种方法可以删除旧内核。就我个人而言,我不会碰Computer Janitor,因为它的建议会破坏您的计算机。

    突触

    另一种选择是Synaptic ( sudo apt install synaptic)

    搜索linux-image,右键单击内核并选择完全删除,最后单击应用按钮删除内核。

    突触包管理器

    重复搜索,但这次是linux-header - 您可以删除之前选择的内核映像的相关标头。

    虽然Synaptic不会尝试验证您要删除的内容...您可能会无意中删除最新的内核 - 甚至通过此工具删除所有内核,从而使您的Ubuntu无法启动!

    请记住检查您使用的内核类型:

    uname -r
    

    结果将类似于:

    终端 <uname -r>

    记住结果和数字 - 确保不要删除相应的图像或标题。

    推荐

    我的建议是保留至少两个或最好三个内核,包括最新的内核。建议的原因是,如果由于某种原因您无法使用最新内核启动或引入了退化的功能(例如无线损坏),您将至少有一个/两个其他内核可供启动。

    • 639
  2. penreturns
    2012-06-20T10:37:04+08:002012-06-20T10:37:04+08:00

    首先,重新启动您的系统以确保它使用的是最新的内核。然后打开终端并检查您当前的内核:

    uname -r 
    

    不要删除这个内核!

    接下来,键入以下命令以查看/列出系统上所有已安装的内核。

    dpkg --list 'linux-image-*'
    

    查找所有低于当前内核的内核。当您知道要删除哪个内核时,请继续下面将其删除。运行以下命令以删除您选择的内核。

    sudo apt-get purge linux-image-x.x.x-x-generic 
    

    最后,运行下面的命令来更新 grub2

    sudo update-grub2 
    

    重新启动系统。

    • 416
  3. David Kemp
    2013-02-14T02:44:16+08:002013-02-14T02:44:16+08:00

    我的单线删除旧内核(这也释放了磁盘空间)

    dpkg --list | grep linux-image | awk '{ print $2 }' | sort -V | sed -n '/'`uname -r`'/q;p' | xargs sudo apt-get -y purge
    

    解释(记住,|使用上一个命令的输出作为下一个命令的输入)

    • dpkg --list列出所有已安装的软件包
    • grep linux-image查找已安装的 linux 映像
    • awk '{ print $2 }'只输出第二列(这是包名)
    • sort -V按版本号排列项目
    • sed -n '/'`uname -r`'/q;p'打印当前内核之前的行
    • xargs sudo apt-get -y purge清除找到的内核

    展开sed调用:

    • -n说sed要安静
    • `uname -r`输出当前安装的内核版本 - 我们将它包含在反引号中,以便输出包含在命令的一部分中(您也可能将其视为$(uname -r)
    • /something/q说当你匹配 'something' 时停止(在这种情况下,something 是 的输出uname -r) -/包围一个正则表达式
    • p是打印
    • the;是命令分隔符,所以/something/q;p当你匹配某些东西时说退出,否则打印

    总而言之,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
    

    注意:sed调用已修改。"$(uname -r | sed "s/\([0-9.-]*\)-\([^0-9]\+\)/\1/")"仅提取版本(例如“3.2.0-44”),没有“-generic”或类似的uname -r


    删除图像和标题的多合一版本(结合上述两个版本):

    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
    
    • 307
  4. bmaupin
    2015-05-15T07:20:21+08:002015-05-15T07:20:21+08:00

    Ubuntu 16.04+:

    $ 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
    

    Ubuntu 15.10 及以下版本:

    我发现这是最简单和最快的方法。它保留了最新的内核以及另外两个:

    sudo apt-get install bikeshed
    sudo purge-old-kernels
    

    要更改保留的其他内核的数量:

    sudo purge-old-kernels --keep 3
    
    • 63
  5. karthick87
    2010-11-29T22:09:39+08:002010-11-29T22:09:39+08:00

    从 Grub 2 中删除条目 应该通过编辑或删除 /etc/grub.d 文件夹中的文件来删除条目。/boot/grub/grub.cfg 文件是只读的,通常不需要编辑。

    内核太多?

    • 如果您不确定当前使用的内核,请在终端输入uname -r。

    • 通过 APT(Synaptic、“apt-get remove”等)删除的内核将自动更新 grub.cfg,无需用户操作。

    • 删除内核(和菜单项)的一个很好的工具是 Ubuntu-Tweak,一个安全且易于使用的 GUI 应用程序。

    • 安装 ubuntu 调整

    • Ubuntu-Tweak 将在 Applications > System Tools 下可用。

    删除较旧的内核条目

    • 选择左侧的“Package Cleaner”和右侧面板的“Clean Kernel”。

    • 按右下角的“解锁”按钮,输入您的密码。

    • 从显示的列表中选择要删除的内核映像和标头。未列出正在使用的内核。

    • 按右下角的“清理”按钮删除选定的内核映像和标头。

    从 Grub 菜单中删除操作系统

    • 一旦“update-grub”以 root 身份运行,其他已从计算机中删除的操作系统也将从菜单中删除。

    • 菜单项由脚本放置在 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+

    • 运行 update-grub 命令以允许将更改合并到 grub.cfg

    资源

    注意: 内核更新后,GRUB 菜单中会添加一个新条目。您可以根据需要删除旧条目。但是,大多数有经验的用户会建议您至少保留一个备用条目,以防升级出现问题而您需要启动较旧的内核版本以进行故障排除。

    删除内核条目的替代方法(10.04 之前)

    对于 GRUB 不是 GRUB2

    启动经理 安装启动管理器

    您可以在系统>>管理>>下找到它。 替代文字
    替代文字
    您在第二个屏幕截图中看到您可以选择显示多少个内核?我通常只是将它保持在 1,但是当我获得内核升级时,我总是在重新启动之前将其更改为 2,这样如果新内核对我的硬件有问题,我可以选择旧内核。一旦我知道新内核运行良好,我就把它改回 1。

    • 44
  6. Kees Cook
    2010-09-18T08:35:05+08:002010-09-18T08:35:05+08:00

    纯粹是命令行,这将删除除当前和第二大电流之外的所有内容(通过下面 head 命令中的“-2”):

    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
    
    • 41
  7. jarno
    2015-01-09T06:36:33+08:002015-01-09T06:36:33+08:00

    更新:如今purge-old-kernels已弃用。

    即使在棘手的条件下,我也制作了一个脚本来清除内核。它被称为linux-purge,你可以在这里找到它。

    如果您只想清除比当前使用的内核更旧的内核(和相关软件包),当系统没有损坏时,您可以使用此脚本。

    还有一个关于删除旧内核的 Ubuntu 文档页面。

    • 39
  8. Qwerty
    2012-02-16T01:30:51+08:002012-02-16T01:30:51+08:00

    您可以按照 Ubuntu Wiki 上自动安全更新文章的使用“无人值守升级”包部分来执行此操作。

    您需要在/etc/apt/apt.conf.d/50unattended-upgrades文件中更改以下行;

    //Unattended-Upgrade::Remove-Unused-Dependencies "false";
    

    和

    Unattended-Upgrade::Remove-Unused-Dependencies "true";
    

    自动删除旧包,包括内核。

    同时删除或评论该行

    "^linux-image.*"; 
    

    在文件/etc/apt/apt.conf.d/01autoremove 的“NeverAutoRemove”部分中。

    • 30
  9. Luis Alvarado
    2013-04-08T17:13:29+08:002013-04-08T17:13:29+08:00

    Ubuntu 已经附带的最快/更简单的方式(至少从 12.04 开始适用)是apt-get. 如果您希望删除所有未使用的旧内核版本(除了您不使用的前一个内核版本),请执行以下操作。这是为了确保如果当前内核版本以某种方式失败,您有办法回到之前的状态)。请执行下列操作:

    sudo apt-get autoclean
    

    这将消除您可能拥有的任何旧文件(包括内核版本)。请注意,如果您有许多旧版本,则需要一段时间,因为它必须确保删除内核版本没有问题。对我来说,删除最后 12 个内核版本大约需要 2 分钟。您还可以执行以下操作:

    sudo apt-get clean
    

    这将消除下载并存储在 apt 缓存文件夹中的所有内容。最后你有:

    sudo apt-get autoremove
    

    这将检查任何未使用的软件包并在必要时将其删除。这对于那些不再需要安装任何应用程序的库和依赖包来说非常有用。

    • 28
  10. mikewhatever
    2011-10-11T06:25:36+08:002011-10-11T06:25:36+08:00

    要弄清楚安装了哪些内核和头文件,请使用

    dpkg -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毫无疑问地用于删除)

    以下是在 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
    
    • 27

相关问题

  • 与 Grub 相比,使用 Grub2 有什么好处?

  • 如果旧版 grub 安装在引导分区扇区而不是 MBR 中,如何将 grub 更新为 grub2?

  • Ubuntu 是否支持与 SSD 一起使用的 TRIM 命令?

  • 如何在 Ubuntu 启动时显示或隐藏启动消息?

  • 使用 apt-get upgrade 时如何强制安装内核更新?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何安装 .run 文件?

    • 7 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    如何获得 CPU 温度?

    • 21 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Marko Smith

    如何使用命令行将用户添加为新的 sudoer?

    • 7 个回答
  • Marko Smith

    更改文件夹权限和所有权

    • 9 个回答
  • Marko Smith

    你如何重新启动Apache?

    • 13 个回答
  • Marko Smith

    如何卸载软件?

    • 11 个回答
  • Marko Smith

    如何删除 PPA?

    • 26 个回答
  • Martin Hope
    NES 如何启用或禁用服务? 2010-12-30 13:03:32 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    Olivier Lalonde 如何在结束 ssh 会话后保持进程运行? 2010-10-22 04:09:13 +0800 CST
  • Martin Hope
    David B 如何使用命令行将用户添加为新的 sudoer? 2010-10-16 04:02:45 +0800 CST
  • Martin Hope
    Hans 如何删除旧内核版本以清理启动菜单? 2010-08-21 19:37:01 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve