От навигации к работе с файлами

В прошлом блоке мы научились ориентироваться в 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 — разные файлы.

В следующем уроке мы продолжим работать с этими объектами: научимся копировать, перемещать, переименовывать и удалять файлы и директории.

Команды создания

Соотнесите команду с действием.

mkdir
touch
mkdir -p
ls -l
Создать пустой файл или обновить время изменения существующего файла
Показать подробную информацию о файлах и директориях
Создать цепочку директорий вместе с недостающими родительскими директориями
Создать директорию

Что создаст команда

Отметьте, что получится после выполнения команд. Считайте, что вы находитесь в домашней директории.

Команда
`touch notes.txt`
`mkdir project`
`mkdir project/src/components`, если `project` ещё нет
`mkdir -p project/src/components`

Практика в терминале

Выполните в терминале небольшую тренировку.

  1. Перейдите в домашнюю директорию.
  2. Создайте директорию linux-practice.
  3. Перейдите внутрь неё.
  4. Создайте директории src, docs, config.
  5. Создайте файлы notes.txt, plan.txt, todo.txt.
  6. Создайте файл src/main.py.
  7. Проверьте через ls, что структура появилась.
Рабочая область

Введите ровно тот вывод, который напечатает программа.

Подсказка

Подсказка: Вам понадобятся `cd`, `mkdir`, `touch`, `ls`. Для файла внутри директории можно передать путь: `touch src/main.py`.

Вопросы для самоконтроля

Ответьте своими словами на вопросы по уроку.

1Чем отличается создание файла через `touch` от создания директории через `mkdir`?
2Зачем нужен флаг `-p` у `mkdir`?
3Почему `notes.txt` и `Notes.txt` в Linux считаются разными именами?

Обсуждение урока

0
Комментарии видны всем. Чтобы участвовать в обсуждении, войдите или зарегистрируйтесь.
Модерация сообщества

Пожаловаться на комментарий

Расскажите модераторам, что именно требует внимания.