artem
06.12.2018
13786

Nano. Настройка редактора и использование для работы с Asterisk

В данной статье будет рассматриваться такой популярный текстовый редактор как Nano, его настройка и использование подсветки синтаксиса для работы с конфигурационными фалами Asterisk.

Редактор Nano

Установка и запуск

Установим nano в CentOS:

yum -y install nano

Открыть файл с помощью nano:

nano <имя_файла>

С опцией -v можно запустить нано в режиме просмотра (без редактирования)

nano -v <имя_файла>

С опцией -B можно открыть файл с предварительным созданием бэкап файла в той же папке. Бэкап будет иметь имя как и у оригинала, но со знаком  (~)  на конце.

nano -B <имя_файла>

Запуск без подсказки по управлению (не показывает 2 строчки внизу). Удобно в случае если хочется видеть больше полезного пространства окна

nano -x <имя_файла>

Рис. 2

Назначение редактора по умолчанию

Для того что бы узнать какой используется редактор по умолчанию:

echo $EDITOR

Поменяем редактор по умолчанию на nano

export EDITOR=nano

Во время входа в систему запускается ряд сценариев для настройки среды. В CentOS используется файл для каждого объекта. Они хранятся в каталоге системного профиля, /etc/profile.d/. Тем самым для crontab может отдельно использоваться другой редактор по умолчанию в не зависимости от общих настроек.Существует двe переменных среды, которые определяют, какой редактор использовать.

cat <<EOF >>/etc/profile.d/nano.sh
export VISUAL=»nano»
export EDITOR=»nano»
<EOF

 Если пользователь хочет установить для себя редактор по умолчанию, он может быть выполнен в профиле пользователя bash

cat <<EOF >>~/.bash_profile
export VISUAL=»nano»
export EDITOR=»nano»
EOF

Некоторые из внесенных изменений не вступят в силу для текущего сеанса. Выйдите из системы (exit) и войдите в нее, чтобы активировать изменения.

Настройка

Настройки редактора производятся в файле /etc/nanorc

Вкл.Выкл. фукнкций определяется раскомментированием строк. Т.е. достаточно просто стереть символ #

Далее мы рассмотрим некоторые основные настройки:

Nano, по умолчанию, включает перенос слов. Хотя это удобно для просмотра обычных документов, но это может быть нежелательно для файлов конфигурации. Функция переноса строк:

set nowrap

Включить автоматическое подставление отступов:

set autoindent

Резервное копирование файлов. Имя файла будет иметь вид ~. :

set backup

Указать определенную папку/директорию для бэкап файлов (указывается к кавычках):

set backupdir «»

Символы обозначающие закрытие кодовой части (перечисляются в кавычках):

set brackets «»‘)>]}»

Используйте пустую строку под заголовком в качестве дополнительного пространства для редактирования:

set morespace
Рис. 3Разница между скриншотом выше:

Рис. 4.
Включить поддержку мыши для удобного перемещения курсора (выделение текста проиходит с задержкой):

set mouse

Включить плавную прокрутку:

set smooth

Включить сохранение без подтверждения:

set tempfile

Управление

  • Alt+L — Вкл.Вык. перенос строк
  • Alt+Y — Вкл.Вык. подсветку синтаксиса (если таковая имеется для данного типа файлов)
  • Alt+M — Вкл.Вык. поддержку мыши для удобного перемещения курсора (выделение текста проиходит с задержкой):
  • Ctrl+G (F1) — вызов меню полной подсказки
  • Ctrl+X (F2) — выход из программы
  • Ctrl+O (F3) — запись текущего файла
  • Ctrl+J (F4) — автозаполнение текущего абзаца
  • Ctrl+R (F5) — вставка файла в текущий
  • Ctrl+W (F6) — поиск текста в текущем файле
  • Ctrl+Y (F7 или PgUp) — перемещение на предыдущий экран
  • Ctrl+V (F8 или PgDwn) — перемещение на следующий экран
  • Ctrl+^ (Alt+A) —  выделение (и помещение в буфер) текста, начиная с текущей позиции курсора
  • Ctrl+_ (Alt+G) — Перейти на строку с определенным номером
  • Ctrl+ (Alt+R) — замена текста в текущем файле. Сначала вводится замещающий текст, потом, после нажатия Enter — заменяемый
  • Ctrl+K (F9) — удаление (Cut, вырезать) строку в позиции курсора с сохранением ее в буфере
  • Ctrl+U (F10) — вставка содержимого из буфера в строку в позиции курсора. Если последняя не менялась — выполняет роль отмены, штатно не предусмотренной
  • Ctrl+T (F12) — проверка орфографии (посредством внешней программы спеллинга, если она установлена и включена соответствующая опция в конфиге)
  • Ctrl+P — перемещение курсора на одну строку вверх
  • Ctrl+N — перемещение курсора на одну строку вниз
  • Ctrl+F — перемещение курсора на один символ вперед
  • Ctrl+B — перемещение курсора на один символ назад
  • Ctrl+A — перемещение курсора в начало текущей строки
  • Ctrl+E — перемещение курсора в конец текущей строки
  • Ctrl+L — перерисовка текущего экрана
  • Ctrl+D — удаление символа в позиции курсора
  • Ctrl+H — удаление символа слева от курсора

