Пренасочване на входен изход в примери за Linux/Unix
⚡ Умно обобщение
Пренасочването в Linux и Unix се променя, когато командата чете вход или изпраща изход, размянаping клавиатурата и екрана за файлове или устройства, използващи оператори като знака „по-голямо от“, знака „по-малко от“ и оператора за добавяне.
Пренасочването е една от най-полезните функции на Linux и Unix shell, защото ви позволява да решите къде дадена команда чете входните си данни и къде изпраща изходните си данни. Тази страница обяснява изходните, входните и пренасочването на грешки с реализирани примери.
Какво е пренасочване?
Пренасочването е функция в Linux, която позволява при изпълнение на команда да се променят стандартните входни и изходни устройства. Основният работен процес на всеки... Linux команда е, че приема вход и дава изход.
- Стандартното устройство за въвеждане (stdin) е клавиатурата.
- Устройството за стандартен изход (stdout) е екранът.
С пренасочване, стандартният вход и изход по-горе могат да бъдат променени.
Пренасочване на изхода
Графиката по-долу отбелязва началото на примерите за пренасочване на изхода.
Символът '>' се използва за пренасочване на изхода (STDOUT).
Пример:
ls -al > listings
Тук изходът на командата ls -al се пренасочва към файла „listings“ вместо към екрана ви. Снимката на екрана по-долу показва резултата.
Забележка: Използвайте правилното име на файл, когато пренасочвате изхода на командата към файл. Ако вече съществува файл със същото име, пренасочената команда изтрива съдържанието му и след това го презаписва.
Ако не искате даден файл да бъде презаписан, но искате да добавите още съдържание към съществуващ файл, използвайте оператора '>>'. Екранната снимка по-долу показва съдържание, добавено с '>>'.
Можете да пренасочвате стандартния изход не само към файлове, но и към устройства.
$ cat music.mp3 > /dev/audio
Командата cat чете музикалния файл.mp3 и изпраща изхода към /dev/audio, което е аудио устройството. Ако звуковата конфигурация на вашия компютър е правилна, тази команда възпроизвежда музикалния файл.mp3.
Пренасочване на входа
Графиката по-долу представя пренасочване на входа.
Символът '<' се използва за пренасочване на вход (STDIN).
Пример: Програмата за поща в Linux може да ви помогне да изпращате имейли от терминала.
Можете да въведете съдържанието на имейла, като използвате клавиатурата, стандартното устройство за въвеждане. Но ако искате да прикачите файл към имейла, можете да използвате оператора за пренасочване на въвеждане в следния формат.
mail -s "Subject" to-address < Filename
Снимката на екрана по-долу показва командата mail, която чете файл като входен файл.
Това прикачва файла към имейла и той се изпраща на получателя.
Примерите по-горе бяха прости. Сега разгледайте някои усъвършенствани техники за пренасочване, които използват файлови дескриптори.
досие Descriptors (FD)
В Linux и Unix всичко е файл. Обикновените файлове, директориите и дори устройствата са файлове. Всеки файл има свързан номер, наречен файлов дескриптор (ФД).
Диаграмата по-долу показва стандартните потоци и техните файлови дескриптори.
Вашият екран също има файлов дескриптор. Когато се изпълни програма, изходът се изпраща към файловия дескриптор на екрана и вие виждате изхода на програмата на монитора си. Ако изходът беше изпратен към файловия дескриптор на принтера, изходът на програмата щеше да бъде отпечатан.
Пренасочване на грешки
Всеки път, когато изпълнявате програма или команда в терминала, винаги са отворени три файла, а именно стандартен вход, стандартен изход и стандартен файл за грешки.
Тези файлове са винаги налични, когато се изпълнява програма. Както беше обяснено по-рано, с всеки от тези файлове е свързан файлов дескриптор.
| досие | досие Descriptor |
|---|---|
| Стандартен вход STDIN | 0 |
| Стандартен изход STDOUT | 1 |
| Стандартна грешка STDERR | 2 |
По подразбиране потокът от грешки се показва на екрана. Пренасочването на грешки насочва грешките към файл, различен от екрана.
Защо пренасочване на грешки?
Пренасочването на грешки е една от много популярните функции на Unix и Linux.
Често срещаните потребители на Unix знаят, че много команди дават огромно количество грешки. Например, при търсене на файлове, човек обикновено получава разрешение отказ на грешки, които обикновено не помагат на човека, който търси определен файл. Докато изпълнявате shell скриптове, често не искате съобщенията за грешки да претрупват нормалния изход на програмата.
Решението е да се пренасочат съобщенията за грешки към файл.
Пример 1
$ myprogram 2>errorsfile
Снимката на екрана по-долу показва тази команда в терминала.
По-горе изпълняваме програма с име myprogram. Файловият дескриптор за стандартна грешка е 2. Използвайки „2>“, пренасочваме изхода за грешка към файл с име „errorsfile“. По този начин изходът на програмата не е претрупан с грешки.
Пример 2
Ето още един пример, който използва оператора find.
find . -name 'my*' 2>error.log
Използвайки командата find, търсим в текущата директория „.“ файл, чието име започва с „my“, и изпращаме всички грешки към error.log.
Пример 3: Нека разгледаме по-сложен пример.
Сървърните администратори често изброяват директории и съхраняват както изходните данни за грешки, така и стандартния изход във файл, който може да бъде обработен по-късно. Ето командата.
ls Documents ABC> dirlist 2>&1
Диаграмата по-долу показва как и двата потока се записват в един файл.
Тук:
- 2>&1 означава, че STDERR се пренасочва към същата цел като STDOUT (която е списъкът с директории на файловете).
- Изходът за грешка се пренасочва към стандартния изход, който от своя страна се пренасочва към списъка с директории на файла. Следователно и двата потока се записват в списъка с директории на файла.
Диаграмата по-долу обобщава как входните, изходните и пренасочването на грешки се съчетават.







.png)