Модуль 0.5: Редагування файлів
Складність:
[ШВИДКО]- Надрукуйте те, що бачите, збережіть, перевірте та запустіть невеликий скриптЧас на проходження: 35 хвилин
Попередні вимоги: Модуль 0.3 - Перші команди термінала
Що ви зможете зробити
Розділ «Що ви зможете зробити»До кінця цього модуля ви попрактикуєте повний цикл редагування, який зустрічається у щоденній роботі з терміналом: відкрити файл, свідомо змінити його, зберегти, перевірити та використати його як вхідні дані для іншої команди. Ці результати написані як практичні навички, оскільки редагування файлів — це не суто теоретичне питання; це навичка координації між вашою клавіатурою, оболонкою (shell), файловою системою та програмами, які пізніше читатимуть те, що ви написали.
- Створити та відредагувати звичайні текстові файли за допомогою
nanoз термінала, не покладаючись на графічний редактор. - Написати та перевірити простий Bash-скрипт, який об’єднує кілька команд в один файл для багаторазового використання.
- Діагностувати та виправити проблеми з дозволами на виконання за допомогою
chmod +x, коли скрипт не може бути запущений безпосередньо. - Порівняти та обрати між
nano,vim,catта іншими підходами до перегляду файлів для конкретної ситуації редагування.
Чому це важливо
Розділ «Чому це важливо»Гіпотетичний сценарій: ви підключені до навчального Linux-хоста через термінал, і тренувальний сервіс відмовляється запускатися, оскільки в його файлі конфігурації є одна помилка в налаштуваннях. На цьому хості немає десктопного редактора, а копіювання файлу назад на ваш ноутбук додасть кілька шансів відредагувати не ту копію. Практичне питання не в тому, чи ви “людина термінала”; питання в тому, чи зможете ви відкрити правильний файл, внести найменшу безпечну зміну, зберегти її та перевірити, що тепер файл містить саме те, що ви планували.
У попередніх модулях про термінал ви створювали порожні файли за допомогою touch та досліджували каталоги командами на кшталт ls та pwd. Порожні файли схожі на чисті бланки замовлень на кухні ресторану: вони резервують місце, але нікому не кажуть, що готувати. Реальні системи використовують текстові файли для shell-скриптів, списків пакетів, конфігурації сервісів, файлів середовища, документації і, зрештою, маніфестів Kubernetes для кластерів версії 1.35 та новіших. Як тільки текст стає рівнем інструкцій для системи, його безпечне редагування стає навичкою експлуатації, а не просто вправою з друкування.
Цей урок починається з nano, оскільки він поводиться так, як очікує більшість новачків: ви друкуєте літери, і вони з’являються у файлі. Це не робить його іграшкою. Багато досвідчених інженерів досі використовують nano для швидких правок, тому що він показує свої основні команди на екрані та зберігає низьке когнітивне навантаження, коли справжньою проблемою є вміст файлу. Ви також познайомитеся з vim, не як зі статусним символом, а як з інструментом із іншими компромісами, який стає цінним після того, як базовий цикл редагування файлів стане для вас рутиною.
Чому існує редагування в терміналі
Розділ «Чому існує редагування в терміналі»Графічні редактори чудово підходять, коли ви працюєте на власному ноутбуці, особливо для великих проєктів із багатьма файлами, панелями пошуку та помічниками, що розуміють мови програмування. Сервери та хмарні середовища — це інша справа. Вони часто працюють без графічного інтерфейсу, а віддалений доступ зазвичай надає вам командний рядок, а не робочий стіл. Коли єдиним доступним інтерфейсом є текст, термінальний редактор — це невеликий надійний інструмент, який дозволяє вам полагодити конфігураційний файл, створити скрипт або переглянути нотатку без встановлення цілого десктопного стеку.
Ключова ментальна модель полягає в тому, що файл — це просто байти, збережені під певним іменем, тоді як редактор — це тимчасовий робочий простір для зміни цих байтів. Коли ви запускаєте nano hello.txt, shell запускає програму nano та повідомляє їй, який файл ви хочете відредагувати. nano завантажує вміст файлу в буфер, дозволяє вам змінювати цей буфер на екрані та записує буфер назад на диск лише тоді, коли ви його зберігаєте. Поки ви не збережете, файл на диску та текст на екрані — це не одне й те саме.
Ця різниця має значення, оскільки робота в терміналі часто є віддаленою, спільною або автоматизованою. Якщо ви відредагуєте не ту копію файлу, програмі, яка читає справжню копію, буде байдуже, наскільки уважно ви друкували. Якщо ви закриєте редактор без збереження, shell ввічливо повернеться, і нічого корисного не зміниться. Якщо ви збережете зламаний конфігураційний файл, а потім перезапустите сервіс, сервіс прочитає саме те, що ви написали. Редактор не оцінює наміри; він записує байти, тому ваш робочий процес повинен включати верифікацію.
Той самий файл також може переглядатися більш ніж однією програмою в різні моменти часу, саме тому збереження є чіткою межею. Поки nano тримає буфер відкритим, інша команда, як-от cat, читає останню збережену версію з диска, а не слова, які зараз видно у вашому редакторі. Після того, як ви збережете файл, наступний читач побачить нову версію. Ця межа звучить очевидно в спокійному навчальному модулі, але вона пояснює багато реальних непорозумінь серед новачків: термінал не ігнорує вашу роботу, він читає сталу копію на диску, яку ви або записали, або ще ні.
Редагування в терміналі також вчить вас бути точними щодо імен. Ім’я файлу — це не просто якась розмита назва документа; це шлях, який вказує на один об’єкт в одному каталозі на одній машині. hello.txt у вашому домашньому каталозі, hello.txt у /tmp та hello.txt на віддаленому навчальному хості — це різні файли, навіть якщо вони містять однакові слова. Перед редагуванням корисно запитати: “Який саме шлях я збираюся змінити?”. Після редагування корисно запитати: “Чи містить цей точний шлях текст, який я мав намір зберегти?”.
Ось базовий цикл редагування, який ви будете практикувати протягом цього модуля. Цикл навмисно невеликий, оскільки маленькому циклу легше довіряти під тиском, і він масштабується від трирядкової навчальної нотатки до перегляду конфігурації у production. Така сама структура з’явиться пізніше, коли ви будете редагувати YAML для Kubernetes: відкрити, змінити, зберегти, перевірити, і лише потім застосувати результат до системи.
+--------------------+ +--------------------+ +--------------------+| Open the file | ---> | Edit the buffer | ---> | Save to disk || nano hello.txt | | type, move, cut | | Ctrl+O, Enter |+--------------------+ +--------------------+ +--------------------+ ^ | | v+--------------------+ +--------------------+ +--------------------+| Adjust if needed | <--- | Verify the file | <--- | Exit the editor || reopen with nano | | cat hello.txt | | Ctrl+X |+--------------------+ +--------------------+ +--------------------+Зупиніться та подумайте: якщо ви надрукуєте три рядки в nano, але закриєте вікно термінала перед збереженням, яку копію файлу прочитає наступна команда cat hello.txt: незбережений буфер редактора чи файл, який уже зберігається на диску? Правильна відповідь — файл на диску, оскільки shell та cat нічого не знають про незбережену пам’ять редактора. Обдумування цього перед першою вправою запобігає типовому здивуванню, коли термінальний редактор поводиться більш буквально, ніж сучасний графічний редактор із автозбереженням.
Познайомтеся з nano до того, як він вам знадобиться
Розділ «Познайомтеся з nano до того, як він вам знадобиться»Існує багато редакторів, які працюють у терміналі, але два імені, які новачки чують найчастіше — це nano та vim. Ми починаємо з nano, оскільки його модель взаємодії є прямою: відкрити файл, надрукувати текст, зберегти за допомогою видимого шорткату та вийти за допомогою іншого видимого шорткату. vim надзвичайно потужний, але він використовує режими, тому натискання літери може вставляти текст в одному режимі та запускати команду редактора в іншому. Ця система режимів є цінною після того, як ви її вивчите, проте вона є поганою першою перешкодою, коли справжній урок полягає в безпечному редагуванні файлів.
| nano | vim |
|---|---|
| Працює так, як ви очікуєте | Має круту криву навчання |
| Друкуєте і він друкує | Вам потрібно натиснути i перед тим, як почати друкувати |
| Меню внизу показує, як зберегти та вийти | Відомо, що люди часто застрягають і не можуть зрозуміти, як вийти |
| Ідеально підходить для новачків | Потужний, але спочатку перевантажує |
Це порівняння не є аргументом на користь того, що один редактор морально кращий за інший. Це рішення про перший інструмент для конкретного завдання. Якщо вам потрібно зробити невелику, впевнену правку на віддаленому хості вже сьогодні, nano є хорошим варіантом за замовчуванням, оскільки він залишає команди видимими. Якщо згодом ви будете годинами редагувати код через SSH, vim може стати привабливим, оскільки його команди переміщення, пошуку, макросів і повторення винагороджують за практику. Хороший інженер обирає інструменти залежно від ситуації, а не за фольклором.
Ви побачите ту саму ідею при виборі між nano та cat. nano призначений для зміни файлу, тоді як cat — для виведення файлу в термінал. Відкриття редактора лише для того, щоб подивитися на файл, створює непотрібний ризик, оскільки випадкове натискання клавіші може змінити буфер. Виведення файлу за допомогою cat, коли ви збиралися його відредагувати, є нешкідливим, але неефективним. Робочий процес стає простішим, коли у вашій свідомості кожна команда має чітке завдання.
Перш ніж запустити це, який вивід ви очікуєте від cat hello.txt, якщо hello.txt ще не існує? Деякі системи покажуть “No such file or directory”, і це корисний зворотний зв’язок, а не провал уроку. Редактори, такі як nano, можуть створити новий файл при збереженні, тоді як програми для перегляду, такі як cat, зазвичай очікують, що файл уже існує. Ця різниця пояснює, чому одне й те саме ім’я файлу може бути прийнятним для однієї команди та помилкою для іншої.
Існує ще одна тонка відмінність між редакторами, яка матиме значення пізніше: деякі редактори оптимізовані для легкості освоєння (discoverability), а інші — для швидкості після запам’ятовування. nano робить загальні команди видимими внизу екрана, тому легко відновити роботу, якщо ви забудете шорткат. vim ховає значну частину своєї потужності за командами, режимами та комбінаціями, які стають швидкими лише після практики. Цей модуль обирає легкість освоєння, оскільки перша віха — це не швидкість; це внесення правильних змін без потрапляння в пастку всередині інструмента.
Відкриття, редагування, збереження та вихід
Розділ «Відкриття, редагування, збереження та вихід»Почніть у своєму домашньому каталозі, щоб створені вами файли було легко знайти та безпечно видалити пізніше. Команда cd ~ переміщує вас до вашого домашнього каталогу, який є розумною зоною для практики, оскільки він належить вашому обліковому запису користувача. Виконання вправ у передбачуваному каталозі має значення, тому що новачок може швидко втратити впевненість, коли файл створено успішно, але в каталозі, де він цього не очікував.
cd ~Тепер відкрийте nano з іменем файлу, якого ще не існує. Ця команда не відразу створює постійний вміст на диску; вона відкриває буфер редактора, пов’язаний з іменем hello.txt. Файл стає реальним у корисному сенсі, коли ви записуєте буфер на диск за допомогою команди збереження.
nano hello.txtВаш екран повністю зміниться, оскільки тепер термінал контролюється nano, а не вашим командним рядком. Ви можете побачити номер версії, який відрізняється від цього прикладу, і це нормально. Важливими елементами є ім’я файлу вгорі, порожня область редагування посередині та меню шорткатів унизу.
GNU nano 9.0 hello.txt
^G Help ^O Write Out ^W Where Is ^K Cut ^C Location^X Exit ^R Read File ^\ Replace ^U Paste ^T ExecuteНижнє меню — це причина, чому nano є дружнім першим редактором. Він не очікує, що ви запам’ятаєте все, перш ніж зможете вийти. Слово “Write Out” означає зберегти буфер у файл, а “Exit” означає вийти з редактора та повернутися до shell. Старомодні формулювання поширені в інструментах Unix, тому краще вивчити фразу один раз, ніж дивуватися їй пізніше.
Символ ^ у цьому меню означає “утримуйте клавішу Ctrl”, а не “введіть символ каретки”. Коли nano показує ^O, натисніть Ctrl та O одночасно. Коли він показує ^X, натисніть Ctrl та X одночасно. Ця нотація з’являється в багатьох термінальних програмах, логах та посібниках, тому її вивчення тут окупиться й поза межами nano.
| Що ви бачите | Що ви натискаєте | Що це робить |
|---|---|---|
^O | Ctrl + O | Зберігає файл |
^X | Ctrl + X | Виходить з nano |
^K | Ctrl + K | Вирізає поточний рядок |
^U | Ctrl + U | Вставляє вирізаний рядок |
^W | Ctrl + W | Шукає текст |
^G | Ctrl + G | Показує довідку |
Коли nano відкритий, надрукуйте такі три рядки. Не хвилюйтеся, якщо екран переносить текст по-іншому у вашому терміналі; вміст файлу визначається символами та розривами рядків, які ви друкуєте, а не точною візуальною шириною вікна термінала. Натискайте Enter у кінці кожного рядка, щоб текст став трьома окремими рядками у файлі.
Welcome to the Kitchen!Today's special: Learning to edit files.Chef says: You're doing great.Тепер ваш екран має показувати текст та індикатор “Modified” біля верхнього краю. Це слово означає, що в буфері є зміни, які ще не записані на диск. Це корисне попередження, оскільки воно каже вам, що неправильний вихід може призвести до втрати роботи.
GNU nano 9.0 hello.txt Modified
Welcome to the Kitchen!Today's special: Learning to edit files.Chef says: You're doing great.
^G Help ^O Write Out ^W Where Is ^K Cut ^C Location^X Exit ^R Read File ^\ Replace ^U Paste ^T ExecuteЩоб зберегти, натисніть Ctrl+O. nano попросить вас підтвердити ім’я файлу призначення. У цій вправі запропоноване ім’я файлу вже є правильним, тому натисніть Enter. Важлива звичка — читати це ім’я файлу перед підтвердженням, особливо коли ви пізніше будете редагувати файли з різних каталогів або на віддалених машинах.
Ctrl + OFile Name to Write: hello.txtПісля того, як ви натиснете Enter, індикатор “Modified” зникне, оскільки тепер буфер редактора та файл на диску збігаються. Ви все ще перебуваєте всередині nano, тому збереження та вихід — це два окремі кроки. Такий поділ корисний, оскільки ви можете зберегти контрольну точку, продовжити редагування та зберегти знову перед виходом.
Щоб вийти з nano, натисніть Ctrl+X. Якщо в буфері немає незбережених змін, nano негайно завершує роботу. Якщо ви змінили щось після останнього збереження, він запитає, чи зберігати модифікований буфер, і ви маєте зробити свідомий вибір.
Ctrl + XSave modified buffer? Y Yes N No ^C CancelБіля цієї підказки варто пригальмувати, оскільки вибір є буквальним. Y зберігає зміни та продовжує процес виходу, N відкидає незбережені зміни, а Ctrl+C скасовує спробу виходу, щоб ви могли повернутися до редагування. Новачки часто швидко натискають клавішу, тому що хочуть, щоб підказка зникла, але це саме той момент, коли звичка бути терплячим запобігає втраті роботи.
Свідомо перевіряйте та відкривайте файли повторно
Розділ «Свідомо перевіряйте та відкривайте файли повторно»Повернення до командного рядка не означає завершення редагування. Перевірка — це звичка, яка перетворює “здається, я це зберіг” на “файл містить саме те, що я планував”. Найпростішою командою для перевірки є cat, яка виводить вміст файлу в термінал. Її назва походить від “concatenate” (об’єднувати), оскільки команда може з’єднувати файли, але в повсякденній роботі це також швидкий спосіб прочитати короткий текстовий файл.
cat hello.txtОчікуваний вивід:
Welcome to the Kitchen!Today's special: Learning to edit files.Chef says: You're doing great.Крок перевірки також привчає вас розрізняти “редагування” та “перегляд”. Якщо файл короткий і вам потрібно лише підтвердити його вміст, cat є безпечнішим та швидшим варіантом, ніж відкриття редактора. Якщо файл довгий, у наступних модулях ми розглянемо програми для перегляду, такі як less, які дозволяють гортати вміст без редагування. Коли завдання полягає у зміні тексту — використовуйте редактор; коли завдання полягає в перевірці тексту — надавайте перевагу програмі для перегляду.
Щоб відредагувати наявний файл, відкрийте його тією ж командою. nano зчитує збережений вміст у новий буфер, і ви можете переміщатися за допомогою клавіш зі стрілками. Додайте новий рядок у кінці, збережіть, вийдіть і знову перевірте за допомогою cat. Цей ритм “повторне відкриття — збереження — перевірка” є важливішим, ніж конкретний кухонний текст у прикладі.
nano hello.txtДодайте цей рядок у кінці файлу:
PS: The pantry is fully stocked.Збережіть за допомогою Ctrl+O, натисніть Enter, щоб підтвердити ім’я файлу, і вийдіть за допомогою Ctrl+X. Потім знову перевірте файл. Тепер результат повинен містити перші три рядки та новий четвертий рядок, що доводить: ви відредагували наявний файл, а не створили окрему нотатку десь інде.
cat hello.txtКоли ви працюєте на віддалених системах, ця звичка захищає вас від підступної категорії помилок: редагування не на тому хості, не в тій директорії або редагування тимчасової копії. Швидкий виклик pwd перед редагуванням покаже, де ви перебуваєте, а швидкий cat після редагування покаже, що саме потрапило на диск. Якщо ви підключені до віддаленого хосту, команда hostname також допоможе підтвердити, на якій машині ви вносите зміни, перш ніж ви торкнетеся конфіденційного файлу.
Сценарій вправи: уявіть, що ви планували відредагувати тренувальний файл у своїй домашній директорії, але командний рядок показує, що ви перебуваєте у /tmp. Редагування може пройти успішно, проте файл опиниться в неправильному місці для наступної команди. У такій ситуації виправлення полягає не в тому, щоб друкувати швидше; виправлення полягає в тому, щоб зупинитися, запустити pwd, перейти до потрібної директорії та повторити редагування у правильному місці.
Перевірка — це також етап, на якому ви виявляєте орфографічні та пунктуаційні помилки, які редактор не може зрозуміти за вас. nano не знає, чи “pantry” або “panty” є правильним кухонним словом, а Bash не знає, чи повідомлення в рядку echo сформульоване професійно. Редактор допомагає вам розміщувати символи; крок перевірки допомагає прочитати їх так, як їх прочитає наступна програма або людина. Саме тому досвідчені користувачі термінала часто виводять або порівнюють (diff) файл після редагування, навіть якщо зміна здавалася простою.
Переміщення, пошук, вирізання та вставка
Розділ «Переміщення, пошук, вирізання та вставка»Невеликі файли можна редагувати, просто друкуючи текст у кінці, але справжні конфігураційні файли та скрипти згодом потребують переміщення. У nano клавіші зі стрілками переміщують курсор, Backspace та Delete видаляють символи, а Enter створює новий рядок. Ці елементи керування навмисно зроблені звичайними, що дозволяє вам зосередитися на значенні файлу, а не на механіці редактора протягом перших кількох модулів.
nano також має прості команди вирізання та вставки, орієнтовані на рядки. Перемістіть курсор на рядок, який ви хочете перемістити, натисніть Ctrl+K, щоб вирізати весь цей рядок, перейдіть до місця призначення та натисніть Ctrl+U, щоб його вставити. Якщо ви натиснете Ctrl+K кілька разів поспіль, nano складе вирізані рядки у стек і вставить їх усі разом, коли ви натиснете Ctrl+U. Це корисно під час реорганізації невеликого скрипта або переміщення пов’язаних конфігураційних рядків разом.
Пошук — це ще одна навичка редагування, яка стає необхідною швидше, ніж очікує більшість початківців. Натисніть Ctrl+W, введіть текст, який хочете знайти, і натисніть Enter. У вашому файлі hello.txt пошук слова special перенесе вас до рядка з “Today’s special.” Повторне натискання Ctrl+W і потім Enter повторює останній пошук, що зручно в довших файлах, де однакове налаштування зустрічається більше одного разу.
Ctrl + Wnano запросить текст для пошуку:
Search:Введіть special і натисніть Enter. Курсор має перестрибнути до відповідного слова у файлі. Якщо збігів немає, nano повідомляє, що текст не знайдено. Це також корисна інформація, оскільки вона каже вам, що файл не містить точного написання, яке ви шукали.
Який підхід ви б обрали в цьому випадку і чому: сканування нотатки з двох рядків вручну чи використання Ctrl+W для пошуку налаштування у файлі на кілька сотень рядків? Сканування вручну чудово підходить, коли файл поміщається на одному екрані, але пошук стає безпечнішим вибором, коли ваші очі можуть пропустити слово, що повторюється, схожу назву налаштування або коментар, який виглядає як активний рядок конфігурації.
Компроміс при вирізанні та вставці полягає в тому, що можна легко перемістити неправильний рядок, якщо не перевірити кінцевий результат. Після перестановки рядків прочитайте навколишній текст перед збереженням, потім збережіть і перевірте за допомогою cat або іншої програми для перегляду. У наступних модулях така сама обережність знадобиться щодо відступів у YAML, де переміщення рядка на неправильний рівень може змінити значення всього маніфесту Kubernetes.
Напишіть свій перший скрипт
Розділ «Напишіть свій перший скрипт»Скрипт — це текстовий файл, який містить команди, що комп’ютер має виконати послідовно. Ви можете уявляти його як картку з рецептом для термінала: замість того, щоб вводити ті самі команди по одній, ви записуєте їх один раз, зберігаєте файл і запускаєте рецепт, коли він вам потрібен. Перший скрипт у цьому модулі навмисно зроблений простим, але він знайомить із тими самими механізмами, які використовуються в серйозній автоматизації.
Відкрийте новий файл скрипта за допомогою nano. Суфікс .sh — це домовленість, яка підказує людям, що це shell-скрипт; це не те, що робить файл виконуваним. Операційна система покладається на дозволи (permissions) і, для прямого виконання, зазвичай на рядок shebang на початку файлу.
nano my-first-script.shПершим рядком скрипта буде #!/bin/bash. Цей рядок називається shebang, і він вказує системі, який інтерпретатор повинен прочитати файл, коли ви виконуєте його напряму за допомогою ./my-first-script.sh. Якщо ж ви натомість запустите bash my-first-script.sh, ви вже явно обрали Bash, тому shebang є менш важливим для такого виклику. Додавати його — усе одно хороша звичка, оскільки це робить цільовий інтерпретатор скрипта зрозумілим як для людей, так і для операційної системи.
Введіть наведене нижче точно так, як показано:
#!/bin/bash
echo "Welcome to the kitchen!"echo "Today's date is: $(date)"echo "You are logged in as: $(whoami)"echo "Your current directory is: $(pwd)"echo ""echo "Great job, chef! Your first script works!"Кожен рядок навчає невеликій частині поведінки shell. echo виводить текст, що робить її корисною для статусних повідомлень та простих звітів. $(date) запускає команду date і вставляє її результат у рядок. $(whoami) вставляє ваше поточне ім’я користувача, тоді як $(pwd) вставляє вашу поточну директорію. Порожній рядок echo "" виводить пустий рядок, щоб вивід було легше читати.
Скрипт також показує, чому редагування текстових файлів є потужнішим, ніж введення окремих команд у командному рядку. Команда, введена в командному рядку, виконується один раз, а потім зникає в історії оболонки. Команда, збережена у скрипті, стає повторюваним артефактом, який ви можете перевіряти, змінювати, поширювати, рецензувати та запускати знову. Ця повторюваність є одним із містків від звичайного використання термінала до автоматизації.
Файл скрипта також легше аналізувати, ніж послідовність команд, яку ви тримаєте в пам’яті, оскільки він дає вам фіксований об’єкт для вивчення. Ви можете прочитати перший рядок і запитати, який інтерпретатор його виконає. Ви можете прочитати кожен рядок echo і передбачити результат перед виконанням. Ви можете помітити, що виконання ./my-first-script.sh залежить від того, чи міститься файл у вашій поточній директорії, і чи є дозвіл на виконання, перш ніж shell запустить його напряму. Ця звичка читати скрипт перед його запуском стає вкрай необхідною, коли згодом скрипти встановлюватимуть пакети, змінюватимуть дозволи або викликатимуть інструменти кластера.
Збережіть за допомогою Ctrl+O, натисніть Enter, щоб підтвердити ім’я файлу, і вийдіть за допомогою Ctrl+X. На цьому етапі файл існує і містить валідні shell-команди, але це не обов’язково програма, яку операційній системі дозволено виконувати напряму. Нові файли часто створюються як дані, доступні для читання та запису, а не як виконувані програми, і таке значення за замовчуванням є функцією безпеки.
Перш ніж запускати chmod, спробуйте запустити скрипт напряму та передбачити результат. Це корисний експеримент, оскільки він розділяє поняття “файл містить команди” та “файл має дозвіл на виконання”. Якщо ваша система відповідає “Permission denied”, вона робить усе правильно: вона відмовляється розглядати звичайний текст як програму, поки ви явно не надасте цей дозвіл.
./my-first-script.shТепер додайте дозвіл на виконання за допомогою chmod +x. chmod означає change mode, а +x означає “додати дозвіл на виконання”. Ви кажете операційній системі, що цьому файлу дозволено запускатися як програмі, а не просто лежати на диску у вигляді тексту.
chmod +x my-first-script.shЗапустіть скрипт ще раз із поточної директорії. Префікс ./ має значення, оскільки він каже: “запусти файл із назвою my-first-script.sh із цієї директорії”. Без цього префікса shell шукає директорії, перелічені у вашій змінній PATH, а ваша поточна робоча директорія зазвичай не обшукується автоматично.
./my-first-script.shОчікуваний вивід:
Welcome to the kitchen!Today's date is: Sun Mar 23 14:30:00 UTC 2026You are logged in as: yournameYour current directory is: /home/yourname
Great job, chef! Your first script works!Точна дата, ім’я користувача та директорія відрізнятимуться, що є хорошим знаком, оскільки скрипт виконує команди під час запуску, а не виводить лише фіксований текст. Якщо ви бачите помилку доступу (permission error), знову перевірте chmod +x. Якщо ви бачите синтаксичну помилку, знову відкрийте файл за допомогою nano і перевірте номер рядка, який згадала оболонка. Помилки після кроку з дозволами зазвичай означають, що операційна система успішно запустила скрипт, але Bash знайшов проблему в тексті.
Ця невелика послідовність налагодження є початком корисної діагностичної звички. Спочатку запитайте, чи може файл бути виконаний взагалі. Потім запитайте, чи може обраний інтерпретатор його розібрати. Потім запитайте, чи роблять команди всередині те, що ви планували. Це різні рівні, і їх розділення запобігає прикрій звичці змінювати випадкові рядки, не знаючи, який саме рівень дав збій.
Ви можете запускати багато shell-скриптів двома різними способами, і розуміння різниці запобігає плутанині. bash my-first-script.sh просить Bash прочитати файл, тому дозвіл на виконання не вимагається для цієї конкретної команди. ./my-first-script.sh просить операційну систему виконати файл напряму, тому дозвіл на виконання та шлях вибору інтерпретатора мають значення. У цьому курсі ми практикуємо пряму форму, оскільки вона розкриває справжню модель дозволів файлової системи, з якою ви знову зіткнетеся під час запуску допоміжних скриптів із репозиторіїв.
Керуйтеся розсудливістю, а не фольклором редакторів
Розділ «Керуйтеся розсудливістю, а не фольклором редакторів»З часом ви зіткнетеся з vim, і його варто вивчити, коли ви будете готові. Він потужний, оскільки розглядає редагування як мову рухів та операцій, що дозволяє досвідченим користувачам швидко змінювати текст, не тягнучись до миші. Компроміс полягає в тому, що vim запускається у нормальному режимі (normal mode), тому початківець, який очікує появи введених літер, може випадково віддати команди. Ось чому nano є кращим першим термінальним редактором для мети цього модуля.
Практичне запитання завжди звучить так: “який інструмент є найбезпечнішим для поточного завдання?”. Використовуйте cat, коли файл короткий і вам потрібно лише переглянути його. Використовуйте nano, коли вам потрібне просте редагування і ви хочете бачити видимі підказки для збереження та виходу. Використовуйте vim, коли ви вже знаєте його режими або коли вам потрібна потужна навігація та редагування в системі, яка має лише термінал. Використовуйте графічний редактор на своєму ноутбуці, коли виконуєте масштабнішу роботу над проєктом, і файл є локальним.
Є ще один момент, де потрібна розсудливість: уникайте редагування бінарних файлів за допомогою текстового редактора. Зображення, скомпільовані програми, архіви та багато файлів баз даних не є звичайним текстом. Їх відкриття в nano може показати дивні символи, а збереження може пошкодити файл. Коли ви не впевнені, виконайте file filename перед редагуванням. Звичайний текст, shell-скрипти, Markdown, YAML, JSON і багато конфігураційних файлів є підхожими цілями для термінального текстового редактора.
Конфігураційні файли заслуговують на особливу обережність, оскільки програми читають їх буквально. Зайва лапка, пропущена двокрапка або неправильний рівень відступу можуть змінити поведінку. У наступних модулях Kubernetes вам буде запропоновано редагувати маніфести YAML, і Kubernetes 1.35 розбиратиме ці файли відповідно до структури YAML, а не відповідно до ваших візуальних намірів. Звички з цього модуля переносяться напряму: відкрийте правильний файл, внесіть цілеспрямовану зміну, збережіть, перевірте (validate), а потім дозвольте системі його прочитати.
Ось чому “швидке редагування” не повинно означати “недбале редагування”. Швидке редагування є невеликим, цілеспрямованим і перевіреним; недбале редагування робиться поспіхом, без перевірки і часто виконується не в тому місці. Термінал винагороджує за точність, оскільки він надає вам компактні інструменти з мінімумом церемоній. Він також швидко виявляє помилки, оскільки ці інструменти роблять рівно те, що ви просите. Ваша мета — навчитися спокійно ставитися до цієї буквальності, а не лякатися її.
Сценарій вправи: ви збираєтеся змінити конфігурацію віддаленого сервісу і помічаєте, що ваш командний рядок містить ім’я хоста, яке ви не впізнаєте. Найбезпечніший наступний крок — це не відредагувати і сподіватися; найбезпечніший крок — запустити hostname та pwd, підтвердити машину та директорію, і лише після цього відкрити файл. Термінальне редагування вимагає точності, але ця точність є палицею з двома кінцями, коли ви підключені не до того місця.
Патерни та антипатерни
Розділ «Патерни та антипатерни»Надійний патерн для редагування на рівні початківця — це невеликі, перевірені набори змін. Зробіть одну змістовну зміну, збережіть її, коректно вийдіть і перевірте збережений файл, перш ніж рухатися далі. Цей підхід може здаватися повільнішим, ніж внесення десятка змін за раз, але він дає вам чітку контрольну точку, коли щось іде не так. Він також відображає професійний контроль змін: менші зміни легше перевіряти, тестувати, пояснювати та скасовувати.
Ще один потужний патерн — обирати команди лише для читання замість команд для редагування, коли ви ще проводите розслідування. Якщо вам потрібно лише оглянути файл, використовуйте cat для коротких файлів або пейджер у наступних модулях. Відкриття редактора має бути свідомим рішенням, оскільки редактори призначені для зміни буферів. Різниця схожа на читання вивішеного на кухні розкладу порівняно з тим, щоб піднести до нього ручку.
Третій патерн — робити скрипти самозрозумілими на початку файлу. Shebang оголошує інтерпретатор, а чіткий вивід echo допомагає людині, яка запускає скрипт, зрозуміти, що відбувається. Для навчальних скриптів достатньо дружніх повідомлень. Для операційних скриптів чіткий вивід стає ще важливішим, оскільки людина, яка читає лог термінала, може не бути тією, хто написав скрипт.
Відповідний антипатерн — вважати успішне редагування доказом правильної поведінки. Збереження файла доводить лише те, що байти були записані на диск. Воно не доводить, що сервіс може розпарсити файл, що скрипт має дозвіл на виконання або що команди всередині скрипта є правильними. Саме тому після кожного редагування має виконуватися найменша команда перевірки, яка тестує наступний семантичний рівень.
Ці патерни навмисно скромні, оскільки надійність на рівні початківця походить від повторюваних звичок, а не від ефектних трюків. Якщо ви завжди підтверджуєте розташування перед конфіденційними редагуваннями, зберігаєте свідомо, перевіряєте збережений результат і тестуєте наступний рівень, ви запобігаєте більшості ранніх помилок під час редагування в терміналі. Пізніше, коли ви опануєте швидші редактори та багатші команди валідації, ці інструменти впишуться в той самий патерн. Інструмент може змінюватися; робочий процес має залишатися впізнаваним.
| Ситуація | Використовуйте цей патерн | Уникайте цього антипатерна |
|---|---|---|
| Вам потрібно оглянути короткий файл | Запустіть cat filename спочатку, а потім редагуйте лише за потреби | Відкриття nano просто для читання та випадкова зміна тексту |
| Вам потрібно зробити невелику зміну | Відкрийте за допомогою nano, збережіть через Ctrl+O, вийдіть через Ctrl+X, перевірте за допомогою cat | Припущення, що файл збережено, бо редактор був відкритий |
| Вам потрібно безпосередньо запустити скрипт | Додайте #!/bin/bash, потім запустіть chmod +x script.sh перед ./script.sh | Віра в те, що лише суфікс .sh робить файл виконуваним |
| Ви перебуваєте на віддаленому хості | Підтвердьте hostname та pwd перед редагуванням конфіденційних файлів | Швидке редагування без перевірки того, на якій машині ви перебуваєте |
Коли використовувати це замість альтернатив
Розділ «Коли використовувати це замість альтернатив»Для цього швидкого модуля структура прийняття рішень навмисно проста. Обирайте інструмент, який відповідає обсягу змін і рівню ризику. Якщо змінювати нічого не потрібно, використовуйте переглядач. Якщо зміна невелика, а середовище — лише термінал, використовуйте nano. Якщо редагування складне, і вам зручно працювати з модальним редагуванням, використовуйте vim. Якщо ви працюєте над локальним проєктом із багатьма файлами, графічний редактор коду може бути кращим середовищем.
| Потреба | Кращий вибір | Чому |
|---|---|---|
| Побачити короткий файл рівно один раз | cat filename | Ця команда не дозволить випадково змінити файл |
| Зробити зручне для початківців редагування в терміналі | nano filename | Видимі комбінації клавіш зменшують навантаження на пам’ять |
| Зробити багаторазові розширені редагування в терміналі | vim filename | Рухи та команди масштабуються з практикою |
| Запускати збережені команди багаторазово | chmod +x script.sh, потім ./script.sh | Дозволи роблять файл придатним до безпосереднього запуску |
| Підтвердити своє розташування перед редагуванням | pwd та hostname | Помилкам із розташуванням легше запобігти, ніж виправляти їх |
Ви також можете мислити категоріями оборотності. Від перегляду легко відмовитися, оскільки він нічого не змінює. Редагування є оборотним лише тоді, коли ви знаєте, що змінилося, або маєте резервну копію. Запуск скрипта може вплинути на багато файлів або команд одночасно, тому скрипти заслуговують як на перевірку вмісту, так і на усвідомлення дозволів. Ця градація ризику допомагає вам сповільнюватися у відповідні моменти, не формуючи страху перед терміналом.
Найкращий вибір часто той, який залишає найбільше доказів. Команда cat залишає видимий вивід в історії вашого термінала. Збережений скрипт залишає файл, який ви можете відкрити знову та перевірити. Команда chmod +x змінює біт дозволу, який можна буде перевірити пізніше за допомогою інструментів, що ви вивчите на наступних уроках роботи з терміналом. Обираючи інструменти таким чином, ви створюєте слід, який допоможе вам та іншим інженерам зрозуміти, що сталося.
Чи знали ви?
Розділ «Чи знали ви?»-
GNU nano 8.0 було випущено у 2024 році, а nano 9.x з’явився пізніше з таким самим стилем видимих клавіш керування, на які покладаються початківці. Точна версія у вашій системі може відрізнятися, але основний робочий процес збереження та виходу залишається впізнаваним у багатьох дистрибутивах Linux.
-
nanoпочинався як безкоштовна замінаpico, редактора, який використовувався з поштовим клієнтом Pine. Назва обігрує префікси системи СІ: нано більше за піко, і жарт прижився, оскільки заміна стала широко встановленим редактором сама по собі. -
Рядковий редактор Unix
edдатується 1969 роком і був написаний Кеном Томпсоном. Він редагує по одному рядку за раз, тому повноекранний редактор, такий якnano, є розкішшю порівняно з ранніми робочими процесами редагування в Unix. -
Рядок shebang повинен починатися з двох символів
#!на самому початку скрипта. Якщо ви випадково напишете# !/bin/bashабо залишите порожній рядок над ним, безпосереднє виконання може не вибрати призначений вами інтерпретатор.
Типові помилки
Розділ «Типові помилки»| Помилка | Чому це трапляється | Як це виправити |
|---|---|---|
| Натискання Ctrl+Z замість Ctrl+X для виходу | Ctrl+Z призупиняє nano і ховає його у фоновому режимі замість закриття | Введіть fg, щоб повернути nano, а потім використайте Ctrl+X для правильного виходу |
| Забування про збереження перед виходом | Початківці очікують автозбереження, але nano записує лише тоді, коли йому сказано це зробити | Натисніть Ctrl+O і Enter перед Ctrl+X, або обережно відповідайте Y на запит |
Введення ^O буквально у файл | Нотація з кареткою виглядає як два друковані символи, якщо ви раніше не бачили комбінацій клавіш термінала | Утримуйте Ctrl і натисніть O; не друкуйте символ каретки |
Використання nano, коли ви мали на увазі cat | Ви хотіли переглянути файл, але відкрили редактор, здатний його змінити | Використовуйте cat filename для коротких перевірок лише для читання та залишайте nano для редагувань |
| Редагування файла на віддаленому сервері з думкою, що він локальний | Підказки термінала можуть виглядати подібно, особливо коли відкрито кілька сеансів | Запустіть hostname та pwd перед зміною важливих файлів |
Відкриття та збереження бінарного файла в nano | Редактор розглядає байти як текст і може пошкодити нетекстові формати | Запустіть file filename, коли не впевнені, і редагуйте лише звичайні текстові файли |
Припущення, що .sh робить скрипт виконуваним | Розширення файлів — це просто людські домовленості, тоді як дозвіл на виконання — це атрибут файлової системи | Додайте shebang там, де це доречно, і запустіть chmod +x script.sh перед безпосереднім виконанням |
Контрольні запитання
Розділ «Контрольні запитання»Ваш колега каже, що зберіг `hello.txt`, але `cat hello.txt` досі показує стару версію. Що вам слід перевірити насамперед і чому?
Почніть із перевірки того, чи справді вони використали Ctrl+O і підтвердили ім’я файла перед виходом. nano може утримувати незбережені зміни у своєму буфері, і закриття або відхилення цього буфера залишає файл на диску без змін. Якщо вони все ж зберегли, перевірте pwd, щоб підтвердити, що вони редагували та переглядали ту саму директорію. Ключова діагностика полягає в розмежуванні пам’яті редактора, вмісту збереженого файла та поточної робочої директорії.
Ви редагуєте критично важливий конфігураційний файл, і меню nano каже `^O Write Out`. Ви вводите символи `^O` у файл. Що пішло не так?
Нотація з кареткою позначає клавішу Ctrl, а не текст, який слід вводити буквально. Правильна дія — утримувати Ctrl і одночасно натиснути O, а потім натиснути Enter для підтвердження імені файла. Термінальні програми часто використовують цю нотацію, оскільки вона компактна і працює в текстових інтерфейсах. Введення цих символів додало їх до буфера, тому вам слід видалити їх перед збереженням.
Ви написали `backup.sh`, запустили `./backup.sh` і отримали `Permission denied`. Який рівень дав збій і яким є сфокусоване виправлення?
Уміст файла може бути правильним, але файлова система не надала дозволу на безпосереднє виконання. Додайте дозвіл на виконання за допомогою chmod +x backup.sh, а потім знову запустіть ./backup.sh. Це не гарантує правильність логіки скрипта; це лише дозволяє операційній системі спробувати його виконати. Якщо після цього з’явиться нова синтаксична помилка, ви перейшли на рівень парсингу інтерпретатора і повинні перевірити вказаний рядок.
Скрипт починається з `echo "Starting backup"` і не має shebang. Він запускається за допомогою `bash backup.sh`, але поводиться непередбачувано з `./backup.sh`. Що вам слід змінити?
Додайте shebang, як-от #!/bin/bash, першим рядком, якщо скрипт призначений для безпосереднього запуску. Запуск bash backup.sh обирає Bash явно, тому скрипт може працювати в такому вигляді навіть без shebang. Безпосереднє виконання просить операційну систему вибрати інтерпретатор, а shebang є портативним способом вказати цей вибір. Після редагування збережіть файл, перевірте перший рядок і переконайтеся у наявності дозволу на виконання.
Вам потрібно підтвердити, чи містить короткий файл одне налаштування, але ви не збираєтеся нічого змінювати. Чи варто використовувати `cat` або `nano`, і чому?
Використовуйте cat для короткої перевірки лише для читання, оскільки вона виводить файл без відкриття буфера редагування. Це зменшує ймовірність випадкових змін і зосереджує команду на огляді. Якщо файл занадто довгий для комфортного виведення, пейджер підійде краще за редактор, але це розглядається в пізнішому модулі. Використовуйте nano лише тоді, коли ви вирішили внести зміну.
Ви перемістили рядки за допомогою Ctrl+K та Ctrl+U, зберегли, і тепер скрипт виводить повідомлення в неправильному порядку. Як ви повинні це налагодити?
Знову відкрийте скрипт у nano і прочитайте сусідні рядки по порядку, а не лише той рядок, який ви пам’ятаєте, що переміщували. Операції вирізання та вставки можуть перемістити більше одного рядка, якщо ви натискали Ctrl+K кілька разів, тому остаточне розташування має значення. Після виправлення порядку збережіть і запустіть скрипт іще раз. Це проблема вмісту, а не дозволу, якщо скрипт уже запускається і виводить текст.
Ви підключені до віддаленого хоста і збираєтеся редагувати файл, який контролює навчальний сервіс. Які дві команди допомагають запобігти редагуванню в неправильному місці?
Запустіть hostname, щоб підтвердити, до якої машини ви підключені, і запустіть pwd, щоб підтвердити поточну директорію. Ці перевірки швидкі і запобігають типовій помилці під час віддаленої роботи: успішній зміні файла, але на неправильному хості або в неправильній директорії. Після редагування перевірте збережений файл за допомогою засобу перегляду, такого як cat, якщо файл короткий. Безпечна робота в терміналі залежить від підтвердження контексту до та після редагування.
Практична вправа: Kitchen Memo Board
Розділ «Практична вправа: Kitchen Memo Board»У цій вправі ви створите невеликий файл із нотатками, відредагуєте його, напишете скрипт, який його читатиме, надасте дозвіл на виконання та запустите цей скрипт. Сценарій навмисно буденний, оскільки головний урок полягає в механіці роботи. Якщо ви зможете спокійно виконати це з навчальною нотаткою, пізніше ви зможете застосувати той самий цикл до допоміжних shell-скриптів, Markdown-нотаток, YAML-маніфестів та конфігураційних файлів сервісів.
Працюйте у своїй домашній директорії, щоб очищення було простим. Якщо будь-яка команда видає результат, який відрізняється через ваше ім’я користувача, дату чи директорію, вважайте це очікуваним. Якщо команда завершується з помилкою, зупиніться та визначте, на якому рівні проблема: неправильна директорія, незбережений файл, відсутність дозволу чи вміст скрипта. Ця звичка цінніша за прагнення просто швидко дійти до кінця.
Під час роботи промовляйте цикл уголос, якщо це допомагає: відкрити, відредагувати, зберегти, вийти, перевірити. Для частини зі скриптом додайте ще два слова: дозволити та запустити. Це може здатися надто педантичним для вправи початківця, але саме завдяки свідомій послідовності робота в терміналі стає передбачуваною. Оболонка не нагадає вам, що файл не збережено після вашого виходу з редактора, і не здогадається, що текстовий файл має бути виконуваним лише тому, що він закінчується на .sh.
Частина 1: Створення та редагування нотатки
Розділ «Частина 1: Створення та редагування нотатки»cd ~nano kitchen-memo.txtВведіть такі п’ять рядків:
=== KITCHEN MEMO BOARD ===1. Morning prep starts at 6 AM2. New menu items arriving Thursday3. Remember: clean as you go4. Staff meeting at 3 PM FridayЗбережіть за допомогою Ctrl+O, натисніть Enter, і вийдіть за допомогою Ctrl+X. Потім перевірте свою збережену роботу за допомогою cat. Перевірка — це частина вправи, а не необов’язковий крок, оскільки вона доводить, що файл на диску містить нотатку, а не просто те, що ви ввели текст у буфер редактора.
cat kitchen-memo.txtВи маєте побачити всі п’ять рядків, виведені точно так, як ви їх ввели:
=== KITCHEN MEMO BOARD ===1. Morning prep starts at 6 AM2. New menu items arriving Thursday3. Remember: clean as you go4. Staff meeting at 3 PM FridayЧастина 2: Редагування нотатки
Розділ «Частина 2: Редагування нотатки»Відкрийте нотатку ще раз і додайте шостий рядок унизу. Цей крок підтверджує, що повторне відкриття наявного файлу має той самий базовий робочий процес, що й створення нового файлу, за винятком того, що nano спочатку завантажує попередній вміст у буфер. Переміщуйтеся за допомогою клавіш зі стрілками за потреби, введіть новий рядок, збережіть, вийдіть та перевірте знову.
nano kitchen-memo.txtДодайте цей рядок:
5. Chef says: great work today, team!Збережіть та вийдіть за допомогою Ctrl+O, Enter та Ctrl+X. Потім перевірте, чи наявні всі шість рядків:
cat kitchen-memo.txtЧастина 3: Написання скрипта для звіту
Розділ «Частина 3: Написання скрипта для звіту»Тепер створіть скрипт, який виводить короткий звіт про статус і включає вміст нотатки. Цей скрипт поєднує фіксований текст, підстановку команд та команду читання файлу. Він усе ще невеликий, але демонструє причину важливості скриптів: вони зберігають повторювану послідовність дій термінала в текстовому файлі.
nano kitchen-report.shВведіть цей скрипт:
#!/bin/bash
echo "=== Kitchen Status Report ==="echo "Date: $(date)"echo "Chef on duty: $(whoami)"echo ""echo "--- Memo Board Contents ---"cat kitchen-memo.txtecho ""echo "--- Files in current directory ---"lsecho ""echo "Report complete. Kitchen is running smoothly!"Збережіть та вийдіть. Перш ніж зробити скрипт виконуваним, ви можете переглянути його за допомогою cat, якщо хочете зробити ще одну перевірку. Потім надайте дозвіл на виконання та запустіть його безпосередньо з поточної директорії. Якщо ви бачите “Permission denied” (Доступ заборонено), повторіть команду chmod +x і переконайтеся, що ім’я файлу написано правильно.
chmod +x kitchen-report.sh./kitchen-report.shОчікуваний вивід відрізнятиметься датою, іменем користувача та списком файлів:
=== Kitchen Status Report ===Date: Sun Mar 23 14:45:00 UTC 2026Chef on duty: yourname
--- Memo Board Contents ---=== KITCHEN MEMO BOARD ===1. Morning prep starts at 6 AM2. New menu items arriving Thursday3. Remember: clean as you go4. Staff meeting at 3 PM Friday5. Chef says: great work today, team!
--- Files in current directory ---hello.txt kitchen-memo.txt kitchen-report.sh my-first-script.sh...
Report complete. Kitchen is running smoothly!Частина 4: Очищення
Розділ «Частина 4: Очищення»Видаліть навчальні файли, коли закінчите. Прочитайте команду перед її запуском, оскільки rm видаляє файли без їх переміщення до графічного кошика. У цьому випадку імена файлів є специфічними для вправи, і їх видалення дозволить зберегти вашу домашню директорію чистою для наступного модуля.
rm hello.txt kitchen-memo.txt kitchen-report.sh my-first-script.shКритерії успіху:
- Ви створили
hello.txtта перевірили його за допомогоюcat. - Ви відредагували
hello.txtпісля його повторного відкриття за допомогоюnano. - Ви створили
kitchen-memo.txtта перевірили вміст нотатки. - Ви написали
kitchen-report.shз коректним шебангом#!/bin/bash. - Ви використали
chmod +x kitchen-report.shперед його безпосереднім запуском. - Ви діагностували будь-яку помилку, розділивши проблеми з директорією, збереженням, дозволом та вмістом скрипта.
Джерела
Розділ «Джерела»- GNU nano manual
- GNU nano homepage
- Vim Reference Manual: Introduction
- Bash Reference Manual: Shell Scripts
- Bash Reference Manual: Command Substitution
- GNU Coreutils manual: cat invocation
- GNU Coreutils manual: chmod invocation
- The Open Group: chmod
- Linux man-pages: execve
- Shebang (Unix)
- Chmod
- Ed (text editor)
- GNU nano
Наступний модуль
Розділ «Наступний модуль»Module 0.6: Git Basics навчить вас відстежувати історію змін за допомогою контролю версій, що є наступним кроком після того, як ви навчитеся створювати, змінювати та перевіряти файли з термінала.