Найти тему
СНИЛС на Linux

Перенаправление ввода-вывода (I/O redirection) в Linux

Перенаправление ввода-вывода (I/O redirection) в Linux - это механизм, позволяющий управлять потоками данных между командами и файлами. Основные потоки в Linux:

  • STDIN (стандартный ввод, файловый дескриптор 0 - "<") - откуда команда получает данные, обычно это клавиатура
  • STDOUT (стандартный вывод, файловый дескриптор 1 - ">") - куда команда выводит результат, обычно это терминал
  • STDERR (стандартный поток ошибок, файловый дескриптор 2 - "2>") - куда команда выводит сообщения об ошибках, обычно это терминал

Основные операторы перенаправления:

< - перенаправление ввода из файла в stdin команды, выведет содержимое file.txt

cat < file.txt

> - перенаправление вывода из stdout команды в файл, запишет "Hello" в file.txt

echo "Hello" > file.txt

>> - дозапись вывода из stdout команды в конец файла, дозапишет "World" в file.txt

echo "World" >> file.txt

2> - перенаправление потока ошибок stderr в файл, перенаправит ошибки в errors.txt

command 2> errors.txt

&> - перенаправление stdout и stderr в один файл, перенаправит вывод и ошибки в output.txt

command &> output.txt

<< - оператор "здесь-строка", позволяет передать данные в stdin команды, передаст все строки между EOF в stdin cat

cat << EOF ... EOF

Примеры использования:

Перенаправление вывода в файл

ls -l > files.txt

Перенаправление ввода из файла

sort < unsorted.txt

Перенаправление ошибок в файл

find / -name no_file 2> errors.txt

Объединение stdout и stderr в файл

command > output.txt 2>&1

Использование "здесь-строки"

cat << EOF

Это текст,
переданный в stdin cat
EOF

Ещё примеры шаблонных команд

  1. command < /opt/data.txt: Эта команда перенаправляет ввод команды command из файла /opt/data.txt. То есть command будет читать данные из указанного файла.
  2. command > /opt/data.txt: Здесь вывод команды command перенаправляется в файл /opt/data.txt. Результат выполнения command будет записан в указанный файл, перезаписывая его содержимое.
  3. command 2> /opt/data.txt: Эта команда перенаправляет сообщения об ошибках (stderr) команды command в файл /opt/data.txt. Таким образом, все сообщения об ошибках будут записаны в указанный файл.
  4. command > /dev/null: Здесь вывод команды command перенаправляется в специальное устройство /dev/null, которое является нулевым устройством. Это приведет к игнорированию вывода команды.
  5. command > /dev/null 2>&1: В этой команде вывод команды command перенаправляется в /dev/null, а затем поток ошибок (stderr) перенаправляется в поток вывода (stdout). Это означает, что как вывод, так и ошибки будут игнорироваться.
  6. command 2>&1 > /dev/null: Здесь сначала поток ошибок (stderr) перенаправляется в поток вывода (stdout), а затем вывод команды command направляется в /dev/null. Это приведет к игнорированию вывода команды, но сообщения об ошибках будут отображаться.
  7. command 2>&1: В данной команде поток ошибок (stderr) команды command перенаправляется в поток вывода (stdout). Это означает, что как вывод, так и ошибки будут отображаться.
  8. command &> /dev/null: Здесь как вывод, так и поток ошибок (stdout и stderr) команды command перенаправляются в /dev/null, что приведет к полному игнорированию вывода и ошибок.
  9. command >& /dev/null: В этой команде как вывод, так и поток ошибок (stdout и stderr) команды command перенаправляются в /dev/null, что также приведет к полному игнорированию вывода и ошибок.

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

Перенаправление выполняется до запуска команды, поэтому если файл не существует, он будет создан. Если команда не выводит данные в stdout, перенаправление в файл будет пустым.

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