Пора обзавестись своими папками

Два предыдущих урока дали нам карту и ноги. Мы знаем, что файлы в Linux собраны в дерево с корнем /, умеем показывать текущее место командой pwd, осматриваться командой ls и переходить между каталогами командой cd. Но пока что мы были только гостями: ходили по чужим каталогам вроде /etc и /home, смотрели на систему со стороны.

Теперь пришло время завести собственное пространство. Мы уже решили, что для учебных материалов вам понадобится личный каталог. Пусть он называется linux-files и находится в вашем домашнем каталоге. Внутри мы сразу создадим структуру, с которой будем работать дальше: место для заметок, черновиков и архива. Это будет не просто упражнение ради упражнения — именно в этих каталогах вы будете хранить файлы на протяжении всего блока.

Задача сегодняшнего урока — научиться создавать каталоги и файлы. Для этого есть две команды: mkdir делает каталог, touch создаёт новый пустой файл. Обе очень простые, но у обеих есть пара неочевидных мест, которые мы разберём на живых примерах.

Сначала проверяем, что свободно

Прежде чем создавать что-то новое, хорошая привычка — посмотреть, что уже есть. Зайдите в домашний каталог и выведите его содержимое:

cd
pwd
ls

Скорее всего, вы увидите пустой вывод или несколько служебных каталогов. Нам важно убедиться, что в домашнем каталоге ещё нет каталога с именем linux-files. Если вы ничего не увидели или в списке нет такого названия, можно спокойно двигаться дальше.

Но что делать, если linux-files уже существует? Такое возможно, если вы уже пробовали создавать что-то раньше или кто-то помогал вам с настройкой. Не удаляйте существующий каталог: в нём могут быть материалы прежней работы. Посмотреть его содержимое через ls можно, но для нового упражнения выберите свободное имя. Просто выберите другое имя. Например, linux-files-2. Всё, что дальше сказано про linux-files, будет относиться к вашему выбранному имени: если вы назвали каталог linux-files-2, подставляйте его во все команды последовательно. Главное — чтобы к началу урока у вас было одно свободное и понятное имя.

mkdir: создаём каталог

Каталог создаётся командой mkdir. Название — сокращение от make directory, то есть «создать каталог». После команды нужно указать имя или путь создаваемого каталога.

Создайте учебный каталог прямо из домашнего:

mkdir linux-files

Внешне команда ничего не сообщит. Пустой вывод после успешного выполнения — обычное поведение многих команд Linux: если нечего сообщить, они молчат. Мы привыкли к этому ещё по cd, и здесь действует то же правило. Команда выполнилась, каталог появился, но сообщать об этом вам не стали.

Проверьте себя:

ls

Теперь в списке есть linux-files. Убедиться в том, что это именно каталог, а не файл, пока можно простым способом — зайти внутрь:

cd linux-files
pwd

pwd покажет /home/student/linux-files или /home/ubuntu/linux-files — смотря как называется ваша учётная запись и какой каталог вы выбрали. Вы стоите внутри только что созданного каталога, и он пуст. Это хорошая отправная точка.

mkdir -p: вложенные каталоги за один раз

Теперь наполним учебный каталог содержимым. Нам нужны три каталога: notes для заметок, drafts для черновиков и archive для того, что потеряло актуальность. Первые три можно создать одной командой, перечислив их через пробел:

mkdir notes drafts archive

Обратите внимание: команда mkdir принимает несколько имён одновременно. Она пройдёт по списку и создаст каждый каталог. Проверьте результат:

ls

Вы увидите три названия: archive, drafts, notes. Они лежат внутри linux-files, потому что именно там вы находились, когда создавали их.

Теперь усложним задачу. Внутри drafts мы хотим завести подкаталог для черновых идей. Можно было бы сначала зайти в drafts, потом создать ideas, потом вернуться обратно. Но есть способ короче. Команда mkdir с опцией -p умеет создавать целую цепочку вложенных каталогов:

