Пренасочване на входен изход в примери за Linux/Unix

Какво е пренасочване?

Пренасочването е функция в Linux, така че когато изпълнявате команда, можете да промените стандартните входно/изходни устройства. Основният работен процес на всеки Linux команда е, че приема вход и дава изход.

  • Стандартното устройство за въвеждане (stdin) е клавиатурата.
  • Устройството за стандартен изход (stdout) е екранът.

С пренасочване горният стандартен вход/изход може да бъде променен.

Кликнете тук ако видеото не е достъпно

Пренасочване на изхода

- '>' се използва за пренасочване на изход (STDOUT).

Пренасочване на изхода

Пример:

ls -al > listings

Тук изходът от командата ls -al се пренасочва към файл „списъци“ вместо към вашия екран.

Пренасочване на изхода

Забележка: Използвайте правилното име на файл, докато пренасочвате изхода на командата към файл. Ако има съществуващ файл със същото име, пренасочената команда ще изтрие съдържанието на този файл и след това той може да бъде презаписан.“

Ако не искате файлът да бъде презаписан, но искате да добавите повече съдържание към съществуващ файл, тогава трябва да използвате '>>' оператор.

Пренасочване на изхода

Можете да пренасочите стандартния изход не само към файлове, но и към устройства!

$ cat music.mp3 > /dev/audio

Командата cat чете файла music.mp3 и изпраща изхода към /dev/audio, което е аудиоустройството. Ако звуковите конфигурации във вашия компютър са правилни, тази команда ще възпроизведе файла music.mp3

Пренасочване на входа

- '' се използва за пренасочване на вход (STDIN).

Пренасочване на входа

Пример: Програмата за електронна поща в Linux може да ви помогне да изпращате имейли от терминала.

Можете да въведете съдържанието на имейла, като използвате стандартната клавиатура на устройството. Но ако искате да прикачите файл към имейл, можете да използвате оператора за пренасочване на въвеждане в следния формат.

Mail -s "Subject" to-address < Filename

Пренасочване на входа

Това ще прикачи файла към имейла и той ще бъде изпратен до получателя.

Горните примери бяха прости. Нека разгледаме някои предварителни техники за пренасочване, които използват File Descriptабоната.

досие Descriptors (FD)

В Linux/Unix всичко е файл. Обикновен файл, директории и дори устройства са файлове. Всеки файл има свързан номер, наречен файл Descriptили (FD).

Вашият екран също има файл Descriptили Когато дадена програма се изпълни, изходът се изпраща във File Descriptили на екрана и виждате програмния изход на вашия монитор. Ако изходът е изпратен до File Descriptили на принтера, изходът от програмата щеше да бъде отпечатан.

Пренасочване на грешки

Всеки път, когато изпълнявате програма/команда на терминала, винаги са отворени 3 файла, а именно стандартен вход, стандартен изход, стандартна грешка.

Пренасочване на грешки

Тези файлове присъстват винаги, когато се изпълнява програма. Както беше обяснено преди, файловият дескриптор е свързан с всеки от тези файлове.

досие досие Descriptor
Стандартен вход STDIN 0
Стандартен изход STDOUT 1
Стандартна грешка STDERR 2

По подразбиране потокът от грешки се показва на екрана. Пренасочването на грешки е насочване на грешките към файл, различен от екрана.

Защо пренасочване на грешки?

Пренасочването на грешки е една от много популярните функции на Unix / Linux.

Редовните потребители на UNIX ще смятат, че много команди ви дават огромно количество грешки.

  • Например, докато търсите файлове, човек обикновено получава грешки с отказан достъп. Тези грешки обикновено не помагат на лицето, което търси определен файл.
  • Докато изпълнявате shell скриптове, често НЕ искате съобщенията за грешка да претрупват нормалния изход на програмата.

Решението е да пренасочите съобщенията за грешка към файл.

Пример 1

$ myprogram 2>errorsfile

Защо пренасочване на грешки

По-горе изпълняваме програма с имена myprogram.

Файловият дескриптор за стандартна грешка е 2.

Използвайки „2>“, ние пренасочваме изхода за грешка към файл с име „errorfile“

По този начин изходът на програмата не е затрупан с грешки.

Пример 2

Ето още един пример, който използва оператор find –

find . -name 'my*' 2>error.log

Използвайки командата „намери“, ние търсим „.“ текуща директория за файл с „име“, започващо с „my“

Защо пренасочване на грешки

Пример 3: Нека видим по-сложен пример,

Администраторите на сървъра често изброяват директории и съхраняват грешката и стандартния изход във файл, който може да бъде обработен по-късно. Ето я командата.

ls Documents ABC> dirlist 2>&1

Тук

  • който записва изхода от един файл във входа на друг файл. 2>&1 означава, че STDERR пренасочва към целта на STDOUT (което е dirlist на файла)
  • Ние пренасочваме изхода за грешка към стандартния изход, който от своя страна се пренасочва към списъка за директории на файлове. Следователно и двата изхода се записват във файл dirlist

Защо пренасочване на грешки

Oбобщение

  • Всеки файл в Linux има съответен файл Descriptили свързани с него
  • Клавиатурата е стандартното входно устройство, докато вашият екран е стандартното изходно устройство
  • “>” е операторът за пренасочване на изхода. “>>” добавя изход към съществуващ файл
  • “<” е операторът за пренасочване на входа
  • “>&” пренасочва изхода на един файл към друг.
  • Можете да пренасочите грешката, като използвате съответния файл Descriptили 2.