Bir paketi apt-get autoremove'den nasıl dışlayabilirim?


20

Yedekli paketlerin listesinin kaldırılmasını apt-get autoremoveistediğim bir paketin bulunduğu bir durumdayım . Anlaşılan ona bağlı olan bir paketi yanlışlıkla kaldırdım. Paketi şimdi açıkça istenen şekilde işaretleyebilirim, böylece apt-get autoremoveçıkartmayacak mıyım?



Yanıtlar:


29

kullanım 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.

Yani

sudo apt-mark manual <package-name>

Şimdi autoremoveçıkarmayacak.

Geri almak

sudo apt-mark auto <package-name>

Şimdi autoremovebaşka bir paketin bağımlılığı değilse, paketi kaldıracaksınız.


Bir başka kullanışlı hile de bir kerede birçok paketi işaretleyebilmenizdir: sudo apt-mark manual <package1> <package2> <package3> etc
Msencenb

10

Birkaç Google denemesi daha bir çözüm getirdi :

Sadece açıkça yüklemek mümkündür:

sudo apt-get install <package>

veya manuel olarak

sudo apt-mark manual <package>

apt yeniden kurmayacak, çıktı şöyle görünecek:

$ 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

Bu zaten çok iyi cevaplanmış, ancak paketlerin çoğunu "işaretlemek" istemediğim bir durum buldum (ve daha sonra işaretini kaldırın autoremove).

Otomatik kaldırmak istediğiniz paketlerin listesi kolayca tanımlandığında, bunları / sed/ xargsdışına aktarabilirsiniz .

Pek çok paket için karmaşık bir örneğim yok, ancak aşağıdaki senaryo varsa:

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.

ve sadece linux*paketleri kaldırmak istiyorum , bunu yapabilirim:

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

Böylece buradan, bunları xargskomut satırı argümanları olarak basitine geçirmek kolaydır apt-get remove -y:

apt-get autoremove -s \
  | sed -ne 's/Remv \(linux[^[]*\)\[.*/\1/gp' \
  | xargs apt-get remove -y

Normalde xargs, argümanlardaki boşluklara karşı koruma sağlardım (örn. find ... -print0 | xargs -0 ...), Ama paket adlarında boşluklar olmadığından, newline-sınırlı argümanları kullanmakta rahat olurum.

(Diğer durumlarda, bir paketi “işaretlemek”, paketleri kaldırmak daha uygun olur diye düşünmüştüm. Bu da regex'lerle yapılabilir ve xargsbüyük olasılıkla durumun fazla üzerinde çalışmaktadır.)

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.