Gỡ cài đặt chương trình trong Linux


30

Tôi đã sử dụng Windows và Mac OS trong 5 năm qua và hiện tôi đang xem xét sử dụng Linux hàng ngày. Tôi đã cài đặt Ubuntu trên một máy ảo và cố gắng hiểu làm thế nào tôi có thể sử dụng Linux cho công việc hàng ngày của mình (với tư cách là một lập trình viên / nhà thiết kế web js).

Xin lỗi vì câu hỏi mới làm quen nhưng đôi khi tôi cài đặt một chương trình thông qua make config& make installnó thay đổi hệ thống của tôi theo những cách không thể hoàn nguyên dễ dàng. Trong các cửa sổ khi bạn cài đặt một chương trình, bạn có thể gỡ cài đặt chương trình đó và hy vọng nếu nó được phát bởi cuốn sách thì sẽ không còn dấu vết của chương trình trong hệ thống tệp hoặc đăng ký, v.v. Trong Mac OS, bạn chỉ cần xóa một Ứng dụng như một tệp.

Nhưng trong Linux thì có apt-getvà sau đó là có make. Tôi hoàn toàn không hiểu làm thế nào tôi có thể giữ cho bản cài đặt Linux của mình sạch sẽ và gọn gàng. Cảm giác như mọi cài đặt ứng dụng mới có thể phá vỡ hệ thống của tôi. Nhưng sau đó, Linux nổi tiếng là rất mạnh mẽ, vì vậy phải có điều gì đó tôi không hiểu về cách cài đặt và gỡ cài đặt ứng dụng ảnh hưởng đến hệ thống. Bất cứ ai có thể làm sáng tỏ điều này?


Cập nhật: khi cài đặt một ứng dụng, các tệp của nó có thể lan rộng ra bất cứ nơi nào thực sự (người quản lý gói xử lý một phần vấn đề) nhưng có một cách hay ho: sử dụng Docker để cài đặt ứng dụng và giữ chúng trong hộp cát của họ, đặc biệt nếu bạn không sử dụng chúng quá thường xuyên Cũng có thể chạy các ứng dụng GUI như Firefox hoàn toàn trong "hộp cát" Docker.


11
Là một người dùng đơn giản, bạn nên sử dụng apt-getthay vì makecài đặt phần mềm. make installđược sử dụng khi bạn cần xây dựng phiên bản mới nhất (có thể không ổn định) của phần mềm từ các nguồn, chưa có sẵn dưới dạng gói.
Dmitry Grigoryev

@DmitryGrigoryev Sử dụng aptđơn giản hơn và cung cấp một tui tốt hơn so với sử dụng apt-get.
Bakuriu

3
Khi tôi sử dụng OS X, tôi thường thấy việc xóa *.apptệp không đủ, vì các cài đặt ứng dụng thường bị vấy bẩn ở những nơi khác (ví dụ: thư mục Thư viện, từ bộ nhớ). Ngoài ra, nếu bạn xây dựng thủ công từ nguồn trong Ubuntu make install, checkinstallthay vào đó hãy sử dụng để cho phép xóa dễ dàng.
Sparhawk

1
Đừng dùng ./configure ; make ; make installcách. Tất cả bạn cần là học công cụ fpm tuyệt vời .
Deer Hunter

công cụ fpm là gì?
AlexStack

Câu trả lời:


28

Một bản cài đặt mới sẽ hiếm khi phá vỡ hệ thống của bạn (trừ khi bạn làm những thứ kỳ lạ như trộn nguồn và nhị phân).

Nếu bạn sử dụng các tệp nhị phân được biên dịch sẵn trong Ubuntu thì bạn có thể loại bỏ chúng và không phải lo lắng về việc phá vỡ hệ thống của mình, vì một tệp nhị phân sẽ liệt kê những gì nó cần để chạy và trình quản lý gói của bạn sẽ liệt kê các chương trình dựa trên chương trình đó để bạn xem xét.

