После запуска операционной системы с графической оболочкой мы попадаем в специальную рабочую область, которую часто называют "рабочий стол". Это центральная точка входа, откуда через разные пункты меню начинается работа, запускаются разные задачи. Например, для навигации по файловой системе понадобится проводник.

В командной строке всё устроено иначе: после загрузки системы (и входа, но этот пункт мы рассмотрим позже) мы попадаем в режим ожидания ввода команды. Этот режим привязан к файловой системе. Можно сказать, что мы всегда находимся внутри какой-то директории, которую называют "рабочей", working directory. Проверяется текущая директория командой pwd:

$ pwd
/Users/guest

Кстати, название команды pwd является аббревиатурой, которая расшифровывается как "print working directory". Так устроены имена многих команд, что позволяет легче и быстрее их запомнить.

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

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

Подробнее о различиях и файловой структуре в одном из следующих уроков, сейчас же сосредоточимся на навигации.

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. Поэкспериментируйте с ним.

Для продолжения нужно перейти в курс и вступить в него.