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

В командной строке всё устроено иначе: после загрузки системы и входа, мы попадаем в режим ожидания ввода команды. Этот режим привязан к файловой системе, и мы всегда находимся внутри какой-то директории, которую называют "рабочей", 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. Поэкспериментируйте с ним.