Khi bạn sử dụng nguồn, bạn cần cẩn thận hơn để không loại bỏ thứ gì đó quan trọng (như glib). Không có cảnh báo hoặc bất cứ điều gì khác khi bạn gỡ cài đặt từ nguồn. Điều này có nghĩa là bạn hoàn toàn có thể phá vỡ máy của bạn.

Nếu bạn muốn gỡ cài đặt bằng cách sử dụng apt-getthì bạn sẽ sử dụngapt-get remove package như đã nêu trước đây. Bất kỳ chương trình nào dựa trên gói đó cũng sẽ được gỡ cài đặt và bạn sẽ có cơ hội xem xét chúng.

Nếu bạn muốn gỡ cài đặt thì nhìn chung quá trình là make uninstall . Không có cảnh báo (như tôi đã nói ở trên).

make config sẽ không thay đổi hệ thống của bạn, nhưng make install sẽ.

Khi mới bắt đầu, tôi khuyên bạn nên sử dụng apt-get hoặc bất kỳ bản phân phối nào bạn sử dụng cho các gói nhị phân. Nó giữ cho mọi thứ tốt đẹp và có tổ chức và trừ khi bạn thực sự muốn nó sẽ không phá vỡ hệ thống của bạn.

Hy vọng rằng, điều đó sẽ xóa tất cả mọi thứ lên.


3
Để gỡ cài đặt không có dấu vết, tất nhiên bạn sẽ sử dụng --purgetùy chọn vớiapt-get
Hagen von Eitzen

16

Về lý thuyết, make uninstallnên loại bỏ những gì make installđược thêm vào và hệ thống của bạn không tích lũy cruft. Vấn đề, tất nhiên, là không phải tất cả các tệp tạo tệp đều được tạo bằng nhau.

Một số có thể bỏ qua uninstallquy tắc, để lại cho bạn biết những gì installquy tắc đã làm. Tệ hơn, nếu quy tắc cài đặt ghi đè lên một thư viện được liên kết, câmuninstall thói quen có thể phá vỡ các phụ thuộc cho một số chương trình khác.

Giải pháp tốt nhất cho các cài đặt nguồn là sử dụng tiền tố khác với các gói được cài đặt bởi trình quản lý đóng gói của hệ thống. Apt cài đặt các tệp để /usr/sử dụng /usr/local/phân cấp cho các cài đặt nguồn của bạn. Điều đó giúp việc theo dõi các tập tin thuộc về gói và gỡ cài đặt nào sẽ không phá vỡ hệ thống dễ dàng hơn nhiều.

./configure --prefix=/usr/locallàm việc cho nhiều tập lệnh cấu hình. Nếu không, bạn có thể chỉnh sửa Makefile bằng tay. Hoặc chỉ cần sao chép các tập tin bằng tay.

Apt và các nhà quản lý đóng gói khác theo dõi những tập tin họ đã cài đặt và các phụ thuộc ngược của họ để các chức năng gỡ cài đặt của họ được an toàn để sử dụng.


15

Tôi khuyên bạn nên sử dụng apt-get installđể cài đặt bất kỳ gói nào trong linux và apt-get remove(tên gói) hoặc apt-get purge(tên gói) sẽ loại bỏ không chỉ gói chính mà bạn muốn gỡ cài đặt mà tất cả các gói hoặc phụ thuộc liên quan đã được cài đặt trong quá trình cài đặt.

Bây giờ, để giữ cho hệ thống của bạn sạch hơn, tôi khuyên bạn nên sử dụng apt-get clean https://askubfox.com/questions/144222/how-do-apt-get-clean-and-apt-get-clean-all-differ#144224 ( bài đăng này rất thú vị về điều đó) sẽ xóa tất cả các tệp đã được tải xuống trong khi cài đặt nhưng không còn cần thiết nữa.

Một lệnh khác sẽ hữu ích nếu bạn muốn xóa tất cả các phụ thuộc được cài đặt trong hệ thống của bạn nhưng chúng không bị xóa khi bạn gỡ cài đặt apt-get autoremove.

