Главная Обратная связь

Дисциплины:






Стандартный ввод/вывод и их перенаправление



Третья часть головоломки Linux — связь между командами и файлами, организуемая при помощи стандартного ввода и вывода. Не пугайтесь технического термина — это понятие на самом деле касается того, как структурирована командная строка и куда отправляются результаты выполнения команды.

Linux, как и любая операционная система, при выполнении команды нуждается в информации, откуда команда будет получать данные и куда их выводить. Другие операционные системы, такие как Windows и Macintosh, самостоятельно делают предположения об источнике входных данных и назначении выходных. Зачастую так поступает и Linux. Однако, в большинстве случаев, вам самим следует подумать, откуда команда будет получать данные и куда выводить. Ниже мы объясним основы концепции стандартного ввода/вывода на примере.

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

$ cat

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

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

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

Вы можете использовать командуcat для записи строк в файл. Для этого вам следует использовать символы перенаправления. Эти символы позволяют любой команде использовать в качестве стандартного ввода или вывода вместо клавиатуры или экрана файл или стандартный ввод/ вывод другой команды. В следующем примере стандартный вывод командыcat вместо экрана направляется в файлkevin.report:

$ cat > kevin.report

Вводимый с клавиатуры текст построчно записывается в файлkevin.report. Нажатие клавишCtrl+D останавливает перенаправление и заканчивает выполнение команды cat.



Перенаправление может использоваться как для стандартного вывода, так и для стандартного ввода. Командаcatможет использоваться для копирования файлов следующим образом:

$ cat kevin.report > pat.report

В этом примере стандартным вводом служит файл kevin.report, а стандартным выводом — файлpat.report.Содержимое файлаkevin.report не изменяется.

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

$ cat kevin.report » pat,report

Если бы в этом примере было опущено имя файла kevin.report, то командаcat дописала бы вводимый с клавиатуры текст в конец файлаpat.report. Соответствующая команда выглядит так:

$ cat » pat.report

Существуют всего четыре символа перенаправления стандартного в вода/вы вола:

• Символ > используется для перенаправления стандартного вывода команды в 4)аил. Например,cat > file запишет выводимую командойcat информацию в файл file.

• Символ < используется для переназначения стандартного ввода команды. Например, при выполнении командыcat < file в качестве стандартного вводаcatиспользуется не клавиатура, а файлfile.

• Символ » используется для дописывапия стандартного вывода команды в конец существующего файла. Например,cat » file допишет выводимую командой catинформацию в конец файлаfile.

• Символ ¦ является символом потока. Он используется, когда вы хотите передать стандартный вывод одной команды на стандартный ввод другой. Например,cat ¦ grep отправит стандартный вывод командыcat на стандартный ввод командыgrep. (Потоки более подробно обсуждаются ниже в этой главе.)

На первый взгляд может показаться, что эти символы — не что иное, как несколько способов сделать одно и то же. На самом деле символы < и > можно менять местами в командной строке, но они оба нужны. Команды, которые выглядят похоже, на самом деле могут совершенно по-разному обрабатываться операционной системой. Например, команда

$ cat pat.file выполняет те же действия, что и команда

$ cat < pat.file

Однако на самом деле это различные команды. В первом случаеpat.file — это аргумент командыcat. С точки зрения Linux аргументы — это переменные, используемые в командной строке. В данном случае получилось так, что аргумент — это файл. Во втором же примере файлpat.fileиграет роль стандартного ввода для командыcat.

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

$ cat < filel > file2

Эта команда использует файлfilel в качестве стандартного ввода командыcat, а файлfile2 — в качестве стандартного вывода.

Потоки

Поток, обозначаемый символом ¦, — это просто еще один способ перенаправления стандартного ввода/вывода. Использование потоков позволяет работать непосредственно с командами, передавая информацию, выводимую одной из команд, на ввод другой. Синтаксис таков:

$ commandl ¦ command2

Сочетание команд и символа потока часто также называется потоком. Потоки часто используются при подготовке файлов к печати.





sdamzavas.net - 2019 год. Все права принадлежат их авторам! В случае нарушение авторского права, обращайтесь по форме обратной связи...