Онлайн робочі станції OnWorks Linux та Windows

логотип

Безкоштовний онлайн-хостинг для робочих станцій

<Попередній | зміст | Наступна>

Переспрямування стандартного виводу

Перенаправлення вводу-виводу дозволяє нам перевизначати, куди йде стандартний вихід. Щоб переспрямувати стандартний вихід на інший файл замість екрана, ми використовуємо оператор переспрямування «>», за яким слідує ім’я файлу. Чому ми хочемо це зробити? Часто корисно зберігати результат команди у файлі. Наприклад, ми можемо наказати оболонці надіслати вихідні дані ls команду до файлу ls-вихід.txt замість екрану:


[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt

[me@linuxbox ~]$ ls -l /usr/bin > ls-output.txt


Тут ми створили довгий список / usr / bin каталогу та надіслав результати у файл

ls-output.txt. Давайте перевіримо переспрямований висновок команди:


[me@linuxbox ~]$ ls -l ls-вихід.txt

-rw-rw-r-- 1 я я 167878 2016-02-01 15:07 ls-output.txt

[me@linuxbox ~]$ ls -l ls-вихід.txt

-rw-rw-r-- 1 я я 167878 2016-02-01 15:07 ls-output.txt


Добре; гарний, великий текстовий файл. Якщо ми подивимося на файл з менше, ми побачимо, що файл

ls-output.txt дійсно містить результати нашої команди ls:


[me@linuxbox ~]$ менше ls-output.txt

[me@linuxbox ~]$ менше ls-output.txt


Тепер давайте повторимо наш тест перенаправлення, але цього разу з поворотом. Ми змінимо назву каталогу на неіснуючий:



[me@linuxbox ~]$ ls -l /bin/usr > ls-output.txt

ls: не вдається отримати доступ до /bin/usr: немає такого файлу чи каталогу

[me@linuxbox ~]$ ls -l /bin/usr > ls-output.txt

ls: не вдається отримати доступ до /bin/usr: немає такого файлу чи каталогу


Ми отримали повідомлення про помилку. Це має сенс, оскільки ми вказали неіснуючий каталог /bin/usr, але чому повідомлення про помилку відображалося на екрані, а не було переспрямовано до файлу ls-вихід.txt? Відповідь полягає в тому, що ls програма не надсилає повідомлення про помилки на стандартний вихід. Натомість, як і більшість добре написаних програм Unix, він надсилає повідомлення про помилку стандартній помилці. Оскільки ми переспрямували лише стандартний вихід, а не стандартну помилку, повідомлення про помилку все одно було надіслано на екран. Побачимо як

Переспрямування стандартного виводу


щоб переспрямувати стандартну помилку всього за хвилину, але спочатку давайте подивимося, що сталося з нашим вихідним файлом:



[me@linuxbox ~]$ ls -l ls-вихід.txt

-rw-rw-r-- 1 я я 0 2016-02-01 15:08 ls-output.txt

[me@linuxbox ~]$ ls -l ls-вихід.txt

-rw-rw-r-- 1 я я 0 2016-02-01 15:08 ls-output.txt


Тепер файл має нульову довжину! Це пов’язано з тим, що коли ми переспрямовуємо вихід за допомогою оператора переспрямування «>», файл призначення завжди переписується з самого початку. Оскільки наша ls Команда не генерувала жодних результатів, а лише повідомлення про помилку, операція перенаправлення почала перезаписувати файл, а потім зупинилася через помилку, що призвело до його усікання. Насправді, якщо нам коли-небудь знадобиться обрізати файл (або створити новий, порожній файл), ми можемо використати такий трюк:



[me@linuxbox ~]$ > ls-output.txt

[me@linuxbox ~]$ > ls-output.txt


Просте використання оператора переспрямування без передньої команди призведе до скорочення існуючого файлу або створення нового порожнього файлу.

Отже, як ми можемо додати переспрямований вихід до файлу замість того, щоб перезаписувати файл із самого початку? Для цього ми використовуємо оператор переспрямування «>>», наприклад:



[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt

[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt


Використання оператора «>>» призведе до того, що вихідні дані будуть додані до файлу. Якщо файл ще не існує, він створюється так, як якщо б використовувався оператор «>». Давайте перевіримо:



[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l ls-вихід.txt

-rw-rw-r-- 1 я я 503634 2016-02-01 15:45 ls-output.txt

[me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l /usr/bin >> ls-output.txt [me@linuxbox ~]$ ls -l ls-вихід.txt

-rw-rw-r-- 1 я я 503634 2016-02-01 15:45 ls-output.txt


Ми повторили команду три рази, в результаті чого вихідний файл був утричі більшим.


Найпопулярніші хмарні обчислення ОС на OnWorks: