«sudo apt -get install foo-» вызывает удаление пакета foo, и все зависит от него

9

Во время работы в командной строке я случайно набрал следующую команду:

sudo apt-get install python3-

и ubuntu начал удалять python3, и все зависит от него (включая firefox и многое другое). К счастью, я немедленно закрыл терминал и вернул все, проверив файл журнала dpkg, но мне было интересно, почему команда install должна действовать как удаление?

Это ошибка?

Рассмотрите ситуацию, когда вы ищете имя пакета (нажатие Tab дважды) и перейдите через возможности, нажав клавишу Enter, и клавиши Enter остаются в буфере клавиатуры и ... youhaaaa ... apt-get удаляет вся установка перед глазами.

    
задан melmi 07.11.2012 в 10:20
источник

2 ответа

10

Просто попробовал этот знак минус (или тире) после пакета и да, apt-get действует как remove .

Забавно, что я не знал эту функцию apt-get . Этот знак минус действует для каждого пакета. Я пробовал smplayer- с firefox- и всегда действовал как remove . Поэтому единственное, что я могу думать, это то, что знак конца в конце пакета рассматривается apt-get , как команда минус и install , преобразованная в remove .

Если вы хотите установить все о python3, вам нужно было добавить знак звездочки после знака тире (минус)

sudo apt-get install python3-*

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

Сегодня мы узнали что-то полезное.

Из man-страницы apt-get. Чтобы прочитать man-страницу через ваш терминал, дайте man apt-get

  

Если к имени пакета добавляется дефис (-) (без вмешательства   пространство), идентифицированный пакет будет удален, если он в настоящее время   установлен. Аналогично знак плюса (+) может использоваться для обозначения   пакет для установки. Эти последние функции могут использоваться для переопределения   решения, принятые системой разрешения конфликтов apt-get.

В конце концов, это не новый вариант или что-то странное, просто мы не читаем man-страницы тщательно.

    
ответ дан Nick Thom 07.11.2012 в 11:05
источник
11

Это, по-видимому, функция apt .

Из man-страницы для команды apt-get ,

  

Если к имени пакета добавляется дефис (с              нет промежуточного пространства), идентифицированный пакет будет удален, если он              установлен. Аналогично, знак плюса может использоваться для обозначения              пакет для установки. Эти последние функции могут использоваться для переопределения              решения, принятые системой разрешения конфликтов apt-get.

Имитация с установленным пакетом и дефис, добавленный в конец пакета, дает мне этот результат:

$ apt-get install -s retext-
NOTE: This is only a simulation!
      apt-get needs root privileges for real execution.
      Keep also in mind that locking is deactivated,
      so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following package was automatically installed and is no longer required:
  retext-wpgen
Use 'apt-get autoremove' to remove it.
The following packages will be REMOVED:
  retext
0 upgraded, 0 newly installed, 1 to remove and 0 not upgraded.
Remv retext [3.1.3-1]

Аналогично, с удаленным пакетом и знаком плюса, добавленным в конец пакета, я получаю этот вывод:

$ apt-get remove -s googlecl+
NOTE: This is only a simulation!
      apt-get needs root privileges for real execution.
      Keep also in mind that locking is deactivated,
      so don't depend on the relevance to the real current situation!
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  python-gdata
Suggested packages:
  python-gdata-doc
The following NEW packages will be installed:
  googlecl python-gdata
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Inst python-gdata (2.0.17-1 Ubuntu:12.10/quantal [all])
Inst googlecl (0.9.13-1.1 Ubuntu:12.10/quantal [all])
Conf python-gdata (2.0.17-1 Ubuntu:12.10/quantal [all])
Conf googlecl (0.9.13-1.1 Ubuntu:12.10/quantal [all])
    
ответ дан jokerdino 07.11.2012 в 11:29