UbuntuなどのLinuxディストリビューションを使用していて、手動でインストールしたパッケージを全て削除し、初期状態に戻したいと思ったことはありませんか?
本記事ではそのような方のために、ユーザーが手動でインストールしたパッケージを全て削除する方法について解説します。
本記事では、「Ubuntu 22.04 LTS」環境を使用しています。
手順
結論から言うと、以下のスクリプトを実行すると、ユーザーが手動でインストールしたパッケージの全削除を行うことができます。
以下のスクリプトを実行すると、これまでユーザーがインストールしたパッケージが全て削除されてしまうため、慎重に行う必要があります。
for pkg in $(comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)); do
sudo apt-get remove --purge -y $pkg
done
このスクリプトを remove_packages_manually_installed.sh として保存し、実行権限を付けて実行します。
chmod +x ./remove_packages_manually_installed.sh
./remove_packages_manually_installed.sh
スクリプト実行後、手動でインストールしたパッケージは全て削除されますが、手動インストール時に依存関係があるパッケージとして自動でインストールされたパッケージは削除されません。そのため、以下のコマンドを実行し、依存パッケージも削除します。
sudo apt-get autoremove
sudo apt-get clean
これで、ユーザーが手動でインストールしたパッケージが完全に削除されます。
スクリプト詳細
スクリプトの内容が少し複雑なので、分解して説明します。
for pkg in $(comm -23 <(apt-mark showmanual | sort -u) <(gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u)); do
sudo apt-get remove --purge -y $pkg
done
スクリプトは以下の順で処理を実施します。
![](https://furu-se-blog.com/wp-content/uploads/2024/06/delete_package.drawio-2.png)
手動でインストールされたパッケージリスト①を出力
以下の処理が該当します。
apt-mark showmanual | sort -u
apt-mark showmanual コマンドでは、手動でインストールされたパッケージを全て出力します。ただし、OSインストール時にデフォルトでインストールされるパッケージも含まれます。
apt-mark showmanual での出力結果に対して、sort -u でアルファベット順にソートし重複行を削除します。
これをパッケージリスト①とします。
OSインストール時にインストールされるパッケージリスト②を出力
以下の処理が該当します。
gzip -dc /var/log/installer/initial-status.gz | sed -n 's/^Package: //p' | sort -u
まず、gzip -dc /var/log/installer/initial-status.gz でOSインストール時にデフォルトでインストールされるパッケージリストを含む圧縮ファイル (/var/log/installer/initial-status.gz) を解凍して出力し、それを sed コマンドに渡します。
次に、sed -n ‘s/^Package: //p’ を実行し、gzip コマンドの出力結果の行の先頭にある “Package: ” を削除し、パッケージ名のみを抽出します。
最後に sort -u でアルファベット順にソートし重複行を削除します。
これをパッケージリスト②とします。
パッケージリスト①と②において①のみに含まれるパッケージリスト③を出力
以下の処理が該当します。
comm -23 <(command1) <(command2)
command1 と command2 それぞれの出力結果から、command1 の出力結果に含まれるもののみを出力します。
ここでは、パッケージリスト①と②において、①のみに含まれるパッケージのリストを出力します。
つまり、初期インストールされていないユーザーが手動インストールのみのパッケージリストが得られます。
これをパッケージリスト③とします。
パッケージリスト③の各項目に対してパッケージ削除処理を実施
以下の処理が該当します。
for pkg in $(command); do
sudo apt-get remove --purge -y $pkg
done
これは、command の出力結果 (パッケージリスト③) の各項目を変数 pkg に格納し、ループを用いて各項目の削除処理を行います。
最後に
上記で記載した手順を実行することで、ユーザーが手動でインストールしたパッケージが削除されます。
ただし、ユーザーがパッケージに含まれるアプリなどを実行し、変更が加わった共通の設定ファイルやホームディレクトリに生成されたファイルなどが元の状態に戻るわけではありません。
OSを完全に初期状態に戻すのであれば、OSの再インストールを行うのがおすすめです。