Мы знаем адрес — теперь нужно уметь ходить

В прошлом уроке мы научились читать адреса файлов: увидели, что всё в Linux растёт из единого корня, и разобрали путь /etc/os-release. Но одно дело — понимать адрес на бумаге, и совсем другое — самому перемещаться по этому дереву. Когда вы открываете файловый менеджер в привычной системе, вы видите перед собой список папок и можете щёлкать по ним мышью. В терминале всё устроено иначе: вы не видите картинки, зато можете точно сказать системе, куда хотите попасть.

Нам нужно решить практическую задачу. Вы собираетесь завести собственные файлы и каталоги для учёбы. Прежде чем создавать их, хорошо бы понять, где вы сейчас находитесь, какие каталоги окружают это место и как из одного места перейти в другое. Для этого существуют три команды, которые станут вашими постоянными спутниками: pwd показывает текущее место, ls показывает содержимое каталога, а cd переносит вас в другой каталог.

Начнём с того, что у оболочки всегда есть представление о вашем положении в дереве. Когда вы работаете в терминале, вы всегда находитесь в каком-то каталоге. Этот каталог называется текущим рабочим каталогом. Относительные пути в командах отсчитываются от этого места, даже если вы пока не задумывались об этом.

Где я?

Первый вопрос, который возникает, когда оказываешься в незнакомом месте, — «где я сейчас?». В терминале на него отвечает команда pwd. Название расшифровывается как print working directory, то есть «покажи рабочий каталог». Введите её:

pwd

Система выведет абсолютный путь к тому каталогу, в котором вы сейчас находитесь. Скорее всего, вы увидите что-то вроде /home/student или /home/ubuntu. Это и есть ваш домашний каталог, о котором мы говорили в прошлом уроке. Если вывод выглядит иначе, например показывает /mnt/c/Users/... или какой-то другой путь, некоторые способы запуска Ubuntu открывают терминал не в домашнем каталоге. Ниже мы освоим команду возвращения в домашний каталог.

Важно, что pwd — это команда-справочник. Она ничего не меняет и никуда не переносит. Она просто сообщает факт о вашем положении. Это самый безопасный способ свериться с реальностью, если вы перестали понимать, куда забрели.

Что здесь есть?

Теперь, когда вы знаете, где находитесь, хочется посмотреть, что вас окружает. Для этого есть команда ls. Название — сокращение от list, «перечислить». Если ввести её без дополнений, она покажет содержимое текущего каталога:

ls

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

Но что, если мы хотим увидеть содержимое не текущего каталога, а какого-то другого? Нужно передать команде путь. Помните, как мы передавали команде date формат вывода? Здесь та же идея: после имени команды можно добавить аргумент. В date аргументом был образец, а в ls аргументом будет адрес каталога, который нужно показать.

Давайте заглянем в каталог /etc, который нам уже знаком по файлу os-release. Можно передать абсолютный путь:

ls /etc

На экране появится множество названий: каталоги, файлы, всё вперемешку. Команда ls просто перечисляет объекты по алфавиту, не разделяя их на типы. Глазам поначалу будет непросто, и это нормально. Сейчас важно не запоминать все названия, а увидеть сам принцип: ls с путём показывает содержимое указанного каталога, при этом вы сами остаётесь там же, где были. Команда только посмотрела в другую комнату, но не перешла в неё. Если после этого снова ввести pwd, вы увидите тот же путь, что и до ls /etc. Это важное отличие, и мы к нему ещё вернёмся.

Переходим в другой каталог

Смотреть на чужое содержимое полезно, но иногда нужно оказаться внутри. Для перехода в другой каталог есть команда cd. Название — от change directory, «сменить каталог». После cd нужно указать, куда вы хотите попасть.

Давайте перейдём в /etc — тот самый каталог, который только что рассматривали:

cd /etc

Внешне ничего не произошло: сама cd не напечатала сообщение об успехе, а Bash показала новое приглашение. Но это не значит, что ничего не случилось. Проверьте себя командой pwd:

pwd

