Часть 2
Системный администратор — человек ленивый. Обычно он старается сделать максимум работы, приложив минимум усилий, а для этого зачастую требуется автоматизировать многие рутинные процедуры. Например — набор полных имен хостов при создании ssh-соединения, или же длинных аргументов некоторых команд :)
Сегодня я попробую рассказать про использование такого функционала шелла как bash completion.
Итак, почти любая оболочка по умолчанию умеет добавлять пути к файлам и директориям:
bash (в моем случае) после нажатия клавиши Tab допишет имя диркетории (если его можно определить однозначно по первым набранным символам), или покажет варианты:
Но при этом некоторые шеллы умеют дополнять не только пути, но и аргументы для ряда команд. Например:
Или даже более сложные конструкции:
За данный функционал в debain-based дистрибутивах (не могу ничего сказать про остальные) отвечает содержимое пакета bash-completion.
Для того, чтобы активировать возможности completion достаточно сделать следующее:
Или добавить такой вызов в ваш .bashrc файл, после чего перелогиниться:
Скорее всего это у вас уже написано, но закомментировано.
Попробуем начать использовать одно из самых часто требующихся комплишенов — дополнение имен хостов при доступе к ним по ssh.
Для начала потребуется отключить хеширование имен хостов в ~/.ssh/known_hosts. При «коробочных» настройках строка в этом файле выглядит примерно так:
что нас не устроит.
После выставления значения HashKnownHosts No в конфиг-файле ssh-клиента (/etc/ssh/ssh_config или ~/.ssh/config), и очистки .ssh/known_hosts (иначе в него будут добавляться правильный строки только для новых хостов) мы получим удобочитаемый вариант записи в known_hosts после первой попытки залогинтся на хост:
А это, в свою очередь, позволит использовать комплишен имен при установке ssh-соединения:
Если в вашем «подчинении» более 5-10 машин это будет весьма удобно.
И, кстати, дополнение заработает не только для ssh, а еще для ряда других программ: ping, traceroute, telnet, etc. И не только по hostname, а еще и по ip-адресу.
Если эта тема окажется интересной, в следующей части могу рассказать, как настроить дополнение команд и аргументов для ваших собственных скриптов. Например, так:
Системный администратор — человек ленивый. Обычно он старается сделать максимум работы, приложив минимум усилий, а для этого зачастую требуется автоматизировать многие рутинные процедуры. Например — набор полных имен хостов при создании ssh-соединения, или же длинных аргументов некоторых команд :)
Сегодня я попробую рассказать про использование такого функционала шелла как bash completion.
Итак, почти любая оболочка по умолчанию умеет добавлять пути к файлам и директориям:
root@mould:~# mkdir very_long_dir_name
root@mould:~# cd ve[Tab]
root@mould:~# cd very_long_dir_name/
bash (в моем случае) после нажатия клавиши Tab допишет имя диркетории (если его можно определить однозначно по первым набранным символам), или покажет варианты:
root@mould:~# ls .s[Tab]
.ssh/ .subversion/
Но при этом некоторые шеллы умеют дополнять не только пути, но и аргументы для ряда команд. Например:
root@mould:~# apt-get up[Tab]
update upgrade
Или даже более сложные конструкции:
root@mould:~# apt-get install bash-[Tab]
bash-builtins bash-completion bash-doc bash-minimal bash-static
За данный функционал в debain-based дистрибутивах (не могу ничего сказать про остальные) отвечает содержимое пакета bash-completion.
Для того, чтобы активировать возможности completion достаточно сделать следующее:
root@mould:~# . /etc/bash_completion
Или добавить такой вызов в ваш .bashrc файл, после чего перелогиниться:
if [ -f /etc/bash_completion ]; then
. /etc/bash_completion
fi
Скорее всего это у вас уже написано, но закомментировано.
Попробуем начать использовать одно из самых часто требующихся комплишенов — дополнение имен хостов при доступе к ним по ssh.
Для начала потребуется отключить хеширование имен хостов в ~/.ssh/known_hosts. При «коробочных» настройках строка в этом файле выглядит примерно так:
|1|yVV33HmBny6RPYWkUB5aW+TksqQ=|f11ZL/FI9/Krfw2bqN0tBJeeq4w= ssh-rsa AAAAB3Nz__много-много-символов__2bYw==
,что нас не устроит.
После выставления значения HashKnownHosts No в конфиг-файле ssh-клиента (/etc/ssh/ssh_config или ~/.ssh/config), и очистки .ssh/known_hosts (иначе в него будут добавляться правильный строки только для новых хостов) мы получим удобочитаемый вариант записи в known_hosts после первой попытки залогинтся на хост:
mould,11.22.33.44 ssh-rsa AAAAB3NzaC1y__много-много-символов__c2EAANq6/Ww==
.А это, в свою очередь, позволит использовать комплишен имен при установке ssh-соединения:
veshij@dhcp250-203:~ $ ssh mould[Tab]
mould mould01e
Если в вашем «подчинении» более 5-10 машин это будет весьма удобно.
И, кстати, дополнение заработает не только для ssh, а еще для ряда других программ: ping, traceroute, telnet, etc. И не только по hostname, а еще и по ip-адресу.
Если эта тема окажется интересной, в следующей части могу рассказать, как настроить дополнение команд и аргументов для ваших собственных скриптов. Например, так:
root@mould:~# my_test_script --[Tab]
--help --kill-all-humans --conquer-the-world