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
   24   25   26   27   28   29   30   31   32   33   34