Переносим функциональность bash в cmd.exe
Мне, как и многим из вас, работать с bash и стандартными утилитами
Linux гораздо удобнее и приятнее, чем с cmd.exe. Однако, к сожалению,
порой обстоятельства складываются так, что операционную систему выбирать
не приходится. Например, в моём случае корпоративным стандартом
является Windows 7. К счастью есть способ сделать жизнь линуксоида в
командной строке Windows комфортнее, о нём и пойдет речь ниже.
Прежде всего, при переходе из bash в cmd.exe доставляет неудобства ограниченность самой командной оболочки. Чтоб вставить текст из буфера обмена нужно тянуться к мышке, не хватает возможностей автодополнения, история хранится только в пределах одной сессии, к тому же не работает Ctrl+R и другие возможности работы с историей команд в bash.
Исправить ситуацию нам поможет clink. Это Open Source утилита расширяющая возможности cmd.exe. Вот некоторые ее фичи:
Авторы говорят, что clink протестирован только на Windows XP SP3, но я пользуюсь им уже год на Windows 7 и всё работает нормально.
Скачали. Установили. Стало лучше, теперь cmd себя ведет почти как bash. Но кое-чего по прежнему не хватает. А именно привычных unix-утилит. Таких как cat, ls, tail, diff, grep, less, sort, wget и т.д. Некоторые утилиты имеют свои Windows-аналоги, например, вместо grep можно использовать findstr, но к ним придется привыкать заново, другие же аналогов вообще не имеют.
Эту проблему нам поможет решить готовый набор программ UnxUtils. Набор включает в себя множество популярных в Unix и Linux инструментов командной строки (полный список можно посмотреть по этой ссылке) а так же несколько дополнительных программ.
В частности, к дополнительным программам относятся pclip.exe и gclip.exe предназначенные для работы с буфером обмена Windows. Например вот так:
Для того чтоб получить всё это на свою Windows-машину нужно скачать архив UnxUtils.zip, распаковать его содержимое в какой-то каталог и добавить в переменную среды PATH путь к usr\local\wbin\, т.к. именно там хранятся исполняемые файлы.
Для самых ленивых есть способ еще проще: скопируйте содержимое каталога usr\local\wbin\ из архива в каталог %WINDIR%\system32\ на вашей машине.
Внимание! Если вы решили поступить именно так, то я не рекомендую заменять системные файлы на одноименные файлы из архива без четкого понимания того, что вы делаете.
Всё! Осталось только запустить cmd и эффективно работать используя свой linux-опыт. Конечно есть и другие способы добиться того же самого результата, я описал тот, который нахожу максимально простым и удовлетворяющим все мои потребности.
Альтернативный терминал для WindowsПрежде всего, при переходе из bash в cmd.exe доставляет неудобства ограниченность самой командной оболочки. Чтоб вставить текст из буфера обмена нужно тянуться к мышке, не хватает возможностей автодополнения, история хранится только в пределах одной сессии, к тому же не работает Ctrl+R и другие возможности работы с историей команд в bash.
Исправить ситуацию нам поможет clink. Это Open Source утилита расширяющая возможности cmd.exe. Вот некоторые ее фичи:
- Автодополнение по нажатию Tab. Возможности автодополнения могут быть расширены за счет пользовательских скриптов на Lua
- Вставка текста из буфера по нажатию Ctrl-V (к сожалению Shift+Insert не работает)
- Продвинутая работа с историей команд. Поиск по истории (Ctrl-R and Ctrl-S). Поддержка таких выражений как !!, !<string> и !$
- Сохранение предыдущих сессий
Авторы говорят, что clink протестирован только на Windows XP SP3, но я пользуюсь им уже год на Windows 7 и всё работает нормально.
Скачали. Установили. Стало лучше, теперь cmd себя ведет почти как bash. Но кое-чего по прежнему не хватает. А именно привычных unix-утилит. Таких как cat, ls, tail, diff, grep, less, sort, wget и т.д. Некоторые утилиты имеют свои Windows-аналоги, например, вместо grep можно использовать findstr, но к ним придется привыкать заново, другие же аналогов вообще не имеют.
Эту проблему нам поможет решить готовый набор программ UnxUtils. Набор включает в себя множество популярных в Unix и Linux инструментов командной строки (полный список можно посмотреть по этой ссылке) а так же несколько дополнительных программ.
В частности, к дополнительным программам относятся pclip.exe и gclip.exe предназначенные для работы с буфером обмена Windows. Например вот так:
pclip | sed "s/string1/string2/g" | gclip
можно заменить все вхождения string1 на string2 в тексте хранящемся в буфере обмена.Для того чтоб получить всё это на свою Windows-машину нужно скачать архив UnxUtils.zip, распаковать его содержимое в какой-то каталог и добавить в переменную среды PATH путь к usr\local\wbin\, т.к. именно там хранятся исполняемые файлы.
Для самых ленивых есть способ еще проще: скопируйте содержимое каталога usr\local\wbin\ из архива в каталог %WINDIR%\system32\ на вашей машине.
Внимание! Если вы решили поступить именно так, то я не рекомендую заменять системные файлы на одноименные файлы из архива без четкого понимания того, что вы делаете.
Всё! Осталось только запустить cmd и эффективно работать используя свой linux-опыт. Конечно есть и другие способы добиться того же самого результата, я описал тот, который нахожу максимально простым и удовлетворяющим все мои потребности.
Обновление с Bash интерпретатором
см. практические подходы
Bash скрипт перезагрузки оборудования через telnet
Bash-скрипт для проверки, запущены ли apache, nginx, mysql и ssh на сервере
SSH — передача файлов и выполнение команд
Копирование файлов через SSH
SSH аутентификация по открытому ключу
Подключения по SSH без ввода пароля
Запуск команд на удаленном Linux-сервере через SSH
Отключение проверки ключа хоста в SSH
Запуск Команд на Удаленном Linux Сервере через SSH
В
этой заметке Вы найдете различные примеры того, как выполнять команды
на удаленном Linux сервере и получать результат локально.
Данная информация будет очень полезна, если Вы пишете Bash скрипт, который будет запускаться с локальной машины и выполнять какие-либо команды на удаленном сервере.
Вы узнаете, как :
$ ssh [user]@[server] '[command 1]; [command 2]; [command 3]'
СПОСОБ 2 :
$ ssh [user]@[server] '[command 1] | [command 2] | [command 3]'
СПОСОБ 3 :
$ ssh [user]@[server] << EOF
command 1
command 2
command 3
EOF
uname -a
grep "model name" /proc/cpuinfo
grep MemTotal /proc/meminfo
EOF
Инструментарий системного администратора: Распределенное администрирование при помощи SSH
Использование утилит plink и psftp телнет клиента PuTTy
удаленно можно из-под Windows (в bat-файле) запустить скрипт на linux машине
Данная информация будет очень полезна, если Вы пишете Bash скрипт, который будет запускаться с локальной машины и выполнять какие-либо команды на удаленном сервере.
Вы узнаете, как :
- выполнить команду на удаленном Linux сервере;
- запустить множество команд через SSH;
- выполнить локальный скрипт на удаленном Linux сервере без его копирования.
Выполнение Команд на Удаленном Linux Сервере
$ ssh [user]@[server] '[command]'Узнать uptime удаленного сервера
$ ssh root@192.168.1.1 'uptime'Перезагрузить удаленный сервер
$ ssh root@192.168.1.1 'reboot'Запуск Нескольких Команд через SSH
СПОСОБ 1 :$ ssh [user]@[server] '[command 1]; [command 2]; [command 3]'
Узнать Uptime и Disk Usage
$ ssh root@192.168.1.1 'uptime; df -h'СПОСОБ 2 :
$ ssh [user]@[server] '[command 1] | [command 2] | [command 3]'
Узнать Memory Usage и Load Average
$ ssh root@192.168.1.1 'free -m | cat /proc/loadavg'СПОСОБ 3 :
$ ssh [user]@[server] << EOF
command 1
command 2
command 3
EOF
Показать Версию Ядра, информацию о CPU и кол-во RAM
$ ssh root@192.168.1.1 << EOFuname -a
grep "model name" /proc/cpuinfo
grep MemTotal /proc/meminfo
EOF
Выполнение Локального Скрипта на Удаленном Linux Сервере
$ ssh [user]@[server] 'bash -s' < [local_script]Запустить Локальный Скрипт 'local_script.sh' на Удаленной Машине
$ ssh root@192.168.1.1 'bash -s' < local_script.shИнструментарий системного администратора: Распределенное администрирование при помощи SSH
Использование утилит plink и psftp телнет клиента PuTTy
удаленно можно из-под Windows (в bat-файле) запустить скрипт на linux машине
Комментариев нет:
Отправить комментарий