Я просто столкнулся с чем-то, что интересно, могла возможно быть главная проблема безопасности с терминалом Linux. Я пытался установить g ++ 5.0. Я - новичок к Linux, таким образом, я просто ввел sudo apt-get install g++ 5.0
. Вместо того, чтобы просто возвратить ошибку или что-то, это установило Виртуальное Поле!
Если я пытаюсь установить одну вещь от терминала, и это устанавливает что-то совершенно другое, которое означает, что могло произойти с чем-то еще, возможно вредоносное программное обеспечение? Почему это установило бы Виртуальное Поле, когда я ввел что-то совершенно другое, так или иначе?
Команда
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
.
Корректная команда для установки 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++
, который не упаковывается для системы, Вы будете иметь к сборка она из источников .
Давайте сломаем его.
В первую очередь, немного примечаний, на как 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