Лекція 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.
Правило лабораторії
Section titled “Правило лабораторії”У вправах із > працюємо лише з файлами в ~/marko-lab/pipes, щоб випадково не перезаписати важливі дані.
Маленькі програми можна з’єднувати
Section titled “Маленькі програми можна з’єднувати”Одна з красивих ідей Unix: замість однієї гігантської програми для всього є багато маленьких інструментів. Один читає файли, інший фільтрує рядки, третій рахує.
Shell дозволяє з’єднати їх так, щоб вивід однієї програми став входом іншої.
stdout і перенаправлення
Section titled “stdout і перенаправлення”Програма зазвичай має стандартний вивід — stdout. Термінал показує його на екрані, але shell може направити його у файл:
echo "hello" > note.txt> перезаписує файл, а >> додає в кінець. Це важлива різниця: випадковий > може стерти старий вміст файлу.
Pipe — труба між програмами
Section titled “Pipe — труба між програмами”Символ | бере stdout зліва й подає як stdin програмі справа.
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
Приклади
Section titled “Приклади”Приклад 1
Section titled “Приклад 1”cat file.txt друкує вміст файлу; cat file.txt | grep Marko передає текст у фільтр.
Приклад 2
Section titled “Приклад 2”printf 'one two three ' | grep t покаже рядки, де є літера t.
Приклад 3
Section titled “Приклад 3”echo first > log.txt, а потім echo second >> log.txt залишить два рядки. Якщо вдруге використати >, перший рядок буде перезаписано.
Linux-лабораторія: побудуй конвеєр
Section titled “Linux-лабораторія: побудуй конвеєр”mkdir -p ~/marko-lab/pipescd ~/marko-lab/pipesprintf 'cat.pydog.txtrobot.pyREADME.md' > names.txtcat names.txtcat names.txt | grep '.py'grep '.py' names.txt > python-files.txtcat python-files.txtecho 'snake.py' >> names.txtgrep '.py' names.txtЗверни увагу: grep '.py' names.txt може читати файл напряму, тому cat ... | grep ... не завжди потрібен. Але pipeline корисний для розуміння композиції.
Місія для Марка
Section titled “Місія для Марка”Виконай місію по черзі. Якщо щось не виходить — спочатку перечитай приклад вище й спробуй знайти, на якому кроці результат відрізняється.
- виконай лабораторію
- додай два нові імені файлів через
>> - знайди через
grepлише рядки з.md - створи
all.txtчерезcat names.txt > all.txtі перевір вміст - поясни різницю між
>,>>і|
Перевір себе
Section titled “Перевір себе”- Що таке stdout?
- Що робить
>? - Що робить
>>? - Що робить
|? - Навіщо Unix-підхід із маленькими інструментами зручний?
Терміни однією фразою
Section titled “Терміни однією фразою”- stdout (standard output) — стандартний вивід програми, який за замовчуванням йде на екран.
>(перенаправлення) — направляє вивід із терміналу у файл, перезаписуючи його.>>— додає вивід у файл, не стираючи попередній вміст.- Pipe (
|) — з’єднує вивід однієї програми з введенням іншої. echo— виводить текст у stdout.cat— показує вміст файлу у stdout.grep— фільтрує рядки за шаблоном.
Чек-лист перед наступною лекцією
Section titled “Чек-лист перед наступною лекцією”- Чи можеш ти пояснити, що таке stdout та як працюють перенаправлення виведення?
- Чи вмієш ти використовувати труби (pipes) та команду
grep? - Чи розумієш ти, як об’єднувати команди для обробки тексту?
Що потрібно винести з лекції
Section titled “Що потрібно винести з лекції”- shell уміє перенаправляти потоки даних
- pipe дозволяє складати прості програми у конвеєр
- перед
>треба пам’ятати, що він може перезаписати файл
Хакерський принцип: не запам’ятовуй магічні слова. Намагайся пояснити своїми словами, що відбулося і чому.