Nếu bạn cài đặt gói thông qua make và make install, bạn sẽ chịu trách nhiệm tự gỡ cài đặt gói đó (có thể có tệp README trong gói đã tải xuống cho bạn biết cách thực hiện) cũng như cố gắng gỡ cài đặt tất cả các phụ thuộc liên quan đến nó . Đó là lý do tại sao luôn khuyến nghị cài đặt các gói trong Linux được cung cấp bởi người quản lý gói phân phối, nếu bạn làm theo cách này, bạn có thể chắc chắn gói của bạn đã được kiểm tra đủ để hoạt động với bản phân phối (hương vị của Linux) bạn đang sử dụng và rất khó có thể phá vỡ hệ thống của bạn. Ngoài ra, bạn có thể chắc chắn gói của bạn sẽ được cập nhật khi cần trong khi nếu bạn tự cài đặt nó, bạn có trách nhiệm thực hiện tất cả điều này.

Tôi hi vọng cái này giúp được :)


11

Cách thông thường để quản lý các ứng dụng đã cài đặt trong Linux là với trình quản lý gói. Sự lựa chọn của người quản lý gói là một trong những điều chính phân biệt các bản phân phối. Ubuntu, như Debian (dựa trên nó), sử dụng dpkgAPT ; hầu hết thời gian, bạn chỉ cần tương tác với một trong các giao diện với APT, chẳng hạn như apt-get(dòng lệnh), aptitude (dòng lệnh hoặc chế độ văn bản) hoặc Synaptic (GUI).

Trình quản lý gói theo dõi tệp nào thuộc về chương trình đã cài đặt. Giống như trên Windows, các chương trình có thể thực thi mã tùy ý như một phần của quy trình cài đặt hoặc gỡ cài đặt, nhưng thường hoạt động tốt và sẽ không phá vỡ các chương trình khác. Hơn nữa, mã cài đặt (un) được viết bởi người duy trì gói, không phải bởi tác giả ngược dòng (đối với các gói trong bản phân phối chính). Không giống như Windows, có một giao diện hợp nhất để cài đặt, nâng cấp và gỡ cài đặt: trình quản lý gói. Bạn không cần tìm kiếm trình gỡ cài đặt (nếu có), bạn chỉ cần nhấp vào biểu tượng Gỡ cài đặt trên máy tính bảng trong trình quản lý gói đồ họa hoặc chạy apt-get remove PACKAGENAME.

Nếu bạn cần phần mềm kỳ lạ, bạn có thể cần phải cài đặt thủ công, bằng cách giải nén tệp lưu trữ hoặc biên dịch từ nguồn. Các trình cài đặt có dạng chương trình thực thi là rất hiếm trong thế giới Linux. Chạy make installcó xu hướng lây lan từng chương trình trong nhiều thư mục ( /usr/local/bin, /usr/local/man, /usr/local/lib, vv). Để sắp xếp mọi thứ, tôi khuyên bạn nên sử dụng trình quản lý gói của một người nghèo, chẳng hạn như stow . Với stow, mỗi gói được cài đặt trong thư mục riêng của nó và stowtiện ích sẽ đảm nhiệm việc tạo các liên kết tượng trưng để các lệnh được cài đặt bởi gói nằm trong đường dẫn tìm kiếm lệnh, v.v. Xem Theo dõi chương trình để biết thêm chi tiết.


"phần mềm kỳ lạ" này có thể được viết bởi bất cứ ai phải không? Làm thế nào "phần mềm kỳ lạ" này trở nên chính thức có sẵn trong các bản phát hành? Có ai xem lại mã nguồn của họ theo từng dòng không? Ví dụ, Ubuntu quyết định đưa phần mềm vào lệnh APT-GET của mình như thế nào và bỏ qua phần mềm khác?
AlexStack

1
@AlexStack Hầu hết các bản phân phối được thực hiện bởi các tình nguyện viên. Ubuntu được tài trợ bởi Canonical, nơi trả tiền cho một vài người, nhưng phần lớn việc bảo trì gói được thực hiện bởi các tình nguyện viên. Vì vậy, câu trả lời chính xác nhất là Ubuntu bao gồm bất kỳ phần mềm nào mà một tình nguyện viên quyết định đưa vào. Chính xác hơn, hầu hết các phần mềm trong Ubuntu đều đến từ Debian, do đó, Nhà phát triển Debian phải quyết định gói đó đáng để làm việc và phần mềm phải tuân thủ chính sách (giấy phép chấp nhận được, không quá lỗi).
Gilles 'SO- ngừng trở nên xấu xa'

