Внутренние и внешние команды
- Внутренняя команда - это команда, которая встроена конкретно в bash
- Внешняя команда - это исполняемый бинарный файл на диске.
Определить тип команды
type cat type type type grep
Чтобы отобразить полный тип, например если алиас указывает на внешнюю команду.
$ type -a ls ls is aliased to `ls --color=auto' ls is /usr/bin/ls ls is /bin/ls
Алиасы
alias alias catp=’cat /etc/passwd’ unalias catp
Местоположение файла
Определение местоположения исполняемого файла
which grep
Определение местоположения исполняемого файла + исходники + man
whereis grep grep: /usr/bin/grep /usr/share/man/man1/grep.1.gz /usr/share/info/grep.info.gz whereis ssh |tr ' ' '\n'
Как посмотреть список встроенных команд Bash
help
более полный список:
compgen -b
или:
enable -a
enable – Встроенная команда Linux позволяющая разрешать или запрещать встроенную команду.
Посчитать количество встроенных команд
enable | nl
После того, как bash найдет исполняемый файл, она записывает эту информацию в таблицу соответствий имени команды исполняемому файлу. Это происходит для того, чтобы в будущем сократить время поиска (не обращаться лишний раз к диску). Увидеть данную таблицу можно с помощью команды hash
root@host:~$ hash hits command 1 /bin/rm 1 /usr/bin/man 1 /bin/ls
hits - сколько раз была выполнена команда в текущей сессии. Очистить данную таблицу можно с помощью той же команды hash с ключом -r
Порядок выполнения команды в Bash
Когда пользователь вводит команду, Bash определяет, что именно запускать, по строго определённому алгоритму поиска.
Этот механизм называется Command Lookup Order.
Общий порядок поиска
Bash проверяет источники в следующем порядке:
- Alias
- Shell keyword (ключевое слово Bash)
- Function (функция)
- Builtin command (встроенная команда Bash)
- External command (внешняя программа из PATH)
- Command not found
Схема:
Alias ↓ Keyword ↓ Function ↓ Builtin ↓ PATH (/usr/bin, /bin, ...) ↓ command not found
1. Alias (наивысший приоритет)
Alias проверяется первым.
Пример:
alias ls='ls --color=auto'
Проверка:
alias ls
Проверка типа команды:
type ls
Вывод:
ls is aliased to `ls --color=auto'
Удаление alias:
unalias ls
2. Shell Keywords
Ключевые слова являются частью синтаксиса Bash.
Примеры:
if then else fi for while do done case esac function select time [[ ]]
Проверка:
type if
Вывод:
if is a shell keyword
3. Functions
Если существует функция с таким именем, выполняется она.
Пример:
ls() { echo "Fake ls" }
Выполнение:
ls
Вывод:
Fake ls
Удаление функции:
unset -f ls
4. Builtin commands
Builtin — встроенные команды Bash.
Примеры:
cd echo read export unset declare type
Проверка:
type cd
Вывод:
cd is a shell builtin
Builtin выполняются быстрее, так как не требуют создания нового процесса.
5. External commands (PATH)
Если команда не найдена ранее, Bash ищет её в переменной PATH.
Просмотр PATH:
echo $PATH
Пример:
<code> /usr/local/sbin:/usr/local/bin:/usr/sbin:/u