Ctrl+I — вставка символа табуляции

 

При сохранении файла (Ctrl+X) nano запрашивает подтверждение (Y/N) . На данном этапе файл все же не пересохраняется и можно отменить сохранение командой Ctrl+C. После же nano запрашивает имя файла и куда сохранить — после подтверждения этого этапа, без бэкап файла изменения уже не отменить

Подсветка синтаксиса

По умолчанию подсветка синтаксиса у редактора nano выключена. Что бы включить откроем известный нам уже файл /etc/nanorc

nano /etc/nanorc

И раскоментируем следующие строки:

include «/usr/share/nano/nanorc.nanorc»
include «/usr/share/nano/c.nanorc»
include «/usr/share/nano/html.nanorc»
include «/usr/share/nano/tex.nanorc»
include «/usr/share/nano/mutt.nanorc»
include «/usr/share/nano/patch.nanorc»
include «/usr/share/nano/man.nanorc»
include «/usr/share/nano/groff.nanorc»
include «/usr/share/nano/perl.nanorc»
include «/usr/share/nano/python.nanorc»
include «/usr/share/nano/ruby.nanorc»
include «/usr/share/nano/java.nanorc»
include «/usr/share/nano/asm.nanorc»
include «/usr/share/nano/sh.nanorc»
include «/usr/share/nano/pov.nanorc»

Данные строки скорее всего уже будут помечены дополнительными коментариями — к каким языкам относится какой файл посветки. Поэтому ненужные можно оставить закоментированными.
Увы, стандартной подсветки для .conf файлов asterisk’a по умолчанию не имеется. Но можно исправить данное недоразумение, создав собственный тип.

Для этого создадим файл asterisk.nanorc  в папке /usr/share/nano/ :

nano /usr/share/nano/asterisk.nanorc

 Вставим туда следующий код:

 ## Asterisk syntax highlighting

syntax «conf» «/.*/asterisk/.*.conf$»

icolor brightwhite «^[[:space:]]*((un)?set|include|syntax|i?color).*$»

