Làm thế nào để các lệnh loại bỏ gói APT khác nhau?


17

Sự khác biệt giữa các lệnh này là gì?

  1. sudo apt-get autoremove --purge packagenames
  2. sudo apt-get remove --purge packagenames
  3. sudo apt-get purge purge packagenmaes
  4. sudo apt-get remove packagenames
  5. sudo apt-get autoremove

Câu trả lời:


24

Câu trả lời nhanh

  • remove gỡ cài đặt các gói được đặt tên theo nó.
  • autoremovegỡ cài đặt tất cả các gói được cài đặt tự động không còn cần thiết. Không chính xác để liệt kê tên gói sau autoremove; chúng sẽ bị bỏ qua (và tất cả các gói đủ điều kiện sẽ bị xóa), đây có thể không phải là những gì bạn dự định.
  • --purgelàm cho các tệp cấu hình toàn hệ thống liên quan đến các gói bị xóa cũng bị xóa. Nó phải được kèm theo một lệnh, chẳng hạn như removehoặc autoremove. Các --purgelá cờ làm thay đổi hoạt động của một lệnh; nó không tự hành động.
  • purgecó nghĩa là điều tương tự như --purge remove(giống như remove --purge). Nói purgehai lần là không đúng ; thứ hai purgeđược hiểu là tên của một gói là purged, có lẽ không phải là những gì bạn dự định.

Trả lời đầy đủ

Để hiểu những lệnh đó làm gì và chúng khác nhau như thế nào, điều này giúp (và có lẽ là rất cần thiết) để hiểu hai khái niệm:

  1. sự khác biệt giữa các gói được cài đặt thủ côngtự động cài đặt
  2. sự khác biệt giữa các tệp gói của góitệp cấu hình của gói

Cài đặt thủ công so với tự động cài đặt

Một gói được cài đặt là thủ công hoặc tự động cài đặt.

Khi bạn chỉ định một gói để cài đặt và nó được cài đặt, nó sẽ được cài đặt thủ công .

Nhưng các gói khác cũng có thể được cài đặt. Hầu hết các gói có phụ thuộc - các gói khác phải được cài đặt, để các gói đó hoạt động như dự định. Khi bạn cài đặt một gói, các gói phụ thuộc của nó (tức là các gói khác mà nó phụ thuộc) được cài đặt, ngoại trừ các gói đã được cài đặt trước đó.

Khi một gói không được chỉ định bởi bạn sẽ được cài đặt, nhưng thay vào đó được cài đặt như một phần phụ thuộc của gói bạn đã chỉ định để cài đặt, nó sẽ tự động được cài đặt.

Xin lưu ý rằng khi bạn có hai gói được cài đặt và một trong số chúng là phụ thuộc của gói khác, điều đó không có nghĩa là phụ thuộc được cài đặt tự động. Cũng có thể là phần phụ thuộc đã được cài đặt thủ công (ví dụ: do bạn chỉ định, ví dụ, được cài đặt trước hoặc cùng lúc với gói phụ thuộc vào nó).

Cuối cùng:

  • Nếu bạn cố gắng cài đặt thủ công một gói đã được cài đặt, nó vẫn được cài đặt. Nhưng nếu nó được cài đặt tự động, một thay đổi được thực hiện - cố gắng cài đặt thủ công, nó sẽ đánh dấu nó là cài đặt thủ công.
  • Bạn có thể đánh dấu bất kỳ gói nào là cài đặt thủ công hoặc tự động (bằng apt-marklệnh), bất kể chúng được cài đặt trong trường hợp nào hoặc trong hoàn cảnh nào.
  • Các gói được cài đặt sẵn với hệ thống Ubuntu của bạn không được cài đặt tự động; một số trong số chúng được đánh dấu tự động cài đặt và một số khác được đánh dấu cài đặt thủ công. Điều này là để thỏa mãn logic đằng sau việc phân biệt giữa các gói được cài đặt thủ công và tự động - ý tưởng rằng một số gói chỉ cần để phục vụ cho các gói khác.

