Почему сделал склонный - получают установку Виртуальное Поле вместо g ++?

Я просто столкнулся с чем-то, что интересно, могла возможно быть главная проблема безопасности с терминалом Linux. Я пытался установить g ++ 5.0. Я - новичок к Linux, таким образом, я просто ввел sudo apt-get install g++ 5.0. Вместо того, чтобы просто возвратить ошибку или что-то, это установило Виртуальное Поле!

Если я пытаюсь установить одну вещь от терминала, и это устанавливает что-то совершенно другое, которое означает, что могло произойти с чем-то еще, возможно вредоносное программное обеспечение? Почему это установило бы Виртуальное Поле, когда я ввел что-то совершенно другое, так или иначе?

12
задан 2 August 2016 в 06:28

3 ответа

Команда

sudo apt-get install g++ 5.0 

указывает, что Вы хотите установить два пакета: g++ и 5.0. (Имена пакета не имеют пробелов, и склонный - добираются, принимает несколько имен пакета, разделенных пробелами.)

то, Что, вероятно, произошло, - то, что это установило g ++ согласно просьбе, затем установило все пакеты (включая номера версий), которые соответствуют регулярному выражению 5.0 (так как нет никакого пакета, на самом деле названного 5.0). (благодарит @edwinksl!)

Для предотвращения этого удостоверьтесь, что у Вас есть корректные имена пакета без пробелов. Можно также использовать -s, опция моделировать Кв. - получает действие прежде, чем сделать его для реального:

sudo apt-get -s install g++ 5.0

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

Вы могли также рассмотреть использование более благоприятного для новичка графического диспетчера пакетов, такой как synaptic или muon.

29
ответ дан 23 November 2019 в 03:29

Корректная команда для установки g++ версия 5.x:

sudo apt-get install g++-5

Это установит g++ версия 5.3 на гостеприимном, который является текущим значением по умолчанию (так apt-get install g++ установки это также, но это изменится в будущем). На самом деле, существует никакие общедоступные 5,0 выпусков GCC. Другой g++ выпуски упаковываются, например, g++-4.9 или g++-6, который может быть установлен таким же образом.

, Если когда-нибудь необходимо устанавливать определенный (существующий) выпуск g++, который не упаковывается для системы, Вы будете иметь к сборка она из источников .

8
ответ дан 23 November 2019 в 03:29

Давайте сломаем его.

В первую очередь, немного примечаний, на как apt-get install (и большинство другой apt-get аргументы также) работы:

  • Можно ввести несколько имен пакета:

    sudo apt-get install foobar spamegg 
    
  • Имена пакета являются на самом деле Расширенным регулярным выражением (ERE) (Проверка man 7 regex) шаблоны так имя пакета foo.bar средства любое имя пакета, которое имеет подстроку, которая запускается с foo и концы с bar с любым отдельным символом между foo и bar. Вероятно, f.*r средства любое имя пакета, которое содержит подстроку, которая имеет f и r с любым количеством символов т.е. чего-либо промежуточного. Чтобы сделать целое соответствие имени пакета, использование запускает и заканчивает маркеры, например. ^foo.bar$. Если Вы хотите, чтобы какой-либо маркер Regex был обработкой буквально затем, необходимо выйти из маркера с \ например, для обработки foo.bar буквально, Вам нужно:

    sudo apt-get install 'foo\.bar'
    

    Здесь единственное заключение в кавычки должно предотвратить интерпретацию оболочки шаблона как globbing шаблон, не необходимый в этом случае, но было бы необходимо, например, для шаблона foo.*bar если у Вас есть файл в названном текущем каталоге, например. foo.bar.

  • На соображении имени пакета существует выгода. Если будет какой-либо пакет, соответствующий шаблону, то шаблон будут рассматривать буквально, и никакая интерпретация Regex не будет сделана. Например, для шаблона пакета g++, это будет соответствовать пакету g++ буквально независимо от маркера Regex +. Если не было никакого названного пакета g++ в определенных репозиториях это будут рассматривать как ДО шаблон.

Теперь, Вы дали команду:

sudo apt-get install g++ 5.0

Это означает:

  • Вы хотите установить два шаблона, обеспеченные пакеты а именно, g++ и 5.0

  • g++ соответствует литеральному метапакету g++ как упомянуто выше

  • Остающаяся часть, 5.0, имеет маркер Regex, . т.е. любой отдельный символ. Таким образом, это будет соответствовать любому имени пакета, которое содержит 5<any_character>0. Таким образом, все пакеты, которые имеют соответствие, были выбраны, чтобы быть установленными и по-видимому virtualbox-5.0 был также выбран в процессе.

По-видимому, Вы хотите установить g++ версия 5, так выполнение следующего сделало бы (уже упомянутый в этом ответе); метапакет, g++-5, будет относиться к последнему доступному незначительному выпущенному пакету g++ версия 5:

sudo apt-get install g++-5

Искать любые пакеты, в настроенных репозиториях, использовании apt-cache (использование ДО как apt-get):

apt-cache search 'g\+\+-[0-9]+'

Если Вы не хотите к Regex-ify это, использовать less прокрутить скорее больший список вниз:

apt-cache search g++ | less

Также прежде, чем установить что-либо Вы не уверены в, не использовать -y (--assume-yes) опция и тест это сначала с -s (--simulate/--dry-run):

sudo apt-get install --dry-run foobar
4
ответ дан 23 November 2019 в 03:29

Другие вопросы по тегам:

Похожие вопросы: