Поднятая целина: Осваиваем и обустраиваем консольНастроенный по дефолту терминал — унылое зрелище, отпугивающее новичков и наводящее тоску на гуру. Многое из того, что способен дать командный интерпретатор пользователю, оказывается скрыто за семью замками, а то, что остается доступным — просто неудобно. Перед тем, как консоль станет действительно сподручным инструментом, придется изрядно попотеть. Полезная инфа в приглашенииПриглашение командного интерпретатора bash формируется на основе содержимого переменной окружения PS1. Если верить man-страницам, эта переменная может содержать любые строки, а также довольно большой набор специальных управляющих символов, которые при выводе приглашения будут превращены в актуальные данные. Так, например, в дистрибутиве Ubuntu содержимое переменной PS1 выглядит так:
А при выводе на экран превращается во всем знакомую строку вида:
Нетрудно догадаться, что юзер здесь появляется за счет управляющего символа '\u', имя хоста — за счет '\h', а текущий каталог — это '\w'. Неуклюжая запись, содержащая в себе слова debian_chroot, это всего лишь индикатор того, находится ли пользователь в chroot-окружении. Такое лаконичное приглашение, конечно, удобно, но содержит далеко не всю информацию, которую bash способен отобразить. В его арсенале есть как минимум два десятка различных управляющих последовательностей, о которых многие пользователи даже не подозревают. Вот список наиболее интересных из них:
Кроме того, в PS1 вполне можно использовать текущие переменные окружения, а если учитывать, что перед каждым выводом на экран PS1 перечитывается, то туда можно засунуть такие вкусности, как, например, статус последней выполненной команды (переменная $?), чтобы знать, было ли ее исполнение успешным. Управляющий символ '\n' также допустим в PS1, поэтому приглашение к вводу можно сделать многострочным, а заодно визуально отделить его от остального текста (с помощью начальной пустой строки):
Но и это еще не все. Пример с индикатором chrootокружения показывает, что в приглашении можно использовать вывод любых сторонних приложений, а это открывает просто безграничные возможности по его кастомизации. Например, следующим образом в приглашение можно добавить данные о текущей погоде, количестве непрочитанных писем в gmail и уровне сигнала Wi-Fi:
Все это нужно поместить в конец ~/.bashrc и выставить на файл права 600, чтобы никто не смог подсмотреть пароли. Результат будет примерно таким:
Раскрашиваем консольПри работе в консоли пользователь часто получает большое количество никак не отформатированной информации. Порой выбрать в потоке данных действительно необходимое довольно сложно. Благодаря специальным непечатаемым escape-последовательностям мы можем изменить цвет и фон выводимых символов, чтобы облегчить восприятие данных. Все escape-последовательности заключаются в \[\033[ и \], а после кода цвета должна еще стоять буква m. Все цвета расписаны в справочной странице. Например, черному соответствует 0;30, зеленому — 0;32, красному — 0;31, желтому — 1;33, белому — 1;37 и так далее. Чтобы в строке приглашения выводились имя системы (символ h) и логин пользователя (u), подсвеченные красным цветом, а текущий каталог — желтым (w), в конфиге ~/.bashrc заменяем значение переменной PS1 на следующее:
При необходимости через точку с запятой можно указать цвет фона. Для этой цели используются числа от 40 (черный) до 47 (белый).
Все это также можно использовать в скриптах, хотя, чтобы не путаться, в этом случае лучше задействовать переменные, которые потом и вызывать в нужном месте. Например:
Не забываем о том, что некоторые команды поддерживают цветной вывод. Проще это решить при помощи алиасов:
И так далее. За настройки цветов каталогов и файлов с разным расширением отвечает утилита dircolors, устанавливающая переменную LC_COLORS. Чтобы получить все значения, просто вводим:
Использовав полученный результат как шаблон и сохранив его в / etc/DIR_COLORS (либо в персональном конфиге ~/.dir_colors), можно создать свою раскраску. Программистам будет очень полезен cout (code.google.com/p/cout) — небольшой скрипт на Python, подсвечивающий вывод make, gcc, svn и diff. Скрипт не требует установки, просто скачиваем и распаковываем архив, а затем создаем псевдоним:
Теперь проверяем работоспособность, используя заранее подготовленный Makefile:
Автодополнение bashОдна из самых удобных функций, имеющихся в bash — автодополнение команд по клавише <Tab>. К этому быстро привыкаешь, и кажется, что улучшить уже ничего нельзя. Однако в разных дистрибутивах автодополнение работает по-разному. Например, в современных Linux-дистрибутивах, ориентированных на обычного пользователя, bash не только дополняет саму команду, но и предлагает дополнительные параметры. Однако в Gentoo и производных (вроде Calculate Linux) такого нет. Здесь приходится помнить все параметры назубок. Как такое может быть? Некоторые разработчики дистрибутивов используют патченые версии bash? В самом простом случае файл содержит программу и указания для bash по дополнению имен файлов. Например, чтобы MPlayer предлагал пользователю в качестве автодополнения только файлы с расширением avi и mpg, пишем такое правило: complete -f -X ‘!*.@(avi|mpg|AVI|MPG/so)’ mplayer Но это самый простой вариант, ведь MPlayer имеет большое количество дополнительных параметров, а значит, ему потребуется описать шрифты, звуковые файлы, субтитры и так далее. Все это легко решается при помощи оператора case. Поддерживаются регулярные выражения, что немного упрощает создание правил. Обычно майнтейнеры конкретного пакета сами составляют списки параметров программы для bash_completion. Никаких чудес здесь нет. Например, для tar создаем такое правило:
Как видишь, мы просто перечислили все параметры, и теперь в процессе ввода bash сам выдаст этот список. Команда compgen имеет ряд параметров. Так '-b' позволяет получить список встроенных команд оболочки, '-c' — имена команд, '-v' — имена переменных и так далее. Все подробности можно найти в man-странице bash, в секциях complete и compgen. Продвинутые настройкиBash — довольно развитый командный интерпретатор, поддерживающий кучу разных настроек. Причем из этих настроек можно получить гораздо больше профита, чем из настроек поведения терминала, выполненных с помощью утилит setterm и stty. Список всех возможных опций можно посмотреть командой «shopt -p» (shopt — сокращение от Shell Options). Приведем самые интересные из них:
Согласись, это гораздо короче и удобнее, чем:
Устанавливаются опции следующим образом:
Кроме того: 1. Bash умеет сокращать путь к текущему каталогу в приглашении, если он становится слишком длинным. Для управления этой функцией предусмотрена переменная окружения PROMPT_DIRTRIM. При превышении уровня вложенности каталогов, указанного в этой переменной, путь будет сокращен. Пример использования:
2. Bash поддерживает «умный» метод помещения команд в историю, позволяя освободить ее от банальностей вроде ls. В историю не будут попадать дубликаты и команды ls, bg, fg, exit после выполнения следующей команды:
3. Bash умеет делать так, чтобы команды, выполненные с использованием sudo, автоматически попадали в файл истории root'а и не засоряли историю пользователя. Просто добавь следующую строку в файл /etc/bash.bashrc:
Индикатор прогрессаОтсутствие индикатора прогресса у большинства консольных утилит — одна из главных проблем для тех, кто часто работает в консоли. И хорошо, если под рукой есть mc, который многие так и используют, чтобы получить окошко с прогрессом. А что если это голая консоль, а тебе требуется сохранить бэкап на флешку, смонтированную в режиме sync? В этом случае тебе поможет rsync, который хоть и несколько замедляет процесс копирования, но зато обеспечивает вывод на экран шкалы прогресса. Помещаем в ~/.bashrc следующую строку:
И используем команду cpr вместо cp:
Если добавить опцию '--remove-source-files', то исходные файлы будут удалены (правда, следует помнить, что в пределах одной файловой системы mv гораздо быстрее rsync). Единственный минус — прогресс отображается для каждого файла в отдельности, общий прогресс увидеть нельзя. Чтобы увидеть ход выполнения, например, при создании архива, можно использовать утилиту pv (Pipe Viewer). Технически она представляет собой замену стандартного cat, способную не только тупо копировать байты на выход, но и показывать прогресс этой операции. Например:
Уже хорошо. Но не хватает времени завершения. Для этого надо передать утилите pv размер каталога (в байтах) с помощью ключа '-s':
Каждый раз набирать такую конструкцию не очень удобно, лучше сделать алиас. Закладки каталогов в консолиПри выполнении операций администрирования приходится часто переходить по каталогам файлового дерева. Bash поддерживает ряд сокращений (например, чтобы вернуться в домашний каталог, просто вводим «cd», в предыдущий каталог — «cd -»), но этого мало. Конечно, можно использовать псевдонимы (aliases), вроде:
Но этого все равно бывает недостаточно в том случае, если список каталогов большой. И главное — использование алиасов не очень удобно. Так, чтобы создать новый псевдоним, нужно вручную прописать его в ~/.bashrc и перезапустить терминал. Небольшой скрипт Directory Bookmarks for BASH (dirb.info/bashDirB) расширяет набор сокращений, позволяя на лету создавать закладки на нужные каталоги и переходить в них короткой командой. Скачиваем:
И добавляем в файл ~/.bashrc строку:
Теперь каждая новая сессия будет поддерживать закладки. Переходим в нужный каталог и сохраняем его в закладку:
После этого будет создан файл ~/.DirB/www, содержащий ссылку на закладку. Теперь, чтобы вернуться в указанный каталог с любого места файловой системы, достаточно ввести в консоли «g www». Аналогичным образом можно создавать любое количество закладок. Но это не все параметры. Например, параметр «p» позволяет запомнить последние перемещения и выводит их в консоли:
И, наконец, команда s1 позволит просмотреть листинг закладок. Для удаления закладки используем ключ '-r'. Также следует знать, что bashDirB модифицирует переменную PS1 таким образом, что в приглашении выводится время и номер текущего каталога в history. Если тебя это не устраивает, просто закомментируй соответствующую строку в скрипте. В качестве альтернативы bashDirB можно использовать apparix (micans.org/apparix), предлагающий три команды: bm (создание закладки), to (переход к закладке) и portal (добавление подкаталогов в закладки). Помимо bash также поддерживается csh. Пакет доступен в репозитарии Debian/Ubuntu и некоторых других дистрибутивов. ФортункиВ некоторых Linux-дистрибутивах после запуска консоли выводится небольшая цитата. Практической пользы от нее вроде и нет, но небольшое шуточное высказывание повышает настроение и настраивает на рабочий лад. Тематические пакеты с базами высказываний называются fortunes, а сами цитаты — фортунками. За несколько десятков лет в Сети появилось большое количество сборников цитат, которые легко интегрируются в консоль. Чтобы установить их в Debian или Ubuntu, достаточно ввести команду:
Последние два пакета содержат большое количество афоризмов на русском. Кроме этого, в интернете доступны и другие русскоязычные сборки фортунок, найти которые очень просто — достаточно вбить в Гугле fortunes-ru и получим несколько десятков ссылок (например, избранные цитаты с сайта linux.org.ru: lorquotes.ru/fortunes.php). После установки необходимо настроить вывод цитат в консоль. В самом простом случае достаточно прописать в конфиг ~/.bashrc всего одно слово:
Далее следует перезапустить терминал или перезагрузить файл настроек (команда «source ~/.bashrc»). Cписок выводимых категорий фортунок можно получить, введя:
После установки все фортунки помещаются в один из подкаталогов /usr/share/games/fortunes, откуда их и забирает программа. В случае необходимости при помощи ключа '-m' можно указать шаблон фортунок, которые будут выводиться. После добавления своих фортунок следует использовать утилиту strfile для создания индекса (strfile файл_фортунок). При желании можно грабить RSS-новости, твиты, прогноз погоды или котировки валют с любого сайта, выводя их в качестве фортунок. Хотя для этого мне больше нравятся аналоги fortunes — пакеты cowsay и xcowsay. Сowsay представляет собой приложение на Perl, которое выводит изображение говорящей или думающей коровы, нарисованной ASCII-символами.
По умолчанию корова не знает, что сказать, умную мысль ей надо подкинуть. Например, выведем uptime:
Или фортунку (так реализовано в Linux Mint):
Кроме стандартной коровы доступны и другие персонажи, соответствующие названию файлов в подкаталоге /usr/share/cowsay/ cows. Вызвать их можно при помощи параметра '-f'. Также ряд параметров изменяют внешний вид коровы: '-t' — усталая корова, '-p' — параноидальная, '-w' — обалдевшая и так далее. Чтобы автоматизировать процесс, заносим строку запуска в ~/.bashrc:
ЗаключениеСобственно, это все. Следуя рекомендациям, описанным в статье, ты сможешь сделать работу в консоли гораздо более удобной и продуктивной, а также освободить время для более важных занятий. Перенос директории dotfilesПеренос директории dotfiles с одного компа (IP-адрес 192.168.1.1, порт 10000) на другой при помощи netcat и pv:
В случае, если host1 работает под управлением OpenBSD, команда должна выглядеть так:
Пишем в твиттер легко и непринужденноПростая функция, отправляющая сообщения в твиттер:
Использовать так:
Не забываем про 140 символов. How much is the FISH?Новичкам в консоли следует внимательно посмотреть в сторону альтернативного командного интерпретатора под названием FISH (Friendly Interactive Shell). Его преимущества перед bash довольно внушительны. Fish на полную катушку использует возможность управления цветами терминала. Он оснащен гораздо более мощной системой автодополнения, которая выводит на экран не только списки каталогов, аргументов и имена команд, но и массу другой полезной информации (например, рядом с каждой опцией помещается описание того, что она делает). В Fish встроена очень хорошая система подсказок, так что если ты допустишь ошибку, то получишь обширное разъяснение того, что произошло, и способы обхода проблемы. Наконец, скриптовый язык Fish гораздо проще и логичнее стандартного языка sh. Info
Links
|