Сократить ввод оболочки от списка до ввода только имени пакета

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

Сократить ввод оболочки для ‘apt-listbugs’, чтобы он мог выполняться из ‘apt list –upgradable’, необходимо.
Когда я ввожу :~$ apt list --upgradable, вывод выглядит так:

cracklib-runtime/testing 2.9.6-5.2+b1 amd64 [upgradable from: 2.9.6-5.2]
i2c-tools/testing 4.4-1+b3 amd64 [upgradable from: 4.4-1+b2]
libaudit1/testing 1:4.0.2-2+b2 amd64 [upgradable from: 1:4.0.2-2+b1]

Есть ли способ ввести только имена пакетов для команды ‘apt-listbugs’, чтобы она обрабатывала только имена в стиле :~$ apt-listbugs list cracklib-runtime i2c-tools libaudit1?

Используйте / как разделитель и отфильтруйте лишние строки:

apt-listbugs list $(apt list --upgradable 2>/dev/null | grep -v '^Listing...$' | cut -d/ -f1)

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

Для решения задачи, связанной с оптимизацией ввода команд в Shell, а именно с интеграцией вывода apt list --upgradable в команду apt-listbugs, требуется понимание использования утилит командной строки для обработки и фильтрации текста. Давайте разберем данную ситуацию более детально.

Теория

Итак, команда apt list --upgradable возвращает список пакетов, которые можно обновить в вашей системе. Однако этот список содержит дополнительную информацию, такую как версия и архитектура пакета, от которой нам нужно избавиться, чтобы использовать вывод этой команды в качестве входных данных для apt-listbugs.

apt-listbugs — это утилита, которая показывает существующие ошибки в пакетах. Она принимает в качестве аргумента список имен пакетов и выводит сведения об известных баг-репортах для каждого из них. Следовательно, задача состоит в том, чтобы из вывода первой команды получить только названия пакетов и подать их на вход второй команде.

Ключевые инструменты, которые помогают в этой ситуации, включают:

  • Пайплайны (pipelines): позволяют направлять вывод одной команды на вход другой.
  • Фильтрация вывода: с помощью утилит grep и cut можно исключить ненужные строки и вычленить только нужные порции данных.
  • Подстановка команд: с помощью $() или бекквотов можно вставить результат одной команды в другую.

Пример

Рассмотрим конкретный пример строки в терминале:

apt list --upgradable

Этот запрос может выдавать строки вида:

cracklib-runtime/testing 2.9.6-5.2+b1 amd64 [upgradable from: 2.9.6-5.2]
i2c-tools/testing 4.4-1+b3 amd64 [upgradable from: 4.4-1+b2]
libaudit1/testing 1:4.0.2-2+b2 amd64 [upgradable from: 1:4.0.2-2+b1]

Вам нужно получить только названия пакетов: cracklib-runtime, i2c-tools, libaudit1.

Для этого можно использовать следующую цепочку команд:

apt-listbugs list $(apt list --upgradable 2>/dev/null | grep -v '^Listing...' | cut -d/ -f1)

Объяснение команды:

  • apt list --upgradable: Запрашивает список всех пакетов, которые можно обновить.
  • 2>/dev/null: Перенаправляет ошибки в пустоту, чтобы их не было в выводе.
  • grep -v '^Listing...': Убирает строку, которая начинается с Listing..., поскольку она не содержит информацию о пакетах.
  • cut -d/ -f1: Использует символ / как разделитель и выбирает часть строки перед первым вхождением /, что соответствует имени пакета.

Применение

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

Заключение

В мире системного администрирования и DevOps эффективность и точность имеют критическое значение. Генерация команд на основе вывода других команд — это неотъемлемая часть оптимизации рабочего процесса, а понимание использования инструментов для обработки текстовых данных в shell-среде является важным навыком для любого специалиста по ИТ.

Методы, которые мы рассмотрели, могут быть перенесены на другие команды и сценарии использования, делая ваш подход к управлению пакетами более гибким и динамичным. Тщательно отлаженные команды command-line могут существенно улучшить оперативность и позволяют сосредоточиться на задачах повышенной сложности, предоставляя базовые рутинные операции автоматизированным процессам.

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

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