apt-get install с '-' (минус / дефис) удаляет пакеты

22

Я искал некоторый пакет ( nautilus-terminal), и случайно сделал это:

$ 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                                                                                                                                                                                          

Это довольно опасно, потому что удалить намного сложнее, чем простую черту из-за неудачного автозаполнения.

Это эквивалент apt-get remove? Я не мог найти документацию для этого. Изменить: кроме просмотра справочной страницы ...

Ондра Жижка
источник
1
Почему это опаснее apt-get remove? Apt-get даже говорит вам, что он будет делать, и запрашивает подтверждение.
marcelm
3
@marcelm, потому что ошибиться removeгораздо сложнее, чем простой рывок из неудавшегося автозаполнения.
stebu92
@ stebu92 Идеальная формулировка, добавляю, если не возражаешь.
Ондра Жижка
Я думаю, что по крайней мере Y / N должен быть изменен на Y / N, когда -используется.
Ондра Жижка
Может быть, я неправильно понимаю, но это больше похоже на жалобу, чем на вопрос. На какой вопрос вы надеетесь получить ответ в результате публикации этого сообщения?
Томасруттер

Ответы:

28

От man apt-get:

устанавливать
   установка сопровождается одним или несколькими пакетами, необходимыми для
   установка или обновление. Каждый пакет - это имя пакета, а не
   полное имя файла (например, в системе Debian,
   apt-utils будет предоставленным аргументом, а не
   кв-utils_1.2.10_amd64.deb). Все пакеты, требуемые
   Пакеты, указанные для установки, также будут извлечены и
   установлены. Файл /etc/apt/sources.list используется для поиска
   желаемые пакеты. Если к имени пакета добавляется дефис (с
   нет промежуточного пространства), идентифицированный пакет будет удален, если он
   установлен. Точно так же знак плюс может использоваться для обозначения
   пакет для установки. Эти последние функции могут быть использованы для переопределения
   решения, принятые системой разрешения конфликтов apt-get.
Мур
источник
Следовательно, OP должен делать: sudo apt install nautilus && sudo apt install nautilus-terminalгде OP прошел через removeкоманду else: sudo apt install nautilus-terminalесли NO было выбрано?
Джордж Удосен
3
Обоснование этой функции заключается в том, что иногда вы хотите установить пакет, конфликтующий с тем, который уже установлен, но один из них требуется другим пакетом, поэтому оба действия должны выполняться одновременно. Например apt install sysvinit-core systemd-sysv-(либо требуется пакетом инициализации Essential ), либо apt install msmtp postfix-(множество пакетов зависит от MTA).
Саймон Рихтер
1
@SimonRichter при попытке apt -s install upstart-sysv16.04 означает, aptчто автоматически удалится systemd-sysv(поскольку они конфликтуют). То же самое для msmtp-mtaи postifx. Может потребоваться более сложный пример, где aptможно выбрать неправильный пакет для удаления.
Муру
Спасибо за исправление моего слепого глаза. Отметил, что apt-get remove foo+устанавливает foo.
Ондра Жижка
Это какая-то изящная особенность. : D
Андреа
0

Следующие два означают одно и то же:

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

Так что, если вы просто устанавливаете или удаляете одну вещь, то на самом деле нет причин выбирать одну над другой, и removeкоманда также может быть использована.

Оператор «минус» пригодится в тех случаях, когда вы хотите удалить один пакет и установить другой в той же операции :

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

Я не мог придумать лучшего примера, но есть некоторые ситуации, когда удаление одного и добавление другого в отдельных операциях может вызвать дополнительные ненужные установки или удаления, в то время как выполнение их обоих в одной операции немедленно удовлетворит некоторые взаимозависимости и сделает это общая более простая операция.

Что касается того, добавляет ли минус облегчение непреднамеренного удаления чего-либо непреднамеренно, я прежде всего рекомендую вам в любом случае легко непреднамеренно нанести ущерб вашей системе в командной строке . Он не был создан, чтобы защитить вас от самого себя, и существуют миллиарды даже более простых команд, которые могут связать вашу систему. Но во-вторых, в этом случае он точно говорит вам, что собирается делать, и подтверждает, что вы действительно хотите это сделать. Это низкий риск.

thomasrutter
источник