Тайна вызова Less в Linux утилитах
Привет ребят. Ща покопаемся в неочевидных вещах, залезем так сказать под капот.
Знаешь же такую команду:
git log
Тут всё просто, она выводит историю коммитов. И что примечательно, в конце будет пагинация (pager):

А теперь пойдем неочевидной дорожкой и выполним:
sudo mv /usr/bin/less /usr/bin/less.bak
Ну и снова запустим git log:

Хуяк и нет больше пагинации. Сразу вывалилась простыня. О чем это говорит? А говорит это о том, что git использует внешнюю утилиту less при выводе истории коммитов, причем делает это по умолчанию.
читать первым в телеграм читать первым в макс
Но если less накрылся пиздой, git сразу вывалит простыню без пагинации. Забавно!
Давай подключим strace и подтвердим этот факт, запускаем:
strace -f -e execve git log
И видим картину маслом:

Ага, запускается less, а теперь снова перемещаем less и смотрим выхлоп strace:

Вот и прекрасно, словили ошибку error: cannot run less: No such file or directory. Но ожидаемый результат все равно получили.
Если выполнить команду echo $PAGER, то увидим, какая утилита будет использоваться для пагинации. По умолчанию less, но раз есть переменная, её можно переопределить. Давай попробуем это сделать.
apt install lolcat
export PAGER="lolcat"
git log

Иииии ебать копать:
Ну и на закуску:
export PAGER="vim -"
man ls
Команда man ls будет выполнена в vim. То есть получается что любая программа, доверяющая $PAGER, фактически запускает произвольную команду пользователя.
А это уже еще один вектор атаки из арсенала пентестеров, о котором никто не рассказывает. Так что бери на вооружение, глядишь сгодится при прохождении очередного HackBox’а.
