cài đặt apt-get với '-' (trừ / gạch nối) loại bỏ các gói


22

Tôi đang tìm kiếm một số gói ( nautilus-terminal) và vô tình làm điều này:

$ sudo apt-get install nautilus-
Reading package lists... Done                                                                                                                                                                                                 
Building dependency tree                                                                                                                                                                                                      
Reading state information... Done                                                                                                                                                                                             
The following packages were automatically installed and are no longer required:                                                                                                                                               
  apturl apturl-common libgail-3-0 linux-headers-4.4.0-57 linux-headers-4.4.0-57-generic linux-image-4.4.0-57-generic linux-image-extra-4.4.0-57-generic                                                                      
Use 'sudo apt autoremove' to remove them.                                                                                                                                                                                     
The following packages will be REMOVED:                                                                                                                                                                                       
  gnome-session-flashback nautilus nautilus-sendto nautilus-share ubuntu-desktop                                                                                                                                              
0 upgraded, 0 newly installed, 5 to remove and 69 not upgraded.                                                                                                                                                               
After this operation, 2 031 kB disk space will be freed.                                                                                                                                                                      
Do you want to continue? [Y/n] ^[[^C                                                                                                                                                                                          

Điều đó khá nguy hiểm vì loại bỏ khó gõ nhầm hơn một dấu gạch ngang đơn giản từ quá trình tự động hoàn thành thất bại.

Đó có phải là một tương đương apt-get remove? Tôi không thể tìm thấy bất kỳ tài liệu cho điều đó. Chỉnh sửa: ngoại trừ việc xem trang người đàn ông ...


1
Tại sao điều đó nguy hiểm hơn apt-get remove? Apt-get thậm chí còn cho bạn biết những gì nó sẽ làm và yêu cầu xác nhận.
marcelm

3
@marcelm vì removekhó gõ nhầm hơn một dấu gạch ngang đơn giản từ quá trình tự động hoàn thành thất bại.
stebu92

@ stebu92 Từ ngữ hoàn hảo, tôi thêm rằng nếu bạn không phiền.
Ondra ižka

Tôi nghĩ ít nhất nên thay đổi Y / n thành y / N khi -được sử dụng.
Ondra ižka

Có thể tôi đang hiểu sai nhưng điều này có vẻ giống như một sự kìm kẹp / phàn nàn hơn là một câu hỏi. Câu hỏi nào là bạn đang hy vọng nhận được câu trả lời như là kết quả của việc đăng bài này?
thomasrutter

Câu trả lời:


28

Từ man apt-get:

cài đặt, dựng lên
   cài đặt được theo sau bởi một hoặc nhiều gói mong muốn cho
   cài đặt hoặc nâng cấp. Mỗi gói là một tên gói, không phải là một
   tên tệp đủ điều kiện (ví dụ: trong hệ thống Debian,
   apt-utils sẽ là đối số được cung cấp, không phải
   apt-utils_1.2.10_amd64.deb). Tất cả các gói theo yêu cầu của
   gói được chỉ định để cài đặt cũng sẽ được lấy và
   Cài đặt. Tệp /etc/apt/source.list được sử dụng để định vị
   gói mong muốn. Nếu một dấu gạch nối được gắn vào tên gói (với
   không có không gian can thiệp), gói được xác định sẽ bị xóa nếu nó
   được cài đặt. Tương tự, một dấu cộng có thể được sử dụng để chỉ định một
   gói để cài đặt. Những tính năng sau này có thể được sử dụng để ghi đè
   các quyết định được đưa ra bởi hệ thống giải quyết xung đột của apt-get.

Do đó OP nên làm: sudo apt install nautilus && sudo apt install nautilus-terminalnơi OP đã trải qua với removelệnh khác: sudo apt install nautilus-terminalnếu KHÔNG được chọn?
George Udosen

3
Lý do căn bản của tính năng này là đôi khi bạn muốn cài đặt một gói xung đột với gói đã được cài đặt, nhưng một trong số chúng được yêu cầu bởi một số gói khác, vì vậy cả hai hành động cần phải chạy trong cùng một lần. Ví dụ apt install sysvinit-core systemd-sysv-(được yêu cầu bởi gói Essential init) hoặc apt install msmtp postfix-(rất nhiều gói phụ thuộc vào MTA).
Simon Richter

1
@SimonRichter thử apt -s install upstart-sysvngày 16.04 cho biết aptsẽ tự động xóa systemd-sysv(vì chúng xung đột). Ditto cho msmtp-mtapostifx. Một ví dụ phức tạp hơn có thể cần thiết, trong đó aptcó thể chọn gói sai để xóa.
muru

Cảm ơn đã sửa mắt mù của tôi. Lưu ý rằng apt-get remove foo+cài đặt foo.
Ondra ižka

Đó là một tính năng gọn gàng. : D
Andrea Lazzarotto

0

Hai từ sau có nghĩa giống nhau:

# apt-get remove nautilus
# apt-get install nautilus-

Vì vậy, nếu bạn chỉ đơn thuần là cài đặt hoặc loại bỏ một thứ, thì thực sự không có lý do gì để chọn cái này và cái kia removecũng có thể được sử dụng.

Trường hợp toán tử "trừ" có ích trong trường hợp bạn muốn xóa một gói và cài đặt gói khác trong cùng một thao tác :

# apt-get install php5-cgi libapache2-mod-php5- 

Tôi không thể nghĩ ra một ví dụ tốt hơn, nhưng có một số tình huống loại bỏ một và thêm một trong các hoạt động riêng biệt có thể kích hoạt các cài đặt hoặc gỡ bỏ không cần thiết bổ sung, trong khi thực hiện cả hai trong một hoạt động sẽ ngay lập tức đáp ứng một số phụ thuộc và làm cho nó một hoạt động đơn giản hơn tổng thể.

Còn về việc bổ sung trừ làm cho nó dễ dàng hơn để vô tình loại bỏ một cái gì đó vô ý, trước hết tôi giới thiệu bạn đến cách dễ dàng là để tạo ra thiệt hại cho hệ thống của bạn vô tình trên dòng lệnh nào . Nó không được xây dựng để bảo vệ bạn khỏi chính bạn và có hàng tỷ lệnh thậm chí đơn giản hơn có thể làm hỏng hệ thống của bạn. Nhưng thứ hai, trong trường hợp này, nó cho bạn biết chính xác những gì nó sẽ làm và xác nhận rằng bạn thực sự muốn làm điều đó. Đây là rủi ro thấp.

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.