削除する孤立パッケージのリストに、apt-get autoremove
保持したいパッケージが含まれている状況にあります。どうやらそれに依存していたパッケージを誤って削除してしまったようです。パッケージを明示的に希望するようにマークして、apt-get autoremove
削除しないようにするにはどうすればよいですか?
削除する孤立パッケージのリストに、apt-get autoremove
保持したいパッケージが含まれている状況にあります。どうやらそれに依存していたパッケージを誤って削除してしまったようです。パッケージを明示的に希望するようにマークして、apt-get autoremove
削除しないようにするにはどうすればよいですか?
回答:
つかいます apt-mark
$ man apt-mark
...
manual
manual is used to mark a package as being manually installed, which will
prevent the package from being automatically removed if no other packages
depend on it.
そう
sudo apt-mark manual <package-name>
今autoremove
は削除しません。
元に戻すには
sudo apt-mark auto <package-name>
今、autoremove
それは他のパッケージの依存関係ではない場合、パッケージを削除します。
さらにいくつかのGoogleの試みが解決策をもたらしました。
明示的にインストールすることもできます。
sudo apt-get install <package>
または、手動でインストールされたものとしてマークする
sudo apt-mark manual <package>
apt
再インストールされず、出力は次のようになります。
$ sudo apt-get install tmux
Reading package lists... Done
Building dependency tree
Reading state information... Done
tmux is already the newest version.
tmux set to manually installed.
これはすでに十分に回答されていますが、多くのパッケージを「マーク」したくない(そして後にマークを解除したくない)状況を見つけましたautoremove
。
自動削除したいパッケージのリストが簡単に定義されたら、それらをパイプ/ sed
/ xargs
アウトできます。
多くのパッケージの複雑な例はありませんが、次のシナリオがある場合:
root@fptc-rsvrd:~# apt-get autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
libluajit-5.1-2 libluajit-5.1-common linux-headers-4.4.0-141 linux-headers-4.4.0-141-generic linux-headers-4.4.0-143 linux-headers-4.4.0-143-generic linux-headers-4.4.0-146 linux-headers-4.4.0-146-generic
linux-image-4.4.0-141-generic linux-image-4.4.0-143-generic linux-image-4.4.0-146-generic linux-image-extra-4.4.0-141-generic linux-modules-4.4.0-143-generic linux-modules-4.4.0-146-generic
linux-modules-extra-4.4.0-143-generic linux-modules-extra-4.4.0-146-generic linux-signed-image-4.4.0-141-generic pandoc-data
0 upgraded, 0 newly installed, 18 to remove and 19 not upgraded.
After this operation, 907 MB disk space will be freed.
そして、私はlinux*
パッケージだけを削除したい、私はこれを行うことができます:
root@fptc-rsvrd:~# apt-get autoremove -s | sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp'
linux-headers-4.4.0-141-generic
linux-headers-4.4.0-141
linux-headers-4.4.0-143-generic
linux-headers-4.4.0-143
linux-headers-4.4.0-146-generic
linux-headers-4.4.0-146
linux-signed-image-4.4.0-141-generic
linux-image-extra-4.4.0-141-generic
linux-image-4.4.0-141-generic
linux-modules-extra-4.4.0-143-generic
linux-image-4.4.0-143-generic
linux-modules-extra-4.4.0-146-generic
linux-image-4.4.0-146-generic
linux-modules-4.4.0-143-generic
linux-modules-4.4.0-146-generic
したがって、ここから、これらをxargs
コマンドライン引数としてsimple に渡すのは簡単apt-get remove -y
です。
apt-get autoremove -s \
| sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp' \
| xargs apt-get remove -y
通常、を使用する場合xargs
、引数(たとえば、find ... -print0 | xargs -0 ...
)にスペースを入れないようにしますが、パッケージ名にスペースが含まれていないため、改行で区切られた引数を使用しても問題ありません。
(私はそれを他の状況だと思うでしょう、それはパッケージを「保留」に「マーク」するのがより適切だと思います。これは正規表現とxargs
で行うこともできますが、おそらく状況をオーバーエンジニアリングしています。)