@AlexStack không có gì đảm bảo rằng bất kỳ ai cũng đã xem xét từng phần của từng phần mềm cụ thể, ngay cả khi phần mềm đó có sẵn trong kho Ubuntu (tức là thông qua cài đặt mặc định apt-gethoặc tương tự). Nhưng họ chỉ đưa các chương trình phổ biến hợp lý vào kho lưu trữ, những chương trình có đủ người dùng để tự tin rằng về cơ bản họ làm những gì họ phải làm.
David Z


8

Bạn nên cố gắng sử dụng trình quản lý gói của mình (apt-get, aptitude, synaptic hoặc aptdcon, phần mềm trung tâm, mintinstall, ..) nếu có thể. Việc sử dụng một tác vụ tạo để cài đặt rất thô sơ, không được đảm bảo có một uninstallbản sao và không được bảo đảm để chơi tốt với phần còn lại của hệ thống (Nó chỉ là một tập lệnh gắn vào hệ thống xây dựng - và không giống như một gói được xem xét, làm cho các tác vụ có thể chứa bất kỳ mã thực thi, phần mềm độc hại tiềm năng).

Nếu bạn không tìm thấy phiên bản đóng gói của phần mềm bạn cần, bạn có thể thấy checkinstall( checkinstall make install) hữu ích.


3

Tôi không phải là chuyên gia và không biết nhiều về cài đặt phần mềm từ nguồn, nhưng bằng cách sử dụng apt-get, bạn có thể xóa phần mềm đã cài đặt bằng apt-get remove package-name. Để loại bỏ tất cả các tập tin cấu hình quá, sử dụng apt-get purge package-name. Cách an toàn nhất để giữ cho cài đặt Linux của bạn gọn gàng là chỉ sử dụng các gói trong kho chính thức. Khi một gói là cần thiết mà không có trong kho chính thức, nó thường có thể được tìm thấy (vì bạn đang sử dụng Ubuntu) trong PPA .


apt-getkhông được sử dụng cho OP, những người đã và đang sử dụng configuremake install
roaima

3

Như các câu trả lời khác nói, ngày nay, việc cài đặt phần lớn phần mềm của bạn bằng cách sử dụng trình quản lý gói phân phối của bạn. Điều này thuận tiện đến mức bạn có thể sẽ bỏ lỡ nó khi quay lại Windows! Theo một nghĩa nào đó, các "thị trường" và "cửa hàng" khác nhau cũng sẽ đi theo hướng đó cho các hệ điều hành thương mại.

Phải nói rằng, tôi nhớ rằng khi tôi mới bắt đầu tìm hiểu về Linux, tôi đã bị bối rối bởi cách phần mềm thường được cài đặt. Mặc dù trên Windows, tất cả các tệp đều nằm trong một thư mục bên dưới c:\Programs, "cách unix" truyền thống là phân tán chúng xung quanh trong "vị trí chuẩn" (chi tiết không được chuẩn hóa, [hãy xem LSB để biết thêm thông tin] [1] ), chẳng hạn như /usr/local/bincho các tệp thực thi, /usr/local/doccho tài liệu và như vậy.

Theo một nghĩa nào đó, Windows "không biết" nơi thực thi của bạn. Nó biết rằng họ "ở đâu đó bên dưới c:\Program Files", nhưng không nhiều hơn thế. Quét tất cả các thư mục để tìm thấy chúng, hoặc được sử dụng, rất tốn kém. Vì vậy, một liên kết đến tệp thực thi sẽ được đặt rõ ràng ở một vị trí đã biết (menu bắt đầu) và đó là những gì bạn sẽ sử dụng để bắt đầu nó.

