Cách chính xác để loại bỏ hoàn toàn một ứng dụng là gì?


546

Tôi đã tìm kiếm trên mạng để biết thông tin như vậy và tìm thấy các dòng lệnh khác nhau, như những dòng này:

sudo apt-get remove application
sudo apt-get remove application*

sudo apt-get remove --purge application
sudo apt-get remove --purge application*

sudo apt-get purge application
sudo apt-get purge application*

Vậy, cách chính xác là gì? Có cần thiết phải sử dụng "*" không?

Sau đó, tôi cũng tìm thấy các lệnh sau:

sudo updatedb
sudo locate application
sudo rm -rf (file/folder name)

1
Một số câu hỏi của bạn có thể được trả lời trong bài đăng này: askubfox.com/questions/1143/how-can-i-uninstall-software
Glutimate

8
application*đôi khi có thể cho kết quả bất ngờ - ví dụ: nếu bạn có một tệp trong thư mục hiện tại có tên application_information, shell sẽ mở rộng nó trước khi nó được chuyển sang apt-get. Nếu điều này đang xảy ra và bạn thực sự muốn dấu hoa thị theo nghĩa đen, bạn có thể sử dụng application\*hoặc'application*'
Izkata

6
application*thậm chí còn nguy hiểm hơn khi không có tệp trong thư mục hiện tại: apt-getsử dụng các biểu thức thông thường, không có mẫu hình cầu. Mọi người gần như đã xóa sạch toàn bộ hệ thống đang cố gắng loại bỏ wine*.
Andrea Corbellini

3
Bạn có thể chấp nhận một câu trả lời? Để biết ơn những người đã trả lời bạn.
m-ric

Không application*phải cũng không application\*an toàn! Trích dẫn *\hoặc ' 'chỉ làm tăng rủi ro, đảm bảo *được thông qua nguyên trạng apt-get(mặc dù nó thường là vậy!), Gây ra apt-getđể giải thích đối số là một biểu thức chính quy. Trong một regex *có nghĩa là "không hoặc nhiều hơn các ký tự trước." Một dạng phổ biến của lỗi là gỡ cài đặt wine*, xóa tất cả các gói có win(không wine, win) ở bất kỳ đâu trong tên của chúng và tất cả các gói tùy thuộc vào bất kỳ gói nào. Xem giải thích nàysửa chữa có thể . @Izkata
Eliah Kagan

Câu trả lời:


705
  • apt-get remove packagename

    sẽ loại bỏ các tệp nhị phân, nhưng không loại bỏ các tệp cấu hình hoặc dữ liệu của gói packagename. Nó cũng sẽ để lại các phụ thuộc được cài đặt với nó về thời gian cài đặt không bị ảnh hưởng.

  • apt-get purge packagename hoặc là apt-get remove --purge packagename

    sẽ loại bỏ mọi thứ liên quan đến gói packagename, nhưng không loại bỏ các phụ thuộc được cài đặt cùng với nó khi cài đặt. Cả hai lệnh đều tương đương.

    Đặc biệt hữu ích khi bạn muốn 'bắt đầu lại tất cả' với một ứng dụng vì bạn đã làm rối cấu hình. Tuy nhiên, nó không loại bỏ các tập tin cấu hình hoặc dữ liệu cư trú trong thư mục nhà của người dùng, thường là trong các thư mục ẩn ở đó. Không có cách nào dễ dàng để loại bỏ những người là tốt.

  • apt-get autoremove

    loại bỏ các gói mồ côi, tức là các gói đã cài đặt đã từng được cài đặt như một phần phụ thuộc, nhưng không còn nữa. Sử dụng gói này sau khi xóa gói đã cài đặt phụ thuộc mà bạn không còn quan tâm.

  • aptitude remove packagenamehoặc aptitude purge packagename(tương tự)

    cũng sẽ cố gắng loại bỏ các gói khác được yêu cầu packagenametrên nhưng không được yêu cầu bởi bất kỳ gói nào còn lại. Lưu ý rằng aptitudechỉ nhớ thông tin phụ thuộc cho các gói mà nó đã cài đặt.

Và nhiều hơn nữa tồn tại. Các cấp độ thấp hơn dpkgcó thể được sử dụng (nâng cao) hoặc các công cụ GUI như Muon, Synaptic, Software Center, v.v. Không có "cách chính xác" nào để xóa ứng dụng hoặc thực hiện các tác vụ khác tương tác với quản lý gói của bạn.

Danh sách bạn tìm thấy chỉ là ví dụ. Hãy chắc chắn rằng bạn hiểu ý nghĩa và thử những gì nó muốn làm trước khi chấp nhận hành động (bạn cần nhấn Ytrước khi nó thực sự thực hiện các hành động như đề xuất).

Phiên bản dấu hoa thị trong câu hỏi có lẽ sai ; apt-getchấp nhận một biểu thức chính quy và không phải là mẫu hình cầu như vỏ. Vậy chuyện gì xảy ra với

sudo apt-get remove application*

