Перейти до вмісту

Модуль 0.4: Файли та каталоги

Hands-On Lab Available
Ubuntu beginner 20 min
Launch Lab ↗

Opens in Killercoda in a new tab

Складність: [ШВИДКО] - Абсолютний новачок

Час на проходження: 25-30 хвилин

Передумови: Модуль 0.2: Що таке термінал? — Ви повинні вміти відкривати термінал і вводити команди.


Що ви зможете зробити

Розділ «Що ви зможете зробити»

Після цього модуля ви зможете:

  • Орієнтуватися за абсолютними та відносними шляхами і вибирати безпечнішу форму для команди, скрипта або сеансу усунення несправностей.
  • Читати файли за допомогою cat, head та tail, а потім вибирати команду, яка відповідає розміру та призначенню файлу.
  • Інтерпретувати дозволи на файли з виводу ls -l і діагностувати, хто може читати, записувати або відкривати файл чи каталог.
  • Знаходити приховані файли з крапкою (dotfiles) і оцінювати, чому конфігураційні файли приховані за замовчуванням.

Гіпотетичний сценарій: ви допомагаєте діагностувати вузол Kubernetes, де Pod постійно перезапускається, і ваш колега каже: “Перевір логи kubelet, а потім порівняй маніфест у /etc/kubernetes/manifests/ з kubeconfig у ~/.kube/config.” У цьому реченні ще немає нічого складного з Kubernetes. Найважче для новачка полягає в тому, що кожна корисна підказка описана як шлях, і кожен шлях передбачає, що ви можете переміщуватися файловою системою без графічного файлового менеджера.

Термінал розглядає файлову систему як карту машини. Конфігурації зберігаються у файлах, логи записуються як файли, скрипти зберігаються як файли, а каталоги організовують усе це в передбачуваних місцях. Коли ви можете впевнено читати шляхи, команда на кшталт tail -n 20 /var/log/syslog перестає виглядати як набір знаків і починає читатися як прості інструкції: покажи мені двадцять найновіших рядків із цього лог-файлу.

Цей модуль дає вам цю навичку читання карти. Ви дізнаєтеся, що таке файли та каталоги, як Linux організовує їх у дерево, як переміщуватися за допомогою pwd, ls та cd, як вибирати між абсолютними та відносними шляхами, як переглядати вміст файлів, як помічати приховані dotfiles, і як читати перші символи дозволів, які з’являються у ls -l. Мета полягає не в ізольованому запам’ятовуванні команд. Мета полягає в тому, щоб мати змогу подивитися на шлях під час реального завдання з усунення несправностей і знати, що спробувати далі.

Файли, каталоги та дерево під кожною командою

Розділ «Файли, каталоги та дерево під кожною командою»

Файл — це іменований контейнер для інформації, що зберігається на вашому комп’ютері. Він може містити список покупок, shell скрипт, маніфест Kubernetes, фотографію, сторінку бази даних або запис у лозі, написаний запущеним Service. Важлива ідея для початківців полягає в тому, що ім’я — це не вся сутність файлу; файл також має вміст, розташування, власника, дозволи та часові мітки, які вказують операційній системі, як цей файл можна використовувати.

Уявіть файл як картку з рецептом на робочій кухні. Картка має назву, наприклад grocery-list.txt; вона має вміст, наприклад “яйця, молоко, хліб”; і вона лежить у певному місці, наприклад у шухляді або коробці для рецептів. Якщо у двох шухлядах лежить картка з назвою sauce.txt, самої назви недостатньо. Вам також потрібне розташування, саме тому шляхи мають таке велике значення під час роботи в терміналі.

Файли можуть містити багато видів даних, і термінал не судить про файл за його іконкою, як це часто робить графічне середовище. Текстовий файл може містити нотатки, вихідний код, маніфест YAML або команди shell. Бінарний файл може містити зображення, скомпільовану програму, стиснені дані або базу даних. Розширення імені файлу — це корисна конвенція, але саму файлову систему здебільшого цікавлять байти, метадані та дозволи.

У Linux ідея файлу йде глибше, ніж просто документи. Ваші фактичні нотатки є файлами, але операційна система також надає доступ до пристроїв, інформації ядра та деталей запущених процесів через інтерфейси, подібні до файлів. Наприклад, документація Red Hat описує, як записи пристроїв з’являються за такими шляхами, як /dev, а стан процесу або ядра відкривається через /proc. Вам не потрібно керувати файлами пристроїв сьогодні, але ви повинні запам’ятати цей патерн: інструменти Linux є потужними, тому що багато різних речей можна читати, перелічувати, перенаправляти або досліджувати через файлоподібний інтерфейс.

/ <-- Кореневий каталог ("root") — сама верхівка, перший поверх
├── home/ <-- Де живуть облікові записи користувачів
│ └── yourname/ <-- ВАШ домашній каталог
│ ├── Documents/
│ ├── Downloads/
│ ├── Desktop/
│ └── projects/
├── etc/ <-- Файли конфігурації системи
├── var/ <-- Змінні дані (логи, бази даних)
├── tmp/ <-- Тимчасові файли
└── usr/ <-- Користувацькі програми та утиліти

Каталог (directory) — це контейнер для файлів та інших каталогів. Користувачі настільних систем зазвичай кажуть “папка”, оскільки візуальна метафора — це паперова папка; користувачі термінала зазвичай кажуть “каталог”, оскільки це технічний термін. Концепції однакові, але версія термінала точніша, оскільки вона робить відносини батьків-нащадків видимими в кожному шляху.

Дерево починається з /, який називається кореневим каталогом. Кожен абсолютний шлях починається звідти, навіть якщо каталог, який ви використовуєте щодня, міститься набагато нижче в дереві. Ваша особиста робота зазвичай зберігається в /home/yourname/ на Linux і в /Users/yourname/ на macOS, тоді як конфігурація системи часто зберігається в /etc/, логи часто зберігаються в /var/log/, а тимчасові файли часто зберігаються в /tmp/. Kubernetes дотримується цих конвенцій: kubeadm записує статичні маніфести Pod у /etc/kubernetes/manifests/, логи kubelet та контейнерів зазвичай містяться у /var/log/, а конфігурація kubectl зазвичай читається з ~/.kube/config.

ШляхЩо це такеКухонна аналогія
/Кореневий каталог — сама верхівка дереваСама будівля — все міститься всередині неї
/home/yourname/Ваш домашній каталог — ваш особистий простірВаше особисте робоче місце на кухні
~Скорочення для вашого домашнього каталогуПрізвисько для вашого робочого місця
/etc/Файли конфігурації системиПосібник з політики ресторану та стандарти рецептів
/tmp/Тимчасові файли, які можуть очищатися автоматично залежно від політики системиСтіл для підготовки — використовується під час готування, іноді прибирається автоматично
/var/log/Лог-файли, або записи того, що відбулосяКнига історії замовлень

Символ ~ — це скорочення shell для вашого домашнього каталогу, а не каталог із назвою тильда, який ви зазвичай бачите у ls. Ця відмінність має значення, коли ви читаєте документацію. Команда, яка вказує на ~/.kube/config, означає “всередині домашнього каталогу поточного користувача знайди прихований каталог .kube, а потім прочитай файл config”. Немає значення, чи є фактичний домашній шлях користувача /home/amina, /home/yourname чи /Users/amina на macOS.

