Экспертам


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 аватар

Порядок аргументов для 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
Ваша оценка: Ничего
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
Ваша оценка: Ничего

ssh авторизация по ключам и проброс настроек переменных окружения на другие хосты

Собственно, возникла проблема:
Есть n+1 серверов, между которыми надо ходить друг на друга.
При запуске в screen ssh на другие сервера почему-то надо и, как минимум вводить пароль
Почему - проблема кроется в отсоединении screen сессии и "reattach" сессии screen после переподключения.

Дано:
Имеем пару открытый + закрытый ключ.

На первой машине, с которой ходим:

0a) Windows - запускаем Pageant такой командой из bat/cmd скрипта:
# запустить pageant, чтобы после запуска программы окно cmd само закрылось

 
c:\ start полный\путь\к\pageant.exe путь\к\приватному\ключу.ppk

0b) Linux Дописать в Ваш ~/.bashrc|.zshrc нечто вроде

if [ -f ~/.agent ]; then
    . ~/.agent
    if ps -p $SSH_AGENT_PID > /dev/null && [ -S $SSH_AUTH_SOCK ]; then
        echo "ssh agent ok"
    else
        unset SSH_AUTH_SOCK SSH_AGENT_PID
        eval $(ssh-agent -s)
        echo -e "SSH_AUTH_SOCK=$SSH_AUTH_SOCK\nSSH_AGENT_PID=$SSH_AGENT_PID" > ~/.agent
0
Ваша оценка: Ничего
romy4 аватар

Skype delete selected messages

To delete selected Skype messages from the skype chat history follew few next steps:

0. Close Skype before processing these manipulations.

1. Open Skype db file from ~/.Skype//main.db within your favourite SQL manager or using sqlite3

run next sqls:

Check messages:

SELECT * FROM Messages WHERE chatname like '%:username:%';

This SQL shows all your conversations with selected :username:

Or

SELECT * FROM Messages WHERE author like '%:username:%';

to select messages from the subscriber.

Just call

DELETE FROM Messages WHERE chatname like '%:username:%';

to clear history with the subscriber

SELECT * FROM Messages WHERE body_xml like '%:message:%';

To find specific message.

Use `timestamp` field to range the messages on the specific date.

PS.

$ sqlite3 ~/.Skype/<accname>/main.db "DELETE FROM Messages WHERE chatname like '%username%';"

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

Хрипит, хрустит, дублируется, пропадает звук. особенно intel hd

Три метода (после каждого перезагружаемся):

1) открыть /etc/modprobe.d/alsa-base.conf

$ sudo gedit /etc/modprobe.d/alsa-base.conf

и добавить строчку

$ options snd-hda-intel vid=8086 pid=8ca0 snoop=0

перезагрузиться.

2) если не помогло, то открыть /etc/pulse/default.pa

$ sudo gedit /etc/pulse/default.pa

и заменить

$ load-module module-udev-detect

на

$ load-module module-udev-detect tsched=0

перезагрузиться.

3) если уже совсем ничего, то может быть это:
отредактировать /usr/lib/pm-utils/power.d/intel-audio-powersave

$ gksu gedit /usr/lib/pm-utils/power.d/intel-audio-powersave

заменить

$ INTEL_AUDIO_POWERSAVE=${INTEL_AUDIO_POWERSAVE:-true}

на

$ INTEL_AUDIO_POWERSAVE=false

выполнить
 

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

Простейший SMTP сервер для разработок [2]: netcat

Сохранить код как smtp.sh

#!/bin/bash
 
       echo "10x.example.com ESMTP"
 
       read helo
       echo "250 10x.example.com"
 
       read mail_from
       echo "250 ok"
 
       read rcpt_to
       echo "250 ok"
 
       read data
       echo "354 go ahead"
 
       read newline_dot_newline
       echo "250 ok 1134335146 qp 3108"
 
       read quit
       echo "221 10x.example.com"
 
       echo "$helo" > myfile
       echo "$mail_from" >> myfile
       echo "$rcpt_to" >> myfile
       echo "$data" >> myfile
       echo "$newline_dot_newline" >> myfile
       echo "$quit" >> myfile

И в командной строке:

$ while :; do nc -l -p 10101 -e smtp.sh; sleep 1; done
0
Ваша оценка: Ничего