như sau:

  1. Shell cố gắng mở rộng application*xem xét các tập tin trong thư mục hiện tại. Nếu (như thường lệ) nó không tìm thấy gì, nó sẽ trả về mẫu toàn cục không bị thay đổi (giả sử bashvới hành vi mặc định ở đây --- zshsẽ báo lỗi).

  2. apt-getsẽ loại bỏ các gói có tên chứa một chuỗi đáp ứng các biểu thức chính quy application*, có nghĩa là, applicatiotiếp theo là một số tùy ý của n: applicatio, application, applicationn, libapplicatio,, vv

  3. Để xem điều này có thể nguy hiểm như thế nào, hãy thử (không có root để đảm bảo an toàn gấp đôi) apt-get -s remove "wine*"( -ssẽ mô phỏng điều đó thay vì thực hiện) --- nó sẽ nói là sẽ xóa tất cả các gói có "win" trong tên của chúng và người phụ thuộc, gần như toàn bộ hệ thống ...

Có lẽ, lệnh đó có nghĩa là thực sự

 sudo apt-get remove "^application.*"

(lưu ý dấu ngoặc kép và dấu chấm) sẽ xóa tất cả các gói có tên bắt đầu bằng application.

Những lệnh này,

sudo updatedb                  # <-- updates the locate database (index). harmless
sudo locate application        # <-- locates the file 'application'. harmless
sudo rm -rf (file/folder name) # <-- removes files/dirs recursively. dangerous.

hoàn toàn nằm ngoài phạm vi quản lý gói. Không xóa các tệp thuộc gói mà không sử dụng trình quản lý gói! Nó sẽ bị lẫn lộn và là cách làm sai .

Nếu bạn không biết tập tin thuộc về gói nào, hãy thử điều này:

dpkg -S /path/to/file

9
Tùy chọn --purge cũng tiện dụng khi cố gắng loại bỏ hoàn toàn mọi phụ thuộc còn lại bao gồm các tệp cấu hình của chúng: apt-get-autoremove --purge Điều quan trọng cần lưu ý là các tệp cấu hình trong thư mục chính của bạn không bị ảnh hưởng bởi tùy chọn --purge. Những bạn sẽ phải loại bỏ bằng tay.
Glutimate

1
Có một lỗi ở đây: apt-get chấp nhận RE, không phải là sự ảm đạm; vì vậy apt-get remove pack * sẽ xóa tất cả các gói bắt đầu bằng pac theo sau bằng 0 hoặc nhiều hơn k ... điều này thường bất ngờ. Tôi đã chỉnh sửa anser. Xem thêm Askubfox.com/questions/210976/ Mạnh
Rmano

Tôi nghĩ rằng câu trả lời này không còn chính xác. Một trong hai apt remove -s texlive*hoặc các apt-getdòng trả về đối tác của nó, chẳng hạn như Note, selecting 'texlive-font-utils' for glob 'texlive*'(ngụ ý rằng chúng thực sự chấp nhận các khối lượng), tiếp theo là các dòng thông thường Package 'texlive-common' is not installed, so not removedvà cuối cùng Remv, chẳng hạn như Remv texlive-font-utils [2015.20160320-1] [...].
Jonathan Y.

@JonathanY. Bạn cũng sẽ chọn các gói chưa cài đặt. Dù sao, bạn có thể vui lòng hỏi một câu hỏi MỚI và giải thích chi tiết hơn một chút về tình huống của bạn trong câu hỏi. Tôi sẽ rất vui khi nhìn vào nó :)
gertvdijk

Tôi không hỏi một câu hỏi mới. Tôi đang chỉ ra một sự thay đổi có thể vì câu trả lời này đã được thực hiện khiến một số chi tiết không chính xác. Nói một cách dí dỏm, dường như điều apt-get remove packa*đó thực sự chiếm lĩnh toàn cầu packa*thay vì xem nó như regex: nó phù hợp packagenhưng không pack.
Jonathan Y.

110

Đối với Ubuntu 12.04 và có thể cao hơn, phương pháp đúng là:

sudo apt-get --purge autoremove packagename

Như chi tiết ở đây .

Không sử dụng packagename*vì điều đó có thể xóa các gói không mong muốn và gây ra nhiều vấn đề hơn nó giải quyết. Hoặc nếu bạn phải, ít nhất là chạy nó với một -s, --simulate, --dry-runcờ đầu tiên để xem chính xác những gì nó sẽ làm mà không làm việc đó.


13
Đây là câu trả lời đúng, ngắn gọn và súc tích:
Anwar

20

Bạn có thể sử dụng lệnh này:

sudo apt-get purge --auto-remove packagename

Nó sẽ lọc các gói cần thiết cùng với các phụ thuộc được cài đặt với các gói đó. Các --auto-removetùy chọn (là một bí danh của autoremove) hoạt động tương tự như sudo apt-get autoremove. Bằng cách sử dụng lệnh này, chúng ta có thể chạy một lệnh duy nhất:

sudo apt-get purge --auto-remove packagename

Thay vì:

sudo apt-get purge packagename
sudo apt-get autoremove

2
Mặc dù bạn đúng, nhưng người ta cũng có thể sử dụng sudo apt-get --purge autoremove packagename. Lệnh 1 tương tự ở đây
Anwar