Зупиніться та подумайте: якщо два користувачі на одній і тій самій машині Linux запускають команду, яка читає ~/.kube/config, вони читають один і той самий файл чи різні файли? Відповідь — зазвичай різні файли, оскільки ~ розгортається окремо для сесії shell кожного користувача. Саме тому документація використовує ~ для особистої конфігурації, але використовує абсолютні системні шляхи, такі як /etc/kubernetes/manifests/, для конфігурації всієї машини.

КонцепціяЗначення для новачкаОпераційний наслідок
ФайлІменовані дані, що зберігаються системоюЛоги, маніфести, скрипти та нотатки — все це можна перевіряти за допомогою інструментів термінала
КаталогКонтейнер для файлів або каталогівШляхи працюють, оскільки кожен елемент має батьківське розташування
Корінь /Початок усього дерева файлової системиАбсолютні шляхи можуть знаходити файл звідусіль
Дім ~Особистий каталог поточного користувачаОсобиста конфігурація, така як налаштування shell та kubeconfig, залишається прив’язаною до користувача
DotfileПрихований файл або каталог, назва якого починається з .Важлива конфігурація може не відображатися у звичайному виводі ls

Навігація без втрати орієнтації

Розділ «Навігація без втрати орієнтації»

Коли ви відкриваєте термінал, ви завжди “стоїте” в одному каталозі, який називається вашим робочим каталогом. Термінал не показує повну карту за замовчуванням, оскільки повна карта була б занадто шумною під час кожної команди. Замість цього ви ставите конкретні запитання: де я, що тут є, і куди я хочу піти далі?

На перше запитання відповідає pwd, що розшифровується як print working directory. Вона дає вам повний абсолютний шлях до вашого поточного розташування. У кухонній аналогії pwd є відповіддю на запитання “в якій кімнаті я стою прямо зараз?”, і ця відповідь визначає, чи мають сенс відносні напрямки, такі як Documents/report.txt.

Terminal window
pwd
/home/yourname

На друге запитання відповідає ls, яка перелічує вміст каталогу. Без вказування шляху вона перелічує поточний каталог. Зі вказаним шляхом вона перелічує саме те розташування. Новачки часто ставляться до ls як до команди, яку слід запускати після того, як вони заплуталися, але краще ставитися до неї як до звичайної навігаційної звички: дивіться перед тим, як рухатися, особливо коли ви перебуваєте поблизу системних каталогів або логів з production-середовища.

Terminal window
ls
Desktop Documents Downloads Music Pictures

Опція -l просить довгий формат, який включає тип файлу, дозволи, власника, групу, розмір, часову мітку та ім’я. Вам не потрібно відразу розуміти кожен стовпець, але перший стовпець варто навчитися розпізнавати рано, оскільки він говорить вам, чи є запис файлом чи каталогом, і хто може його використовувати. Пізніше в цьому модулі ви будете розшифровувати рядки на кшталт drwxr-xr-x та -rw-r--r--.

Terminal window
ls -l
drwxr-xr-x 2 yourname yourname 4096 Mar 23 10:00 Desktop
drwxr-xr-x 3 yourname yourname 4096 Mar 23 09:45 Documents
-rw-r--r-- 1 yourname yourname 220 Mar 23 08:30 notes.txt

Третя команда навігації — cd, яка змінює ваш робочий каталог. Ви вказуєте їй місце призначення, і shell переміщує вашу сесію туди, якщо місце призначення існує і ви маєте дозвіл на вхід до нього. На відміну від відкриття папки в графічному інтерфейсі, cd не друкує повідомлення про успіх за замовчуванням. Ця мовчанка є нормальною, саме тому багато учнів поєднують cd з pwd під час набуття впевненості.

З вашого домашнього каталогу (коли там існує папка Documents):

Terminal window
cd Documents
pwd
/home/yourname/Documents
КомандаКуди вона вас приводитьАналогія
cd ~ або просто cdВаш домашній каталог”Повернутися до мого робочого місця”
cd ..На один рівень вгору, батьківський каталог”Перейти до кімнати, яка містить цю кімнату”
cd -Останній каталог, у якому ви були”Повернутися туди, де я щойно був”
cd /Кореневий каталог”Перейти на перший поверх”

Ці скорочення невеликі, але вони усувають багато перешкод. cd .. є особливо корисною, оскільки вона переміщує до батьківського каталогу, не вимагаючи від вас введення всього батьківського шляху. cd - є корисною під час усунення несправностей, оскільки ви часто перестрибуєте між каталогом проєкту та каталогом логів; вона дозволяє вам повернутися до попереднього розташування без запам’ятовування точного написання.

Terminal window
cd ~
pwd
Terminal window
cd ..
pwd
Terminal window
cd -
pwd
Terminal window
cd /
pwd

Перш ніж запустити це, який вивід ви очікуєте від останньої pwd, якщо попередньою командою була cd /? Спочатку зробіть прогноз, а потім запустіть її. Ця звичка має значення, оскільки робота в терміналі — це переважно перевірка гіпотез: ви формуєте ментальну модель того, де ви перебуваєте, запускаєте команду і порівнюєте вивід із тим, що ви очікували.

Абсолютні та відносні шляхи

Розділ «Абсолютні та відносні шляхи»

Шлях — це написаний маршрут до файлу або каталогу. Існує два типи, які ви будете використовувати постійно: абсолютні шляхи та відносні шляхи. Різниця не є суто академічною; вона вирішує, чи буде команда працювати звідусіль, чи лише з певного початкового каталогу.

Абсолютний шлях починається з кореневого каталогу / і дає повне розташування. Він подібний до повної адреси вулиці: адреса працює незалежно від того, де ви стоїте, коли її читаєте. Якщо в інструкції з усунення несправностей сказано дослідити /var/log/syslog, ви можете запустити цю команду зі свого домашнього каталогу, з /tmp або з каталогу проєкту, і шлях усе одно вказуватиме на той самий файл.

/home/yourname/Documents/report.txt

Відносний шлях починається з вашого поточного робочого каталогу. Це як сказати “через дві кімнати, потім ліворуч”; напрямки коротші, але вони залежать від того, звідки ви починаєте. Відносні шляхи відмінно підходять всередині проєкту, оскільки вони роблять команди лаконічними, але вони ризиковані у скриптах, коли скрипт може бути запущений з різних місць.

Documents/report.txt

Ось те саме місце призначення, досягнуте двома різними способами. Абсолютний шлях називає весь маршрут від /, тоді як відносний шлях працює лише тому, що shell уже перебуває в /home/yourname. Якби ваш поточний робочий каталог був /tmp, команда cd Documents шукала б /tmp/Documents, а не /home/yourname/Documents.

Terminal window
pwd
/home/yourname

Приклади шляхів — змініть yourname та назви каталогів відповідно до вашої машини:

cd /home/yourname/Documents
cd Documents
СимволЗначенняПриклад
/Кореневий каталог на початку або роздільник шляхів між іменами/home/yourname
~Ваш домашній каталог~/Documents означає /home/yourname/Documents на багатьох системах Linux
.Поточний каталог, або “тут”./script.sh означає script.sh у цьому каталозі
..Батьківський каталог, або “на один рівень вгору”../Downloads означає піднятися вище, а потім перейти в Downloads

Символ . часто з’являється під час запуску скриптів із поточного каталогу, як у ./script.sh. Shell використовує його, оскільки багато систем не виконують автоматичний пошук команд у поточному каталозі. Така поведінка запобігає випадковому виконанню програми лише тому, що вона випадково має таку саму назву, як і звичайний інструмент, і лежить у папці, де ви стоїте.

