Перенаправление ввода-вывода (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
Ещё примеры шаблонных команд
- command < /opt/data.txt: Эта команда перенаправляет ввод команды command из файла /opt/data.txt. То есть command будет читать данные из указанного файла.
- command > /opt/data.txt: Здесь вывод команды command перенаправляется в файл /opt/data.txt. Результат выполнения command будет записан в указанный файл, перезаписывая его содержимое.
- command 2> /opt/data.txt: Эта команда перенаправляет сообщения об ошибках (stderr) команды command в файл /opt/data.txt. Таким образом, все сообщения об ошибках будут записаны в указанный файл.
- command > /dev/null: Здесь вывод команды command перенаправляется в специальное устройство /dev/null, которое является нулевым устройством. Это приведет к игнорированию вывода команды.
- command > /dev/null 2>&1: В этой команде вывод команды command перенаправляется в /dev/null, а затем поток ошибок (stderr) перенаправляется в поток вывода (stdout). Это означает, что как вывод, так и ошибки будут игнорироваться.
- command 2>&1 > /dev/null: Здесь сначала поток ошибок (stderr) перенаправляется в поток вывода (stdout), а затем вывод команды command направляется в /dev/null. Это приведет к игнорированию вывода команды, но сообщения об ошибках будут отображаться.
- command 2>&1: В данной команде поток ошибок (stderr) команды command перенаправляется в поток вывода (stdout). Это означает, что как вывод, так и ошибки будут отображаться.
- command &> /dev/null: Здесь как вывод, так и поток ошибок (stdout и stderr) команды command перенаправляются в /dev/null, что приведет к полному игнорированию вывода и ошибок.
- command >& /dev/null: В этой команде как вывод, так и поток ошибок (stdout и stderr) команды command перенаправляются в /dev/null, что также приведет к полному игнорированию вывода и ошибок.
Каждая из этих команд выполняет различные действия по перенаправлению вывода и ошибок команды в различные места, такие как файлы или специальные устройства, что позволяет более гибко управлять потоками данных в Linux.
Перенаправление выполняется до запуска команды, поэтому если файл не существует, он будет создан. Если команда не выводит данные в stdout, перенаправление в файл будет пустым.
Перенаправление - мощный инструмент для организации потоков данных между командами и файлами в Linux. Зная основы перенаправления, можно значительно повысить эффективность работы в командной строке.