Перенаправлення вводу-виводу в linux
Розміщення серверів в надійних дата-центрах Європи. Відкрийте хмарний VPS / VDS сервер на швидких SSD за 1 хвилину!
Кращий хостинг:
- захистить дані від несанкціонованого доступу в охоронюваному європейському ЦОДі
- прийме оплату хоч в bitcoin.
- дозволить поставити свій дистрибутив
- захист від DDos-атак
- безкоштовний backup
- Uptime 99,9999%
- ЦОД - TIER III
- провайдер - TIER I
Підтримаємо російською мовою 24/7/365 Працюємо з юрособами і фізособами. Вам прямо зараз потрібно 24 ядра і 72 Gb RAM. Будь ласка!
Наші вигідні тарифи доведуть, що дешевий хостинг ви ще не знали!
Хвилинна справа: виберіть конфігурацію, оплатіть і CMS на VPS готова.
Money Back - 30 днів!
Банківськими картами, електронною валютою, через термінали Qiwi, Webmoney, PayPal, Новоплат і ін.
Задайте питання в службу підтримки 24/7/365
Знайдіть відповіді в нашій базі і познайомтеся з рекомендаціями
Вбудовані можливості перенаправлення в Linux надають вам широкий набір інструментів, які використовуються спрощення для всіх видів завдань. Уміння управляти різними потоками введення-виведення в значно збільшить продуктивність, як при розробці складного програмного забезпечення, так і при управлінні файлами за допомогою командного рядка.
Потоки введення-виведення
Введення і виведення в оточенні Linux розподіляється між трьома потоками:
- Стандартний введення (standard input, stdin, потік номер 0)
- Стандартний висновок (standard output, stdout, номер 1)
- Стандартна помилка, або потік діагностики (standard error, stderr, номер 2)
При взаємодії користувача з терміналом стандартне введення передається через клавіатуру користувача. Стандартний висновок і стандартна помилка відображаються на терміналі користувача у вигляді тексту. Всі ці три потоки називаються стандартними потоками.
Стандартний введення
Стандартний вхідний потік зазвичай передає дані від користувача до програми. Програми, які передбачають стандартне введення, зазвичай отримують вхідні дані від пристрою (наприклад, клавіатури). Стандартний введення припиняється після досягнення EOF (end-of-file, кінець файлу). EOF вказує на те, що більше даних для читання немає.
Тепер введіть кілька цифр:
Вводячи цифру і натискаючи enter, ви відправляєте стандартне введення запущеної програмі cat, яка приймає ці дані. У свою чергу, програма cat відображає отриманий введення в стандартному виведення.
Користувач може задати EOF, натиснувши ctrl-d, після чого програма cat зупиниться.
Стандартний висновок
Стандартний висновок записує дані, згенеровані програмою. Якщо стандартний вихідний потік не був перенаправлений, він виведе текст в термінал. Спробуйте запустити наступну команду для прикладу:
echo Sent to the terminal through standard output
Команда echo без додаткових опцій відображає на екрані всі аргументи, передані їй в командному рядку.
Тепер запустіть echo без аргументів:
Команда поверне порожній рядок.
стандартна помилка
Цей стандартний потік записує помилки, створювані програмою, яка вийшла з ладу. Як і стандартний висновок, цей потік відправляє дані в термінал.
Розглянемо приклад потоку помилок команди ls. Команда ls відображає вміст каталогів.
Без аргументів ця команда повертає вміст поточного каталогу. Якщо вказати в якості аргументу ls ім'я каталогу, команда поверне його вміст.
Оскільки каталогу% не існує, команда поверне стандартну помилку:
ls: can not access%: No such file or directory
перенаправлення потоків
Linux надає спеціальні команди для перенаправлення кожного потоку. Ці команди записують стандартний висновок в файл. Якщо висновок перенаправлений в неіснуючий файл, команда створить новий файл з таким ім'ям і збереже в нього перенаправлений висновок.
Команди з однієї кутової дужки переписують існуючий контент цільового файлу:
- > - стандартний висновок
- <— стандартный ввод
- 2> - стандартна помилка
Команди з подвійними кутовими дужками НЕ переписують вміст цільового файлу:
- >> - стандартний висновок
- <<— стандартный ввод
- 2 >> - стандартна помилка
Розглянемо наступний приклад:
cat> write_to_me.txt
a
b
c
ctrl-d
В даному прикладі команда cat використовується для запису вихідних даних в файл.
Команда повинна повернути:
Знову перенаправьте cat в файл write_to_me.txt і введіть три цифри.
cat> write_to_me.txt
1
2
3
ctrl-d
Тепер перевірте вміст файлу.
Команда повинна повернути:
Як бачите, файл містить тільки останні вихідні дані, оскільки в команді, перенаправляє вихід, використовувалася одна кутова дужка.
Тепер спробуйте запустити ту ж команду з двома кутовими дужками:
cat >> write_to_me.txt
a
b
c
ctrl-d
Команди з подвійними кутовими дужками також не буде перезаписано існуючий контент, а доповнюють його.
Конвеєри (pipes) перенаправляють потоки виведення однієї команди на вхід іншого. При цьому дані, що передаються другій програмі, не відображаються в терміналі. На екрані дані з'являться тільки після обробки другою програмою.
Конвеєри в Linux представлені вертикальною лінією.
Така команда передасть висновок ls (вміст поточного каталогу) програмі less, яка відображає передані їй дані за рядком. Як правило, ls виводить вміст каталогів підряд, не розбиваючи на рядки. Якщо перенаправити висновок ls в less, то остання команда розділить висновок на рядки.
Як бачите, конвеєр може перенаправити висновок однієї команди на вхід іншого, на відміну від> і >>, які перенаправляють дані тільки в файли.
Фільтри - це команди, які можуть змінити перенаправлення і висновок конвеєра.
Примітка. Фільтри також є стандартними командами Linux, які можна використовувати і без конвеєра.
- find - виконує пошук файлу по імені.
- grep - виконує пошук тексту по заданому шаблону.
- tee - перенаправляє стандартний ввід в стандартний висновок і один або кілька файлів.
- tr - пошук і заміна рядків.
- wc - підрахунок символів, рядків і слів.
Приклади перенаправлення вводу-виводу
Тепер, коли ви ознайомилися з основними поняттями та механізмами перенаправлення, розглянемо кілька базових прикладів їх використання.
команда> файл
Такий шаблон перенаправляє стандартний висновок команди в файл.
Ця команда передає вміст root каталогу системи в якості стандартного виводу і записує висновок в файл root_dir_contents. Це видалить всі попередній вміст в файлі, так як в команді використана одна кутова дужка.
команда> / dev / null
/ Dev / null - це спеціальний файл (так зване «пусте пристрій»), який використовується для придушення стандартного потоку виводу або діагностики, щоб уникнути небажаного виведення в консоль. Всі дані, що потрапляють в / dev / null, скидаються. Перенаправлення в / dev / null зазвичай використовується в сценаріях оболонки.
Така команда скидає стандартний вихідний потік, що повертається командою ls, передавши його в / dev / null.
команда 2> файл
Цей шаблон перенаправляє стандартний потік помилок команди в файл, переписуючи його поточний зміст.
mkdir '' 2> mkdir_log.txt
Ця команда перенаправить помилку, викликану неправильним ім'ям каталогу, і запише її в log.txt. Зверніть увагу: помилка як і раніше відображається в терміналі.
команда >> файл
Цей шаблон перенаправляє стандартний вихід команди в файл, що не переписуючи поточного вмісту файлу.
echo Written to a new file> data.txt
echo Appended to an existing file's contents >> data.txt
Ця пара команд спочатку перенаправляє вводиться користувачем текст в новий файл, а потім вставляє його в існуючий файл, що не переписуючи його вмісту.
команда 2 >> файл
Цей шаблон перенаправляє стандартний потік помилок команди в файл, що не переписуючи існуючого вмісту файлу. Він підходить для створення балок помилок програми або сервісу, оскільки вміст логу постійно не оновлюватися.
find '' 2> stderr_log.txt
wc '' 2 >> stderr_log.txt
Наведена вище команда перенаправляє повідомлення про помилку, викликане неправильним аргументом find, в файл stderr_log.txt, а потім додає в нього повідомлення про помилку, викликаної недійсним аргументом wc.
команда | команда
find / var lib | grep deb
Ця команда шукає в каталозі / var і його підкаталогах імена файлів і розширення deb і повертає шляху до файлів, виділяючи шаблон пошуку червоним кольором.
команда | tee файл
Такий шаблон перенаправляє стандартний висновок команди в файл і переписує його вміст, а потім відображає перенаправлений вихід в терміналі. Якщо зазначеного файлу не існує, він створює новий файл.
wc / etc / magic | tee magic_count.txt
Така команда передає кількість символів, рядків і слів у файлі magic (Linux використовує його для визначення типів файлів) команді tee, яка відправляє ці дані в термінал і в файл magic_count.txt.
команда | команда | команда >> файл
Цей шаблон перенаправляє стандартний висновок першої команди і фільтрує її через наступні дві команди, а потім додає остаточний результат в файл.
| grep * tar | tr e E >> ls_log.txt
Така команда відправляє висновок ls для каталогу root команді grep. У свою чергу, grep шукає в отриманих даних файли tar. Після цього результат grep передається команді tr, яка замінить всі символи е символом Е. Отриманий результат буде додано до файл ls_log.txt (якщо такого файлу не існує, команда створить його автоматично).
висновок
Функції перенаправлення вводу-виводу в Linux спочатку здаються занадто складними. Однак робота з перенаправленням - один з найважливіших навичок системного адміністратора.
Щоб дізнатися більше про будь-якої команді, використовуйте:
man command | less
Така команда поверне повний список команд для tee.