Символ .. — це найчистіший спосіб перейти до сусіднього розташування. Якщо ви перебуваєте у /home/user/projects/app/src і вам потрібен /home/user/projects/app/README.md, відносний шлях ../README.md каже “перейти до батьківського каталогу, а потім прочитати README”. Це коротше за абсолютний шлях і водночас залишається точним, оскільки ви знаєте своє поточне розташування.

Приклад відносного шляху (запускайте лише тоді, коли ваш поточний каталог є нащадком папки, що містить README.md):

cat ../README.md

Який підхід ви б обрали тут і чому: абсолютний шлях до /home/user/projects/app/README.md чи відносний шлях ../README.md? В інтерактивній сесії проєкту відносний шлях зазвичай швидший і зрозуміліший. У скрипті автоматизації, який може запускатися з кількох каталогів, абсолютний шлях або шлях, похідний від власного розташування скрипта, зазвичай безпечніший.

СитуаціяПеревагаЧому
Читання відомого системного логуАбсолютний шляхФайл має стабільне розташування для всієї машини
Переміщення всередині одного дерева проєктуВідносний шляхКоротші команди зменшують шум, поки контекст зрозумілий
Написання скрипта для інших користувачівАбсолютний або похідний шляхСкрипт не повинен залежати від поточного каталогу того, хто його викликає
Посилання на особисту конфігураціюШлях ~Шлях адаптується до домашнього каталогу кожного користувача
Пояснення концепції файлової системиОбидві формиЇх порівняння будує ментальну карту учня

Читання файлів без переповнення термінала

Розділ «Читання файлів без переповнення термінала»

Коли ви навчилися вказувати шлях до файлу, наступна навичка — обрати спосіб його прочитати. Початківці часто мають спокусу використовувати одну команду для всього, але інструменти для читання файлів залежать від їхнього розміру та призначення. Коротка нотатка, довгий згенерований звіт і лог-файл, що постійно зростає, потребують різних команд.

Команда cat виводить весь файл. Її назва походить від слова «concatenate» (об’єднувати), оскільки вона може зшивати файли разом, але новачки зазвичай знайомляться з нею як зі способом вивести вміст файлу в термінал. Вона чудово підходить для невеликих файлів, де корисно бачити весь вміст одразу, наприклад, для коротких нотаток, фрагмента конфігурації на один екран або маленького прикладу маніфесту.

Приклад (спочатку створіть notes.txt або використайте будь-який невеликий файл, який у вас є):

cat notes.txt
This is my first note.
I wrote it in the terminal!

Недоліком є те, що cat не захищає вас від величезного обсягу виводу. Якщо лог-файл містить сотні тисяч рядків, його повне виведення може ускладнити роботу з терміналом і приховати останні рядки, які ви шукали. Саме тому досвідчені інженери перед читанням ставлять собі друге запитання: мені потрібен увесь файл, лише його початок чи кінець?

Команда head показує початок файлу, за замовчуванням — десять рядків. Це корисно, коли у верхній частині файлу містяться заголовки, метадані, коментарі або перші записи у звіті. Ви можете змінити кількість рядків за допомогою параметра -n, що робить команду передбачуваною та акуратною, навіть якщо файл великий.

head long-file.txt
head -n 5 long-file.txt

Команда tail показує кінець файлу, також десять рядків за замовчуванням. Це одна з найважливіших звичок під час читання логів, оскільки багато з них додають нові записи внизу. Якщо сервіс нещодавно завершив роботу з помилкою, найновіша помилка, найімовірніше, знаходитиметься ближче до кінця, а не на початку.

tail log-file.txt
tail -n 20 log-file.txt

Подумайте: вам потрібно перевірити кілька останніх рядків у лог-файлі на 10 000 рядків. Ви використаєте команду, яка показує весь файл, чи ту, що показує лише кінець? tail створена саме для таких ситуацій, адже вона дозволяє зосередитися на найновіших подіях без необхідності прокручувати все, що сталося раніше.

ІнструментНайкраще підходить дляУникайте, колиПриклад використання
catНевеликих файлів, де важливий весь умістВеликі логи або згенерований вивідПрочитати коротку нотатку або малий файл конфігурації
headЗаголовків файлів, перших записів, початкових коментарівОстанні помилки в логах ближче до кінцяПеревірити перші рядки CSV або звіту
tailОстанніх подій у логах і файлів, що доповнюютьсяРозуміння повної структури файлуПереглянути найновіші рядки системного логу

Той самий вибір постає і під час роботи з Kubernetes. Коли ви перевіряєте доступ до кластера, прочитати короткий фрагмент kubeconfig за допомогою cat може бути цілком доречно, хоча варто бути обережним, щоб не засвітити секрети на спільному екрані. А от під час читання логів вузла або контейнера у каталозі /var/log/, використання tail зазвичай є безпечнішим, оскільки найновіші записи містять найкорисніші дані для розв’язання проблем. Сама команда проста, але рішення щодо її вибору — це питання експлуатаційної доцільності.

Terminal window
tail -n 20 /var/log/syslog
Terminal window
ls -l ~/.kube/config

Друга команда перевіряє, чи існує файл, і показує його дозволи, не виводячи на екран токени або сертифікати. Багато конфігураційних файлів містять токени, сертифікати, імена користувачів або кінцеві точки кластерів. Якщо файл може містити секрети, намагайтеся читати лише ту частину, яка вам потрібна, уникайте вставляння виводу в чати та замислюйтесь над тим, чи не існує безпечнішої команди для перевірки.

Створення каталогів, файлів і прихована конфігурація

Розділ «Створення каталогів, файлів і прихована конфігурація»

Навігація стає кориснішою, коли ви можете створювати власну невелику структуру. Команда mkdir створює каталоги, а touch створює порожній файл, якщо він ще не існує. Ці команди прості, але різниця між ними важлива: застосунки, які очікують каталог, не зможуть записувати логи у звичайний файл, а скрипти, які очікують файл, не зможуть прочитати корисний вміст із порожнього каталогу.

Terminal window
mkdir recipes

Команда mkdir створює один каталог за вказаним вами шляхом. Якщо батьківський каталог існує і ви маєте дозвіл на запис у нього, команда виконується мовчки. Якщо ж батьківського шляху не існує, звичайна команда mkdir завершиться помилкою, оскільки вона не вигадує відсутню середню частину дерева, якщо ви її про це не попросите.

Terminal window
mkdir -p recipes/italian/pasta

Параметр -p означає «створювати батьківські каталоги за потреби». Він часто використовується в скриптах налаштування та лабораторних роботах, оскільки робить безпечним виконання команди навіть тоді, коли частина структури вже існує. Без -p створення recipes/italian/pasta завершилося б помилкою, якби каталоги recipes/ або recipes/italian/ не були створені заздалегідь.

Terminal window
touch shopping-list.txt

Команда touch створює новий порожній файл, але вона також оновлює часову мітку, якщо файл уже існує. Така подвійна поведінка корисна, але може здивувати початківців. Якщо ви очікували, що touch додасть вміст, то нічого всередині файлу не з’явиться; це скоріше схоже на те, щоб покласти на стіл чисту картку для рецептів, аніж записати сам рецепт.

Приховані файли — це файли або каталоги, імена яких починаються з крапки, наприклад, .bashrc, .zshrc, .config/, .ssh/, .gitconfig та .kube/. Вони приховані від стандартного виводу ls, оскільки конфігураційні файли є важливими, але зазвичай не потрібні під час повсякденного перегляду. Їх приховування зменшує захаращеність і знижує ймовірність того, що новачок видалить конфігурацію оболонки або SSH під час очищення звичайних документів.

