:tagbashútils,tagllibreria,tagllib,taglib:
Última actualització: desembre de 2019
Cridar/incorporar/afegir script extern
source calcula_rutes.sh
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
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"
Ets root?
IDUSER=id -u
if (( $IDUSER != 0 )); then echo "Ho sento, has de ser root per a poder executar això." exit fi
==== 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
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'
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
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 {} \;
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
Passar de string a integer
BTCUSD="1230.00"
Hem de tenir present sempre que bash només treballa amb integer. Si volem treballar amb decimals, tenim zsh p.e.
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.