May 13, 2021

Как заставить командную строку винды выполнять линукс команды?

Пролог: Спасибо моим студентам, которые не хотят изучать возможности Windows, а хотят делать "как у преподавателя на вебинаре в MacOSX", невзирая на разницу архитектур, идеологий, инструментария и многого другого.

Так вышло, что по работе вынужден переключаться между разными операционными системами (ОС). Хоть на рабочем месте и установлена Windows, часто вынужден работать с серверами под управлением Debian или CentOS, да и дома из компьютерной техники только старый макбук. Поэтому часто попадаю в ситуацию, когда бессознательно начинаю набирать линукс/мак команды внутри командной строки виндоуза. К работе в терминале довольно быстро привыкаешь, и некоторые действия правда проще выполнить в терминале, чем в графическом интерфейсе. Но вот незадача, терминалы разных ОС значительно отличаются. Поэтому мы начинаем изобретать способы единообразной работы на разных рабочих местах. Особенно сильно раздражает то, что для одних и тех же действий нужно писать разные команды. Небольшой шажок в сторону поддержки единообразия сделал Window PowerShell, но он не очень удобен в ежедневном использовании, хоть и является мощным инструментом управления виндоуз-машин. У меня появилось навязчивое желание иметь в командной строке windows возможность выполнять команды из линукса. Кто-то пришёл к MSYS, кто-то пробует WSL, кому-то хочется пробовать Babun, но очень многие открыли для себя Git bash, о нём я и хотел бы поговорить.

Git широко известен в узких кругах как система контроля версий, используется в разного рода разработках, почти повсеместно. Поэтому с большой долей вероятности git установлен на компьютере подавляющего большинства разработчиков. И это хорошо, но нам сейчас важно не это, а нам важны те приложения, которые попадают на компьютер пользователя в процессе установки git для windows. Я о git bash и всём, что к нему прилагается, а прилагается немало. Внимательный пользователь git bash мог обратить внимание, что внутри git bash благополучно работают привычные линукс-пользователям команды навигации и, например, создания файлов (а также cat, ping, echo, и многие другие). Это уже почти хорошо, но цель не достигнута, мы не открываем командную строку ОС, а вынуждены запускать стороннюю утилиту, которая очень сильно похожа на терминал. Начинаем наши раскопки. Зная о том, что любая команда терминала или командной строки - это утилита (программа) мы можем сделать вывод о том, что с установкой git bash в нашу ОС каким-то образом установились и эти программы. Недолго побродив по папке, которую мы указали при установке обнаруживаем, что внутри, по пути `<папка-установки-git>/usr/bin` благополучно лежат исполняемые файлы с очень похожими названиями: mv, mkdir, rm, ls, cp, cat, ping, echo и расширением `.exe`. Не хватает только одного: сделать так, чтобы windows "видел" эти утилиты отовсюду, и в первую очередь из командной строки. А сделать это можно слегка поправив системную переменную PATH. Идём в Мой компьютер - свойства - дополнительные - переменные среды - системные, добавляем к переменной PATH уже известный нам путь `<папка-установки-git>/usr/bin`, перезакпускаем ОС и...

Эпилог: В конце девяностых - начале двухтысячных, когда программирование ещё не было так популярно, и компьютеры ещё не вышли на тот уровень производительности, который мы видим сейчас, для определения людей, способных "давать указания компьютерам" был принят термин хакер. С развитием информационных технологий понятие хакерства значительно расширилось и приобрело негативный подтекст, указывая на злоумышленников, мошенников. Но идеология хакерства осталась прежней - использовать существующие механизмы (иногда изъяны в существующих механизмах) себе на пользу. Искать альтернативные, необычные пути решения повседневных проблем. Описанная выше ситуация - ни что иное, как хак. Не самый сложный, и совершенно точно не приносящий никакой выгоды. С другой стороны и вреда тоже не приносящий, что в нынешней жизни уже неплохо.