Файловая система и пути
Чтение и практика ~10 мин
Ситуация
Коллега пишет: «Порт сервиса записан в файле config.ini в папке site». Вы открыли терминал.
Где эта папка? В какой папке вы сейчас? И что делать, если команда отвечает
No such file or directory, хотя файл точно существует?
Дерево папок
В Linux все файлы лежат в одном дереве. У дерева один корень — папка / (косая черта).
Внутри корня — другие папки, внутри них — следующие:
/
├── etc настройки программ
├── root домашняя папка пользователя root
│ └── practice учебная папка этого урока
├── var
│ └── log журналы
└── home домашние папки обычных пользователей
Дисков C: и D:, как в Windows, нет: всё начинается с /. Папку в Linux часто называют
каталогом — это одно и то же.
Где я: текущая папка
Shell всегда «стоит» в какой-то папке — она называется текущей. Её показывает команда pwd:
pwd
/root
То же видно в приглашении: ~ — домашняя папка. У root она находится в /root.
Абсолютный и относительный путь
Путь — адрес файла или папки в дереве. Бывает двух видов.
Абсолютный путь начинается с / и ведёт от корня. Он одинаково работает из любой текущей папки:
/root/practice/site/config.ini.
Относительный путь начинается без / и отсчитывается от текущей папки. Если вы стоите в
/root/practice, то site/config.ini значит /root/practice/site/config.ini. Из другой папки
тот же относительный путь укажет на другое место — или в никуда.
Сравнение с городом: абсолютный путь — полный адрес «город, улица, дом»; относительный — «второй дом направо отсюда». Второе удобно, но работает, только если вы знаете, где стоите.
Несколько специальных обозначений:
.— текущая папка;..— папка уровнем выше;~— домашняя папка.
Учебная папка
Чтобы не трогать ничего важного, создадим отдельную папку ~/practice с двумя файлами.
Этот блок только создаёт папки и записывает в них две короткие строки — его можно скопировать целиком:
mkdir -p ~/practice/notes ~/practice/site
printf 'Проверить логи сервиса\nОбновить пакеты\n' > ~/practice/notes/todo.txt
printf 'port=8081\n' > ~/practice/site/config.ini
mkdir -p создаёт папки (и все недостающие по пути), printf ... > файл записывает текст в файл.
Подробно эти команды не нужны: в курсе мы почти всегда только читаем файлы.
Смотрим и переходим: ls и cd
ls показывает содержимое папки. Без параметров — текущей, с путём — указанной:
ls ~/practice
notes
site
С параметром -F к папкам добавляется /, так проще отличить их от файлов:
ls -F ~/practice
notes/
site/
cd меняет текущую папку («change directory»). Перейдём в учебную папку и проверим, где мы:
cd ~/practice
pwd
/root/practice
Теперь относительные пути отсчитываются отсюда:
ls notes
todo.txt
Подняться на уровень выше — cd ... Вернуться домой — cd без параметров.
Читаем файл: cat
cat выводит содержимое файла в терминал и ничего в нём не меняет:
cat ~/practice/notes/todo.txt
Проверить логи сервиса
Обновить пакеты
Для длинных файлов полезны head -n 5 файл (первые 5 строк) и tail -n 5 файл (последние 5).
Ими агент обычно читает большие логи, чтобы не залить экран тысячами строк.
Когда путь не найден
Ошибка в пути — самая частая у новичков и у агентов. Попробуйте перейти в папку, которой нет:
cd ~/practice/nope
bash: cd: /root/practice/nope: No such file or directory
Shell сам раскрыл ~ и показывает полный путь, который он пытался открыть. Сравните его с тем,
что ожидали. Частые причины: опечатка, другой регистр букв (Site и site — разные папки),
относительный путь из «не той» текущей папки.
Разобранный пример
Вы стоите в /root/practice/notes (перейдите туда: cd ~/practice/notes) и хотите прочитать config.ini
из соседней папки site.
- Где я?
pwd→/root/practice/notes. - Где файл?
/root/practice/site/config.ini. - Относительный путь: на уровень выше (
..), затем вsite:../site/config.ini.
cat ../site/config.ini
port=8081
Абсолютный путь cat /root/practice/site/config.ini сработал бы из любой папки.
Самостоятельный шаг
Исходное состояние: учебная папка создана, текущая папка — домашняя (cd без параметров).
- Перейдите в
~/practice/site. - Предскажите, что покажет
pwd, и проверьте. - Не выходя из этой папки, прочитайте
todo.txtотносительным путём. - Прочитайте тот же файл абсолютным путём.
- Вернитесь домой одной командой и убедитесь, что вы там.
Признак успеха: обе команды чтения выводят две строки списка дел, а в конце pwd показывает /root.
Подсказка 1
Нарисуйте путь от текущей папки до файла: сколько уровней вверх и в какую папку потом вниз?
Подсказка 2
Подъём на уровень — ... Из site до practice один подъём.
Подсказка 3
Относительный путь: ../notes/todo.txt. Абсолютный начинается с /root/practice/.
Решение — в answers/02-files-and-paths.md.
Если результат другой
No such file or directoryпри относительном пути. Выполнитеpwd: скорее всего, вы не в той папке, от которой считали путь.cat: ...: Is a directory. Вы передалиcatпапку, а не файл. Посмотрите её содержимоеlsи выберите файл.- Учебной папки нет (
ls ~/practiceвыдаёт ошибку). Блок создания не выполнился целиком — повторите его: команды безопасно запускать снова.
Проверка понимания
- Вы в
/etc. Куда укажет относительный путьpractice/notes? А абсолютный/root/practice/notes? - Агент пишет: «прочитаю конфиг» — и предлагает
cat config.ini. Что нужно знать, чтобы понять, какой файл он откроет?
Ответы — в answers/02-files-and-paths.md.
Дальше: Навигация по серверу — найти на учебном сервере файл настроек сервиса, не зная заранее, где он лежит.
Проверка автора и источники
- Воспроизведено:
pwd,ls,ls -F,cd,cd ..,cat,cat ../site/config.ini, сообщениеbash: cd: ...: No such file or directory(интерактивный bash) — Ubuntu 24.04, bash 5.2, локальный контейнер. - Учебная папка создаётся самим учеником и не зависит от образа лабы.
- Источники:
man pwd,man ls,man cat,help cd(встроенная команда bash), Filesystem Hierarchy Standard 3.0 — назначение/etc,/var/log,/root,/home.
Разбор и ответы — откройте после своей попытки
Самостоятельный шаг
cd ~/practice/site
pwd
/root/practice/site
Относительный путь из site: подняться в practice и спуститься в notes:
cat ../notes/todo.txt
Абсолютный путь работает из любой папки:
cat /root/practice/notes/todo.txt
Обе команды выводят:
Проверить логи сервиса
Обновить пакеты
Возврат домой и проверка:
cd
pwd
/root
Допустимые альтернативы: cat ~/practice/notes/todo.txt (тильда раскрывается в /root, путь фактически
абсолютный), cd ~ вместо cd.
Воспроизведено: Ubuntu 24.04, bash 5.2, локальный контейнер; пользователь root.
Проверка понимания
- Из
/etcотносительный путьpractice/notesуказывает на/etc/practice/notes— такой папки нет, будет ошибка. Абсолютный/root/practice/notesведёт в учебную папку из любого места. - Нужно знать текущую папку агента: относительный
config.iniоткроется в ней. Попросите агента использовать абсолютный путь или сначала показатьpwd— тогда понятно, какой файл он читает.
Прочитали и разобрались? Отметьте урок — прогресс сохранится в этом браузере.