apt-get autoremoveからパッケージを除外する方法は?


20

削除する孤立パッケージのリストに、apt-get autoremove保持したいパッケージが含まれている状況にあります。どうやらそれに依存していたパッケージを誤って削除してしまったようです。パッケージを明示的に希望するようにマークして、apt-get autoremove削除しないようにするにはどうすればよいですか?



回答:


29

つかいます 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それは他のパッケージの依存関係ではない場合、パッケージを削除します。


別の便利なトリックは、次のように一度に多くのパッケージをマークできることです:sudo apt-mark manual <package1> <package2> <package3> etc
Msencenb

10

さらにいくつかの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.

0

これはすでに十分に回答されていますが、多くのパッケージを「マーク」したくない(そして後にマークを解除したくない)状況を見つけました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で行うこともできますが、おそらく状況をオーバーエンジニアリングしています。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.