Теперь она покажет /etc. Вы сменили текущий каталог. А если теперь ввести ls без аргументов, вы увидите содержимое уже не домашнего каталога, а /etc — потому что именно там вы теперь находитесь. Так работает связка из трёх команд: pwd отвечает, где вы, ls показывает, что вокруг, cd переносит вас в новое место.

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

cd /home
pwd
ls

pwd подтвердит, что вы в /home. А ls покажет список домашних каталогов. Там может быть student, ubuntu или другое имя — в зависимости от того, как называется ваша учётная запись. Если имён несколько, на компьютере могут быть другие пользовательские каталоги. Домашние каталоги служебных учётных записей не обязаны находиться в /home.

Теперь вернёмся домой. Самый простой способ — ввести cd вообще без аргументов:

cd
pwd

Команда cd без аргументов переносит вас в домашний каталог. Это как сказать таксисту «домой»: не нужно объяснять адрес, он и так понимает, куда ехать. После pwd вы снова увидите свой /home/student или /home/ubuntu.

Есть и второй способ вернуться домой — через тильду, с которой мы познакомились в прошлом уроке. Помните, ~ — это сокращение для домашнего каталога. Поэтому команда с тем же результатом выглядит так:

cd ~

Обе формы равноправны. cd без аргументов чуть короче, а cd ~ нагляднее: видно, какой именно каталог имеется в виду. Выбирайте тот способ, который вам легче запомнить.

Здесь стоит задержаться на одном уточнении про тильду. Раскрытие ~ в домашний каталог происходит только тогда, когда тильда не заключена в кавычки. Если вы напишете cd '~', оболочка воспримет это как имя каталога, который в буквальном смысле называется тильдой. Если каталога с буквальным именем ~ в текущем месте нет, команда сообщит об ошибке. Запомните это сейчас, чтобы не споткнуться позже: кавычки не дают оболочке развернуть тильду.

Дом, который всегда с вами

Теперь у нас накопилось несколько маршрутов, и пора увидеть за ними общий принцип. Мы пользовались только абсолютными путями: /etc, /home. Абсолютный путь всегда начинается с корня и ведёт к цели от самого начала дерева. Поэтому он не зависит от того, где вы сейчас находитесь. Где бы вы ни были, cd /etc приведёт вас в один и тот же каталог. Это удобно и предсказуемо.

Чтобы пользоваться относительными путями, нужно знать два специальных обозначения. Одно из них — . — означает текущий каталог. Другое — .. — означает каталог на уровень выше, то есть каталог, внутри которого находится текущий.

Давайте попробуем .. на практике. Сначала перейдите в /etc абсолютным путём:

cd /etc

Теперь вы находитесь в /etc. Если подняться на один уровень, вы попадёте в корень, потому что /etc лежит прямо внутри /. Сделаем это через ..:

cd ..
pwd

pwd покажет /. Вы поднялись наверх по дереву. Теперь из корня спустимся обратно в /etc относительным путём:

cd etc
pwd

Обратите внимание: на этот раз мы написали etc без первой косой черты. Откуда такой маршрут? Из корня. В корне есть каталог etc, поэтому относительный путь etc из корня ведёт ровно туда же, куда из любого другого места ведёт абсолютный путь /etc. Разница в точке отсчёта.

Если же вы находитесь в домашнем каталоге и введёте cd etc, система, скорее всего, ответит ошибкой. Почему? Потому что относительный путь etc ищет каталог etc внутри вашего текущего каталога, а в свежем домашнем каталоге его нет. Относительный путь живёт только в связке с вашим текущим положением. Это как если бы вы сказали «пройди в соседнюю комнату»: если вы в прихожей, соседняя комната одна, а если в спальне — совсем другая.

Две похожие команды, разный смысл

Теперь у нас достаточно сведений, чтобы развести два похожих действия, которые новички часто путают. Вы уже видели команду ls /etc, а потом — cd /etc. Выглядит одинаково, но делает разное. ls /etc показывает содержимое каталога /etc, при этом вы сами остаётесь на месте. cd /etc переносит вас внутрь этого каталога. После ls /etc ваше положение не меняется, после cd /etc меняется. Проверить это просто: всегда можно ввести pwd и убедиться, где вы.