Thông thường, đối với mỗi gói được cài đặt tự động, bạn sẽ có ít nhất một gói được cài đặt thủ công phụ thuộc vào gói đó (và điều đó khiến nó được cài đặt tự động). Tuy nhiên, nếu sau đó bạn xóa tất cả các gói được cài đặt thủ công phụ thuộc vào gói được cài đặt tự động, thì gói được cài đặt tự động sẽ không còn cần thiết nữa, nhưng vẫn sẽ được cài đặt.

apt-get autoremove loại bỏ các gói được cài đặt tự động không còn có các gói được cài đặt thủ công tùy thuộc vào chúng.

Gói tập tin và tập tin cấu hình

Gói cung cấp các tệp được dự định và vẫn giữ nguyên, giống nhau trên mọi hệ thống nơi phiên bản của gói đó được cài đặt. Các tệp này cung cấp các tệp thực thi, tài nguyên, tài liệu và "tài sản" khác cho các chương trình đã cài đặt. Chúng tôi thường chỉ gọi những "tập tin" mà gói cung cấp.

Nhưng một gói cũng cung cấp các tệp khác, dự định (có thể) sẽ được thay đổi. Chúng được gọi là tập tin cấu hình toàn cầu (hoặc toàn hệ thống). Chúng hầu như luôn được cài đặt trong /etcthư mục và chúng có thể được sửa đổi tự động và thủ công để thay đổi hành vi của các chương trình đã cài đặt. Ví dụ: sudocó tệp cấu hình /etc/sudoersvà thư mục chứa nhiều tệp cấu hình hơn /etc/sudoers.d. Tệp đó và bất kỳ tệp nào được thêm vào thư mục đó, chỉ định ai được phép sử dụng sudotheo những cách nào.

Thông thường, mong muốn gỡ cài đặt một gói và sau đó cài đặt lại không nên thay đổi cách hành xử (trừ khi các tệp gói của nó bị hỏng và tất nhiên đó là lý do tại sao bạn cài đặt lại gói đó). Do đó, thông thường khi một gói được gỡ cài đặt, các tệp gói của nó sẽ bị xóa nhưng các tệp cấu hình trên toàn hệ thống của nó không bị ảnh hưởng.

Khi bạn gỡ cài đặt gói mà không chỉ định rằng các tệp cấu hình trên toàn hệ thống cũng được cho là sẽ bị xóa, đó được gọi là "xóa" gói.

Nếu bạn cũng muốn xóa các tệp cấu hình toàn hệ thống của gói khi bạn gỡ cài đặt gói, đó được gọi là "thanh trừng" gói.

apt-get removesẽ loại bỏ một gói; nghĩa là, nó sẽ gỡ cài đặt gói nhưng để lại các tệp cấu hình toàn hệ thống.

apt-get purgesẽ thanh lọc một gói; nghĩa là, nó sẽ gỡ cài đặt gói và cũng đảm bảo xóa các tệp cấu hình trên toàn hệ thống.

Một cách khác để thanh lọc các gói là sử dụng --purgecờ. Điều đó không nói apt-getphải làm gì; thay vào đó, nó sửa đổi những thuật ngữ (hoặc "lệnh") như removebảo nó làm gì. Các --purgelá cờ gây ra bất kỳ uninstallations gói được kèm theo việc xóa các tập tin cấu hình toàn hệ thống cho gói (s) being gỡ cài đặt. Nói cách khác, --purgelá cờ biến sự loại bỏ thành thanh trừng.

Tại sao chúng ta có --purgecờ khi chúng ta có purgelệnh? Rốt cuộc, không sudo apt-get --purge remove packagenametương đương với sudo apt-get purge packagename. Chúng tương đương nhau. Trong trường hợp --purgecó ích là khi bạn muốn thay đổi hành vi của các lệnh khác hơn remove.

Ví dụ: giả sử bạn muốn gỡ cài đặt các gói đã cài đặt tự động không còn cần thiết (vì không còn gói nào được cài đặt thủ công tùy thuộc vào chúng), nhưng bạn không chỉ muốn xóa các gói được cài đặt tự động này, bạn cũng muốn xóa tập tin cấu hình trên toàn hệ thống của họ. Sau đó, bạn có thể chạy:

sudo apt-get --purge autoremove

