Site Tools


Hotfix release available: 2025-05-14b "Librarian". upgrade now! [56.2] (what's this?)
Hotfix release available: 2025-05-14a "Librarian". upgrade now! [56.1] (what's this?)
New release available: 2025-05-14 "Librarian". upgrade now! [56] (what's this?)
unix

Käsud

Swagger doc generation

How to generate static (HTML) documentation from a JSON/YAML Swagger file?

  1. Choose from top left menu: File → Import file
  2. Import your JSON/YAML description file
  3. Choose from top menu: Generate Client → html2 (“html2” looks a lot nicer and is more functional than “html”)
  4. You will be prompted with a zip file download which includes that static content (including an index.html file that has all the data)

GPG / PGP / GnuPG

# get my own public key gpg –list-keys gpg –armor –export rene@ridango.com

# crypt gpg -c myfile-to-crypt.txt

# decrypt gpg file-to-decrypt.gpg

Set IP manually

Version 1

ifconfig eth0 10.10.10.55
route default gw 10.10.10.1

Version 2

sudo vi /etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

# The primary network interface
auto enp0s25
iface enp0s25 inet static
    address 192.168.3.60
    netmask 255.255.255.0
    gateway 192.168.3.1
    dns-nameservers 10.0.0.1 8.8.8.8

sudo systemctl restart networking.service

Set command to run in background

Detailed info about different options: http://unix.stackexchange.com/a/148698

# program is run indipendent of the terminal (terminal can be closed). All output is sent to nohup.out file: cd /tmp; nohup google-chrome &

MQTT

# subscribing to MQTT broker

mosquitto_sub -h 192.168.3.1 -t /vimi/system/identity/info

Git

// create new branch
git checkout -b my-new-branch-name

// update some files and code...
// ....

// stage the changes
git add file-name-that-I-changed.php

// commit the changes
git commit -m "Message about my change"

// push up the changes
git push origin my-new-branch-name

// go and create a pull request in Bitbucket

Convert Mercurial/Hg repo into Git and Bitbucket

cd /tmp
git clone https://github.com/frej/fast-export.git

mkdir xdream
cd xdream
git init
/tmp/fast-export/hg-fast-export.sh -r /media/ssd/www/xdream.rene.ee
git checkout HEAD
mv .hgignore .gitignore
git add .gitignore
git rm .hgignore
git commit -m "Migrate .hgignore to .gitignore"
git remote add origin https://renebe@bitbucket.org/renebe/xdream.git
git push -f --all origin

Wireshark

Filter Meaning
&& AND condition
|| OR condition
x == y comparison (note the spaces before and after “ == ”)
tcp TCP traffic only
http HTTP requests only
ip.addr == 192.x.x.x Traffic TO and FROM specific IP
ip.src == 192.x.x.x Traffic FROM specific IP/source
ip.dst == 192.x.x.x Traffic TO specific IP/source
tcp.srcport == 80 TCP traffic FROM a specific port (UDP → udp.srcport)
tcp.dstport == 80 TCP traffic TO a specific port (UDP → udp.dstport)
http.request.uri contains “/test/“Find HTTP requests that include given part

Screen

CommandAction
screenKäivitab screeni
screen -rAttatcheb screeni (kui ainult 1)
screen -d -rAttatcheb screeni ja vajadusel deatacheb selle enne
screen -r [PID]Attatcheb vastava PID-ga screeni
screen -listNäitab kõiki screene

C-a = CTRL+a

CommandAction
C-a cTeeb screeni all uue shelli (akna)
C-a dDeattacheb screeni
C-a AScreeni akna ümbernimetamine
C-a “Näitab kõiki screeni alla avatud aknaid
C-a 'Võimaldab akna nime järgi sellele minna
C-a C-aAvab eelmisena avatud olnud akna
C-a 0Avab akna numbriga 0 (võib olla 0-9)
C-a spaceAvab järgmise akna (numbri järgi)
C-a backspaceAvab eelmise akna (numbri järgi)
C-a Esc Läheb scrollimise mode-i (PgUP/PgDown). Välja saab 2xEnter

grep | tail

# turn off grep buffering (as it tampers with “tail -f”)

tail -f access.log | grep --line-buffered "find something"

Faili crypt/decrypt

Decrypt:

openssl bf -d -in /home/rene/user.tar > user2.tar

Crypt:

openssl enc -bf -e -in user2.tar -out user.tar

Charseti convertimine

iconv -f ISO-8859-1 -t UTF-8 from.file > to.file

rpm -> deb

sudo alien --to-deb pack.rpm
sudo dpkg -i pack.deb

Pakkimine

Extract

tar -xvvzf faile.tar.gz
gunzip -d file.gz
unzip file.zip
unrar file.rar

Piltide vähendamine

mogrify -resize 800x800 IMG_*.jpg

# crop image into 180×135 size from the center

convert in.jpg -resize 180x135^ -gravity Center -extent 180x135 out.jpg

Pildil valge taust läbipaistvaks

# ainult puhas valge läbipaistvaks:

  convert /tmp/switch_ubi2.jpg -transparent white /tmp/switch_ubi2_transp.jpg

# lisada ka tolerantsi hallidele toonidele (mida suurem protsent seda suurem) tolerants

  convert /tmp/switch_ubi2.png -fuzz 5% -transparent white /tmp/switch_ubi2_transp.png

Pildi EXIF data muutmine

# remove all EXIF data from a file

  exiftool -all= my_file.jpg

# Change the date in EXIF. NB! Note the colons instead of dashes in the date!!!

  exiftool -AllDates="2023:04:22 12:51:10" my_file.jpg
  

Watermark teksti lisamine pildile

# Võtab kõik aktiivse kausta *.jpg nimega pildid ning lisab neile watermarkiks pildi nime (ilma laiendita) ja salvestab uued koopia pildid tase madalamsse “watermarked” nimelisse kausta

  for pic in *.jpg; do convert $pic -pointsize 80 -draw "gravity south fill red text 1,11 '${pic%.*}' " ../watermarked/$pic; done

PDF to PNG

# kogu dokument lehtede kaupa piltideks

  convert -density 150 input.pdf output.png

# üks konkreetne leht (18 näiteks) pildiks

  convert -density 150 input.pdf[18] output.png

Video suuruse vähendamine

Vähendab video suurust 2 korda:

ffmpeg -i input.mp4 -strict -2 -vf scale=iw/2:-1 output.mp4

Video keeramine:

ffmpeg -i in.mov -vf "transpose=1" out.mov

Transpose'i parameetrid: 0 = 90CounterCLockwise and Vertical Flip (default) 1 = 90Clockwise 2 = 90CounterClockwise 3 = 90Clockwise and Vertical Flip

VIM

KäskSeletus
:set encoding=utf-8 Encoding → UTF-8
:set syntax=html highlighting-u muutmine
mx rea ära märkimine, et pärast samale reale tagasi saada (x on suvaline täht)
'x viib x-ga märgitud reale tagasi
:marks näitab kõigi märgitud ridade listi
* leaib järmise sama sõna, mille peal hetkel kursor on

Reavahetuste (^M) replacemine (^M tuleb teha kasutades Ctrl-V + <enter>):

:%s/^M$//g
:%s/^M/ /g
:%s/\n/;/g
:%s/, \n/;/g    <--- if you want to replace string AND line break don't forget that there usually is 1 spce inbetween tehm....

color scheme Solarized

wget http://public.rene.ee/solarized.vim -O /tmp/solarized.vim
mkdir ~/.vim/colors
mv /tmp/solarized.vim ~/.vim/colors
vi ~/.vimrc

.vimrc

Etalon sisu ~/.vimrc

syntax enable
set background=dark
colorscheme solarized
set encoding=utf-8
set tabstop=4
set shiftwidth=1
set nocindent
set softtabstop=4
set expandtab
set noerrorbells
set vb
set nowrap
set ruler
set term=xterm
set viminfo='100,\"100,:20,%,n~/.viminfo
set backspace=indent,eol,start
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif                                                                                                                                        
  • peab meeles, kus kursor viimati failis oli
set ruler
set viminfo='100,\"100,:20,%,n~/.viminfo
au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif
  • Kui backspace ei tööta:
set bs=2

Command line

grep

# grep with OR statment (NB! mind the escape char!!!) grep 'this\|that' kala.txt

# starts with 2 spaces and then an alphanumeric char grep '^ [A-Za-z]' kala.txt

awk, sort, uniq

Prindib välja leitud reast 6-nda elemendi. Read on sordidutd ning korduvaid ridu ei esine:

grep mingiasi mingifail.txt | awk '{ print $6 }' | sort | uniq

# splitib kõigepealt koolonite järgi tükkideks ja siis võtab tunni ja minuti välja. Ehk siis: [29/May/2020:03:07:01 +0300] → 03:07 # seejärel sordib ja leiab, mitu rida iga minuti kohta oli

grep "2020:03:1" /var/log/nginx/api-rid.kyivcity.gov.ua.access.log | grep Zabbix | awk 'BEGIN { FS = ":" } ; { print $2":"$3 }' | sort | uniq -c^C

Hardcode awk & print:

    zgrep -E "/programme/[0-9]+/info" publicapi-2014-11-11-22.log.gz | grep -v "upstream timed out" | grep 'nginx' | awk '{ print $18 }' | awk '{ s += $1 } END { print "sum: ", s, " average: ", s/NR, " samples: ", NR }'
sum:  55454.8  average:  2.13781  samples:  25940

split

  // split by any keyword without caring about the space spliting... in this example we just change the awk spilt deilimieter from default " " to "my phrase"
  awk 'BEGIN { FS = "my phrase" } ; { print $2 }'
  // split by a keyword, but still take only the $14 part of line....
  zgrep -E "/programme/[0-9]+/info" publicapi-2014-11-11-22.log.gz | awk '{ split($14,a,"?"); print a[1] }' | sort | uniq | wc -l

for loop

# loop over numbers:

for i in {10..16}; do echo "failist $i: "; zgrep 'kalamaja ' live/publicapi-2014-02-$i-2* | wc -l; done
for i in {0000..0015}; do echo "Counting sample inside text: aaa${i}bbb"; done

# loop reading lines from a file:

for i in `cat lines.txt`; do echo "Line contents is: $i"; done

while, time, counter

wget files incrementally and print out only timinig info.

while [ 1 ]; do (time wget -O /dev/null http://www.rene.ee/file:${COUNTER}.txt) 2>&1|grep real; let COUNTER=COUNTER+1; sleep 1; done

Find & replace

#!/bin/bash

if [ "$#" != "1" ]; then
echo "kasutamine: cvs.sh <username>"
exit 0
fi

for i in `find /var/www/ipdb -name "Root"`; do sed -i s/^:pserver:.*@/:pserver:$1@/ $i; done

echo "tehtud!"
ln -s /target/dir /shortcut/dir

CVS

sudo -s / su
export CVS_RSH=ssh
export CVSROOT=rene@bsd.ee:/usr/local/robobsd
cvs co robobsd

WebWare

echo $CVSROOT
export CVSROOT=:ext:rene@cvs.webware.ee:/var/lib/cvs  |  export CVSROOT=:ext:webdk@cvs.webware.ee:/var/lib/cvs

Digikaamera ühendamine

cat /proc/bus/usb/devices
	T:  Bus=02 Lev=01 Prnt=01 Port=01 Cnt=01 Dev#=  5 Spd=12  MxCh= 0
	D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=32 #Cfgs=  1
	P:  Vendor=04a9 ProdID=3074 Rev= 0.01
	S:  Manufacturer=Canon Inc.
	S:  Product=Canon Digital Camera
chmod a+w /proc/bus/usb/002/005		// Bus/Dev
gtkam

Kasutajate lisamine

useradd biker
vi /etc/passwd
vi /etc/group

Vahel võib olla ka

adduser kala

video striimi dumpimine

mplayer -dumpstream http://213.35.156.10/etv/23042005_saalihoki.wmv

Postgres

/etc/init.d/postgresql stop
/etc/init.d/postgresql start

conf

Ligipääsu õigused:

/etc/postgresql/pg_hba.conf
# TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK           METHOD
# Database administrative login by UNIX sockets
local   all         postgres                                        trust
local   all         webdk_dhs                                       trust
local   all         webdk                                           trust
local   all         ems_odbc                                        trust
#
# All other connections by UNIX sockets
local   all         all                                             ident sameuser
#
# All IPv4 connections from localhost
host    all         all         172.16.2.199      255.255.255.255   md5
host    all         all         10.1.21.58      255.255.255.255   md5
host    all         all         127.0.0.1      255.255.255.255   md5

Replace astring in multiple files (i.e. CVS)

replace "/usr/local/cvs" ":ext:rene@webware.ee:/usr/local/cvs" -- `find . -name "Root" -type f`

.bashrc

vi ~/.bashrc
alias ll='ls --color=auto -l'
alias l='ls --color=auto -la'
alias vi="vim"

SSH läbi mitme masina

~/.ssh/config faili lisada:

Host *%*
ProxyCommand ssh $(echo %h | awk -F%% '{OFS="%%"; NF--; print $0}') nc $(echo %h | awk -F%% '{print $NF}') %p

Edaspidi saab ühe käsuga läbi mitme masina ssh'd teha nii:

ssh esimene.masin.ee%teine.masin.ee
ssh viimase_masina_kasutaja@esimene.masin.ee%teine.masin.ee
ssh viimase_masina_kasutaja@esimene.masin.ee%teine.masin.ee%kolmas.masin.ee

SCP läbi mitme masina

Oma masinast ssh tunnel käima:

ssh -A -N -L 1234:destination.server.ee:22 -l gate_username gate.server.ee
ssh -A -N -L 1234:sqldump.dtv.elion.ee:22 -l rene ybershell.estpak.ee

SCP üle tunneli:

scp -P 1234 destination_user@127.0.0.1:/dest/dir/files.txt .

psql

# save select result as CSV (run it in psql command line and don't forget the \)

 \copy (select * from device) to /tmp/result.csv with delimiter ',' null as '' csv header;

psql postgres user access

# shows a list of all the tables and views with info which group has which access to it

 \dp
 \dp ticket*

# nice list of all users and to what groups do they belong to

SELECT r.rolname, r.rolsuper, r.rolinherit,
  r.rolcreaterole, r.rolcreatedb, r.rolcanlogin,
  r.rolconnlimit, r.rolvaliduntil,
  ARRAY(SELECT b.rolname
        FROM pg_catalog.pg_auth_members m
        JOIN pg_catalog.pg_roles b ON (m.roleid = b.oid)
        WHERE m.member = r.oid) as memberof
, r.rolreplication
, r.rolbypassrls
FROM pg_catalog.pg_roles r
WHERE r.rolname !~ '^pg_'
ORDER BY 1;

# similar as above, but with less info

  \du 

# bulk granting of privileges to a single user or a group (it's the same thing in Postgres)

  GRANT SELECT ON ALL TABLES IN SCHEMA sync TO readonlydev;
  GRANT SELECT, UPDATE, DELETE, INSERT ON ALL TABLES IN SCHEMA sync TO dev;
  GRANT SELECT, UPDATE ON ALL SEQUENCES IN SCHEMA sync TO dev;

ybershell.estpak.ee

Igasugune ssh ligipääs käib Elionis tänapäeval ybershell.estpak.ee kaudu. Selleks, et seda võimalikult mugav kasutada oleks kogume siia alla häid näpunäiteid.

alias

Nii nagu igas masinas on ka yberis mõistlik kasutada alias'i, et kiirelt ja lihtsalt jõuda sealt edasi kuhu vaja. Selleks, et aliased toimiks tuleb need kirjutada kodukataloogi .bashrc faili (vim ~/.bashrc). List aliastest, mida näiteks nutiTV inimesed võivad kasutada:

alias devel='ssh rene@194.126.108.195'
alias dtv_controller='ssh erki@194.126.108.216'
alias dtvapi1='ssh dtvmw@194.126.108.210'
alias dtvdevelapi='ssh dtvmw@develapi.mw.elion.ee'
alias logger='ssh 88.196.0.29'
alias stbmng='ssh stbmng.dtv.elion.ee'
alias web1='ssh dtvmw@194.126.108.221'
alias web2='ssh dtvmw@194.126.108.222'
alias web4='ssh dtvmw@194.126.108.194'
alias web5='ssh dtvmw@194.126.108.205'
alias web6='ssh dtvmw@194.126.108.208'
alias web7='ssh dtvmw@194.126.108.211'
alias web8='ssh dtvmw@194.126.108.212'
alias web9='ssh dtvmw@194.126.108.213'

Kui lisad uue aliase, siis pead selle rakendumiseks tegema (source ~/.bashrc) või yberist korra välja logima.

ilma paroolita (ssh-key'ga) sisselogimine

Väga mõistlik on korra kätte võtta ja oma ssh public key sihtkoha masinatesse panna, et edasipdi alati kiirelt ilma parooli trükkimata neisse sisse saada.

Selleks pead kõigepealt oma masinas endale võtmepaari genereerima (kasuta tühja passphrase'i):

ssh-keygen -t rsa -b 2048

Nüüd võta enda masina kodukataloogist enda avalik võti:

vim ~/.ssh/id_rsa.pub

… ja kleebi see nendesse masinatesse kuhu ilma parooli tagumata (ssh võtmega) soovid edaspidi sisse saada .Paljudes masinates on authorized_keys fail juba olemas, siis pane enda võti sinna viimasele reale juurde. Kui faili pole, siis tee see. Vaata, et su võtmes kopeerimise tulemusel reavahetusi sees ei oleks:

vim ~/.ssh/authorized_keys

Eimesena pead oma avaliku võtme yberisse panema. Ja edasi siis kõgisse järgmistesse. NB! Alati pead kasutama enda masinas genereeritud avalikku võtit. yberis uusi võtmeid genereerida ei tohi!

Kui pärast avaliku võtme lisamist mõnda masinasse sinna sisse logimisel ikka passi küsitakse, siis tee seal:

chmod u+x ~/.ssh

Selleks, et sama võtmega ka yberist edasi saaks liikuda pead kõigepealt enda masinas käivitama ssh-agent'i (vt. all olevat peatükki) ning yberisse logides alati kasutama ssh võtit -A (ssh -A ybershell.estpak.ee).

screen

Iga normaalne inimene kasutab yberis screen'i ;)

Kuigi screen'i mõte ongi koguaeg valmis ja ootel olla, siis esmakordsel kasutamisel tuleb ta luua ning kui yberile buuti tehakse, siis paraku tuleb ta ka uuesti luua. Seega elu lihtsustamiseks on üsna mõistlik luua screeni conf, mis käivitamisel juba sinu eest õigete nimedega õiged aknad lahti võtab. Ning kui oled ssh-key'ga autentimise kõikjal käima ajanud (vt. eelmist punkti), siis võtab ta kohe ka ssh'd kõigisse vajalikesse kohtadesse üles.

Selle saavutamiseks võta yberis lahti enda screeni confi fail:

vim ~/.screenrc

ning koosta endale sobiv conf selle näite alusel (screen -t ”<akna nimi>” <akna number> <käsk, mis aknas käivitada>):

screen -t "SQL new MW (web4)" 1 ssh dtvmw@194.126.108.194
screen -t "SQL VOD" 2 ssh dtvmw@194.126.108.210
screen -t "SQL devel MW" 3 ssh 194.126.108.195
screen -t "SQL dhcp" 4 ssh dtvmw@194.126.108.210
screen -t "logger" 5 ssh 88.196.0.29
screen -t "stbmng" 6 ssh stbmng.dtv.elion.ee
screen -t "MW API" 7 ssh dtvmw@194.126.108.210
screen -t "devel MW API" 8 ssh dtvmw@develapi.mw.elion.ee
screen -t "web1" 9 ssh dtvmw@194.126.108.221
screen -t "web2" 10 ssh dtvmw@194.126.108.222
screen -t "yber" 11

Enne kui seda screen'i looma hakkad vaata üle:

  1. kas sul aliased on ilusti paigas (muid pead lisamisel pärast eraldi igas screeni aknas need aktiveerima)
  2. kas oled oma ssh avalikud võtmed kõigisse soovitud masinattes kopeerinud
  3. kas sul enda masinas ssh-agent käib ning oled yberisse loginud -A võtmega. Selleks käivita yberis käsk: ssh-add -L

Kui kõik eelnev korras ja nüüd lihtsalt screen käsuga screeni käivitad, siis tehakse sulle kohe 11 aknaga screen, kus on ilusti olemas juba mõistlike nimedega ja sisse logitud ssh sessioonid vajalikesse kohtadesse.

Edaspidi kui soovid seda screeni yberis külge võtta, siis nagu ikka teed lihtsalt screen -rd

SSH Agent

Näide ssh-agendi kasutamisest. Kõigepealt pead enda masinas ssh-agendi tööle panema:

spirit@kriszi-l:~$ ssh-agent

SSH_AUTH_SOCK=/tmp/ssh-HDwqLP9643/agent.9643; export SSH_AUTH_SOCK;
SSH_AGENT_PID=9644; export SSH_AGENT_PID;
echo Agent pid 9644;

spirit@kriszi-l:~$ ssh-add

Enter passphrase for /home/spirit/.ssh/id_rsa:
Identity added: /home/spirit/.ssh/id_rsa (/home/spirit/.ssh/id_rsa)

ssh'ga yberisse logimisel peab alati -A v6ti kaasas olema, et agendi conf kaasa liiguks
spirit@kriszi-l:~$ ssh -A ybershell.estpak.ee

nüüd logi ssh'ga ybershelli sisse ja kontrolli alljärgneva käsuga, kas sinu key on kaasas:
spirit@uus-ybershell:~$ ssh-add -L

ssh-rsa   AAAAB3NzaC1yc2EAAAABIwAAAQEA9Jl3aQObLLzuu3oSMbzZUt+u9/8jEE2tIXFJ73+mWJxmJrECm/1qQKLn9gOLzj13CwA5SBIJrF9ugkrMCyTQAlrXrdd9uOmV0xN6y7xH2/6QJprjcPwCvVkyY3oc1OIrpMQeWcRXGBQMghrtZmt0Z/8wr0VzRTN5z+m51L2iWo59w9i4XZRmlIptoirWT2Gbyhi7DPPG9yMJKpyigMWvAiQyBZ4hL6UUdjwBu4TC+wXo0zRB6c0gaPm+E+LKnyuEB/908E4iOEV7RPXp9ZdqgF8qidUYKz6forT3PKwX59SIjOQdeMdsiMC6UgK/D4o+w077oXHX3aS/En7uIpg0zQ== /home/spirit/.ssh/id_rsa

XMLRPC client (python)

Run python in shell and type:

import xmlrpclib
server=xmlrpclib.Server('<server>')
print server.device.getInfo('serial', 'M91206FGE46')

Wiki upgrade

# create backup

cd /var/www/wiki/
tar zcpfv /home/rene/dokuwiki-backup.tar.gz /var/www/wiki

# download latest version

https://download.dokuwiki.org/
cd /tmp
wget https://download.dokuwiki.org/out/dokuwiki-c67aac87d.......

# install it

tar zxvf /tmp/dokuwiki-xxxx-xx-xx.tgz
'cp' -af /tmp/dokuwiki/* /var/www/wiki/

# set right permissions

sudo find /var/www/wiki/data -type d -exec chmod 770 {} +
sudo find /var/www/wiki/data -type f -exec chmod 660 {} +
unix.txt · Last modified: 2024/08/05 18:03 by 194.126.117.20