Trên Unix / Linux, trình bao của bạn và hầu hết các chương trình khác cho vấn đề đó, sẽ tự động tìm kiếm các tệp thực thi hoặc các tài nguyên khác trong một tập hợp các vị trí đã biết. Vì vậy, tại sao, chỉ cần sao chép các tệp của bạn trong các thư mục thích hợp của chúng, bạn sẽ tự động "nhìn thấy chúng" mà không phải "đăng ký" chúng ở bất cứ đâu để người dùng biết về chúng.

Cả hai cơ chế đều có ưu và nhược điểm, nhưng bạn sẽ thấy rằng cách tiếp cận Unix thường linh hoạt hơn.

Xin lưu ý rằng có rất nhiều trường hợp ngoại lệ và chi tiết làm cho hình ảnh không rõ ràng như tôi mô tả, nhưng tôi nghĩ loại giới thiệu này có thể hữu ích cho người mới để hiểu ít nhất logic cơ bản đằng sau nó.


cảm ơn @unclezeif. Vấn đề với "các tệp nằm rải rác khắp nơi" thực sự làm tôi khó chịu vì tôi không hiểu nó. Bạn nói rằng cách tiếp cận Unix thường linh hoạt hơn. Bạn có thể giải thích?
AlexStack

Chẳng hạn, tài liệu chỉ ở một nơi, các biểu tượng đều ở một nơi, v.v ... mà trong một số trường hợp thực sự rất hay! Bằng cách linh hoạt hơn, ý tôi là, dựa trên tất cả các đường dẫn, bạn có thể làm những việc như: sinh ra một lớp vỏ mới trong đó các biến môi trường được thay đổi để bạn chỉ nhìn thấy các tệp thực thi trong một thư mục nhất định, do đó hạn chế (hoặc mở rộng) sự lựa chọn của bạn. Tất cả đều rất "đơn giản" vì bạn chỉ sử dụng các tệp và biến môi trường để đạt được mức độ tùy biến tuyệt vời.
ChúZeiv

Một ví dụ khác là: về nguyên tắc, bạn có thể cài đặt một chương trình trong thư mục chính của mình, ví dụ / home / foo / bin và chỉ cần thêm / home / foo / bin vào môi trường đường dẫn của bạn mà không cần chạm vào hệ thống chia sẻ.
ChúZeiv

3

Tôi nghĩ rằng lời khuyên tốt nhất chỉ là trong bài viết diễn đàn này . Dưới đây là các tùy chọn của bạn (2 và 3 ít nhiều giống nhau về hiệu quả, thực sự):

  1. Sử dụng một trình quản lý gói và một kho lưu trữ. Điều đó có nghĩa là bạn nhận được các bản cập nhật, bạn nhận được các bản phát hành chính thức, bản phát hành có chữ ký, v.v.
  2. Nếu bạn không thể hoặc sẽ không sử dụng gói từ kho lưu trữ, hãy xây dựng gói cho phần mềm và cài đặt gói đó bằng trình quản lý gói của bạn. Hướng dẫn chi tiết để thực hiện việc này trên các hệ thống dựa trên Debian có trong bài được liên kết ở trên. Thoạt nhìn có vẻ đáng sợ, nhưng nó thực sự khá đơn giản và đặc biệt là trong trường hợp Debian có rất nhiều tập lệnh ngoài kia để làm tất cả công việc khó khăn cho bạn.
  3. Nếu bạn không thể làm cho phương pháp đó hoạt động, hãy sử dụng checkinstallnhư những người khác đã khuyến nghị. Đây là một thay thế thả xuống rất đơn giản để thực hiện cài đặt:

    $ ./configure
    $ make
    $ sudo checkinstall
    

    Điều này sẽ xây dựng phần mềm như bình thường, và sau đó chạy make installtrong một môi trường hạn chế theo dõi những gì nó làm và xây dựng một gói sẽ thực hiện chính xác những điều đó. Sau đó, nó cài đặt gói đó với trình quản lý gói của bạn. Loại bỏ sau đó cũng giống như loại bỏ bất kỳ gói nào khác, giống như trong (2).

  4. Nếu bạn không thể hoặc sẽ không sử dụng trình quản lý gói, thì hãy sử dụng make install, tôi đoán vậy. Và hy vọng người bảo trì phần mềm duy trì thói quen gỡ cài đặ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.