Почему я получаю так много результатов при поиске “git” в кэше apt?

Вопрос или проблема

Когда я даю следующую команду:

 apt-cache search git | wc -l

Я получаю ответ 756. Как я могу перечислить только около полудюжины приложений, связанных с git?

Поиск с использованием анкоров (^...)

Вы можете просто искать записи, которые начинаются со строки “git”, вот так.

Пример

$ apt-cache search ^git | head -10
git - быстрый, масштабируемый, распределенный система управления версиями
git-core - быстрый, масштабируемый, распределенный система управления версиями (устарело)
git-doc - быстрый, масштабируемый, распределенный система управления версиями (документация)
git-man - быстрый, масштабируемый, распределенный система управления версиями (страницы руководства)
gitk - быстрый, масштабируемый, распределенный система управления версиями (визуализатор дерева версий)
easygit - git для обычных смертных
gforge-plugin-scmgit - плагин Git для FusionForge (переходной пакет)
git-all - быстрый, масштабируемый, распределенный система управления версиями (все подпаки)
git-annex - управление файлами с git, без проверки их содержимого в git
git-arch - быстрый, масштабируемый, распределенный система управления версиями (взаимодействие с arch)

Это тонкое отличие от просто поиска строки “git”, но разница в том, что этот поиск найдет подстроки, которые начинаются с “git”, тогда как обычный поиск “git” вернет записи, такие как “digital”.

Вы также можете ограничить вывод apt-cache search ^git, направив вывод в дополнительный grep вот так:

Фильтр с использованием grep

$ apt-cache search ^git | grep "^git" | head -10
git - быстрый, масштабируемый, распределенный система управления версиями
git-core - быстрый, масштабируемый, распределенный система управления версиями (устарело)
git-doc - быстрый, масштабируемый, распределенный система управления версиями (документация)
git-man - быстрый, масштабируемый, распределенный система управления версиями (страницы руководства)
gitk - быстрый, масштабируемый, распределенный система управления версиями (визуализатор дерева версий)
git-all - быстрый, масштабируемый, распределенный система управления версиями (все подпаки)
git-annex - управление файлами с git, без проверки их содержимого в git
git-arch - быстрый, масштабируемый, распределенный система управления версиями (взаимодействие с arch)
git-buildpackage - набор для помощи с пакетами Debian в репозиториях Git
git-cola - высоко кофеинизированный графический интерфейс для git

Это покажет только пакеты, названия которых начинаются со строки “git”.

Использовать переключатель --names-only

Это будет искать совпадения только в названиях пакетов, которые начинаются со строки “git”.

$ apt-cache search --names-only ^git | head -10
git - быстрый, масштабируемый, распределенный система управления версиями
git-core - быстрый, масштабируемый, распределенный система управления версиями (устарело)
git-doc - быстрый, масштабируемый, распределенный система управления версиями (документация)
git-man - быстрый, масштабируемый, распределенный система управления версиями (страницы руководства)
gitk - быстрый, масштабируемый, распределенный система управления версиями (визуализатор дерева версий)
git-all - быстрый, масштабируемый, распределенный система управления версиями (все подпаки)
git-annex - управление файлами с git, без проверки их содержимого в git
git-arch - быстрый, масштабируемый, распределенный система управления версиями (взаимодействие с arch)
git-buildpackage - набор для помощи с пакетами Debian в репозиториях Git
git-cola - высоко кофеинизированный графический интерфейс для git

Скорее всего, потому что это:

apt-cache show libqt5sensors5 | grep -i git
Version: 5.0~git20130507-0ubuntu1~raring1~test1
 WARNING: This module is not an official part of Qt 5, but instead a git
Version: 5.0~git20130115-0ubuntu1
Filename: pool/universe/q/qtsensors-opensource-src/libqt5sensors5_5.0~git20130115-0ubuntu1_amd64.deb

Некоторые пакеты связаны с “git”, другие просто имеют “git” где-то в описании, так как apt-cache search ищет не только в названиях пакетов, но и в коротких/длинных описаниях.

Как я могу перечислить только около полудюжины приложений, связанных с git?

apt-cache search git | grep -i git

Это покажет только пакеты, которые имеют “git” в кратком описании или в названии пакета.

Ответ или решение

Теория

Когда вы выполняете команду apt-cache search git | wc -l, вы ищете каждую строку, содержащую слово "git" в кэше пакетов APT. Это приводит к значительному числу совпадений, как в вашем случае — 756. Причина в том, что apt-cache search не ограничивает свою область поиска только именами пакетов, а исследует также описания пакетов, включая как короткие, так и длинные описания. Таким образом, любое вхождение "git" в любом из этих текстов будет учитываться в выводе. В результате, вы получаете много случайных совпадений, где "git" может быть частью другой строки, например, как в версии пакета "libqt5sensors5" из вашего примера, где "git" встречается в описании, а не в названии.

Пример

Возьмем, к примеру, вывод команды apt-cache search git, который может содержать пакеты, никак не связанные с системой контроля версий Git, а лишь упоминающие "git" в описаниях. Примером такого совпадения может быть "digital", в котором "git" является частью слова, а не отдельным именем.

Применение

Для того чтобы сократить количество результатов и получить только те пакеты, которые непосредственно связаны с Git, необходимо использовать поисковые фильтры и регулярные выражения.

  1. Поиск по началу строки: Используйте команду apt-cache search ^git, чтобы искать только те пакеты, имена которых начинаются с "git". Символ "^" в регулярных выражениях указывает на начало строки, что снижает количество совпадений до тех, которые действительно начинаются с "git".

    apt-cache search ^git | head -10
  2. Использование grep для уточнения поиска: Вы можете дополнительно фильтровать результаты с помощью команды grep, чтобы получить строки, начинающиеся с "git".

    apt-cache search ^git | grep "^git" | head -10
  3. Опция --names-only: Команда apt-cache search --names-only ^git ограничит поиск только названиями пакетов, исключая из рассмотрения описания.

    apt-cache search --names-only ^git | head -10

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

Заключение

Если вы хотите найти именно те пакеты, которые связаны с Git, важно использовать локальные фильтрационные техники, такие как регулярные выражения и дополнительные параметры командной строки. Это позволит максимально ограничить область поиска и сфокусироваться на действительно релевантной информации. Помимо этого, рассмотренный подход демонстрирует, как интегрированное использование утилит Unix, таких как head и grep, может значительно улучшить вашу продуктивность в управлении пакетами на системах на базе Ubuntu/Debian.

Оцените материал
Добавить комментарий

Капча загружается...