29 марта, 2024

Основы Linux. Часть 16 (stdin, stdout и stderror)

Содержание:

С возвращением, мои хакеры!

В предыдущих статьях мы рассматривали основные команды и концепции использования Linux. Но по ходу дела мы поняли, что не дали вам базовый материал по stdin, stdout и stderror.

На человеческом языке они чаще всего упоминаются как стандартный ввод (stdin), стандартный вывод (stdout) и стандартная ошибка (stderror). Они показывают, как и где Linux отображает выходные данные, полученные от введенных вами в консоль команд (stdout), как он получает эти входные данные (stdin), и куда он отправляет сообщения об ошибках (stderror).

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

Прежде чем идти дальше, давайте рассмотрим некоторые термины.

Стандартный выход (1)

Всякий раз, когда вы завершаете команду, она должна знать, куда ей нужно отправить вывод. Возможно, вы захотите отправить его в файл, на принтер или на экран. Стандартным выводом по умолчанию является экран компьютера. Стандартный вывод часто упоминается как stdout или просто использует числовое представление 1.

Стандартный вход (0)

Стандартный ввод — это то, откуда программа или команда получает необходимую для работы информацию. По умолчанию в Linux это клавиатура, но может быть и файл. Стандартный ввод часто упоминается как stdin или просто представлен цифровым представлением 0.

Стандартная ошибка (2)

Когда мы совершаем ошибку или наша программа выдает ошибку, она отправляет сообщение об ошибке в стандартное место вывода сообщений об ошибках. По умолчанию это тоже экран компьютера. Стандартная ошибка часто упоминается как stderror или просто представлена цифрой 2.

Читать также:  Основы Linux .Часть 12 (Загружаемые модули ядра)

Когда мы хотим изменить их поведение из командной строки или скрипта, мы используем числовое представление каждого из них: 0 для stdin, 1 для stdout и 2 для stderr.

Шаг 1. Вывод содержания двух директорий

Чтобы продемонстрировать, как мы можем использовать и обрабатывать эти потоки ввода-вывода, давайте выведем список файлов, содержащихся в двух разных директориях: /etc/hosts и /etc/snort.

В Linux можно выводить содержание более чем одной директории за один раз. Директория /etc/snort находится там же, где и наш файл конфигурации для snort, и /etc/hosts — это файл, в который мы можем установить статическое разрешение доменных имен в Linux (в ближайшее время мы опубликуем статью по DNS и разрешению доменных имен в Linux).

Если мы хотим увидеть содержание двух каталогов, то мы введем:

ls /etc /hosts /etc/snort

Как вы видите, список возвращается к нам стандартным выводом на экран компьютера, показывая содержание обеих директорий в виде списка.

А теперь попробуем вывести содержание директории, которой не существует, например /etc/aircrack-ng.

ls /etc/hosts /etc/aircrack-ng

Как вы можете видеть, наш шелл BASH возвращается с двумя выводами — стандартным выводом для папки /etc/hosts и стандартной ошибкой для несуществующей директории.

Шаг 2. Запись стандартного вывода в файл

Давайте предположим, что мы хотим отделить наш стандартный вывод от нашей стандартной ошибки. Представьте, что мы запускаем некоторый скрипт, где мы не хотим видеть выходные сообщения до тех пор, пока скрипт не запустится, но при этом нам нужно немедленно увидеть сообщения об ошибках на экране. Тогда мы могли бы переписать нашу команду так:

ls /etc/hosts /etc/aircrack-ng 1 > goodoutput

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

ls /etc/hosts /etc/ aircrack-ng 2 > erroroutput

Теперь мы можем просмотреть содержание файла с ошибками при помощи команды cat, чтобы проверить имеются ли какие-нибудь ошибки.

Читать также:  Как настроить бэкдор на чьем угодно MacBook'е

Шаг 3. Запись стандартного вывода и ошибок в отдельный файл

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

ls /etc/hosts /etc/aircrack-ng 1 > goodoutput 2 > erroroutput

Обратите внимание, что на нашем экране ничего не отображается — ни стандартный вывод, ни стандартная ошибка.

Шаг 4. Запись стандартного вывода и входных данных в один файл

И, наконец, ситуация, в которой мы хотим, чтобы и стандартная ошибка, и стандартный вывод записывались в один файл. В этом случае можно использовать такую команду:

ls /etc/hosts /etc/aircrack-ng > goodoutput 2 > & 1

Обратите внимание, что я не использовал значение 1 перед «> goodoutput», поскольку BASH по умолчанию использует stdout, если не указано конкретное число.

Надеюсь, вам понравился этот урок по Linux stdin, stdout и stderror, но у нас еще есть много чего нового и интересного, поэтому обязательно возвращайтесь!

Предыдущие статьи ( 1, 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15).

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