bash. Llibreria s'scripts útils
:tagbashútils,tagllibreria,tagllib,taglib:
Última actualització: desembre de 2019
Arrays: Manipulació d'arrays
Backups: Backups
Bucles
Cridar/incorporar/afegir script extern
source calcula_rutes.sh
Compressió
Comprimir tots els fitxers d'un directori
#!/bin/bash
for i in $( ls -1 ); do
tar cvzf \(i.tar.gz pwd
/\)i
#echo $i
done
Dia i hora: Manipulacio de dates i hores
Noms de fitxers amb data
Podem fer servir els accents oberts per enviar variables a la línia de
commandaments. Per exemple podem crear directoris que continguin la data amb
l'expressió:
mkdir `date +%Y-%m-%d
`
Calendari perpetu
date -d "9/24/2004" +"%a" és un divendres (dv). Si volem el resultat en número: date -d "9/24/2004" +"%w"
Dialog: Interacció amb l'usuari
Ets root?
IDUSER=id -u
if (( $IDUSER != 0 )); then echo "Ho sento, has de ser root per a poder executar això." exit fi
Encoding: Encoding and decoding strings
Find: cerques, substitucions...
==== Buscar fitxers
Buscar una expressió a un directori i següents subdirectoris:
grep -nr '192.1.200.251' .
Buscar a partir d'una carpeta tots els directoris buits i esborrar-los
Ho fa el programari fslint
Buscar tots els fitxers que comencen per punt (ocults) a un directori i subdirectoris
Per a poder trobar-los hem de fer servir aquesta expressió regular:
.[^.]*
Llistar els fitxers modificats les últimes 24 h
find /var/log -mtime 0
Trobar i copiar a la carpeta "NOMESZIP" tots els fitxers zip que trobem al directoris i subdirectoris
find . -name '*.zip' -exec sh -c 'exec cp -f "$@" NOMESZIP/' X '{}' +
==== Cercar i/o obtenir text a dintre de fitxers
Obtenir d'un fitxer de text les línies que no comencin per ; o #
grep "[#;]" smb.conf
Comprovar si està un literal en un fitxer
SILINIA=grep elmeutextquevulltrobar ~/.vimrc
- comprovem caràcters tornats per grep
- if [ ${#SILINIA} -ge 58 ]; then
- echo "OK"
- else
- echo "no l'he trobat"
- fi
Llegir un fitxer, línia a línia, amb while
while read linea; do
echo "$linea"
done < /ruta/al/fichero.txt
==== Substitucions de text en fitxers
Reemplaçar una cadena a un fitxer file.txt
while read LINIA ; do echo ${LINIA//abc/XYZ} ; done < /tmp/file.txt > /tmp/file.txt.t ; mv /tmp/file.txt{.t,}
Reemplaçar un text buscant a tots els fitxers d'un directori (en aquest cas buscarem a tots els fitxers *.sh)
find . -name '*.sh' | xargs perl -pi -e 's/textantic/textnou/g'
Fitxers
Comprovar si no existeix un fitxer o un directori
Farem servir d pels directoris i l pels enllaços simbòlics:
if [ ! -f '/home/bmw/KeePassX/passwords2.kdbx' ]; then if [ ! -d '/home/bmw/KeePassX' ]; then
chmod només a fitxers i no a carpetes
find . -type f -print0 | xargs -0 chmod +x find . -type f -print0 | xargs -0 chmod 755
Internet: (veure "Xarxa")
Launchers: Llençadors
Missatges: Mostrar missatges i generació de logs
Guardem només els logs dels últims 15 dies
cp /usr/mylogs/dailyBackup/logs.backup.tgz /usr/mylogs/dailyBackup/histo_logs_backups/date +%Y-%m-%d
.tar.gz
find /usr/mylogs/dailyBackup/histo_logs_backups_/*.tar.gz -mtime +14 -exec rm -f {} \;
Paràmetres: Parseig paràmetres
Sistema: Interacció amb el sistema
Matar tots els processos d'un programa
killall -9 -r -v evolution
Matar una aplicació
kill -SIGHUP $(pidof telegram-desktop)
Monitor de memòria (Hem de tenir instal.lat watch i vmstat)
watch vmstat -sSM
Si existeix un fitxer apaga la màquina
#!/bin/bash
if [ -e /zxspec.jpg ]; then
rm /zxspec.jpg systemctl poweroff
else
exit 0
fi
Alies per defecte a RedHat
Alies de "seguretat" per a no eliminar coses sense voler, quan fem moviments o eliminacions.
alias cp='cp -i' alias l.='ls -d .* --color=auto' alias ll='ls -l --color=auto' alias ls='ls --color=auto' alias mv='mv -i' alias rm='rm -i'
Llavors si per exemple volem fer un rm sense que ens pregunti, em de fer:
\rm
grep de ps -aux sense que surti la meva instrucció grep
ps -aux | grep [v]im
Strings: Manipulating strings
Passar de string a integer
BTCUSD="1230.00"
- Trunco decimals
- BTCUSDR=${BTCUSD%.*}
- De string a num
- BTCUSDR=\(((\)BTCUSDR + 0))
Hem de tenir present sempre que bash només treballa amb integer. Si volem treballar amb decimals, tenim zsh p.e.
Variables: Manipulació de variables
Testing: Coses pendents de testejar
Xarxa
Compartir un fitxer pel port 80 sense tenir instal.lat un servidor web (hem de tenir instal.lat netcat)
nc -w 50 -v -l -p 82 < fitxer.txt
Penjar un fitxer a un ftp des d'un script (hem de tenir instal.lat curl)
curl -u user:passwd -T fitxer_a_penjar.txt ftp://servidor_iremot/subdirectori/
També podem obtenir un llistat del directori remot a l'ftp:
curl -u user:passwd ftp://servidor_remot/subdirectori/
Descarregar totes les URL que tenim a un fitxer
cat url-list.txt | xargs wget –c
Localitzar IP duplicades a una xarxa (hem de tenir instal·lat arping
j=1
while [ $j -lt 254 ]; do
arping -d -i eth0 -c 2 192.168.1.$
j=\([\)j+1]
done
Si rebem varies respostes des de diferents MACs, tenim un problema.