Generare liste di numeri per i loop
Il comando seq permette di generare sequenze numeriche utilizzabili ad esempio in loop come
for a in $(seq 1 10); do echo $a; done
questo genera sequenze come 1, 2, 3, 4, 5, 6, 7, 8, 9, 10.
Alle volte per eseguire loop su nomi di file è utile avere liste con numeri di cifre fisse. Il comando seq ha un’opzione per specificare il formato.
seq -f '%02g' 0 23
genererà ad esempio una lista 00, 01, 03, 04, 05, 06, 07, 08, 09, 10, 11, etc…
Format di output
Si consideri
for a in $(seq 1 10); do echo $a; find . -name "*${a}*" |wc -l; done
Questo metterà su righe di echo differenti l’output rendendolo poco chiaro. echo per fortuna permette di non mettere il carattere di nuova riga
for a in $(seq 1 10); do echo -n $a " "; find . -name "*${a}*" |wc -l; done
ssh tunnel
ssh permette di utilizzare un server conn ssh daemon attivo come ponte criptato verso servizi visibili al server remoto.
ssh -L [local port]:[remote IP hidden]:[remote port Hidden] -p [sshd listen port] [remoteuser]@[remote IP]
Una volta eseguito questo comando il computer locale avrà stabilito un canale criptato verso il deamon sshd in ascolto a [remote IP] sulla porta [sshd listen port] usando l’utente [remoteuser]. Tutti i pacchetti TCP inviati su localhost alla porta [local port] saranno trasferiti attraverso il canale criptato al server sshd remoto che li consegnerà a [remote IP hidden] sulla porta [remote port Hidden]. Tipicamente gli ultimi due parametri sono su di una porta locale.
curl
Alle volte è necessario recuperare un sito web su un ip che non viene definito dal DNS. Lo si può fare senza editare il file hosts utilizzando il comando curl:
curl -H "HOST: [dominio]" "http://[IP]/[parametri]"
Limitare la banda
per limitare la banda utilizzata da un comando che non ha opzioni specifiche si può quasi sempre utilizzare
trickle.
Ad esempio:
trickle -u 2560 -d 2560 aws s3 sync ...
limiterà la banda a 20Mbit
Registrare il massimo valore di load raggiunto in un periodo
export let LOAD=0,1; while [ true ]; do export let CURRENT_LOAD=$(w|head -1|awk '{print $8}'|awk -F, '{print $1 "," $2 }'); export let LOAD=$(awk -vMAX=$(echo ${LOAD}|tr "," ".") -vCURR=$(echo ${CURRENT_LOAD}|tr "," ".") 'BEGIN{ if( MAX < CURR ) print CURR; else print MAX }'); echo $LOAD; sleep 1; done
In se il problema è semplice ma la bash non supporta il confronto tra grandezze decimali e ho dovuto gestire la differenza tra la notazione italiana e inglese dei decimali.
Il confronto viene quindi fatto in awk.
Convertire ldirectord.cf in csv
a volte per riorganizzare i pool e iserver su di un bilanciatore può essere utile averli su di un formato differente.
#!/usr/bin/python3 from pprint import pprint debug = False file = 'ldirectord.cf' a = open(file, 'r') itemList = a.readlines() a.close() riga = [] struttura = {} linea = "" # leggo dati for line in itemList: riga=line.lstrip("\t ").rstrip("\n").split("=") if ( riga[0] == "virtual" ): pool = riga[1] struttura[ pool ] = [] elif ( riga[0] == "real" ): struttura[ pool ].append( riga[1].split()[0] ) #pprint( struttura ) #genero output for chiave, valore in struttura.items(): linea = "" linea += chiave + "," for real in sorted( valore ): linea += real + "," print( linea )
Inviare informazioni sui log di systema
Alle volte è utile aggiungere delle informazioni ai log di sistema.
Per arlo si possono aggiungere ad uno script di sturtup righe come le seguenti
nohup vmstat 60 | logger -t vmstat 2>&1 > /dev/null & nohup iostat 60 | logger -t iostat 2>&1 > /dev/null &
Rigenerare alias di posta
postalias /etc/aliases
e poi riavviare postfix
far eseguire qualche cosa ad un utente senza shell
su - www-data -c 'ulimit -aHS' -s '/bin/bash'
File htpasswd per basic autentication
aggiungere password per basic authentication con strumenti openssl
con l’utente corretto. Si ottiene lo stesso formato di apache
echo -n 'pippo:' >> /etc/nginx/htpasswd openssl passwd -apr1 >> /etc/nginx/htpasswd