22 янв. 2014 г.

Автодополнение в командной строке Linux

Автодополнение в командной строке Linux - это крайне удобная вещь. Вот скажем, нужно вам посмотреть информацию о пакете, скажем, php-mcrypt, но вы не помните как точно он пишется. С автодополнением достаточно в команде написать первые буквы и двойное нажатие [TAB] покажет вам варианты, а одинарное - дополнит, если вариант единственный:

rpm -q ph [TAB][TAB]

phonon-backend-gstreamer  php-devel                 php-mysql
php                       php-gd                    php-pdo
php-cli                   php-mbstring              php-xml
php-common                php-mcrypt                

Эта полезная фишка содержится в пакете bash-completion. При установке Debian-based систем этот пакет устанавливается по-умолчанию.А во многих же RHEL-дистрибутивах (например, Oracle Linux) - почему-то нет. Устанавливаем командой:

yum install bash-completion
aptitude install bash-completion

Для каких именно команд работает автодополнение - зависит от конкретной системы и установленного на ней софта. Поэтому, чтобы посмотреть список команд:

ls /etc/bash_completion.d

autoconf       gdbus-bash-completion.sh      mysqladmin        scl.bash
automake       getent                        ncftp             screen
bash-builtins  gpg2                          net-tools         service
bind-utils     gsettings-bash-completion.sh  nmap              sh
brctl          gzip                          ntpdate           shadow
bzip2          iconv                         openssl           smartctl
chkconfig      iftop                         perf              sqlite3
configure      ifupdown                      perl              ssh
coreutils      info                          pkg-config        strace
cpan2dist      iproute2                      pm-utils          subversion
cpio           iptables                      postfix           tar
crontab        java                          procps            tcpdump
cryptsetup     lsof                          python            util-linux
cups           lvm                           qdbus             wireless-tools
cvs            lzma                          quota-tools       xmllint
dd             make                          redefine_filedir  xmlwf
dhclient       man                           rfkill            xsltproc
e2fsprogs      mc                            rpcdebug          xz
findutils      mdadm                         rpm               yp-tools
gcc            minicom                       rsync             yum.bash
gdb            module-init-tools             samba             yum-utils.bash

18 янв. 2014 г.

Использование встроенной базы данных AstDB в Asterisk

AstDB является частью Asterisk  и устанавливается вместе с ним. Это простая БД (Barkley DB версии 1), без всяких заморочек. Если нужно подключить к Asterisk БД MySQL или PosrgreSQL - это тоже можно сделать, но для несложных задач вполне хватит и AstDB.

Предположим, у нас уже настроен GSM-модем в Asterisk - например, как я описывал здесь для модемов Huawei - и мы хотим звонить на мобильные номера наших абонентов (к примеру, в не рабочее время, когда они находятся вне доступа к SIP телефонам).

Хранится информация в БД с помощью трех понятий - семейство, ключ и значение. Семейство - это аналог таблицы, в которой хранятся пары ключ-значение.

Для начала, нам необходимо наполнить нашу БД номерами. Сделать это можно в процессе диалплана командой вроде:

exten => s,n,Set(DB(mobile/1112)=0991111111)

Здесь мы создаем (или модифицируем, если таковой ключ уже есть) ключ 1112 - SIP-номер для нашего абонента, в моем примере - в семейтве mobile. И присваиваем ему номер мобильного для этого абонента.

Но для большого количества абонентов делать такое не есть хорошо, тем более что БД хранит данные и после перезапуска Asterisk  и после перезагрузки сервера. Потому, целесообразнее - для моего примера - заранее заполнить БД данными из командной строки Asterisk.

Добавление/модификация значений:

database put <семейство> <ключ> <значение>
Пример: database put mobile 1112 0991111111

Для просмотра информации имеем команду:

database get <семейство> <ключ>

а также для просмотра всей БД:

database show

В плане набора (dialplan) пишем следующее:

...
; Вызываем макрос для дозвона по GSM, передавая ему SIP номер абонента как аргумент
exten => _1XXX,n,Macro(dial-mobile,${EXTEN})
....
[macro-dial-mobile]
; Вытаскиваем из БД значение номера для нужного абонента
; и помещаем в его переменную MobNumber
exten => 1,1(mobile),Set(MobNumber=${DB(mobile/${ARG1})})
; Звоним через GSM-модем
exten => 1,n,Dial(Dongle/dongle0/${MobNumber},100,dmghHtT)
...

Вот в общем-то и всё. 

15 янв. 2014 г.

Как перенаправить порт в Windows встроенными средствами

Перенаправление порта (port forwarding, port mapping) может понадобиться, когда у машины PC1 есть доступ в сеть 1 и сеть 2, а у машины PC1 - только в сеть 1, а ей нужно подключиться к какому-то сервису на машине PC3 в сети 2. В таком случае схема будет примерно такая:


В данном примере необходимо на PC2 открыть CMD с правами администратора и выполнить команду:

netsh interface portproxy add v4tov4 listenport=2222 listenaddress=192.168.1.3 connectport=22 connectaddress=192.168.2.5

Чтобы удалить форвардинг - команда:

netsh interface portproxy delete v4tov4 listenport=2222 listenaddress=192.168.1.3

Ссылки:

http://technet.microsoft.com/en-us/library/cc731068(v=ws.10).aspx#BKMK_1

9 янв. 2014 г.

Как получить размер свободного дискового пространства точки монтирования в Python (Linux)

Чтобы получить размер свободного пространства для точки монтирования (или размер свободное место на разделе, где находится указанная папка), необходимо выполнить следующее:


import os
st = os.statvfs("/home")
du = st.f_bsize * st.f_bavail
print(du)

Получим значение в байтах, чтобы получить значение, например, в Мб:


du = st.f_bsize * st.f_bavail / 1024 / 1024

Отправка почты (e-mail) из консоли Linux

Иногда необходимо отправить письмо из консоли/скрипта в Linux. Сделать это достаточно просто:

echo "Тело письма" | mail -s "Тема письма" recipient@example.com

или, чтобы вставить содержимое тектового файла как тело письма:

mail -s "Тема письма" recipient@example.com < /var/log/some.log

Параметры команды:

-s subject - тема письма
-c email-address 
- адрес для копии
-b email-address - 
адрес для невидимой копии