Давайте сломаем это.
Прежде всего, несколько заметок о том, как 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 с любым количеством символов, т.е. между ними. Чтобы выполнить полное сопоставление имени пакета, используйте токены начала и конца, например. [F19]. Если вы хотите, чтобы любой токен Regex обрабатывался буквально, вам нужно избежать маркера с помощью \, например. для обработки foo.bar в буквальном смысле вам нужно: sudo apt-get install 'foo\.bar'
Здесь одиночное цитирование состоит в том, чтобы предотвратить интерпретацию оболочки шаблона в виде шаблона глобуса, не обязательно в этом случае, но потребуется, например. для шаблона foo.*bar, если у вас есть файл в текущем каталоге с именем, например. [F23]. При рассмотрении вопроса о пакете есть улов. Если есть какой-либо пакет, соответствующий шаблону, шаблон будет обрабатываться буквально, и интерпретация Regex не будет выполнена. Например, для шаблона пакета g++ он будет соответствовать пакету g++ буквально независимо от токена Regex +. Если в определенных репозиториях не было пакета с именем g++, он будет рассматриваться как шаблон ERE. Теперь вы дали команду:
sudo apt-get install g++ 5.0
Это означает:
Вы можете ввести несколько имен пакетов:sudo apt-get install foobar spamegg
Вы можете ввести несколько имен пакетов:
Имена пакетов на самом деле являются шаблонами Extended Regular Expression (ERE) (Проверить man 7 regex), поэтому имя пакета foo.bar означает любое имя пакета, которое имеет подстрока, начинающаяся с foo и заканчивающаяся bar любым символом между foo и bar. Вероятно, f.*r означает любое имя пакета, которое содержит подстроку, которая имеет f и r с любым количеством символов, т.е. между ними. Чтобы выполнить полное сопоставление имени пакета, используйте токены начала и конца, например. [F19]. Если вы хотите, чтобы любой токен Regex обрабатывался буквально, вам нужно избежать маркера с помощью \, например. для обработки foo.bar в буквальном смысле вам нужно:sudo apt-get install 'foo\.bar'
Здесь одиночное цитирование состоит в том, чтобы предотвратить интерпретацию оболочки шаблона в виде шаблона глобуса, не обязательно в этом случае, но потребуется, например. для шаблона foo.*bar, если у вас есть файл в текущем каталоге с именем, например. foo.bar. g++ соответствует литеральному мета-пакету g++, как указано выше
sudo apt-get install g++-5
Предположительно, вы хотите установить версию g++ [ f37], поэтому сделало бы следующее (уже упомянутое в этом ответе); Мета-пакет g++-5 будет ссылаться на последний доступный небольшой выпущенный пакет g++ версии 5:
apt-cache search 'g\+\+-[0-9]+'
Для поиска любых пакетов в настроенных репозиториях используйте apt-cache (использует ERE, например apt-get):
apt-cache search g++ | less
Если вы не хотите использовать Regex-ify, используйте less для прокрутки вниз по более крупному списку:
sudo apt-get install --dry-run foobar
Вам нужно запустить в терминале следующее:
xmodmap ~/.xmodmaprc