Làm cách nào để loại trừ một gói khỏi apt-get autoremove?


20

Tôi đang ở trong tình huống mà danh sách các gói mồ côi sẽ bị xóa bằng cách apt-get autoremovebao gồm một gói mà tôi muốn giữ. Rõ ràng tôi đã vô tình loại bỏ một gói phụ thuộc vào nó. Làm thế nào bây giờ tôi có thể đánh dấu gói là mong muốn rõ ràng, vì vậy apt-get autoremovesẽ không loại bỏ nó?


Và câu hỏi liên quan: Tại sao nó mồ côi cả?
bluenote10

Câu trả lời:


29

Sử dụng 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.

Vì thế

sudo apt-mark manual <package-name>

Bây giờ autoremovesẽ không loại bỏ nó.

Trở lại

sudo apt-mark auto <package-name>

Bây giờ autoremovesẽ loại bỏ gói nếu nó không phải là một phụ thuộc của bất kỳ gói nào khác.


Một mẹo hữu ích khác là bạn có thể đánh dấu nhiều gói cùng một lúc như sau: hướng dẫn sử dụng sudo apt-mark <pack1> <pack2> <pack3> vv
Msencenb

10

Một vài nỗ lực khác của Google đã đưa ra một giải pháp :

Có thể chỉ cần cài đặt rõ ràng:

sudo apt-get install <package>

hoặc đánh dấu là cài đặt thủ công qua

sudo apt-mark manual <package>

apt Sẽ không cài đặt lại, đầu ra sẽ giống như:

$ 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

Điều này đã được trả lời tốt, nhưng tôi đã tìm thấy một tình huống mà tôi không muốn "đánh dấu" nhiều gói (và sau đó bỏ đánh dấu chúng sau autoremove).

Khi danh sách các gói bạn muốn tự động định nghĩa được xác định dễ dàng, thì bạn có thể bỏ / sed/ xargschúng ra.

Tôi không có một ví dụ phức tạp về nhiều gói, nhưng nếu tôi có kịch bản sau:

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.

và tôi muốn xóa chỉ các linux*gói, tôi có thể làm điều này:

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

Vì vậy, từ đây, thật dễ dàng để chuyển những điều này thông qua xargsdưới dạng đối số dòng lệnh đến đơn giản apt-get remove -y:

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

Thông thường khi sử dụng xargs, tôi sẽ bảo vệ chống lại khoảng trắng trong các đối số (ví dụ find ... -print0 | xargs -0 ...:), nhưng vì tên gói không có khoảng trắng trong chúng, tôi thoải mái sử dụng các đối số được phân tách bằng dòng mới.

(Tôi nghĩ đó là những tình huống khác, sẽ phù hợp hơn khi "đánh dấu" một khoản giữ, các gói chưa mở. Điều đó cũng có thể được thực hiện với các biểu thức chính quy xargs, và có lẽ là tình huống quá kỹ thuật.)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.