Terminal window
ls
Documents Downloads Music
Terminal window
ls -a
. .. .bashrc .config Documents Downloads Music
ФайлЩо він робить
.bashrcНалаштування для вашого термінала bash
.zshrcНалаштування для вашого термінала zsh, який часто є оболонкою за замовчуванням у macOS
.config/Каталог, що містить конфігурації застосунків
.ssh/Ключі SSH та конфігурація безпечного з’єднання
.gitconfigНалаштування ідентифікації та поведінки Git
.kube/Спільний каталог для конфігурації клієнта Kubernetes

Прихований — не означає секретний. Файл із крапкою на початку імені прихований від стандартних списків каталогів, але будь-який користувач із достатніми дозволами файлової системи все одно може його прочитати. Ця відмінність важлива для таких файлів, як .env, .ssh/config або ~/.kube/config, оскільки наявність крапки на початку імені файлу не захищає облікові дані. Захист забезпечується дозволами, обережним наданням доступу та тим, що ви не виводите конфіденційний уміст там, де не слід.

Terminal window
ls -a ~
Terminal window
ls -l ~/.kube

Зупиніться та подумайте: якщо звичайна команда ls ~ не показує .bashrc, чи працюватиме cat ~/.bashrc, коли файл існує і ви маєте дозвіл? Так, оскільки прихований статус впливає на поведінку списку під час виведення, а не на визначення шляху. До прихованого файлу все одно можна звернутися безпосередньо за його повним або відносним шляхом.

Читання рядків дозволів з ls -l

Розділ «Читання рядків дозволів з ls -l»

Дозволи файлів — це те, як UNIX-подібні системи визначають, хто і що може робити. На цьому етапі вам потрібно лише вміти читати рядок дозволів, а не змінювати його. Цієї навички достатньо для діагностики багатьох типових помилок початківців: «permission denied» (у доступі відмовлено) під час входу в каталог, скрипт, який не запускається, або конфіденційний файл, який може прочитати більше людей, ніж передбачалося.

drwxr-xr-x 2 yourname yourname 4096 Mar 23 10:00 Desktop
-rw-r--r-- 1 yourname yourname 220 Mar 23 08:30 notes.txt

Перший символ указує на тип запису. Літера d означає каталог, тоді як - позначає звичайний файл. Наступні дев’ять символів розбиті на три групи по три: дозволи для власника, дозволи для групи та дозволи для всіх інших. У кожній групі використовується r для читання, w для запису, x для виконання або входу в каталог, та -, якщо такий дозвіл відсутній.

- rw- r-- r--
| | | |
| | | └── Дозволи для інших (всіх решти)
| | └── Дозволи для групи
| └── Дозволи для власника (вас)
└── Тип файлу (- = файл, d = каталог)
ЛітераДозвілДля файлівДля каталогів
rЧитанняМожна переглядати вмістМожна переглядати список умісту
wЗаписМожна змінювати вмістМожна додавати або видаляти файли
xВиконанняМожна запускати як програмуМожна увійти в каталог за допомогою cd
-Немає дозволуНеможливо виконати цю діюНеможливо виконати цю дію

Поведінка каталогів — це та частина, яку часто упускають новачки. Дозвіл на виконання для файлу означає «можна запустити як програму», але виконання для каталогу означає «можна увійти в нього або перетинати його». Каталог може бути доступним для читання, але не для входу, або доступним для входу, але не для перегляду списку файлів, залежно від точних налаштувань бітів. Зараз вам не потрібно знати всі крайні випадки, але ви повинні розуміти, що x для каталогу не означає запуск каталогу.

-rw-r--r-- notes.txt

У цьому прикладі перший символ - означає, що notes.txt є звичайним файлом. Сегмент власника rw- означає, що власник може читати та записувати, але не виконувати його як програму. Сегмент групи r-- означає, що члени групи можуть читати, але не записувати. Сегмент для інших r-- означає, що всі решта, хто має доступ до цього шляху, також можуть його читати.

drwxr-xr-x Desktop

У цьому прикладі каталогу d означає, що запис є каталогом. Власник має rwx, тому він може переглядати список умісту, додавати або видаляти записи та входити в нього. Група та всі інші мають r-x, тому вони можуть переглядати список і входити, але не можуть додавати або видаляти там файли. Це поширений набір дозволів для каталогів, які мають бути видимими, але не доступними для запису всім підряд.

Рядок дозволівЧитання простою мовоюТипова інтерпретація
-rw-r--r--Власник може читати й записувати; група та інші можуть читатиЗвичайний несекретний текстовий файл
-rw-------Власник може читати й записувати; ніхто інший не має доступуКонфіденційний особистий файл
drwxr-xr-xВласник контролює каталог; інші можуть переглядати список і входитиЗвичайний каталог, видимий для користувачів
drwx------Лише власник може переглядати список, записувати та входитиПриватний каталог, як-от деякі сховища ключів
-rwxr-xr-xВласник може запускати та редагувати; інші можуть запускати та читатиВиконуваний скрипт або програма

Дозволи — наче ключі на кухні. Шеф-кухар може мати ключ, щоб відкривати, змінювати та реорганізовувати кожну шухляду. Су-шефу може бути дозволено читати картки з рецептами, але не замінювати їх. Відвідувачам може бути дозволено бачити вивішене меню, але не заходити в комору. Рядок дозволів стискає ці правила в коротку форму, яку ви можете швидко прочитати під час пошуку несправностей.

Terminal window
ls -l recipes/appetizers/
Terminal window
ls -ld recipes

На параметр -d у другій команді варто звернути увагу. Без нього ls -l recipes виводить список умісту каталогу recipes. З параметром -d команда виводить сам запис каталогу, включно з дозволами на нього. Коли ви з’ясовуєте, чому не можете ввійти в каталог або записати в нього дані, ls -ld часто є більш інформативною командою.

Розгорнутий приклад: Простежте шлях, перш ніж торкатися файлу

Розділ «Розгорнутий приклад: Простежте шлях, перш ніж торкатися файлу»

Найбезпечніший спосіб використання команд файлової системи — зупинитися на мить і перекласти команду звичайною мовою, перш ніж натиснути Enter. Це особливо корисно, коли команда створює, перезаписує або залежить від шляху. Початківці часто запитують, чи є запам’ятовування більшої кількості команд найшвидшим шляхом до вдосконалення, але кращою початковою навичкою є вміння коментувати, що саме команда зробить із деревом.

Сценарій вправи: ви перебуваєте у каталозі ~/kubedojo-practice, і хтось просить вас переглянути файл recipes/appetizers/bruschetta.txt. Шлях не починається з /, тому він є відносним до вашого поточного робочого каталогу. Оболонка почне з місця, де ви перебуваєте, шукатиме каталог із назвою recipes, потім каталог із назвою appetizers, і, нарешті, файл із назвою bruschetta.txt. Якщо хоча б одна з цих назв відсутня або написана з помилкою, виконання команди зупиниться на цьому кроці.

Terminal window
pwd
/home/yourname/kubedojo-practice

Приклад відносного шляху (виконайте після створення тренувального дерева у практичній вправі, або коли цей файл уже існує):

cat recipes/appetizers/bruschetta.txt

Ця команда читається чітко, якщо її перекласти: з поточного каталогу проєкту відкрити файл рецепта закуски та вивести його вміст. Якби ви натомість виконали ту саму команду зі свого домашнього каталогу, оболонка шукала б /home/yourname/recipes/appetizers/bruschetta.txt, оскільки відносний шлях починався б з іншого місця. Команда не змінилася, але змінилася початкова точка. Саме тому pwd — це не милиця для початківців; це частина процесу обмірковування.

