Пути к файлам
Для правильного построения аргументов команды требуется рассмотрение ещё одного понятия -- пути к файлу. Путь -- это точное позиционирование файла в файловой системе относительно ее корня (обозначаемого символом прямого слэша -- /
) или нашего в ней положения -- текущего каталога (который, напомню, символически обозначается единичной точкой -- .
).
Так, если пользователь находится в своем домашнем каталоге (абсолютный путь к нему обычно выглядит как /home/username
), то просмотреть содержимое каталога /usr/bin
он может двумя способами -- тем, который был дан в предыдущем примере, и вот так:
$ ls ../../usr/bin
Первый путь в аргументе команды ls
-- абсолютный, отсчитываемый от корневого каталога, второй -- задается относительно каталога текущего, ведь ../
-- это родительский каталог для него.
Пути в аргументах команд могут быть весьма длинными. Например, чтобы просмотреть доступные раскладки клавиатуры, в Linux нужно дать команду примерно следующего вида:
$ ls /usr/share/kbd/keymaps/i386/qwerty
И читатель вправе спросить -- неужели мне все это вводить вручную? Отнюдь -- отвечу я ему. Потому что автодополнение, о котором упоминалось по ходу разговора об именах команд, действует также для путей в их аргументах. И в данном случае обязательный ввод будет выглядеть следующим образом:
$ ls /ush k k i3 q y
Все недостающие символы будут добавлены автоматически. А такая оболочка, как zsh
, вообще позволяет (при соответствующих настройках) обойтись следующей последовательностью:
$ ls /u/s/k/k/i/q
которая нажатием табулятора сама развернётся в точный полный путь.
Ещё один способ избежать набора длинных путей к файлам -- это определение переменной PATH. Внимательный читатель, вероятно, обратил внимание, что при наборе команды путь к исполняемому её файлу не указывается. Для внутренних команд причина понятна -- они прошиты в самой оболочке. А как мы обходимся без указания путей к командам внешним? Неужели система мистическим чувством определяет, где они находятся?
Отнюдь, ни малейшей мистики, Просто каталоги, в которых находятся команды (а это, как правило, /bin
, /sbin
, /usr/bin
, /usr/sbin
и ещё некоторые) определены в качестве значений переменной PATH, о чём мы подробнее поговорим на соответствующей странице.