После запуска операционной системы с графической оболочкой мы попадаем в специальную рабочую область, которую часто называют "рабочий стол". Это центральная точка входа, откуда через разные пункты меню начинается работа, запускаются разные задачи. Например, для навигации по файловой системе понадобится проводник.
В командной строке всё устроено иначе: после загрузки системы и входа, мы попадаем в режим ожидания ввода команды. Этот режим привязан к файловой системе, и мы всегда находимся внутри какой-то директории, которую называют "рабочей", working directory. Проверяется текущая директория командой pwd:
$ pwd
/Users/guest
Название команды pwd является аббревиатурой, которая расшифровывается как "print working directory". Так устроены имена многих команд, что позволяет легче и быстрее их запомнить.
По умолчанию, новая сессия командной оболочки открывается внутри домашней директории пользователя, которая у каждого пользователя своя, поэтому, в вашем случае, путь будет отличаться. В приведённом примере есть две неожиданности для тех, кто привык пользоваться Windows:
- В начале нет диска, но есть единый корневой каталог
/. Это вершина файловой системы, все остальные файлы и директории лежат внутри этого корня. - Вместо обратных слешей
\используются прямые/.
Различий между файловыми структурами операционных систем очень много на самом деле, и о них вы узнаете позже.
ls — программа, которая выводит список файлов и директорий в рабочей (текущей) директории.
$ ls
Desktop Documents Downloads Library Movies Music Pictures Public
Следующая полезная команда — cd (change directory), с помощью неё осуществляется перемещение по файловой структуре. Для этого ей нужно передать аргумент — директорию, в которую необходимо переместиться:
# Входим в директорию
$ cd Music
# Смотрим ее содержимое
Music$ ls
iTunes
# Смотрим текущую рабочую директорию
Music$ pwd
/Users/guest/Music
Путь до файла может быть либо абсолютный, либо относительный. Абсолютный путь — это полный путь начиная от корня, в нашем случае /, а относительный — это путь, начинающийся от нашей текущей рабочей директории. Выше мы указали относительный путь. Отличить их друг от друга очень легко: если первым символом в пути идет /, то это абсолютный путь, иначе — относительный. Когда используется относительный путь, команда cd внутри себя пытается вычислить абсолютный. Она берёт текущую рабочую директорию /Users/guest/ и присоединяет к ней Music. В итоге получается /Users/guest/Music. Команда cd понимает и абсолютные, и относительные пути, поэтому передавать ей можно что угодно:
<не важно в каком месте>$ cd /Users/guest/Music # Абсолютный путь
Абсолютный путь однозначно определяет адрес файла или директории в файловой системе, а относительный — нет. Относительный путь имеет смысл только вместе с текущей рабочей директорией, относительно которой он считается. При передаче абсолютного пути не имеет никакого значения какая сейчас рабочая директория. Если путь существует, то переход произойдёт. А теперь предположим, что мы находимся в директории /Users/guest/Music. Как выйти из неё и попасть снова в /Users/guest? Как минимум, мы уже знаем один способ — указать абсолютный путь и сделать cd:
Music$ cd /Users/guest
$
Способ проще - указать специальное значение .. и произойдёт переход на директорию, уровнем выше.
Music$ cd ..
$ pwd
/Users/guest
Более того, с помощью этого заполнителя можно выходить на любое количество уровней, указывая .. через разделитель:
# Выход на два уровня вверх
Music$ cd ../..
$ pwd
/Users
Кроме двух точек иногда используется одинарная точка, означающая текущую директорию. Например, вместо cd Music, можно писать cd ./Music. Оба эти выражения эквивалентны. Зачем нужна "точка", мы рассмотрим позже.
Есть и третий вариант возврата в /Users/guest из /Users/guest/Music:
Music$ cd
$
Дело в том, что команда cd, выполненная без аргументов, перебрасывает в домашную директорию текущего пользователя.
Ну и, наконец, четвёртый вариант. Домашняя директория пользователя имеет специальное обозначение — ~ (тильда), которое в момент выполнения команды заменяется на абсолютный путь. Поэтому из любого места можно сделать прямой переход в любую поддиректорию домашней директории.
<из любого места>$ cd ~/Music
Music$ pwd
/Users/guest/Music
Допустим, вы находитесь в домашней директории и необходимо посмотреть файлы в поддиректории Music. Один способ вы уже знаете, для этого нужно перейти в директорию Music и выполнить программу ls. Как обычно, есть другой путь. ls также принимает на вход аргумент — директорию, которую нужно проанализировать.
$ ls Music
iTunes
Как и в случае с cd, к аргументу ls применимы понятия абсолютных и относительных путей. Впрочем, это правило распространяется вообще на все места, где передаются пути, если не указано иное (иногда бывает, что нужно обязательно передать абсолютный путь).
Команды cd, ls и pwd составляют основу навигации по файловой структуре.
Шелл облегчает жизнь и предлагает автозавершение имён. Набирая пути можно допустить синтаксическую ошибку, или путь длинный и набирать его снова и снова просто лень. Автокомплит выполняется двойным нажатием на клавишу Tab. Поэкспериментируйте с ним.