Тепер порівняйте це з абсолютною версією. Абсолютний шлях є довшим, але оболонці не потрібен ваш поточний робочий каталог для його інтерпретації. Наведена нижче команда вказує на одне конкретне місце від кореня дерева файлової системи, тому вона може працювати з вашого домашнього каталогу, каталогу проєкту або каталогу журналів, за умови, що файл існує і права доступу дозволяють його прочитати.

Приклад абсолютного шляху — замініть yourname, щоб він відповідав вашому обліковому запису:

cat /home/yourname/kubedojo-practice/recipes/appetizers/bruschetta.txt

Жоден зі стилів не є універсально кращим. Відносний шлях легше набирати і він є зрозумілішим, коли всі вже працюють в межах одного проєкту. Абсолютний шлях є безпечнішим у документації, нотатках щодо усунення несправностей та скриптах, де початкове розташування може бути неясним. Цей компроміс постійно виникає в хмарній інженерії, тому що команда, скопійована в інструкцію з експлуатації, повинна працювати так само для наступного інженера, який використає її під час інциденту.

Той самий метод відстеження працює і для mkdir -p. Коли ви виконуєте mkdir -p kubedojo-practice/recipes/desserts, оболонка починає з поточного каталогу і просить файлову систему послідовно переконатися, що кожен вказаний каталог існує. Якщо kubedojo-practice вже існує, вона продовжує роботу. Якщо recipes існує, вона продовжує. Якщо desserts відсутній, вона створює цей кінцевий каталог. Ця опція змінює поведінку зі “створити саме цей один каталог” на “зробити цей шлях придатним для використання як дерево каталогів”.

Terminal window
mkdir -p kubedojo-practice/recipes/desserts

Ось чому mkdir -p часто зустрічається в інструкціях з налаштування. Вона позбавляє учнів від необхідності створювати кожен батьківський каталог вручну, і робить багаторазову практику менш вразливою. Якщо ви виконаєте ту саму команду ще раз, вона все одно має залишити структуру каталогів у бажаному стані. Ця властивість, за якої команду можна повторити, не викликаючи непотрібних змін, є цінною в автоматизації, хоча цей модуль лише знайомить початківців із цією концепцією.

Команда touch заслуговує на таке ж уважне прочитання, оскільки її можна неправильно зрозуміти. У лабораторній роботі touch recipes/desserts/tiramisu.txt створює порожній файл, якщо він не існує. Якщо він уже існує, команда не стирає інгредієнти; вона оновлює часову мітку файлу. Це робить touch поганою командою для додавання вмісту, але корисною командою для створення заповнювачів перед тим, як інший інструмент почне записувати в них дані.

Terminal window
touch recipes/desserts/tiramisu.txt

Коли ви переспрямовуєте вивід за допомогою >, ставки змінюються. Команда echo "Ingredients: coffee, mascarpone, ladyfingers, cocoa" > recipes/desserts/tiramisu.txt надсилає текст у файл, замінюючи попередній вміст. Це ідеально підходить для нового лабораторного файлу, оскільки ви контролюєте його вміст. У реальному конфігураційному файлі таке ж переспрямування може знищити наявні налаштування, тому варто зробити паузу, перш ніж використовувати його для чогось важливого.

Terminal window
echo "Ingredients: coffee, mascarpone, ladyfingers, cocoa" > recipes/desserts/tiramisu.txt

Зупиніться та подумайте: якщо tiramisu.txt вже містить три рядки, і ви виконаєте наведену вище команду переспрямування, скільки рядків інгредієнтів залишиться після цього? Відповідь — один, тому що > замінює вміст файлу виводом команди. У наступних модулях про термінал буде представлено переспрямування з долученням та редактори, але безпечна звичка починається тут: знати, чи команда читає, створює, замінює, чи лише змінює метадані.

Ця класифікація на “читає, створює, замінює або переміщує” також допомагає подолати страх перед командами. pwd лише зчитує ваше поточне місцезнаходження. ls зчитує метадані каталогу. cat, head та tail зчитують вміст файлів. mkdir створює каталоги. touch може створити файл або оновити часову мітку. cd змінює поточне місцезнаходження вашої оболонки, але не переміщує файли на диску. Класифікувавши команду в такий спосіб, ви зможете вирішити, наскільки обережними вам слід бути.

КомандаОсновний ефектРівень ризику для практики початківців
pwdЗчитує поточний робочий каталогДуже низький, оскільки нічого не змінює
lsЗчитує записи каталогуДуже низький, оскільки нічого не змінює
cdЗмінює розташування оболонкиНизький, оскільки не редагує файли
catВиводить вміст файлуНизький, але будьте обережні із секретами
headВиводить початок файлуНизький, з тією ж обережністю щодо секретів
tailВиводить кінець файлуНизький, особливо корисно для журналів
mkdir -pСтворює відсутні каталогиПомірний, оскільки змінює дерево
touchСтворює порожній файл або оновлює часову міткуПомірний, оскільки змінює метадані

Обережність щодо секретів у таблиці не є теоретичною. Конфігурація клієнта Kubernetes може включати дані сертифікатів, токени, назви контекстів, імена користувачів та адреси кластерів. Початківець, який виконає команду cat ~/.kube/config на екрані зі спільним доступом, може розкрити більше, ніж планував. Вам все одно потрібно знати, де лежить файл, але виведення всього його вмісту в термінал — це не завжди правильний метод перевірки.

Коли шляхи містять приховані каталоги, відстежуйте їх точно так само. Шлях ~/.kube/config починається з розгортання ~ у домашній каталог користувача, потім він входить у прихований каталог .kube і, нарешті, вказує на файл config. Крапка не ускладнює оболонці пошук .kube. Вона лише приховує каталог від стандартного виводу, і саме тому прямі команди можуть працювати навіть тоді, коли звичайний ls не показав цю назву.

Terminal window
ls -a ~
Terminal window
ls -l ~/.kube

Тут є ще один тонкий урок: шлях може бути правильним, але доступ все одно буде неможливим. Якщо шлях існує, але права доступу не дозволяють вам прочитати файл або увійти в каталог, оболонка повідомить про помилку прав доступу, а не про помилку відсутнього файлу. Ця різниця має значення під час діагностики. “No such file or directory” вказує на помилку в написанні, початкове розташування або відсутність батьківських каталогів. “Permission denied” вказує на власність, біти прав доступу або каталог на шляху, через який неможливо пройти.

Terminal window
ls -ld ~/.ssh
Terminal window
ls -l ~/.ssh

Перша команда запитує про сам каталог .ssh, тоді як друга запитує про те, що міститься всередині нього. Якщо ви не можете увійти в каталог, перевірка запису каталогу за допомогою ls -ld часто є більш корисною, ніж спроба вивести його вміст. Цей патерн поширюється і на системні каталоги, хоча вам слід бути обережними та уникати зміни файлів у /etc або /var, якщо лише лабораторна робота чи адміністратор прямо не вкажуть вам це зробити.

У роботі з Kubernetes файлова система під час налагодження часто фігурує ще до специфічних команд Kubernetes. Вузол control-plane (панелі управління) може мати статичні маніфести Pod у /etc/kubernetes/manifests/, а журнали, керовані kubelet, можуть з’являтися в /var/log/pods/ або /var/log/containers/, залежно від середовища. Навіть якщо пізніше ви використаєте kubectl logs, ментальна модель залишається такою ж: журнали — це записи, які кудись записуються, а шляхи — це те, як машина називає ці місця.

