Глупый пингвин робко прячет, умный - смело достает...


Alexander Ufimtsev аватар

Есть совет? Добавьте его сюда! sticky icon

Долго ковырялся с компом и что-то настраивал? Не смог наскоком найти ответ на вопрос в Гугле? Тогда добавь сюда свой совет, мы будем рады его опубликовать! Неважно, если это "рецепт по боданию" с каким-то из вариантов Linux, Unix или другого СПО проекта. Опубликуем, поможем улучшить и сохранить сию крупицу знания!

Жмите сюда, чтобы ДОБАВИТЬ СОВЕТ.
Рекомендации по оформлению советов. Модераторы помогут поправить форматирование, если у вас возникли проблемы.

Регистрация на сайте необязательна, но чтобы не возиться с captcha, рекомендуем все-таки зарегистрироваться или войти по OpenID. По любым вопросам обращайтесь в наш форум или стучитесь в обратную связь.

Благодарим за визит и отклики!

3.6
Ваша оценка: Ничего Рейтинг: 3.6 (5 голосов)
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
Ваша оценка: Ничего
ramok аватар

История clipboard для использование без мышки (xbindkeys+gpaste+dmenu)

Я перебрал множество мененжеров клипбоарда и не нашел удобного:

  • что бы можно было выбирать нужный пункт меню из истории клипборда без мышки и/или минимальным колличеством нажатий клавиш
  • Сразу постить выбранное, эмулируя среднюю кнопку мышки (как ни странно не все мененжеры клипборда это поддерживают)
  • Что бы нормально работало в xmonad (parcellite, diodon безбожно глючат)

Самый удобный для моего велосипеда оказался gpaste, у него очень удобные команды управления мененжером из командной строки.

Сохраняем в ~/bin/gpaste-dmenu

#!/bin/sh
NUM=$(gpaste-client --oneline | dmenu -l 30 | sed 's/: .*//')
 
if [ "$NUM" ]; then
    gpaste-client select $NUM
 
    # вставляем выбранное средним кликом мышки
    xdotool mousedown 2 && xdotool mouseup 2
fi

Вешаем на win-v вызов скрипта ~/.xbindkeysrc

"~/bin/gpaste-dmenu"
    mod4+v
5
Ваша оценка: Ничего Рейтинг: 5 (1 vote)
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
Ваша оценка: Ничего
ramok аватар

Открыть множество файлов по маске в окнах в vim

Открыть все файлы с раширением *.tcl в горизонтально разбитых окнах

:args lib/*.tcl | argdo wincmd S
0
Ваша оценка: Ничего

Сохранение/восстановление настроек alsa между перезагрузками

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

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

Matrix

Сыпящаяся матрица в консоли. Мне пришлось пару строчек в скрипте подправить дабы оно работало как отдельный скрипт, а не только command-line
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
Ваша оценка: Ничего

Socks proxy через ssh

чтобы организовать не кэширующий прокси сервер оказывается достаточно работающего ssh.
в линукс достаточно запустить комманду:

ssh -D<proxy_port> <имя_пользователя>@<удаленый_ssh_сервер>

в Windows с помощью PuTTY добавить в разделе Connection/SSH/Tunnels

  • в Source port номер proxy порта
  • выбрать Dynamic и нажать на Add

<proxy_port> заменить на число >1000 <65536

после того, как соединение с ssh сервером установлено на Вашей локальной машине Вы можете использовать proxy: localhost:<proxy_port>

для примера как я организую прокси:

localhost $ ssh -D8888 
Password: *******
 $ _

после этого прописываю прокси localhost:8888 в настройках, указывая, что это Socks V5 проски.

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