Конвеєр (pipe) - перенаправлення вводу-виводу в linux - ansmirnov

В UNIX-подібних операційних системах користувачеві відкривається величезний простір для перенаправлення вводу-виводу команд. У цій статті я постараюся розповісти, що це таке і з чим це їдять

Простим прикладом перенаправлення є pipe (конвеєр). Позначається він символом | (Пряма паличка, хто не зрозумів :)). Використовується pipe наступним чином:

При такому виклику всі дані, які при звичайному запуску команди 1 виводилися б на екран будуть надходити на стандартне введення команди 2, як ніби-то ми вводимо ці дані з клавіатури.

Поясню на прикладі. Введіть команду ls -l /. Ви побачите як на екран буде виведено вміст кореневого каталогу.

Тепер давайте переспрямуємо висновок цієї команди на введення іншої команди: grep. яка шукає у вхідних даних деяке сполучення символів. Наприклад, використовуємо таку команду: ls -l / | grep tmp.

Поясню детальніше що це означає: команда ls -l / Виведе вміст кореневого каталогу (як ми переконалися вище). Далі дані надходять команді grep tmp. яка зробить пошук за вхідними даними (отриманим з 1 команди). Після чого команда grep виведе то, що знайшла на екран (зрозуміло, це справа знову можна перенаправити).

Якщо проводити асоціації з реальним світом, то можна уявити pipe у вигляді довгої труби, распооженной вертикально (щось мені підказує, що розробники системи преставляет собі це саме також, тому і вибрали таку назву і символ |). У цю трубу хтось (команда 1) зверху кидає яблука (дані). Другий хтось (команда 2) дістає з труби ці яблука. Ширина труби не дозволяє яблакам міняти порядок, тобто в якому порядку вони були відправлені командою 1, в такому порядку вони будуть прийняті командою 2. Швидкості роботи команд також можуть відрізнятися. У випадки, якщо другий хтось забариться, яблука будуть залишатися в трубі, чекаючи обробки. Якщо забариться перший, то другий буде чекати надходження даних.

Мабуть, це все, що можна сказати про конвеєр в Linux.