Продвинутым


i-sat аватар

Собираем Asterisk для macOS Sierra

Это обновление, точнее продолжение опубликованного ранее, совета, но уже и для macOS Sierra.

Началось с того, что после посещения официального сайта решил обновить Asterisk (про его установку как раз предыдущая статья), ибо, на всё том же Apple Mac-mini 2010 с OS X Yosemite, всё так же работал Asterisk PBX версии 13.6.0, однако, если обновить ОС руки пока не доходили, тем более что апдейты на OS X Yosemite всё ещё регулярно выходили, то на обновление Asterisk PBX созрел.

Кому интересно, читайте далее...

0
Ваша оценка: Ничего
romy4 аватар

netstat without root

Маленький интересный скрипт нашёл на просторах позволяющий получить список процессов, которые куда-то ломятся

0
Ваша оценка: Ничего
romy4 аватар

Проброс socket с удалённой на локальную машину. socket forward.

Удалённый mysql крутится c unix_socket и чтобы удалённо что-то подебажить его надо пробросить локально. На помощь приходит socat. Его надо поставить локально и на удалённой машине.

создаём локально директорию:

mkdir -p ~/.remote_sockets && chmod 0700 ~/.remote_sockets

и теперь запускаем его локально (соединение у нас по ключу):

export SOCKET_DIR=~/.remote_sockets
socat "UNIX-LISTEN:$SOCKET_DIR/mysqld.sock,reuseaddr,fork" EXEC:'ssh -p 2526 -i /home/user/.ssh/my_key_rsa  socat STDIO UNIX-CONNECT\:/run/mysqld/mysqld.sock'

Всё, консолька висит — значит ок. Не используйте ~ в качестве /home/user

открываем консоль №2

mysql -u username -S "$SOCKET_DIR/mysqld.sock" -p
0
Ваша оценка: Ничего
romy4 аватар

Как не забыть сделать что-то важное, когда есть много точек выхода из скрипта

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

#!/bin/bash
 
declare -a tmp_files
 
pre_exit() {
   rm -f ${tmp_files[1]}
   rm -f ${tmp_files[2]}
   ...
}
 
do_stuff
[ $? -gt 0 ] && pre_exit && exit 1
 
sed
cut
cp
mv
cat
cat
awk { 
..
}
ps auwx | grep
[ $? -gt 0 ] && pre_exit && exit 1
 
other_stuff
 
...
pre_exit

Знакомо, да?

0
Ваша оценка: Ничего
romy4 аватар

Run function under different user

Представьте, что у вас под рутом запускается скрипт, но есть код, который надо выполнить от другого пользователя. Проблема в том, что у вас всего один файл и он запускается на удалённой машине при старте.

#!/bin/bash
 
function run_as_another()
{
  echo "I'm under another user"
  id
}
 
export -f run_as_another
su another -c run_as_another
 
echo Voila!
0
Ваша оценка: Ничего
romy4 аватар

my traceroute | mtr

Как tracepath только в виде красивой таблички со значениями и в виде постоянного сбора статистики. Стандартная утилита в debian системах.

например
$ mtr google.com.ua

                                 My traceroute  [v0.85]
username (0.0.0.0)                                   Tue Jun 14 16:45:26 2016
Keys:  Help   Display mode   Restart statistics   Order of fields   quit
                                               Packets               Pings
 Host                                        Loss%   Snt   Last   Avg  Best  Wrst StDev
 1. 10.10.0.1                                 0.0%    13    0.2   0.3   0.2   0.4   0.0
 2. xxxxx.outgoing.provider.ua                0.0%    13    0.4   0.7   0.4   2.3   0.4
 3. yyyyy.provider.ua                         0.0%    13    0.6   2.6   0.6   7.5   2.3
 4. edge-3-po1-243dot1q.city.othervider.net   0.0%    13  129.4  52.6   1.1 188.2  71.8
0
Ваша оценка: Ничего
romy4 аватар

ssh: Too many authentication failures for username

Received disconnect from xx.xx.xx.xx: 2: Too many authentication failures for username

Это часто происходит из-за того, что по умолчанию ssh клиент пытается попробовать соединиться по всем имеющимся у ssh-agent ключам (посмотреть ssh-add -l)

Чтобы разрешить данную проблему надо
1) Добавить в ваш .ssh/config

Host *
    PubkeyAuthentication no

это заставить не пробовать ключи

А для подключения по ключам использовать явное указание ключей
$ ssh -o PubkeyAuthentication=yes -i ~/.ssh/keyname_rsa user@host
или
в .ssh/config
дописать

Host anyhost
    User username
    HostName host
    IdentityFile ~/.ssh/keyname_rsa
    PubkeyAuthentication yes

и использовать как
$ ssh anyhost

0
Ваша оценка: Ничего
romy4 аватар

Красивый вывод git log


просто добавляем алиас в гит
$ git config --global alias.lg "log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%C(bold blue)<%an>%Creset' --abbrev-commit"

теперь $ git lg

даст нам красивый вывод

0
Ваша оценка: Ничего
romy4 аватар

Lenovo ideapad every time loses network connection

Fix is simple:
run as root

$ nmcli -p d list

find

GENERAL.DEVICE: wlan0
GENERAL.DRIVER: rtl8723be

got rtl8723be

$ cd /etc/modprobe.d
$ editor rtl8723be.conf

put:

