четверг, 31 декабря 2020 г.

git: обобщенная схема команд

 

Наиболее частые команды:

git init
git add .
git rm file.txt
git rm --cached file.txt
git mv old_name new_name
git rm \*~

git config --global user.email "your@mail.address.org"
git config --global user.name "you_name"
git config --global --add https.proxy https://10.10.0.1:3128
git config --list
git config --global --unset http.proxy
git config --list | grep proxy

git commit -m "some comment"
git commit -am "commit with all changed files"
git remote add master  https://your_name@bitbucket.org/_/repository_name.git
git remote -v //To list the existing remotes
git push -f master master
git remote rm master

git status //делайте почаще эти команды
git status -s
git log

git reset --hard <hash>
git reset --hard origin/master

git branch
git checkout -b newbranch
git checkout newbranch
git merge newbranch (делать, если находимся на ветке master)

git diff
git diff --staged

воскресенье, 13 декабря 2020 г.

Основные команды для работы с пакетами в Debian

  • dpkg -i пакет.deb проинсаллировать пакет
  • dpkg -r пакет (без расширения  deb) удалить пакет, исключая файлы конфигурации
  • dpkg -P пакет (без расширения  deb)полностью удалить пакет
  • dpkg -l список всех проинсталлированных пакетов
  • dpkg -l пакет (без расширения  deb) вывод короткой информации про отдельный пакет
  • dpkg -L (без расширения  deb) вывод всех файлов проинсталлированных из данного пакета
  • dpkg -c пакет.deb список файлов в еще непроинсталлированном пакете
  • dpkg -S /path/to/file показывает какому пакету принадлежит файл
  • dpkg -p пакет (без расширения  deb) вывод детальной информации про отдельный пакет
  • dpkg -s пакет (без расширения  deb) проверяет, установлен ли пакет

суббота, 14 декабря 2019 г.

Бэкап на коленке: утилита expect

Задача: несколько серверов и один комп-архиватор, на котором нужно делать бекап "избранных" файлов. На каждом сервере создаем юзера archiver (ну или какой вам нравиться). В домашнем каталоге у него (на каждом  же сервере) создаем папочку  backup (ну или какое название вам нравиться другое). Также создаем скрипт, который кроном запускается с нужной периодичностью и пакует в эту папку нужный вам контент.
На компе-архиваторе создаем папку backups с подкаталогами у которых имена сопадают  с именами архивируемых серверов. Далее устанавливаем утилиту expect на компе-архиваторе и пишем скрипт такого содержания:

#!/usr/bin/expect -f
set ret [ catch {

array set user {
        server_1        archiver
        server_2        archiver
# etc
        server_n         archiver
}

#можно и без этого абзаца, но вдруг find на серверах находится в разных местах
array set find {
        server_1          /usr/bin/find
        server_2          /usr/bin/find
# etc
        server_n         /usr/bin/find
}

array set ips_passwords {
        server_1          password1 
        server_2          password2 
# etc
        server_n          passwordn
}

set timeout -1

send_user "backup is starting!...\n"
foreach keyip [array name ips_passwords] {
        #
        #Копируем периодические бэкапы на наш комп-архиватор
        spawn /usr/bin/scp $user($keyip)@$keyip:/home/$user($keyip)/backup/* /home/backuper/backups/$keyip
        match_max 100000
        expect  "*?assword*:"
        send -- "$ips_passwords($keyip)\r"
        send -- "\r"   
        expect eof
        #
        #Со следующим абзацем поосторожней. Удаляет в директории, где храняться
        #наши бэкапы файлы старше 5 дней.
        spawn /usr/bin/ssh $user($keyip)@$keyip $find($keyip) /home/$user($keyip)/backup -ctime +5 -exec /bin/rm \{\} \\\;
        match_max 100000
        expect "*?assword*:*"
        send -- "$ips_passwords($keyip)\r"
        send -- "\r"
        expect eof
}
send_user "backup had finished succesfully!\n"

} result ]

set fh [open /home/backuper/Desktop/expect-works w]
puts $fh "Code $ret, Message/Result $::result \n"
close $fh


Нюанс. Сделайте, если еще не делали, логин юзером archiver с вашего компа-архиватора через ssh на каждый сервер. Эту ситуацию (первая сессия ssh archiver@server_x) можно отработать и в скрипте, но тогда код усложниться. А нам нужна проcтота. Не так ли?

среда, 4 декабря 2019 г.

Работа с com портом из командной строки Linux

Вывод параметров порта в читаемом виде:
#stty -a -F /dev/ttyUSB0
Переключение в raw режим:
#stty -F /dev/ttyUSB0 raw -echo -echoe -echok
Послать команду:
#echo "HELLO" > /dev/ttyUSB0
#echo  -ne '\x23\x02\x01\x00\x50\x01\r' > /dev/ttyUSB0
Прочитать данные:
#cat /dev/ttyUSB0
Сохранить параметры порта для последующего восстановления:
#stty -g -F /dev/ttyUSB0 > save.txt
#stty --save /dev/ttyUSB0 > save.txt
Считываем сохраненные параметры:
#stty -F /dev/ttyUSB0 `cat save.txt`
Устанавливаем скорость 115200 бод, 8 битов данных, стоп бит, без проверки четности (режим 8N1):
#stty -F /dev/ttyUSB0 115200 cs8 -cstopb -parenb