Lệnh hoàn chỉnh cũng có thể được viết như apt-get autoremove --purgethay vì apt-get purge --auto-remove?
felwithe

3
Ai đó có thể bắn tôi không?
Martin Andersson

7

Bạn có thể sử dụng một cách an toàn sudo apt-get remove --purge applicationhoặc sudo apt-get remove applications99% thời gian. Khi bạn sử dụng purgecờ, nó cũng chỉ cần loại bỏ tất cả các tệp cấu hình. Mà có thể hoặc không thể là những gì bạn muốn, tùy thuộc vào việc bạn muốn cài đặt lại ứng dụng nói. Các application*sẽ phù hợp với tất cả các ứng dụng mà bắt đầu với application, mà thường bổ sung, tính năng bổ sung, vv của ứng dụng chính bạn đang loại bỏ. I E

sudo apt-get remove gedit*

sẽ loại bỏ gedit, gedit-pluginsgedit-common. Thông thường không cần thiết phải làm điều này, vì hầu hết các plugin / chương trình liên quan đều phụ thuộc vào ứng dụng chính và sẽ tự động bị xóa (hoặc được đánh dấu để xóa) khi bạn gỡ cài đặt ứng dụng chính.

Lệnh cuối cùng của bạn chỉ là loại bỏ thức ăn thừa khỏi các ứng dụng được biết là có trình gỡ cài đặt lộn xộn và nó chỉ xóa mọi phần còn lại của ứng dụng.


5

Tôi nhận được một số thông báo lỗi khi xóa gói, cách duy nhất tôi thấy có hiệu quả là:

mv /var/lib/dpkg/info/package.* /tmp/
dpkg --remove --force-remove-reinstreq package

Tôi thấy rằng mặc dù chỉ sử dụng

dpkg --remove --force-remove-reinstreq package

không loại bỏ gói, nó chỉ cho tôi đường dẫn chính xác đến tệp để di chuyển với:

mv /var/lib/dpkg/info/package.* /tmp/

Gói thay thế với tên ứng dụng của bạn. Sử dụng sudo trong Ubuntu, trở thành root trong Debian.



1

Nó phụ thuộc vào ứng dụng bạn muốn loại bỏ. Luôn chắc chắn kiểm tra các phụ thuộc của nó trước khi ban hành lệnh yes. Khi bạn loại bỏ một cái gì đó bằng dòng lệnh, đôi khi nó sẽ hiển thị một số thư viện không còn cần thiết. Chúng có thể được gỡ bỏ bằng apt-get autoremove.

Xin lưu ý rằng bằng cách sử dụng các lệnh như sudo apt-get remove - tên ứng dụng có thể loại bỏ một số phụ thuộc cần thiết cho các ứng dụng khác và, như vậy, có thể phá vỡ hệ thống của bạn.

Nếu bạn muốn làm điều đó theo cách an toàn hơn, bạn luôn có thể xóa nó bằng cách chỉ sử dụng trung tâm phần mềm hoặc apt-get remove applicationname. Nếu các phụ thuộc không còn cần thiết nữa, hãy phát hành apt-get autoremove sau.


Tôi nghĩ rằng toàn bộ hệ thống gói Debian được thiết kế riêng để không xóa gói nếu có các gói khác phụ thuộc vào nó. Bạn có thể được hỏi (một cách hữu ích) nếu bạn cũng muốn loại bỏ tất cả các gói phụ thuộc và đó là nơi bạn thực sự nên đọc danh sách các gói sắp bị xóa, đó là điều tôi nghĩ bạn đang cố gắng nói.
Xen2050

1

Tôi chỉ muốn làm rõ một điều dường như là một nguồn gây nhầm lẫn ở đây. Các dpkgtiện ích không biết về hay theo dõi các gói phụ thuộc vào quan hệ với nhau, đó là một lý do lớn mà aptđã được phát triển Tôi tin. Bạn có thể đọc về nó trong phần 8.6 trên trang này Câu hỏi thường gặp về Debian GNU / Linux - Các công cụ quản lý gói Debian

  • Với apt: Nếu tôi muốn thanh lọc gói A và nó có một phụ thuộc được gọi là gói B và gói B không có gói phụ thuộc nào khác, thì gói A và B sẽ bị xóa. Nếu gói B DID có các gói phụ thuộc khác, thì chỉ gói A sẽ bị xóa.

  • Với dpkg: phụ thuộc gì? Bạn chỉ bảo tôi thanh lọc
    gói chết tiệt đó là những gì tôi đã làm! Kế hoạch kém về phía bạn không phải
    là một trường hợp khẩn cấp từ phía tôi.

Như đã nói, đây là hai lớp lót có thể được sử dụng cho mỗi phương pháp thanh lọc:

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --dry-run --purge

apt-get autoremove -y; apt-get --dry-run purge -y $(dpkg --list |grep '^rc' |awk '{print $2}')

Xóa --dry-runđể thực hiện thao tác thanh lọc thực tế thay vì báo cáo những hành động cần thực hiện.

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.