Далі трохи спрощено, щоб допомогти новим користувачам.
Ну, по-перше, потрібно зрозуміти концепцію стандартного вводу та стандартного виводу.
У Linux та інших операційних системах, схожих на UNIX, кожен процес має стандартний вхід ( stdin) та стандартний вихід ( stdout). Звичайна ситуація - stdinце ваша клавіатура і stdoutце ваш екран або вікно терміналу.
Тож коли ви запустите ls, він кине його на вихід stdout. Якщо ви нічого не зробите, він перейде до вашого екрана чи вікна терміналу, і ви його переглянете.
Тепер деякі команди Linux взаємодіють з користувачем і використовують stdinдля цього, ваш текстовий редактор є одним із таких. Він читає, stdinщоб прийняти ваші натискання клавіш, робити якісь дії, а потім записувати речі stdout.
Однак існують також неінтерактивні команди або «фільтруючі» команди, які НЕ працюють в інтерактивному режимі, але хочуть купу даних. Ці команди візьмуть все, що stdinє, зробіть щось із цим, а потім киньте йогоstdout
Давайте розглянемо ще одну команду під назвою du- підставки для використання диска. du /usr, наприклад, буде надруковано ( stdoutяк і будь-яка інша команда Linux) список усіх файлів у цьому каталозі та його розмір:
# du /usr
2312 /usr/games
124 /usr/lib/tc
692 /usr/lib/rygel-1.0
400 /usr/lib/apt/methods
40 /usr/lib/apt/solvers
444 /usr/lib/apt
6772 /usr/lib/gnash
Як ви можете відразу сказати, що він не сортується, і, ймовірно, ви хочете, щоб він був відсортований за розміром.
sortє однією з тих команд «фільтрування», які займуть купу матеріалів stdinі сортують її.
Отже, якщо ми це зробимо:
# du /usr | sort -nr
ми отримуємо це, що трохи краще:
4213348 /usr
2070308 /usr/lib
1747764 /usr/share
583668 /usr/lib/vmware
501700 /usr/share/locale
366476 /usr/lib/x86_64-linux-gnu
318660 /usr/lib/libreoffice
295388 /usr/lib/vmware/modules
290376 /usr/lib/vmware/modules/binary
279056 /usr/lib/libreoffice/program
216980 /usr/share/icons
Тепер ви можете бачити, що "труба" з'єднує stdoutодну команду stdinз іншою. Зазвичай ви будете використовувати його в таких ситуаціях, коли ви хочете фільтрувати, сортувати або іншим чином маніпулювати результатами команди. Вони можуть бути каскадними, якщо ви хочете обробити висновок за допомогою декількох команд фільтруючого типу.
Якщо ви введете sortйого самостійно, він все ще намагатиметься читати з нього stdin. Оскільки stdinвін підключений до вашої клавіатури, він буде чекати, коли ви будете вводити та обробляти речі, поки не натиснете Control-D. Це не підкаже вам, оскільки це не дійсно призначене для інтерактивного використання.
Програма може визначити stdin, інтерактивна вона чи ні, тому деякі програми можуть діяти інакше, якщо ви видаєте їх самостійно або в кінці труби.
Крім того, трубопровідна програма, яка працює лише в інтерактивному режимі, як-от vi, призведе до того, що у вас буде поганий час.
Труби відрізняються від перенаправлення тим, що дані переміщуються з однієї команди в іншу, не зберігаючись ніде. Отже, у наведеному вище прикладі duвихідні дані ніде не зберігаються. Більшу частину часу ви не хочете цього робити з трубами, тому що причиною використання труб є певна обробка результатів команди - але є команда, teeяка дозволяє вам мати ваш пиріг і їсти його теж, він буде копіювати те , що він отримує від stdinобом stdoutі файлу за вашим вибором. Ви також можете це зробити за bashдопомогою синтаксису таємничих символів, що включає амперсанди та дужки, про які я не знаю.
|це те, що він не використовує імені, вихід з команди l-hand передається безпосередньо на вхід для команди з r-боку труби.