Виды команд

Процесс обработки команды:

  1. Разбиение команды на токены (подстроки, слова)
  2. В зависимости от типа команды могут произойти разные события

Какие есть типы:

  1. Команда - это исполняемый файл. В этом случае BASH запускает новый процесс и передаёт ему аргументы (ну и окружение тоже).
  2. Встроенная команда в BASH. В этом случае мы изменяем состояние интепретатора BASH тем или иным образом. Пример такой команды - cd.
  3. Функция BASH. В этом случае функция выполняется.
  4. Псевдоним. Псевдоним скрывает собою другие команды, зачастую с предустановленными аргументами.

Как узнать к какому типу относится та или иная команда?

Есть специальная команда которая называется type. Ей в качестве аргумента передаётся команда для проверки.

  • type - встроенная команда в BASH.
  • ls - псевдоним.
  • cp - исполняемый файл, расположен по пути /bin/cp.

Понятно что типы 2, 3 и 4 - это конфигурация BASH. А 1 - это “конфигурация” системы.

Как BASH запускает программы (1)?

Как BASH понимает, что cp - это /bin/cp. Есть такая специальная переменная окружения, которая называется PATH. Для её просмотра можно выполнить: echo $PATH.

Вывод у меня следующий:

/home/student/.gem/ruby/2.5.1/bin:
/opt/rubies/ruby-2.5.1/lib/ruby/gems/2.5.0/bin:
/opt/rubies/ruby-2.5.1/bin:
/usr/local/bin:
/usr/bin:
/bin:
/usr/local/games:
/usr/games:
/usr/lib/jvm/java-8-oracle/bin:
/usr/lib/jvm/java-8-oracle/db/bin:
/usr/lib/jvm/java-8-oracle/jre/bin

В простой ситуации он мог выглядеть так:

/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

PATH - это набор путей. При выполнении команды BASH проходит по данным каталогам и пытается найти программу, которая называется также как и программа в команде.

При выполнеии cp:

  1. Есть ли cp в каталоге /usr/local/bin? Нет
  2. Есть ли cp в каталоге /usr/bin? Нет
  3. Есть ли cp в каталоге /bin? Да. Вызвать.

Как узнать где конкретно лежит исполняемый файл?

Например, я хочу узнать где у меня лежит испольняемый файл ruby.

which ruby - показать путь к тому исполняемому файлу, который есть в системе.

Что происходит при применении which ко встроенным командам?

Как узнать больше о той или иной команде?

  • Пойти в поисковую систему и вбить запрос.
  • Прочитать книжку.
  • Прочитать документацию.
  • Прочитать исходный код данного продукта.

Рассмотрим способы получения документации по интересующему вопросу.

Для встроенных команд BASH

help - встроенная команда, дающая документацию по командам.

cd: cd [-L|[-P [-e]] [-@]] [каталог]

Все, надеюсь, помнят про использование []. Это в подстановках обозначает 1 из них, а в описании команды говорит об опциональном аргументе. Т.е. он может быть, а может и не быть.

[-L|[-P [-e]] [-@]]

  1. Нет ничего.
  2. -L
  3. -P
  4. -P -e
  5. -P -@
  6. -P -e -@

Получение информации по исполняемым файлам

Нормальные приложения командного интерфейса предоставляют встроенную справку по использованию. Она доступна после передачи аргумента --help приложению.

mkdir --help

… - повторение последнего элемента. Т.е. звёздочка из регулярных выражений.

Есть справочная система man, которая обычно содержит справку по использованию конкретного приложения.

man man

Ввиду того, что в справочнике man много информации есть дополнительные приложения, облегающие поиск нужной страницы документации.

apropos - поиск нужных man-страниц по подстроке.

Как работать с псевдонимами

Псевдоним - это некоторый набор команд, который будет выполнен при вызове псевдонима.

Какие есть комбинации команд:

  • ; - просто выполнить следующую команду, не зависит от результата работы предыдущей команды.
  • && - выполнить следующую команду если предыдущая завершилась успешно.
  • || - выполнить команду даже если предыдущая не удалась.

Для управления псевдонимами используется команда alias.

Для удаления псевдонима используется команда unalias.