tgoop.com/srv_admin/1223
Last Update:
На днях слушал вебинар, где в том числе разобрали порядок поиска и выполнения команд в интерпретаторе bash. Я вспомнил, как сам в свое время разбирался в этой теме, пытаясь понять, почему команды выполняются в неочевидном для меня порядке. Решил законспектировать этот момент и поделиться с вами.
Итак, после ввода в терминал команды, происходит следующее:
1️⃣ Проверяются алиасы. Если команда будет там найдена, то поиск остановится и она исполнится. Проверить свои алиасы можно в консоли с помощью команды:# alias
Кстати, алиас ls там скорее всего будет в таком виде: alias ls='ls --color=auto'
То есть выполнится не просто бинарник /usr/bin/ls, а именно указанный алиас с ключами.
2️⃣ Далее команда проверяется, встроена в ли она в оболочку, или нет. Если встроена, то выполнится именно она, а опять же не бинарник. Пример встроенных программ - echo, pwd и т.д.# type echo
echo is a
shell builtin
Что интересно, есть и бинарник echo, но если вы в консоли bash явно не укажете путь к нему /usr/bin/echo, выполнится именно встроенная в оболочку программа. Они на самом деле разные. У них даже ключи немного отличаются.
3️⃣ Только теперь идёт поиск бинарника в директориях, определённых в $PATH, причем не абы как, а по порядку следования этих директорий в переменной слева направо. # echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Я в свое время именно с этим разбирался, так как не мог понять, почему выполняется один из двух бинарников с одинаковыми именами, лежащие в разных директориях.
Зная всё это, можно засадить куда-то зловреда, или просто пошутить над кем-то. Например, создать пустой исполняемый файл с таким же именем, как системная утилита, например, chown. Положить файл в какую-то директорию и добавить её в начало $PATH. После этого при наборе chown в консоли или скриптах не будет происходить ровным счётом ничего. Если не знаешь всех нюансов, то так сразу не поймёшь, в чём проблема.
#bash #terminal
BY ServerAdmin.ru

Share with your friend now:
tgoop.com/srv_admin/1223