Terminal window
ls -l /etc/kubernetes/manifests/
Terminal window
tail -n 20 /var/log/syslog

Ці команди можуть не працювати на кожній персональній машині, оскільки не кожна машина є вузлом Kubernetes, і не кожен дистрибутив Linux використовує однакові імена файлів журналів. Це нормально. Урок полягає не в тому, що ви маєте запам’ятати всі можливі робочі шляхи сьогодні. Урок у тому, що коли в документації вказано шлях, ви можете визначити, чи він абсолютний, відносний, специфічний для користувача, прихований, чи це файл, каталог, або ціль, схожа на журнал.

Перш ніж іти далі, попрактикуйтеся пояснювати одну команду вголос: tail -n 20 /var/log/syslog. Хороший переклад — “починаючи з кореневого каталогу, перейдіть до var, потім до log, а потім прочитайте найновіші двадцять рядків з syslog”. Цей переклад містить тип шляху, маршрут, цільовий файл і причину, чому було обрано команду tail. Якщо ви можете зробити такий переклад, ви більше не просто копіюєте символи термінала.

У цьому перекладі є ще один рівень: кожен шлях має контрольні точки. Для /var/log/syslog оболонці потрібно, щоб існував /, потім var, потім log, і, нарешті, сам файл. Для recipes/appetizers/bruschetta.txt їй потрібно, щоб поточний каталог був тим, про який ви думаєте, потім recipes, потім appetizers, а потім кінцевий файл. Коли команда завершується невдало, ці контрольні точки дають вам план налагодження замість того, щоб залишати вас із непевним відчуттям, що “термінал зламався”.

Перша контрольна точка — це ваша початкова точка, тому pwd є першою командою для виправлення, коли відносний шлях не працює. Якщо початкова точка неправильна, кожен відносний шлях після неї також буде неправильним. Друга контрольна точка — це кожен батьківський каталог, який ви можете перевіряти за допомогою ls по одному рівню за раз. Остання контрольна точка — це сама ціль, де ви вирішуєте, чи має це бути файл, каталог або прихована назва, для відображення якої потрібна команда ls -a.

Terminal window
pwd
ls
ls recipes
ls recipes/appetizers

Ці чотири команди є навмисно простими. Вони самі по собі нічого не виправляють, але вони перетворюють плутанину на докази. Якщо ls recipes завершується з помилкою, проблема криється поблизу кореня проєкту. Якщо ls recipes/appetizers працює, але cat recipes/appetizers/bruschetta.txt ні, то батьківські каталоги, ймовірно, правильні, а уваги заслуговують ім’я кінцевого файлу або його права доступу. Якісне усунення несправностей у терміналі часто полягає в такому звуженні кола пошуку.

Таке ж звуження допомагає з проблемами прав доступу. Припустімо, шлях існує, але спроба прочитати кінцевий файл завершується помилкою “Permission denied”. Ви можете оглянути файл за допомогою ls -l, якщо можете дістатися до нього, і ви можете перевірити батьківські каталоги за допомогою ls -ld, якщо проблема полягає у вході в каталог по цьому шляху. Відсутність біта читання на файлі — це не те саме, що відсутність біта виконання на батьківському каталозі, хоча обидва можуть завадити вам отримати корисний вміст.

Terminal window
ls -ld recipes
ls -ld recipes/appetizers
ls -l recipes/appetizers/bruschetta.txt

Зауважте, що цей метод контрольних точок не вимагає використання складних інструментів. У ньому використовуються лише ті команди, які ви вже вивчили, але вони застосовуються в діагностичному порядку. У цьому полягає різниця між запам’ятовуванням команд і операційними навичками. Завчена команда дає вам одну спробу; ментальна модель дає вам наступне запитання, коли перша спроба виявляється невдалою.

Ви також можете використовувати контрольні точки, щоб уникнути випадкових записів. Перш ніж створювати файл за допомогою touch або замінювати вміст за допомогою >, виконайте pwd та ls, щоб підтвердити місце призначення. У лабораторній роботі для початківців найгірша помилка — це зазвичай безлад у практичному каталозі. У професійній роботі запис за неправильним шляхом може перезаписати конфігураційний файл, створити структуру каталогів не в тому місці або змусити скрипт записувати журнали туди, де їх ніхто не очікує знайти.

Ця обережність не покликана зробити термінал небезпечним у використанні. Вона має на меті зробити його відкритим для перевірки. Графічний файловий браузер захищає вас, показуючи контекст візуально; термінал захищає вас, роблячи кожну команду явною. Щойно ви навчитеся читати ці команди як операції зі шляхами, ви отримаєте форму контролю, яка переноситься безпосередньо на віддалені сервери, системи збирання, журнали CI та вузли Kubernetes, де немає графічного інтерфейсу.

Коли це не застосовується

Розділ «Коли це не застосовується»

Ці команди є фундаментом, але це не весь всесвіт керування файлами. Графічні файлові браузери все ще корисні для візуального огляду, роботи з перетягуванням (drag-and-drop) та попереднього перегляду медіафайлів. Інтегровані середовища розробки (IDE) краще підходять для редагування проєктів із багатьма файлами. Інструменти пошуку, такі як find, grep та rg, стають більш корисними, коли кількість файлів зростає настільки, що їх стає неможливо переглянути за допомогою ls.

Патерн полягає в тому, щоб використовувати термінал, коли важливі точність, повторюваність, віддалений доступ або автоматизація. Використовуйте pwd, ls, cd, cat, head, tail, mkdir і touch, коли вам потрібна надійна команда, яку ви можете повторити, вставити в нотатки або використати через SSH на сервері. Використовуйте графічний інструмент, коли завдання має дослідницький характер, а на машині доступне середовище робочого столу.

Використовуйте цеКолиЧому це працює
Навігація в терміналіВам потрібні точні шляхи або віддалений доступКоманди працюють через SSH і їх можна повторювати
Файловий браузер з графічним інтерфейсомВам потрібен візуальний попередній перегляд або перетягуванняІнтерфейс оптимізовано для перегляду медіафайлів людиною
cat, head, tailВам потрібен швидкий перегляд текстуВони легкі й доступні на більшості UNIX-подібних систем
Спеціалізовані пошукові інструментиВам потрібно знайти вміст у багатьох файлахВиведення списку каталогів по одному стає занадто повільним

Антипатерн — це вважати, що один інструмент підходить для будь-якої роботи. Виведення величезного журналу за допомогою cat, ручне клацання на сервері через віддалений робочий стіл або використання відносних шляхів у скрипті без контролю над початковим каталогом — усе це є наслідком ігнорування форми завдання. Краща звичка — запитати себе: я щось шукаю, щось перевіряю, створюю структуру чи діагностую доступ?

Коли використовувати це замість альтернатив

Розділ «Коли використовувати це замість альтернатив»

Для швидкого прийняття рішення почніть із запитання, на яке вам потрібна відповідь. Якщо вам треба дізнатися, де ви перебуваєте, використайте pwd. Якщо вам треба знати, що є поруч, використайте ls або ls -la. Якщо вам треба переміститися, використайте cd зі шляхом, який відповідає контексту. Якщо вам треба прочитати невеликий файл, використайте cat; якщо вам потрібен його початок — head; якщо потрібні останні записи журналу — tail.