Hãy xem xét thêm một lần sử dụng --purge. Có một cờ được gọi --reinstall, biến cài đặt thành cài đặt lại. Điều này có nghĩa là, thông thường, khi bạn cố gắng cài đặt một gói đã được cài đặt, sẽ không có gì xảy ra hoặc (nếu gói được đánh dấu tự động cài đặt), gói sẽ được đánh dấu cài đặt thủ công. Nhưng với --reinstallcờ, việc cài đặt một gói đã được cài đặt sẽ khiến nó bị xóa và sau đó được cài đặt lại :

sudo apt-get --reinstall install packagename

Nhưng giả sử bạn muốn xóa các tệp cấu hình toàn hệ thống của gói bạn đang cài đặt lại. Điều này là hơi phổ biến; khi một gói không hoạt động và bạn không biết tại sao, bạn có thể thử cài đặt lại và cũng xóa các tệp cấu hình của nó để cấu hình của nó được đặt lại về mặc định. Để đạt được điều này, bạn có thể chạy:

sudo apt-get --purge --reinstall install packagename

Việc --reinstallbiến cài đặt thành cài đặt lại (nghĩa là loại bỏ sau khi cài đặt) và --purgebiến phần loại bỏ cài đặt lại thành purging.

Hành vi của các ví dụ của bạn

Bây giờ cần phải rõ ràng chính xác từng apt-getlệnh trong ví dụ của bạn làm gì:

  • sudo apt-get autoremove --purge packagenames

    Việc thanh trừng này tự động cài đặt các gói không còn có các gói được cài đặt thủ công phụ thuộc vào chúng. Đó là, nó gỡ cài đặt các gói đó (đòi hỏi phải xóa các tệp gói của chúng) và nó cũng xóa các tệp cấu hình toàn hệ thống của chúng.

    Ở đây, packagenameskhông làm gì cả. Cụ thể, nếu bạn dự định chỉ xóa các gói có tên được liệt kê ở đó, thì điều này sẽ không hoạt động như bạn dự định.

  • sudo apt-get remove --purge packagenames

    Cuộc thanh trừng này packagenames; giả sử packagenameslà một danh sách các tên gói được phân tách bằng khoảng trắng, nó sẽ lọc tất cả chúng. Đó là, nó sẽ gỡ cài đặt chúng (đòi hỏi phải xóa các tệp gói của chúng) và cũng sẽ xóa các tệp cấu hình toàn hệ thống của chúng.

    Nếu bất kỳ gói nào được liệt kê trong packagenameskhông được cài đặt, sự hiện diện của nó trong danh sách sẽ không có hiệu lực (ngoại trừ việc bạn sẽ được thông báo rằng nó chưa được cài đặt). Nếu bạn liệt kê tên gói không phải là tên của bất kỳ gói thực tế nào, lệnh sẽ bị lỗi.unable to locate packagename

  • sudo apt-get purge purge packagenmaes

    Nếu bạn loại bỏ một trong những lần xuất hiện purgetrong lệnh đó, nó sẽ tương đương với lần xuất hiện trước. Khi nó đứng, nó cố gắng thanh lọc một gói được gọi purge, và cũng để thanh lọc các gói được liệt kê trong packagenames. Vì purgekhông phải là tên của bất kỳ gói nào, nó sẽ thất bại với thông báo lỗi.

  • sudo apt-get remove packagenames

    Điều này loại bỏ các gói được liệt kê trong packagenamesđó đòi hỏi phải xóa các tập tin gói của họ. Điều này không xóa các tệp cấu hình toàn hệ thống của họ (vì nó chỉ là một loại bỏ, không phải là một cuộc thanh trừng).

  • sudo apt-get autoremove

    Điều này gỡ cài đặt các gói được cài đặt tự động không còn có các gói được cài đặt thủ công phụ thuộc vào chúng. Điều này đòi hỏi phải xóa các tệp gói của họ, nhưng không phải các tệp cấu hình trên toàn hệ thống của họ (nghĩa là nó là một loại bỏ nhưng không phải là một cuộc thanh trừng).

Để biết thêm thông tin về cách sử dụng apt-get, tôi khuyên bạn nên trang hướng dẫn sử dụng . Để biết thêm thông tin chung, xem hướng dẫn này .

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.