От навигации к работе с файлами
В прошлом блоке мы научились ориентироваться в Linux: открывать терминал, понимать строку приглашения, смотреть текущую директорию через pwd, выводить содержимое через ls и переходить между директориями через cd.
Пока мы в основном наблюдали за файловой системой: смотрели, где что лежит, переходили в /home, /etc, /var, возвращались в домашнюю директорию. Теперь пора сделать следующий шаг — начать создавать свои файлы и директории.
Это базовое действие, без которого дальше не получится нормально работать в терминале. Разработчик постоянно создаёт папки для проектов, файловые заготовки, директории для конфигов, логов, скриптов, временных экспериментов. В графическом интерфейсе это делается через правый клик и кнопку «Создать». В терминале для этого есть команды.
Но сначала договоримся о важном правиле: тренироваться будем в домашней директории пользователя, а не в системных местах.
Выполните:
cd
Команда cd без аргументов возвращает вас в домашнюю директорию. В прошлом блоке мы уже разбирали, как проверить текущее место через pwd, поэтому здесь не будем каждый раз останавливаться на этой команде.
Создаём директорию
Начнём с директории. Для создания директории в Linux используется команда mkdir.
Название можно прочитать как make directory — «создать директорию».
Создадим отдельную директорию для практики:
mkdir linux-practice
Здесь mkdir — команда, а linux-practice — аргумент. Мы говорим системе: создай директорию с таким именем.
Проверим, что она появилась:
ls
В списке должна появиться директория linux-practice. Теперь перейдём внутрь:
cd linux-practice
Мы создали отдельную учебную область и вошли в неё. Дальше все примеры будем делать здесь, чтобы не смешивать тренировочные файлы с остальными данными.
Обычно проект — это не одна директория. Внутри проекта часто есть отдельные места для исходного кода, документации, настроек, логов и временных файлов.
Создадим несколько директорий внутри нашей учебной области:
mkdir src docs config logs
Проверим:
ls
Теперь внутри linux-practice появились директории src, docs, config, logs.
Здесь тоже хорошо видно, что у команды может быть несколько аргументов. src, docs, config и logs — это четыре аргумента команды mkdir. Команда проходит по каждому имени и создаёт отдельную директорию.
Вложенные директории и флаг -p
Иногда нужно создать не одну директорию, а сразу целую цепочку.
Например, мы хотим получить такую структуру:
project/src/components
Если выполнить обычный mkdir, команда может завершиться ошибкой:
mkdir project/src/components
Причина простая: директории project и project/src ещё не существуют. По умолчанию mkdir умеет создать последнюю директорию только тогда, когда родительские директории уже есть.
Для таких случаев используют флаг -p.
mkdir -p project/src/components
Флаг -p можно читать как parents — «родительские директории». Он говорит mkdir: если по пути не хватает промежуточных директорий, создай их тоже.
Проверим по шагам:
ls project
ls project/src
Внутри project должна быть директория src, а внутри src — директория components.
Создаём файл
С директориями разобрались. Теперь создадим файл. Для этого используется команда touch.
Слово touch переводится как «коснуться». Название связано с тем, что у каждого файла есть служебная информация о времени последнего изменения. Команда touch умеет обновить это время, не трогая содержимое файла. Но для нас сейчас важнее другое: если файла с таким именем ещё нет, touch создаёт пустой файл.
Создадим файл notes.txt:
touch notes.txt
Проверим:
ls -l
Вы увидите строку примерно такого вида:
-rw-r--r-- 1 petr petr 0 May 6 12:00 notes.txt
Давайте заодно повторим, как читать такую строку.
-rw-r--r-- — права доступа. Первый символ - означает, что перед нами обычный файл, а не директория. Дальше идут права: владелец может читать и изменять файл (rw-), группа может только читать (r--), остальные пользователи тоже могут только читать (r--).
Первое petr после числа 1 — владелец файла. Второе petr — группа. В простых WSL-примерах владелец и группа часто называются одинаково, потому что для пользователя автоматически создаётся одноимённая группа.
0 — размер файла в байтах. Это значит, что файл пустой. В конце строки указано имя файла — notes.txt.
На первых шагах нам сейчас важны две вещи.
Во-первых, файл появился. Во-вторых, его размер равен 0: файл пустой. Команда touch создаёт именно пустую заготовку файла. Она не записывает внутрь текст.
Содержимое файлов мы будем подробно смотреть и редактировать в следующих уроках. Сейчас наша задача — научиться создавать сами объекты файловой системы: директории и пустые файлы.
Команда может принимать несколько аргументов. Поэтому несколько файлов можно создать одной строкой:
touch plan.txt ideas.txt todo.txt
Проверим:
ls
Теперь в директории должны быть файлы notes.txt, plan.txt, ideas.txt, todo.txt.
Здесь хорошо видно, что у команды может быть не один аргумент, а несколько. В примере выше plan.txt, ideas.txt и todo.txt — это три аргумента команды touch. Команда проходит по каждому имени и создаёт отдельный файл.
Попробуем создать файл внутри директории src, которую мы создали раньше:
touch src/main.py
Здесь мы передали команде touch не просто имя файла, а путь src/main.py. Это означает: создай файл main.py внутри директории src.
Проверим содержимое директории src:
ls src
Вы должны увидеть файл main.py.
Так начинает складываться структура проекта: есть общая директория, внутри неё поддиректории, а внутри поддиректорий — файлы.
В этом уроке мы перешли от навигации к реальной работе с файловой системой. Теперь мы не только перемещаемся по уже существующим директориям, но и создаём свои файлы и директории.
Это маленький набор команд, но на нём строится много повседневной работы. Любой проект начинается с файлов и директорий: где-то нужно создать папку для исходного кода, где-то файл для заметок, где-то директорию для настроек или логов.
mkdir создаёт директорию. Например, mkdir linux-practice создаёт директорию linux-practice в текущем месте.
touch создаёт пустой файл. Например, touch notes.txt создаёт файл notes.txt размером 0 байт. Если файл уже существует, touch не затирает его содержимое, а обновляет время изменения.
Команды могут принимать несколько аргументов: touch plan.txt ideas.txt todo.txt создаст сразу несколько файлов, а mkdir src docs config logs — сразу несколько директорий.
Путь можно передавать как аргумент: touch src/main.py создаёт файл main.py внутри директории src.
mkdir -p создаёт вложенную цепочку директорий и при необходимости создаёт недостающие родительские директории.
Имена файлов в Linux чувствительны к регистру: notes.txt и Notes.txt — разные файлы.
В следующем уроке мы продолжим работать с этими объектами: научимся копировать, перемещать, переименовывать и удалять файлы и директории.
Команды создания
Соотнесите команду с действием.
Что создаст команда
Отметьте, что получится после выполнения команд. Считайте, что вы находитесь в домашней директории.
Практика в терминале
Выполните в терминале небольшую тренировку.
- Перейдите в домашнюю директорию.
- Создайте директорию
linux-practice. - Перейдите внутрь неё.
- Создайте директории
src,docs,config. - Создайте файлы
notes.txt,plan.txt,todo.txt. - Создайте файл
src/main.py. - Проверьте через
ls, что структура появилась.
Введите ровно тот вывод, который напечатает программа.
Подсказка
Подсказка: Вам понадобятся `cd`, `mkdir`, `touch`, `ls`. Для файла внутри директории можно передать путь: `touch src/main.py`.
Вопросы для самоконтроля
Ответьте своими словами на вопросы по уроку.