Пути к файлам

Для правильного построения аргументов команды требуется рассмотрение ещё одного понятия -- пути к файлу. Путь -- это точное позиционирование файла в файловой системе относительно ее корня (обозначаемого символом прямого слэша -- /) или нашего в ней положения -- текущего каталога (который, напомню, символически обозначается единичной точкой -- .).

Так, если пользователь находится в своем домашнем каталоге (абсолютный путь к нему обычно выглядит как /home/username), то просмотреть содержимое каталога /usr/bin он может двумя способами -- тем, который был дан в предыдущем примере, и вот так:

$ ls ../../usr/bin

Первый путь в аргументе команды ls -- абсолютный, отсчитываемый от корневого каталога, второй -- задается относительно каталога текущего, ведь ../ -- это родительский каталог для него.

Пути в аргументах команд могут быть весьма длинными. Например, чтобы просмотреть доступные раскладки клавиатуры, в Linux нужно дать команду примерно следующего вида:

$ ls /usr/share/kbd/keymaps/i386/qwerty

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

$ ls /ushkki3qy

Все недостающие символы будут добавлены автоматически. А такая оболочка, как zsh, вообще позволяет (при соответствующих настройках) обойтись следующей последовательностью:

$ ls /u/s/k/k/i/q

которая нажатием табулятора сама развернётся в точный полный путь.

Ещё один способ избежать набора длинных путей к файлам -- это определение переменной PATH. Внимательный читатель, вероятно, обратил внимание, что при наборе команды путь к исполняемому её файлу не указывается. Для внутренних команд причина понятна -- они прошиты в самой оболочке. А как мы обходимся без указания путей к командам внешним? Неужели система мистическим чувством определяет, где они находятся?

Отнюдь, ни малейшей мистики, Просто каталоги, в которых находятся команды (а это, как правило, /bin, /sbin, /usr/bin, /usr/sbin и ещё некоторые) определены в качестве значений переменной PATH, о чём мы подробнее поговорим на соответствующей странице.

. .