Содержание

Внутренние и внешние команды

  1. Внутренняя команда - это команда, которая встроена конкретно в bash
  2. Внешняя команда - это исполняемый бинарный файл на диске.

Определить тип команды

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/passwdunalias 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 проверяет источники в следующем порядке:

  1. Alias
  2. Shell keyword (ключевое слово Bash)
  3. Function (функция)
  4. Builtin command (встроенная команда Bash)
  5. External command (внешняя программа из PATH)
  6. 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