Skip to content

Лекція 50. Shell як конструктор LEGO: echo, cat, grep і pipe

Лекція 50. Shell як конструктор LEGO: echo, cat, grep і pipe

Section titled “Лекція 50. Shell як конструктор LEGO: echo, cat, grep і pipe”

Рівень 9: Linux-інженер лабораторії

Марко, сьогодні ми не просто вивчимо новий термін — ми відкриємо ще один шар того, як насправді працює комп’ютер.

Що ми сьогодні розкриємо

Section titled “Що ми сьогодні розкриємо”
  • побачити Unix-ідею маленьких інструментів
  • зрозуміти stdout, перенаправлення >/>> і pipeline |
  • складати прості команди з уже знайомих частин

Зв’язок з попередніми лекціями

Section titled “Зв’язок з попередніми лекціями”

У цій лекції ми використаємо знання про shell із лекції 24, щоб зрозуміти, як маленькі програми з’єднуються між собою за допомогою pipes.

У вправах із > працюємо лише з файлами в ~/marko-lab/pipes, щоб випадково не перезаписати важливі дані.

Маленькі програми можна з’єднувати

Section titled “Маленькі програми можна з’єднувати”

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

Shell дозволяє з’єднати їх так, щоб вивід однієї програми став входом іншої.

Програма зазвичай має стандартний вивід — stdout. Термінал показує його на екрані, але shell може направити його у файл:

Terminal window
echo "hello" > note.txt

> перезаписує файл, а >> додає в кінець. Це важлива різниця: випадковий > може стерти старий вміст файлу.

Pipe — труба між програмами

Section titled “Pipe — труба між програмами”

Символ | бере stdout зліва й подає як stdin програмі справа.

Terminal window
ls | grep '.py'

ls генерує список, grep залишає рядки, де є .py. Це маленький конвеєр.

graph LR
    A["ls
(список усіх файлів)"] -->|"stdout → stdin"| B["grep '.py'
(фільтрує рядки)"]
    B -->|"stdout"| C["Результат:
тільки .py файли"]

    style A fill:#e1f5fe
    style B fill:#fff3e0
    style C fill:#e8f5e9

cat file.txt друкує вміст файлу; cat file.txt | grep Marko передає текст у фільтр.

printf 'one two three ' | grep t покаже рядки, де є літера t.

echo first > log.txt, а потім echo second >> log.txt залишить два рядки. Якщо вдруге використати >, перший рядок буде перезаписано.

Linux-лабораторія: побудуй конвеєр

Section titled “Linux-лабораторія: побудуй конвеєр”
Terminal window
mkdir -p ~/marko-lab/pipes
cd ~/marko-lab/pipes
printf 'cat.py
dog.txt
robot.py
README.md
' > names.txt
cat names.txt
cat names.txt | grep '.py'
grep '.py' names.txt > python-files.txt
cat python-files.txt
echo 'snake.py' >> names.txt
grep '.py' names.txt

Зверни увагу: grep '.py' names.txt може читати файл напряму, тому cat ... | grep ... не завжди потрібен. Але pipeline корисний для розуміння композиції.

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

  1. виконай лабораторію
  2. додай два нові імені файлів через >>
  3. знайди через grep лише рядки з .md
  4. створи all.txt через cat names.txt > all.txt і перевір вміст
  5. поясни різницю між >, >> і |
  • Що таке stdout?
  • Що робить >?
  • Що робить >>?
  • Що робить |?
  • Навіщо Unix-підхід із маленькими інструментами зручний?
  • stdout (standard output) — стандартний вивід програми, який за замовчуванням йде на екран.
  • > (перенаправлення) — направляє вивід із терміналу у файл, перезаписуючи його.
  • >> — додає вивід у файл, не стираючи попередній вміст.
  • Pipe (|) — з’єднує вивід однієї програми з введенням іншої.
  • echo — виводить текст у stdout.
  • cat — показує вміст файлу у stdout.
  • grep — фільтрує рядки за шаблоном.

Чек-лист перед наступною лекцією

Section titled “Чек-лист перед наступною лекцією”
  • Чи можеш ти пояснити, що таке stdout та як працюють перенаправлення виведення?
  • Чи вмієш ти використовувати труби (pipes) та команду grep?
  • Чи розумієш ти, як об’єднувати команди для обробки тексту?

Що потрібно винести з лекції

Section titled “Що потрібно винести з лекції”
  • shell уміє перенаправляти потоки даних
  • pipe дозволяє складати прості програми у конвеєр
  • перед > треба пам’ятати, що він може перезаписати файл

Хакерський принцип: не запам’ятовуй магічні слова. Намагайся пояснити своїми словами, що відбулося і чому.