Rau*_*lla 9 linux ubuntu debian kernel apt
我执行了命令 apt autoremove 但这些文件夹仍然存在。
正如命令“du -h -x --max-depth=1 /usr/lib | sort -hr | head -n 10”向我展示的那样,它们目前每个都使用了近 1G:
858M /usr/lib/modules
823M /usr/lib/x86_64-linux-gnu
Run Code Online (Sandbox Code Playgroud)
我该如何清理这个?谢谢。
小智 17
我需要这样做,因为在 Chromebook 上使用 Linux 一年多了,/usr/lib/modules 占用了超过 10GiB 的磁盘空间(这在这个设备上是非常宝贵的),而我只会运行无论如何,单个内核实例。运行单个内核所需的磁盘空间仅为 ~500MiB,相比之下,实际使用的磁盘空间约为 5%。
我自己根据我的发行版(KDE Neon、基于 Ubuntu LTS)提出了一个解决方案,其中包含多个 Bash 命令来执行以下操作:
linux-modules-*
属于当前未运行的 Linux 版本的软件包linux-modules-*
软件包(以及依赖的软件包)linux-image-*
请注意,我仅在运行安装在我的发行版上的最新 Linux 内核时才对此进行了测试。您的发行版可能附带依赖于元软件包的软件包,例如linux-generic-hwe-20.04
基于 Ubuntu 20.04 LTS 的发行版,并且在安装较新的 Linux 后运行较旧的 Linux 时,我尚未测试此脚本。
sudo apt remove $(dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)")
Run Code Online (Sandbox Code Playgroud)
要运行的第一个命令是uname -r
. 这会打印当前运行的 Linux 内核的版本号,格式如下:
$ uname -r
5.15.0-48-generic
Run Code Online (Sandbox Code Playgroud)
如需了解更多信息,请访问man uname
.
要查看的第二个命令是dpkg-query
,它允许我们以不同的方式查询已安装的软件包。您可以使用--list
漂亮的交互式显示,但我选择使用它--show
来使脚本编写更简单。
$ dpkg-query --show 'linux-modules-*'
linux-modules-5.11.0-44-generic 5.11.0-44.48~20.04.2
linux-modules-5.11.0-46-generic 5.11.0-46.51~20.04.1
# etc.
Run Code Online (Sandbox Code Playgroud)
如需了解更多信息,请访问man dpkg-query
.
坚定的读者可能会弄清楚如何使用该--showformat
选项来跳过此步骤,但我更喜欢一种更熟悉的方法 - 命令cut
。该cut
命令仅采用标准输入、由 提供的可选分隔符-d
(默认情况下为制表符)以及由 提供的字段参数-f
。在本例中,它获取命令的输出dpkg-query
并返回第一列:
$ dpkg-query --show 'linux-modules-*' | cut -f1
linux-modules-5.11.0-44-generic
linux-modules-5.11.0-46-generic
# etc.
Run Code Online (Sandbox Code Playgroud)
如需了解更多信息,请访问man cut
.
我们将其输出通过管道传输到grep
命令中,这使我们可以使用该选项选择与特定模式匹配的行,或者在本例中,选择与特定模式不-v|--invert-match
匹配的行。返回"$(uname -r)"
一条类似 的行5.15.0-48-generic
,然后将其用作 的模式grep
。这就是我们选择当前未linux-modules
运行的所有包的方式。
$ dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)"
# = dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "5.15.0-48-generic"
linux-modules-5.11.0-44-generic
linux-modules-5.11.0-46-generic
# etc.
Run Code Online (Sandbox Code Playgroud)
如需了解更多信息,请访问man grep
.
最后,我们只是使用这个列表作为命令的参数sudo apt remove
,这对于人们来说可能已经很熟悉了,不需要太多解释:
$ sudo apt remove $(dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)")
# = sudo apt remove linux-modules-5.11.0-44-generic linux-modules-5.11.0-46-generic [...]
Run Code Online (Sandbox Code Playgroud)
...但如果您不熟悉这些,man sudo
允许您以 root、系统管理员(或理论上的另一个用户)身份运行命令,这是使用man apt
Debian(因此是 Ubuntu)上的软件包和依赖项所必需的 -基于分布。
归档时间: |
|
查看次数: |
17665 次 |
最近记录: |