Need to answer a filesystem question?
|
+-- Where am I? ------------------> pwd
|
+-- What is here? ----------------> ls
| ls -la
|
+-- How do I move? ---------------> cd <path>
| cd ..
| cd ~
|
+-- What is inside this file? ----> cat <small-file>
| head -n <count> <file>
| tail -n <count> <file>
|
+-- Who can access it? -----------> ls -l <file>
ls -ld <directory>
ПотребаПерша команда для спробиБезпечніша наступна дія
Підтвердити своє місцеперебуванняpwdПорівняти шлях із командою, яку ви планували виконати
Переглянути вміст каталогуlsВикористати ls -la, коли приховані файли можуть мати значення
Перейти до відомого каталогуcd pathВиконати pwd після цього під час навчання
Прочитати крихітний файлcat fileВикористати head, якщо ви не впевнені щодо його розміру
Переглянути останні рядки логівtail -n 20 fileЗбільшити кількість рядків лише за потреби
Діагностувати права доступуls -l fileВикористати ls -ld directory для самого каталогу
  • Кореневий каталог / називається «коренем» (root), оскільки дерево каталогів росте з однієї початкової точки. На відміну від справжнього дерева, на діаграмах корінь часто малюють зверху, а гілки — під ним, тому здається, що шляхи ростуть униз від /.
  • Скорочення ~ у контексті оболонки (shell) розгортається в домашній каталог користувача. Саме тому шлях ~/.kube/config може описувати інший конкретний файл для кожного користувача, залишаючись при цьому правильною документацією.
  • Linux надає доступ до багатьох речей, які не є документами, через файлоподібні шляхи. Записи пристроїв у /dev та інформація про процеси в /proc є однією з причин того, чому звичайні файлові інструменти можуть перевіряти так багато станів системи.
  • Діагностика несправностей (troubleshooting) у Kubernetes усе ще залежить від звичайних навичок роботи з файловою системою. Маніфести статичних Pod-ів у /etc/kubernetes/manifests/, файли kubeconfig у ~/.kube/ та логи вузла у /var/log/ набагато легше досліджувати, коли шляхи стають звичними.
ПомилкаЧому це трапляєтьсяЯк це виправити
Спроба перейти (cd) у звичайний файлШлях існує, тому новачок вважає, що туди можна увійти, як у папкуВикористовуйте cat, head або tail для файлів; використовуйте cd лише для каталогів
Пропуск пробілу між командою та шляхомПід час швидкого введення команда та аргумент візуально зливаютьсяПишіть команди як дієслово плюс ціль, наприклад cd Documents, і використовуйте автодоповнення клавішею Tab
Використання зворотних скісних рисок \ у шляхах Linux або macOSПриклади для Windows використовують зворотні скісні риски, тому ця звичка переноситьсяВикористовуйте прямі скісні риски, наприклад /home/you/Documents, у Unix-подібних оболонках
Створення файлу, коли програма очікує каталогЯк touch, так і mkdir створюють імена, але тип кінцевого об’єкта відрізняєтьсяВикористовуйте mkdir для контейнерів (каталогів) і touch для порожніх файлів, а потім перевіряйте за допомогою ls -l
Втрата орієнтації у вкладених каталогахВідносні шляхи перестають відповідати ментальній моделі учняВиконайте pwd, виведіть список сусідніх файлів за допомогою ls або поверніться додому за допомогою cd ~ перед продовженням
Пропуск прихованого конфігураційного файлуЗвичайний ls навмисно приховує імена, що починаються з крапкиВиконайте ls -a або зверніться до файлу безпосередньо, наприклад cat ~/.bashrc
Виведення величезного логу за допомогою catcat запам’ятовується як команда для читання файлів, тому вона використовується для будь-якого розміруВикористовуйте tail -n 20 для останніх записів логу або head -n 20 для початку
Неправильне трактування права на виконання для каталогуЛітера x асоціюється із «запуском», що збиває з пантелику у випадку каталогівПам’ятайте, що x для каталогу означає, що ви можете ввійти до нього або перетнути його

Контрольні запитання

Розділ «Контрольні запитання»
Запитання 1: Ви читаєте документацію, яка каже вам перевірити `~/.kube/config`, але ваш термінал наразі перебуває в `/var/log/pods/`. Куди вказує `~`, і чому це тут корисно?

~ вказує на домашній каталог поточного користувача, наприклад /home/yourname у багатьох системах Linux або /Users/yourname у macOS. Поточний робочий каталог не змінює це розгортання, тому оболонка не шукає файл у /var/log/pods/. Це скорочення корисне, оскільки документація може посилатися на особисту конфігурацію Kubernetes користувача, не знаючи його точного імені облікового запису. Воно також зберігає портативність команди між машинами, де домашні каталоги мають різні префікси.

Запитання 2: Скрипт розгортання (deployment) працює лише тоді, коли він запущений з кореня проєкту, оскільки він використовує `cd config/`. На яку проблему зі шляхами покладається скрипт, і що зробило б його безпечнішим?

Скрипт покладається на відносний шлях, тому config/ розпізнається відносно того каталогу, в якому випадково опинився користувач під час виклику. Коли скрипт запускається деінде, оболонка шукає інший каталог config, і команда завершується невдачею. Безпечніший скрипт використовував би абсолютний шлях або визначав би шлях відносно власного розташування скрипта перед зміною каталогів. Ключовий висновок полягає в тому, що відносні шляхи залежать від контексту, тоді як абсолютні шляхи починаються з /.

Запитання 3: Ви завантажили проєкт, який містить файл `.env`, але звичайний `ls` його не показує. Що вам слід виконати, і якого припущення щодо безпеки варто уникати?

Виконайте ls -a, щоб включити приховані імена, які починаються з крапки. Файл прихований зі стандартних списків, оскільки файли з крапкою (dotfiles) — це зазвичай конфігурація, а не тому, що вони захищені. Вам слід уникати припущення, що .env є секретним лише тому, що він прихований. Якщо він містить облікові дані, то права доступу та обережне поводження мають більше значення, ніж крапка на початку.

Запитання 4: Ви перебуваєте в `/home/user/projects/app/src` і вам треба прочитати `/home/user/projects/app/README.md`. Яка команда з відносним шляхом спрацює, і чому їй можна віддати перевагу в інтерактивному режимі?

cat ../README.md спрацює, оскільки .. переміщує вас із src до його батьківського каталогу, app, а потім вказує на файл README.md. В інтерактивному сеансі відносний шлях коротший і його легше набрати, ніж повний абсолютний шлях. Це також зрозуміло, оскільки ви вже знаєте своє поточне розташування в межах проєкту. У скрипті ви були б обережнішими, оскільки початковий каталог може бути нестабільним.

Запитання 5: Конфіденційний файл має права доступу `-rw-r-----`, належить власнику `admin` і належить до групи `support`. Що може зробити користувач із групи `support`, і що блокує внесення змін?

Користувач із групи support може читати файл, оскільки сегмент прав доступу для групи — r--. Він не може записувати в нього, оскільки сегмент групи не містить w. Сегмент власника rw- дозволяє користувачу admin читати та змінювати файл, але ці права власника не поширюються автоматично на членів групи. Це корисна модель найменших привілеїв, коли працівникам служби підтримки потрібно перевіряти інформацію без її зміни.

Запитання 6: Лог вузла став дуже великим, і вам потрібні найновіші помилки з самого низу. Який формат команди слід обрати, і чому `cat` є поганим першим вибором?

