Page 29 - 4820
P. 29
працювали лише з файлами. Другий – це використання спеціальних команд-утиліт, які
призначені саме для того, щоби прийняти певну інформацію з одного файлу, обробити
її, а результат записати у другий файл. Такі утиліти називаються фільтрами. Утиліта
cat, варіанти використання якої з перенаправленням потоків було розглянуто вище – це
простіший фільтр. Він практично не обробляє інформацію, лише може зчіплювати
кілька файлів в один. Інші корисні фільтри: cut, grep, sort.
Утиліта cut переглядає вхідний файл, і виділяє з кожного його рядка інформацію
за ознаками розміщення в певних колонках або полях. Наприклад, рядки файлу
/etc/passwd розділяються на поля за допомогою символу ‘:’. Перше поле – login, п’яте
поле – інформація про користувача. Якщо ми хочемо надрукувати лише цю
інформацію, ми можемо дати команду:
cut –d: –f1,5 < /etc/passwd
Ключ –d задає символ-роздільник полів (у цьому випадку – ‘:’), ключ –f – список
полів, що треба роздрукувати (у цьому випадку – 1 і 5).
Утиліта grep виводить лише ті рядки, в яких зустрічається заданий рядок
пошуку. Утиліта sort виконує сортування вхідного потоку, наприклад, за абеткою.
Докладніше про ці та інші фільтри вам слід дізнатися з довідкової системи man.
Існує можливість перенаправити вихідний потік однієї утиліти безпосередньо у
вхідний потік іншої, без використання тимчасових файлів. Це так звані конвеєри. В
системі UNIX всі утиліти, що поєднані в конвеєр, запускаються паралельно і
обробляють інформацію по мірі її надходження. Конвеєр утворюється за допомогою
символу ‘|’ таким чином:
util1 | util2 | util3
При утворені конвеєра окремо перенаправляти вхідні й вихідні потоки на
проміжних стадіях не можна – це буде або сприйнято як синтаксична помилка, або
результат може бути непередбачуваним.
Приклад конвеєру:
ps –al | grep root | more
Команда ps з ключами –al направить у вихідний потік список всіх процесів у
системі, grep root вибере з них лише ті, які виконуються від імені root’а, more
забезпечить вивід їх на екран посторінково. Інший приклад:
cat /etc/passwd | cut –d: –f1,5 | more
Ця команда зробить те ж саме, що й приклад з командою cut, що розглядався
раніше, але вивід на екран буде посторінковим.
Якщо проміжні результати на якійсь із стадій конвеєра бажано зберегти, можна
скористатись командою tee my_file. Ця команда візьме вхідний потік, передасть його
4
без змін у вихідний потік і одночасно продублює у файл my_file . Наприклад, так
можна модифікувати один із розглянутих вище прикладів:
ps –al | grep root | tee my_file | more
Тепер ми не лише побачимо на екрані посторінково виведений список всіх
процесів root’а, але й збережемо його у файлі my_file.
4 Походження назви цієї команди добре пояснює її дію. Взагалі “tee” – це назва літери “Т” в англійській
абетці. Літера “Т” якраз і використовується, щоби проілюструвати відгалуження, розщеплення потоку на
основний і бічний (коли натякають на розщеплення потоку на два еквівалентні, використовують літеру
“Y”).
27