options rtl8723be ant_sel=2

and reboot

0
Ваша оценка: Ничего
romy4 аватар

ping + graph

gping — маленькая утилита на Python с открытым исходным кодом, представляющая собой замену команде ping, только с графиком, отражающим изменение пинга со временем.

Установить утилиту можно с помощью pip3:
pip3 install pinggraph

0
Ваша оценка: Ничего
romy4 аватар

Пищалка

Чтобы в Линуксе пищать пищалкой нужно поставить beep.
Но она может молчать. Чтобы заставить её таки пищать, нужно подгрузить модуль ядра для pc speaker:

modprobe pcspkr
0
Ваша оценка: Ничего
romy4 аватар

Порядок аргументов для getopts

getopts не будет обрабатывать параметры, если они переданы после аргументов без дефиса
./myscript -a 1 -b 2 hello world
getopts вернёт a и b с параметрами, $OPTIND станет = 4, но
./myscript hello world -a 1 -b 2
работать не будет

rtfm
In fact, getopts will not process arguments without the prefixed -, and will terminate option processing at the first argument encountered lacking them.

getopts != getopt, хотя первое сделано для замены второго

0
Ваша оценка: Ничего
romy4 аватар
romy4 аватар

Обрезать строку с начала, оставив 20+ символов с конца

Необходимо укоротить строку до 20+ символов, оставив их с конца строки таким образом, что если строка обрезается на середине слова, то удлинить её до первого символа _ (не включая сам символ).

Пример строки "this_is_very_long_string_more_than_30_symbols_length".

Вот, собственно, решение:

echo "$str" | sed -e 's:^.*_\(.\{20,\}\)$:\1:'
0
Ваша оценка: Ничего
romy4 аватар

Блокировка экрана если юзер не ответил на вопрос за несколько секунд.

Я логинюсь под юзером и иду пить кофе, но мне лень ждать момент, чтобы нажать на клавишу блокировки экрана после загрузки рабочего стола. Выход — сделать такую блокировку автоматически с вопросом: "если ты здесь, то нажми кнопку, иначе через 5 секунд всё заблокируется".

В ubuntu/mint есть стандартная утилита оконных сообщений zenity. Она умеет многое из того, что умеет dialog, ею воспользуемся.

zenity --text "Не блокировать комп?" --timeout=3 --question --modal

В ответе утилита возвращает результат: 0, 1 или 5 (да, нет или таймаут).

case $result in
1|5)
    gnome-screensaver-command -l
    ;;
esac

Если нет или таймаут, то блокируем комп через гномовский скринсейвер, так как он отвечает за блокировку.

0
Ваша оценка: Ничего
romy4 аватар

Переместить приложение на нужный рабочий стол в x=0:y=0 и нажать кнопку

Автоматизируя рабочий стол наткнулся на то, что FF с установленным session manager не хочет нормально запускаться. Точнее, он запускается и ждёт нажатия кнопки выбора сессии. Даже если каким-то образом удастся его запустить, оно всё равно открывается на правом мониторе, а нужно на левом. Как решить?

Есть два варианта: переключиться на другой workspace и там запустить или запустить на текущем, а потом переместить окна на другой workspace.

Под катом решение.

0
Ваша оценка: Ничего
i-sat аватар

Собираем Asterisk для OS X Yosemite

Уже давно в голове вынашивалась идея запустить Asterisk под работающим почти круглосуточно Mac-mini с OS X Yosemite, однако готовой сборки на просторах интернет не попадалось под руку.

Если кому интересен это краткий совет, тогда читайте далее...

0
Ваша оценка: Ничего
romy4 аватар

Системная информация в читаемом виде

$ sudo inxi -Fx

0
Ваша оценка: Ничего
romy4 аватар

Little about Find

  1. Find large files
    find /home -type f -size +5000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'
  2. Find files / directories with 777 permissions
    #find 777 files
    find / -type f -perm 0777
    #find 777 dirs
    find / -type d -perm 0777

    You can also combine find to skip some folders when copying using this article. Prune tells it to also skip subfolders and subfiles.

    find . ! \( -name images -prune \) -print | cpio -o | ttcp -t yourserver.com -p 10000
  3. Find empty files
    find /home -type f -size -1b -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'
  4. Find empty files and delete
    find /tmp -type f -empty -delete
  5. Find smallest files and delete them
    ls . -S | tail -250 | xargs rm
  6. Find largest files
    ls . -Srl | tail -250
0
Ваша оценка: Ничего
romy4 аватар

Copy millions of tiny files through a network

I had to copy millions and millions of tiny small image files, about 5KB each, total size more than a terabyte, over a network fast.

SCP, NFS, FTPFS and SSHFS where all too slow to work with. All these methods copy every single file piece by piece, causing lots of overhead, I never reached more than 1MB/s over a gigabit line.

The fastest solution I came up with after lots and lots of testing was this:

Receiving server:

ttcp -r -p 10112 | cpio -i -d -m

Sending server:

find /home/files -print | cpio -o | ttcp -t receivinghost.com -p 10112

CPIO is slightly faster than TAR, and does not have any problems with long filenames.

  1. Other solution 1 - A little compression
    This solution saves a little bandwidth by gzipping the files. This will only save you bandwidth if you transfer text/html/sql files, images, mp3 and other already compressed formats will only cost more time and overhead.

    Receiving server:
     

0
Ваша оценка: Ничего