Навигация в файловой системе
Виды команд
Процесс обработки команды:
- Разбиение команды на токены (подстроки, слова)
- В зависимости от типа команды могут произойти разные события
Какие есть типы:
- Команда - это исполняемый файл. В этом случае BASH запускает новый процесс и передаёт ему аргументы (ну и окружение тоже).
- Встроенная команда в BASH. В этом случае мы изменяем состояние интепретатора BASH тем или иным образом. Пример такой команды -
cd
. - Функция BASH. В этом случае функция выполняется.
- Псевдоним. Псевдоним скрывает собою другие команды, зачастую с предустановленными аргументами.
Как узнать к какому типу относится та или иная команда?
Есть специальная команда которая называется 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
:
- Есть ли
cp
в каталоге/usr/local/bin
? Нет - Есть ли
cp
в каталоге/usr/bin
? Нет - Есть ли
cp
в каталоге/bin
? Да. Вызвать.
Как узнать где конкретно лежит исполняемый файл?
Например, я хочу узнать где у меня лежит испольняемый файл ruby
.
which ruby
- показать путь к тому исполняемому файлу, который есть в системе.
Что происходит при применении which
ко встроенным командам?
Как узнать больше о той или иной команде?
- Пойти в поисковую систему и вбить запрос.
- Прочитать книжку.
- Прочитать документацию.
- Прочитать исходный код данного продукта.
Рассмотрим способы получения документации по интересующему вопросу.
Для встроенных команд BASH
help
- встроенная команда, дающая документацию по командам.
cd: cd [-L|[-P [-e]] [-@]] [каталог]
Все, надеюсь, помнят про использование []
. Это в подстановках обозначает 1 из них, а в описании команды говорит об опциональном аргументе. Т.е. он может быть, а может и не быть.
[-L|[-P [-e]] [-@]]
- Нет ничего.
-L
-P
-P -e
-P -@
-P -e -@
Получение информации по исполняемым файлам
Нормальные приложения командного интерфейса предоставляют встроенную справку по использованию. Она доступна после передачи аргумента --help
приложению.
mkdir --help
… - повторение последнего элемента. Т.е. звёздочка из регулярных выражений.
Есть справочная система man
, которая обычно содержит справку по использованию конкретного приложения.
man man
Ввиду того, что в справочнике man
много информации есть дополнительные приложения, облегающие поиск нужной страницы документации.
apropos
- поиск нужных man
-страниц по подстроке.
Как работать с псевдонимами
Псевдоним - это некоторый набор команд, который будет выполнен при вызове псевдонима.
Какие есть комбинации команд:
;
- просто выполнить следующую команду, не зависит от результата работы предыдущей команды.&&
- выполнить следующую команду если предыдущая завершилась успешно.||
- выполнить команду даже если предыдущая не удалась.
Для управления псевдонимами используется команда alias
.
Для удаления псевдонима используется команда unalias
.