mkdir -p drafts/ideas

Что мы здесь написали? drafts/ideas — это относительный путь от текущего каталога. Сейчас вы находитесь в linux-files, поэтому путь ведёт оттуда: войти в каталог drafts, а внутри него создать каталог ideas. Опция -p говорит команде: если какой-то каталог на этом пути ещё не существует, создай и его. В нашем случае каталог drafts уже есть, поэтому команда создаст только недостающий ideas. Но если бы drafts ещё не было, -p спокойно создала бы оба.

Проверим, что получилось, заглянув внутрь drafts:

ls drafts

Теперь там есть ideas. Теперь мы применили знакомую запись пути к созданию вложенного каталога. Такой приём вы будете использовать постоянно: не обязательно заходить в каталог, чтобы создать что-то внутри него. Можно указать путь из того места, где вы стоите.

Ошибка неверного родителя

Здесь уместно разобрать ситуацию, в которую легко попасть. Представьте, что вы хотите создать каталог ideas внутри drafts, но drafts ещё не создан. Если ввести mkdir drafts/ideas без опции -p, система ответит ошибкой. Причина простая: mkdir пытается создать каталог ideas внутри drafts, но не находит родителя. В сообщении об ошибке будет что-то вроде «No such file or directory» — «нет такого файла или каталога». Это не значит, что вы всё сломали. Это значит, что команда не умеет создавать два уровня одновременно без явного разрешения. Опция -p как раз даёт такое разрешение.

Если вы получили такую ошибку, проверьте путь. Прочитайте сообщение: оно подсказывает, какого каталога не хватает. Затем либо создайте родителя отдельной командой mkdir drafts, либо повторите попытку с -p.

Файлы: touch

Каталоги — это каркас. Теперь внутрь нужны файлы, с которыми мы будем работать в следующих уроках. Для создания новых пустых файлов есть команда touch.

Давайте создадим первый учебный файл. Мы планируем завести заметку с планом, и логично положить её в каталог notes:

touch notes/plan.txt

Снова обошлось без перехода внутрь notes. Мы передали относительный путь: каталог notes, а внутри него файл plan.txt. Проверьте:

ls notes

Вы увидите plan.txt. Файл пуст, и это правильно: наполнять его мы будем позже, когда научимся записывать и редактировать текст. Сейчас задача в другом — выстроить структуру и привыкнуть к путям.

Второй файл создадим в черновиках:

touch drafts/task.txt

И проверим:

ls drafts

Теперь в drafts два объекта: каталог ideas и файл task.txt. Обратите внимание, как ls выводит их в общем списке. Цвета могут подсказывать тип объекта, но это зависит от настроек ls и терминала. Мы пока различаем их по контексту: мы сами создавали ideas как каталог, а task.txt как файл. В следующих уроках появятся способы смотреть на это точнее, но сейчас не нужно запоминать их.

Имя с пробелом

До сих пор все наши названия были аккуратными и однословными. Но вы наверняка привыкли, что в повседневной жизни файлы часто называются как-то так: «список книг», «план на неделю». В Linux такие имена тоже возможны, и сейчас самое время научиться с ними работать, чтобы не спотыкаться об них в будущем.

Представьте, что нам нужен файл с названием из двух слов: reading list. Рассмотрим запись с ошибкой. Выполнять её сейчас не нужно:

touch notes/reading list.txt

что произойдёт? Оболочка, как мы уже знаем с урока про date, разделяет текст команды на части по пробелам. После touch получатся два аргумента: notes/reading и list.txt. Команда подумает, что вы хотите создать два файла, и сделает совсем не то, что вы ожидали. В каталоге notes появится файл reading, а в текущем каталоге — файл list.txt.

Чтобы пробел стал частью имени, а не разделителем, нужно заключить весь путь или только нужную часть в кавычки. Мы уже пользовались одинарными кавычками в уроке про формат date. Здесь они работают так же:

touch 'notes/reading list.txt'