Отсюда вырастает полезная привычка: после каждого перехода проверяйте себя. Не обязательно перед каждым вводом, но в начале знакомства с навигацией это избавит от путаницы. Связка cd и сразу pwd — ваша опора на первое время.

Есть и ещё одна ошибка, которая встретится почти наверняка. Вы уже знаете, что в /etc лежит файл os-release. Что будет, если попробовать перейти в него командой cd /etc/os-release? Система ответит ошибкой. Дело в том, что cd может перейти только в каталог. Файл — это данные, а не место, внутри которого можно оказаться. Ошибка будет выглядеть примерно как «Not a directory» — «не каталог». Это честное объяснение: вы попросили команду войти туда, куда войти нельзя.

Чтобы такие сообщения не пугали, держите в голове различие: cd работает только с каталогами. Файл можно прочитать командой cat, как мы делали раньше, но в файл не «заходят». Поэтому если cd ругается на «not a directory», проверьте, не указали ли вы в конце пути файл вместо каталога.

Что мы сделали и что дальше

Давайте соберём картину целиком. У оболочки всегда есть текущий каталог. pwd показывает его абсолютным путём. ls перечисляет содержимое — либо текущего каталога, либо того, путь к которому вы передали. cd переносит вас в другой каталог: по абсолютному пути от корня, по относительному пути от текущего места или в домашний каталог, если аргумента нет.

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

Самостоятельная практика

Попробуйте выполнить небольшую прогулку, не заглядывая пока в подсказки. Начните с команды cd, чтобы оказаться в домашнем каталоге, и проверьте себя через pwd. Теперь перейдите в корень командой cd .. от домашнего каталога. Сколько шагов вам понадобится? Если вы в /home/student, то первый .. приведёт в /home, а второй — в /. Проверьте себя pwd после каждого шага.

Из корня загляните в ls и найдите знакомое название etc. Перейдите в etc относительным путём. Теперь вернитесь домой одним из двух способов: cd без аргументов или cd ~. Убедитесь через pwd, что вы снова дома.

Если на каком-то шаге вы потеряли нужный путь, проверьте его через pwd. Команда cd без аргументов всегда вернёт вас в домашний каталог, и можно начать маршрут заново. Это не сбой системы, а обычная тренировка ориентирования. Через несколько повторений вы заметите, что уже не проверяете себя после каждого шага.

В этом уроке мы освоили три команды навигации. Команда pwd показывает текущий каталог абсолютным путём, ls перечисляет содержимое текущего или указанного каталога, а cd переносит в другой каталог. Передавать путь можно абсолютно — от корня, и относительно — от текущего места. Специальные обозначения .. и . помогают подняться на уровень выше или обратиться к текущему каталогу, а cd без аргументов возвращает домой.

Важно различать похожие действия: ls /etc только показывает содержимое, не меняя вашего положения, а cd /etc меняет его. Команда cd работает только с каталогами, поэтому попытка перейти в файл вроде /etc/os-release закончится ошибкой «not a directory». Эти три команды станут опорой для всей дальнейшей работы с файлами.

Перемещаемся между каталогами без потери ориентира

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

Где вы окажетесь после перехода

Вы находитесь в каталоге /etc и собираетесь сделать несколько последовательных переходов.

12

Вы выполняете: cd .. ; pwd

22

Теперь вы в корне /. Выполняете: cd etc ; pwd. Что покажет pwd?

Вернитесь домой из глубины дерева

Вы оказались в каталоге /etc/apt/sources.list.d и хотите вернуться в домашний каталог. Запишите решение, не удаляя и не изменяя никакие файлы.

Сейчас вы находитесь в /etc/apt/sources.list.d. Напишите одну или несколько команд, которые приведут вас в домашний каталог, и объясните в двух предложениях, почему ваш способ работает. Использовать команду cd с любыми аргументами разрешено.

Маршрут от дома до корня и обратно

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

Начальное положение — ваш домашний каталог /home/student. Упорядочите шаги, чтобы сначала оказаться в корне, а затем вернуться домой.

Из /home выполнить cd .. и оказаться в /
Из /home/student выполнить cd .. и оказаться в /home
Выполнить cd
Проверить pwd и убедиться, что вы в /home/student
Проверить pwd и убедиться, что вы в /

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

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

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

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