Рубрики
Uncategorized

CLI и ручьи

Введение для тех, кто новичок в * NIX Shells, как Bash, базовая структура S … Теги с DevOps, Bash, Linux, CLI.

Введение

Для тех, кто новый для * NIX снарядов, таких как Башмак Базовые рамки потоков могут показаться немного туманной. Еще менее ясно является ценностным предложением развития твердого понимания этих объектов. В этой статье я буду стремиться пройти через некоторую информацию, которую я хотел бы, чтобы кто-то сказал мне 30 лет назад, когда начался мой * Nix Shell Travel.

Поток

Каждая программа, включая Shell, в которую вы можете вводить команды, программу оболочки, которую вы можете писать, команда «ls» и т. Д. У нас есть три стандартных потока ввода/вывода, обычно называемые stdin , stdout и Стдерр Отказ Эти потоки всегда назначают номера дескриптора файлов 0, 1 и 2 соответственно. Цель этих потоков в два раза:

  1. Информация о маршруте между запущенным процессом (программа) и файлом.
  2. Информация о маршруте между двумя запущенными процессами.

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

Содержание потока

stdin используется для перемещения данных в процесс, тогда как stdout и Стдерр являются двумя каналами для перемещения данных из процесса. stdout Обычно для информации, которую вы получаете от программы, если все идет хорошо, пока Стдерр обычно зарезервировано для получения информации о вещах, которые пошли не так. Каждый поток передает серию байтов; Есть ли эти байты текстовым, двоичным, JSON, XML и т. Д. — это только беспокойство для отправителя и получателя. Это важно.

Ваш CLI.

Когда вы используете оболочку, такую как Bash Интерактивно, что три потока, упомянутые ранее, связаны следующим образом:

  • stdin Из вашей оболочки подключен к вашей программе терминала, которая подает в строки, которые вы набрали, при нажатии клавиши Enter.
  • stdout и Стдерр Из оболочки также подключены к вашей программе терминала, которая печатает вывод этих потоков в окно терминала, чтобы вы их прочитали.

Можно перенаправить эти потоки по мере необходимости.

Субпроцессы

Давайте посмотрим, что происходит, когда вы выпустите команду:

/bin/ls

Ваша оболочка вызывает ядро вилка () Вызов для создания дочернего процесса, который идентичен интерактивной оболочке, которую вы используете, сохраните для возвращаемого значения из вилка () позвонить себе. Основное влияние вот что stdin , stdout. и Стдерр все подключены к тому же конечным точкам, что и оболочка, которую вы используете. Потому что командная строка началась с «/bin/ls», этот дочерний процесс тогда призывает ядро EXEC () Призыв к наложению программы «/BIN/LS», которая заключается в том, что дочерний процесс становится «/bin/ls», сохраняя при сохранении назначений потока родителя. Теперь «/bin/ls» делает свое преследующее файловую мета-информацию и отправляет полученную серию текстовых символов в stdout , который вы вспомните, напечатаны вашей терминальной программой.

Перенаправить в файл

Если вы хотите сохранить вывод из «/bin/ls» в файле, вы можете перенаправить stdout «/bin/ls» к файлу, как так:

1>ls-output.txt /bin/ls

Здесь я поместил перенаправление в начале команды. Вы также можете разместить его после команды. Расположение станет важным только тогда, когда командная строка сложнее, с участием более одной команды. На этот раз интерактивная оболочка создает (или усеченные, если она уже существует) файл, «LS-Optured.txt» и подключает его к stdout. поток дочернего процесса. Когда «/bin/ls» делает это, результат получает запись в файл «LS-Ouput.txt». Ваша программа терминала не участвует никакой активности с этим перенаправлением. Это ключевое понятие.

Автоматизация

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

Заключение

Понимание стандартных потоков является центральным для усилия программирования оболочки на системе * NIX. Как только вы станете уверены в том, как работают потоки, вы будете лучше создавать приложения Mashup быстро использовать Bash (или другие снаряды). Это ключ к автоматизации, который, вероятно, является крупнейшим предложением ценностей Bash может предложить.

Оригинал: «https://dev.to/jrbrtsn/cli-and-streams-1i6n»