## Дополнительная подсветка некоторых знаков
color  green «(:|/|(|)|]|[|`|\|$|<|>|!|=|&||)»
color   red   «({|})»
#color green «(.+)»

## IP адреса
icolor brightgreen «<((([0-9]([0-9]([0-9])))|([0-9]([0-9]))|([0-9]))+.(([0-9]([0-9]([0-9])))|([0-9]([0-9]))|([0-9]))+.(([0-9]([0-9]([0-9])))|([0-9]([0-9]))|([0-9]))+.(([0-9]([0-9]([0-9])))|([0-9]([0-9]))|([0-9])))>»

## Порты
icolor  green      «^(s)*(port|bindport)*(s)*=(s)*([0-9]*(.)?)»
icolor green   «(10000|20000|36600|39999|39989)»

## Комменты для exten & same
icolor brightblue  «^(s)*same*(s)*(=>|=)(s)*([0-9]|n)([A-Za-z0-9_-]+)»
icolor brightblue  «^(s)*exten(s)*(=>|=)(s)*((s|t|a|i|o|fax)|([0-9A-Za-z_.!*?-]*(.)?)|[0-9*#]+|_([XZN0-9*#]*([[XZN0-9*#]*])*[XZN0-9*#]*)*(.)?),([0-9]|n)([A-Za-z0-9_-]+)»

## Приоритеты
icolor magenta           «^(s)*exten*(s)*(=>|=)(s)*([0-9A-Za-z_.!*?-]*(.)?),(1|[02-9]|n|hint)»
icolor magenta           «^(s)*same*(s)*(=>|=)(s)*(1|[02-9]|n|hint)»
## Параметры SIP
#icolor      brightred   «^(s)*([0-9A-Za-z_!@#%,:$*?-])*([=])»
#icolor      brightred   «^(s)*([0-9A-Za-z_!@#%,:$*?-])*(s)*([=])»
icolor  brightred       «^(s)*([0-9A-Za-z_!@#%,:$*?-])+*(s)*(=)»

## Высветление запятых
icolor white «^(s)*exten(s)*(=>|=)(s)*([0-9A-Za-z_!*?-]*(.)?),»

## Extensions
icolor green «^(s)*exten(s)*(=>|=)(s)*((s|t|a|i|o|fax)|[0-9A-Za-z_.!*?-]+|_([+XZN/0-9*#]*([.+])*([[+XZN/0-9*#]*])*[+XZN/0-9*#]*)*(.)?)»
icolor green «^(s)*exten*(=>|=)(s)*((s|t|a|i|o|fax)|[0-9A-Za-z_.!*?-]+|_([+XZN/0-9*#]*([.+])*([[+XZN/0-9*#]*])*[+XZN/0-9*#]*)*(.)?)»

## ‘exten’ и ‘same’
color  red   «^(s)*exten(s)*=» «^(s)*exten(s)*=>»
color  cyan  «^(s)*same(s)*=» «^(s)*same(s)*=>»

## Включаемые в файл конфиги
icolor green «^(s)*include*(s)*=(s)*<.+>»
icolor  cyan «^(s)*include*(s)*(=>|=)(s)*([0-9A-Za-z_!*?-]*(.)?)»
color   brightyellow    «#include.*»

## ‘include’ в диалплане
color  green «^(s)*include(s)*(=>|=)»

## Условные выражения
icolor cyan  «$[.+]»

## Контексты
icolor brightmagenta     «^[.+]»

## Технологии
icolor yellow      «(SIP/|IAX2/|Zap/|Local/)»

## Комментированные строки для <NoOp>
#icolor      cyan  «,<NoOp>.*»
icolor cyan  «(==.+==)»

## Переменные
icolor red   «${?[0-9A-Za-z_!@#%,:$*?-]+([[A-Za-z0-9_${}()/!@%:,#*?]])?}?»

## Приложения
icolor yellow      «,<(A(DSIProg|gent(((Callback)?Login)|MonitorOutgoing)|GI|larmReceiver|MD|nswer|ppendCDRUserField|uthenticate))>»
icolor yellow      «,<(B(ackground(Detect)?|usy))>»
icolor yellow «,<(C(han(geMonitor|IsAvail|nelRedirect|Spy)|on(gestion|t(inueWhile|rolPlayback))))>»
icolor yellow      «,<(D(ateTime|Bdel(tree)?|eadAGI|i(al|ctate|rectory)|ISA|umpChan))>»
icolor yellow      «,<(E(AGI|cho|ndWhile|x(ec(If|While)?)|itWhile|te(nSpy|rnalIVR)))>»
icolor yellow      «,<(F(astAGI|estival|lash|orkCDR))>»
icolor yellow      «,<(G(etPEID|o(sub(if)?|to(If(Time)?)?)))>»
icolor yellow      «,<(Ha(ngup|s(New)?Voicemail))>»
icolor yellow      «,<(I(AX2Provision|CES|mportVar))>»
icolor yellow      «,<(Lo(g|okup(Blacklist|CIDName)))>»
icolor yellow      «,<(M(a(cro((Ex(clusive|it))?|(If)?)|ilboxExists)|eetMe(Admin|Count)?|illiwatt|o(nitor|rseCode)|P3Player|usicOnHold))>»
icolor yellow      «,<(N(BScat|o(CDR|Op)))>»
icolor yellow      «,<(P(a(ge|rk(AndAnnounce|edCall)?|use(Monitor|QueueMember))|ickUp|lay(back|tones)|r(ivacyManager|ogress)))>»
icolor yellow      «,<(Queue(Log)?)>»
icolor yellow      «,<(R(andom|e(a((d(File)?)lTime(Update)?)|cord|moveQueueMember|setCDR|t(ryDial|urn))|inging))>»
icolor yellow «,<(S(ay(Alpha|Digits|Number|Phonetic|UnixTime)|e(nd(DTMF|Image|Text|URL)|t(AMAFlags|Caller(ID|Pres)|CDRUserField|GlobalVar|MusicOnHold|TransferCapability)?)|IP(AddHeader|DtmfMode)|LA(Station|Trunk)|oftHangup|t(a(ckPop|rtMusicOnHold)|op(MixMonitor|Monitor|PlayTones|MusicOnHold))|ystem))>»
icolor yellow      «,<(Tr(ansfer|y(Exec|System)))>»
icolor yellow      «,<(U(npause(Monitor|QueueMember)|serEvent))>»
icolor yellow      «,<(V(erbose|MAuthenticate|oiceMail(Main)?))>»
icolor yellow      «,<(W(ait(Exten|For(Ring|Silence)|MusicOnHold)?|hile))>»
icolor yellow      «,<(Zap(ateller|Barge|RAS|Scan))>»

## something else
icolor brightgreen «^[0-9A-Z_]+()»

## Фигурные скобки
#color blue  «[{}]»

## Комментированные строки
color  brightblue  «;.*»

Выходим и сохраняемся.

В конец файла /etc/nanorc допишем:

## Asterisk
include «/usr/share/nano/asterisk.nanorc»

Теперь проверим в работе на примере любого .conf фала asterisk:

Рис. 5

Было:
Рис. 6

Стало:
Рис. 7

Книга 101 функция Asterisk
Познакомьтесь с возможностями Asterisk. Найдите инструменты, которые помогут вашей компании развиваться.
Скачать книгу
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
Dmitriy Q
Dmitriy Q
12.11.2020 15:39

Подсветку PJSIP ещё добавьте
И да:

Error in /usr/share/nano/asterisk.nanorc on line 6: Bad regex "(:|/|(|)|]|[|`|\|$|<|>|!|=|&||)": Unmatched [ or [^

Error in /usr/share/nano/asterisk.nanorc on line 7: Bad regex "({|})": Invalid preceding regular expression

Error in /usr/share/nano/asterisk.nanorc on line 62: Bad regex "${?[0-9A-Za-z_!@#%,:$*?-]+([[A-Za-z0-9_${}()/!@%:,#*?]])?}?": Invalid preceding regular expression

Остались вопросы?

Я - Виталий Шелест, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.