Теперь оболочка понимает, что notes/reading list.txt — это один аргумент с пробелом внутри. Проверьте:

ls notes

Вы увидите два файла: plan.txt и reading list.txt. Имя с пробелом создано.

Но на этом история не заканчивается. Пробел останется частью имени, и при каждом следующем обращении к этому файлу кавычки снова понадобятся. Когда в будущем вы захотите, например, прочитать этот файл или переименовать его, команда вида cat notes/reading list.txt без кавычек снова развалится на куски. Поэтому в примерах курса мы будем использовать имена с пробелами редко и обязательно оборачивать их в кавычки при каждом обращении.

Тот же приём работает с именами каталогов. Для нашей учебной структуры пока достаточно файла notes/reading list.txt: при дальнейшем обращении сохраняйте пробел внутри кавычек.

Собираем состояние

Урок подходит к концу, и полезно окинуть взглядом то, что мы построили. Вы находитесь в ~/linux-files. Проверьте себя:

pwd
ls

pwd должен показать домашний каталог и в конце linux-files. А ls — три каталога: archive, drafts, notes. Если вы назвали учебный каталог linux-files-2, пути будут соответствующие.

Теперь загляните внутрь каждого каталога. В notes лежат два файла: plan.txt и reading list.txt. Проверить:

ls notes

В drafts — каталог ideas и файл task.txt:

ls drafts

А archive пуст:

ls archive

Пустой вывод здесь — это не ошибка, а подтверждение: каталог создан, внутри него ничего нет. Он ждёт своего часа, который наступит в следующих уроках, когда мы начнём копировать и перемещать файлы.

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

В этом уроке мы создали собственное учебное пространство: каталог ~/linux-files, внутри него три подкаталога — notes, drafts, archive — и глубже ещё drafts/ideas. Каталоги создаются командой mkdir, а вложенные структуры — mkdir -p, которая умеет создавать недостающие родительские каталоги. Новые пустые файлы создаёт команда touch; на уже существующем файле она ничего не стирает, а только обновляет временные отметки.

Мы разобрали, почему команды обычно молчат об успехе и как читать ошибку «No such file or directory», когда родительского каталога ещё нет. Важным открытием стали имена с пробелами: в наших примерах путь к такому объекту заключён в одинарные кавычки, потому что оболочка разделяет аргументы по пробелам. В учебной структуре теперь лежат файлы notes/plan.txt, notes/reading list.txt и drafts/task.txt.

Создаём своё дерево для учебных файлов

Вы заводите в домашнем каталоге структуру для занятий Linux. Все действия выполняются в вашей учебной Ubuntu: вы создаёте пробные каталоги и пустые файлы, ничего не удаляя и не затрагивая системные папки.

Постройте дерево одной командой

Вам нужна вложенная структура: каталог projects с подкаталогом archive и внутри archive подкаталог old. Родительских каталогов пока нет. Запишите команду, которая создаст всю цепочку за один вызов mkdir.

Находясь в домашнем каталоге, создайте одной командой путь projects/archive/old. Напишите команду и коротко поясните, почему она не завершится ошибкой «No such file or directory».

Каталог или файл

Вы создали несколько объектов и хотите проверить, чем именно они стали. Решите, какая команда подходит для каждой цели.

12

Нужно создать пустой файл draft.txt внутри каталога projects. Какая команда подойдёт?

22

Вы хотите создать каталог с именем reading notes внутри projects. Какая запись сработает так, как задумано?

Создайте структуру из нескольких объектов

Вы решили навести порядок в учебном каталоге и создать сразу несколько элементов. Запишите команды по ситуации.

Находясь в домашнем каталоге, выполните такие действия: создайте каталог practice, внутри него одной командой создайте каталоги notes и drafts, затем создайте пустой файл plan.txt внутри practice/notes и пустой файл с именем todo list.txt внутри practice. Напишите три команды в правильном порядке. Если в имени есть пробел, обязательно покажите, как вы его оформляете.

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

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

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

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