Використайте команду, наприклад tail -n 20 /var/log/syslog, щоб термінал вивів лише найновіші рядки. cat /var/log/syslog — це поганий перший вибір, оскільки вона виводить увесь файл, що може переповнити термінал і сховати недавню помилку, яку ви шукали. tail відповідає структурі логів формату додавання записів (append-style), де нові записи пишуться в кінці. Ви можете збільшити число після -n, якщо перший перегляд виявиться замалим.

Запитання 7: Ви виконали `ls -l recipes` і бачите файли всередині каталогу, але ви хотіли дізнатися права доступу самого каталогу `recipes`. Яку команду слід використати, і що вона змінює?

Використайте ls -ld recipes. Опція -l запитує довгий формат, тоді як -d каже команді ls показати запис самого каталогу замість переліку його вмісту. Це має значення під час діагностики того, чи можете ви входити, переглядати список файлів або записувати всередині каталогу. Без -d ви можете випадково перевірити дочірні елементи та пропустити проблему з правами доступу на батьківському каталозі.

Практична вправа: Побудова вашої першої структури каталогів

Розділ «Практична вправа: Побудова вашої першої структури каталогів»

У цій вправі ви створите невеликий проєкт рецептів, здійсните навігацію по ньому, прочитаєте файли, перевірите права доступу та виявите приховані конфігураційні файли. Сценарій навмисно є звичайним, оскільки механізми залишаються тими ж самими, незалежно від того, чи це рецепт, маніфест Kubernetes, чи лог вузла. Працюйте достатньо повільно, щоб спрогнозувати вивід кожної команди перед її виконанням, а потім порівняйте відповідь термінала з вашим прогнозом.

Почніть із вашого домашнього каталогу, щоб шляхи у вправі були передбачуваними. Якщо тренувальний каталог уже існує з попереднього запуску, ви можете вибрати інше ім’я або перевірити, що вже там є, перш ніж продовжити. Наведені нижче команди є безпечними для лабораторної роботи новачка, оскільки вони виконуються лише у вашому домашньому каталозі.

Terminal window
cd ~
pwd
  1. Створити каталоги проєкту. Використайте mkdir -p, щоб команда створила кожен батьківський каталог, необхідний для вкладеної структури.
Terminal window
mkdir -p kubedojo-practice/recipes/appetizers
mkdir -p kubedojo-practice/recipes/main-courses
mkdir -p kubedojo-practice/recipes/desserts
Примітки до рішення для завдання 1

Опція -p дозволяє кожній команді створювати батьківські каталоги, які ще не існують. Після цих команд kubedojo-practice має містити каталог recipes, а recipes — містити три каталоги категорій. Якщо команда не друкує жодного виводу, це зазвичай означає, що вона виконана успішно.

  1. Перейти у проєкт та вивести його верхній рівень. Підтвердьте, що структура починається там, де ви очікували.
Terminal window
cd kubedojo-practice
ls
recipes
Примітки до рішення для завдання 2

Команда cd змінює ваш робочий каталог на тренувальний проєкт. Виконання ls після цього має показати recipes, оскільки це єдиний елемент верхнього рівня, який ви створили. Якщо ви бачите помилку, виконайте pwd і переконайтеся, що тренувальний каталог був створений у вашому домашньому каталозі.

  1. Створити файли рецептів у кожній категорії. Вони починаються як порожні файли, і це саме те, що створює touch.
Terminal window
touch recipes/appetizers/bruschetta.txt
touch recipes/main-courses/pasta-carbonara.txt
touch recipes/desserts/tiramisu.txt
Примітки до рішення для завдання 3

Кожен шлях є відносним до kubedojo-practice, тому він починається з recipes/ замість /home/.... Якщо одна з команд завершується помилкою “No such file or directory”, перевірте імена каталогів за допомогою ls recipes і пошукайте орфографічну розбіжність.

  1. Записати простий вміст у файли. Символ > перенаправляє вивід echo до цільового файлу.
Terminal window
echo "Ingredients: bread, tomatoes, basil, olive oil" > recipes/appetizers/bruschetta.txt
echo "Ingredients: pasta, eggs, pancetta, parmesan" > recipes/main-courses/pasta-carbonara.txt
echo "Ingredients: coffee, mascarpone, ladyfingers, cocoa" > recipes/desserts/tiramisu.txt
Примітки до рішення для завдання 4

Перенаправлення > замінює вміст файлу текстом, згенерованим командою echo. Тут це корисно, оскільки кожен файл є новим. У реальній роботі будьте обережні з >, тому що цей символ перезаписує наявний вміст; наступні модулі охоплять безпечніші звички редагування.

  1. Прочитати кожен файл за допомогою іншого інструмента. Файли крихітні, але суть полягає в тому, щоб попрактикуватися у свідомому виборі інструмента.
Terminal window
cat recipes/appetizers/bruschetta.txt
head recipes/main-courses/pasta-carbonara.txt
tail recipes/desserts/tiramisu.txt
Примітки до рішення для завдання 5

Усі три команди мають вивести один рядок інгредієнтів, оскільки кожен файл має лише один рядок. У більших файлах команди поводилися б інакше: cat вивів би все, head вивів би початок, а tail — кінець. Ця лабораторна робота використовує невеликі файли, щоб ви могли зосередитися на шляхах.

  1. Діагностувати права доступу для файлу та каталогу. Передбачте перший символ перед запуском кожної команди.
Terminal window
ls -l recipes/appetizers/
ls -ld recipes
Примітки до рішення для завдання 6

Запис файлу для bruschetta.txt має починатися з -, оскільки це звичайний файл. Запис для recipes має починатися з d, оскільки це каталог. Точні біти читання, запису та виконання можуть відрізнятися залежно від системних налаштувань за замовчуванням, але ви повинні вміти розділяти їх на власника, групу та інших.

  1. Виявити приховані файли у вашому домашньому каталозі. Порівняйте вивід з опцією -a та без неї.
Terminal window
ls ~
ls -a ~
Примітки до рішення для завдання 7

Друга команда повинна показати імена, що починаються з крапок, якщо ваш домашній каталог містить конфігурацію оболонки або програм. Ви можете побачити .bashrc, .zshrc, .config, .ssh, .gitconfig або інші dot-файли залежно від вашої машини. Важливий урок полягає в тому, що приховані файли все ще доступні за шляхом.

  1. Переміститися та відновити своє розташування. Використовуйте pwd після кожного переміщення, доки ментальна модель не стане відчуватися автоматичною.
Terminal window
cd recipes/desserts
pwd
cd ..
pwd
cd ~
pwd
Примітки до рішення для завдання 8

Перший pwd має закінчуватися на kubedojo-practice/recipes/desserts. Після cd .. шлях має закінчуватися на kubedojo-practice/recipes. Після cd ~ шляхом має бути ваш домашній каталог. Якщо будь-яке передбачення є неправильним, зупиніться та подумайте, яке припущення щодо відносного шляху змінилося.

Ви успішно завершили цю вправу, коли можете:

  • Перейти до вашого домашнього каталогу за допомогою cd ~.
  • Створити вкладені каталоги за допомогою mkdir -p.
  • Створити файли за допомогою touch.
  • Записати вміст у файли за допомогою echo "text" > file.
  • Прочитати файли за допомогою cat, head та tail.
  • Перевірити права доступу до файлів за допомогою ls -l.
  • Перевірити права доступу до каталогів за допомогою ls -ld.
  • Переглянути приховані файли за допомогою ls -a.
  • Переміщатися за допомогою cd, cd .. та cd ~.

Наступний модуль: Модуль 0.5: Редагування файлів — Дізнайтеся, як додавати реальний вміст у файли за допомогою текстового редактора термінала.