要約:

要約:

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

これをクリーンアップするにはどうすればいいでしょうか? ありがとうございます。

答え1

ChromebookでLinuxを1年以上使用してきたので、/usr/lib/modulesが10GiB以上のディスク容量を占有していたため(このデバイスでは貴重な容量です)、いずれにしても単一のカーネルインスタンスしか実行しないので、これを実行する必要がありました。ディスク容量必要対照的に、単一のカーネルを実行するのに必要なディスク容量は約 500MiB だけで、実際に使用されるディスク容量は全体の約 5% でした。

私は自分のディストリビューション (KDE Neon、Ubuntu LTS ベース) に基づいて、次の操作を実行する複数の Bash コマンドで構成されるソリューションを自分で考え出しました。

  • 現在実行中のLinuxバージョンを検出する
  • linux-modules-*Linuxバージョンに属するパッケージを検出するない現在実行中
  • 実行されていないすべてのlinux-modules-*パッケージ(および依存パッケージ)をアンインストールしますlinux-image-*

これは私がテストしただけであることに注意してくださいすでに実行中の場合私のディストリビューションにインストールされている最新の Linux カーネル。ディストリビューションには、Ubuntu 20.04 LTS ベースのディストリビューションなどのメタパッケージに依存するパッケージが付属している可能性があります。linux-generic-hwe-20.04また、新しい Linux をインストールした後に古い Linux を実行するときにこのスクリプトをテストしていません。

要約:

sudo apt remove $(dpkg-query --show 'linux-modules-*' | cut -f1 | grep -v "$(uname -r)")

わかりました。でもそれはどういう意味ですか?

最初に実行するコマンドは ですuname -r。これにより、現在実行中の Linux カーネルのリリース番号が次のような形式で出力されます。

$ uname -r
5.15.0-48-generic

詳細はman uname

2 番目に見るコマンドは で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.

詳細は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.

詳細は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.

詳細は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 [...]

...しかし、もしそうならないあなたにとって馴染みのある、man sudoルート、システム管理者(または理論的には他のユーザー)としてコマンドを実行できます。これは、man aptは、Debian (つまり Ubuntu) ベースのディストリビューションのパッケージと依存関係を管理します。

答え2

私は /usr/lib を空にしようとしていて、1 つのアプローチを思いつきました:

apt-show-versions |grep "No available version in archive"

現在、どのsources.listでも提供されていないパッケージが表示されます(このUbuntuバージョンの場合)。たとえば、アップグレードを行った場合、以前のUbuntuバージョンから手動でインストールされたパッケージも含まれます。問題は、slack、draw.ioなど、保持したいパッケージもあるため、不要になったパッケージを手動で検査する必要があることです。

Ubuntu 22.04 上の Ubuntu 16.04 パッケージなど、確実に削除したいパッケージのパターンを見つけた場合は、次のコマンドを実行できます。

apt-show-versions |grep "No available version in archive" |grep 16.04 |cut -d " " -f1 |xargs apt remove --purge

答え3

簡単に言えば:しないでください

理論的には、使用しているマシンで不要なモジュールを削除することは可能ですが、どこかで間違った手順を実行すると、マシンが起動しなくなるリスクがあります。また、カーネルを更新するたびにこれを繰り返す必要があります。

ギガバイトです。ディスクは安いです。それで我慢しましょう。

関連情報