- Evitar caracteres raros al mover el cursor en un editor de vim por ssh:
:set nocompatible
Puedes añadirlo a tu vimrc
- Rescan del bus scsi (por ejemplo para reconocer un disco en caliente):
[bash]for f in /sys/class/scsi_host/host*; do echo «- – -» > $f/scan; done[/bash]Y junto con esto lo uso mucho para por ejemplo para agrandar en caliente una partición lógica:[bash]pvcreate /dev/sdX
vgextend VG_NAME /dev/sdX
lvextend -l +100%FREE /dev/mapper/<lvm_name>
resize2fs /dev/mapper/<lvm_name>[/bash]
- Restar dos fechas:
expr $(expr `date -d"12/31/2012" +%s` - `date -d "07/16/2012" +%s`) / 86400
- Convertir un número de segundos a hora:minutos:segundos
date -ud "@num_of_seconds" +%H:%M:%S
Menos mal que encontré los formatos aceptados por date… http://www.gnu.org/software/coreutils/manual/html_node/Date-input-formats.html#Date-input-formats
- Procesos a la espera de I/O (contabiliza en la carga del sistema):
[bash]top -b -n 1 | awk ‘{if (NR <=7) print; else if ($8 == «D») {print; count++} } END {print «Total status D (I/O wait probably): «count}'[/bash]
- Para conservar el display entre usuarios cuando haces un ssh -X: [bash]ssh -X root@server xauth list su – user xauth add <línea de=»» la=»» list=»» salida=»» xauth=»»>[/bash]
- Cortar video con ffmpeg [bash]ffmpeg -vcodec copy -acodec copy -strict experimental -ss hh:mm:ss -t hh:mm:ss -i [/bash] -ss indica dónde empezar a cortar -t es la duración del clip nuevo
- Localizar archivos antiguos y saber cuánto ocupan en total
[bash]a=180; find . -type f -atime +$a -mtime +$a -exec stat -c ‘%n %s’ ‘{}’ \; | awk ‘BEGIN {totalSize=0}; {print; where=match($0, /\ [0-9]+$/); size=substr($0, where+1, length($0)-where); totalSize=totalSize + size}; END {print totalSize}'[/bash]
En este caso la antigüedad se fija en 180 días; es decir, busca archivos que no se hayan accedido Y que no se hayan modificado en los últimos 180 días. Se puede añadir por ejemplo -size +1G para buscar archivos de más de 1GB
UPDATE: con formato human readable:
[bash]a=180; find . -type f -atime +$a -mtime +$a -exec stat -c ‘%n %s’ ‘{}’ \; | awk ‘BEGIN {totalSize=0}; {print; where=match($0, /\ [0-9]+$/); size=substr($0, where+1, length($0)-where); totalSize=totalSize + size}; END {i=1;sunit=»bytes_KB_MB_GB»; split(sunit,unit,»_»); print totalSize» bytes»; while (i<length(unit) && totalsize>1024) { totalSize/=1024; i++}; printf «%d %s aprox\n»,totalSize,unit[i]}'[/bash]
UPDATE: mejorado. Imprime path, tamaño, owner, uid, grupo y gid separado por ‘ / ‘
[bash]a=180; find . -type f -atime +$a -mtime +$a -exec stat -c ‘%n / %s / %U / %u / %G / %g’ ‘{}’ \; | awk -F ‘ / ‘ ‘BEGIN {totalSize=0}; {print; totalSize=totalSize + $2}; END {i=1;sunit=»bytes_KB_MB_GB»; split(sunit,unit,»_»); print totalSize» bytes»; while (i<length(unit) && totalSize>1024) { totalSize/=1024; i++}; printf «%d %s aprox\n»,totalSize,unit[i]}'[/bash]
UPDATE: se puede quitar el stat…
[bash]a=180; find . -type f -atime +$a -mtime +$a -printf «%p//%s\n» | awk -F ‘//’ ‘BEGIN {totalSize=0}; {print; totalSize+=$2}; END {i=1;sunit=»bytes_KB_MB_GB»; split(sunit,unit,»_»); print totalSize» bytes»; while (i<length(unit) && totalSize > 1024) { totalSize/=1024; i++}; printf «%d %s aprox\n»,totalSize,unit[i]}'[/bash]
- Para saber la shell sobre la que estamos: [bash]readlink /proc/$$/exe[/bash] No, la variable $SHELL no contiene la shell que se está ejecutando actualmente, sino la login shell. $$ contiene el PID actual
- Para pegar código en vim, sin que te descuadre lo que estás pegando [bash]:set paste[/bash]
- tips con /etc/sudoers (editar con visudo)
# El usuario 'mik' puede ejecutar el script /usr/local/script.sh sin que le pida pass mik ALL=NOPASSWD:/usr/local/script.sh # El usuario 'mike' puede ejecutar /usr/bin/tomcat como si fuera el usuario 'miguel', sin pass: mike ALL=(miguel) NOPASSWD:/usr/bin/tomcat # El usuario 'perico' puede hacer un sudo sin pedir password. Añadir a la última línea: perico ALL=(ALL) NOPASSWD: ALL
- Encontrar qué paquete contiene un determinado fichero en Debian (equivalente a yum provides): [bash]apt-file update && apt-file search filename[/bash]
- Listar el contenido de un paquete no instalado:
apt-file list package
- Interceptar la salida estándar o errores de otro proceso:
strace -ff -e trace=write -e write=1,2 -p SOME_PID
- Encontrar archivos repetidos (mismo tamaño y md5):
find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate
- Apagar un monitor por ssh:
xset -display :0 dpms force standby
- Ejecutar un script de bash en modo debug:
bash -x script.sh
- Convertir números a distintas bases: [bash]bc <<< ‘obase=2;3454’ # convierte el número 3454 a binario bc <<< ‘obase=16;3454’ # hexadecimal bc <<< ‘obase=60;3453’ # hora:minutos:segundos[/bash]
- Para copiar al portapapeles la salida de cualquier comando: [bash]ls -la | xsel –clipboard[/bash]
- Para convertir un número bytes en KB, MB o GB (human readable):
humanReadableSize() { echo $1 | awk 'BEGIN{hum[1024**3]="GB";hum[1024**2]="MB";hum[1024]="KB";} { for (x=1024**3; x>=1024; x/=1024){ if ($1>=x) { printf "%.2f %s\n",$1/x,hum[x];break } }}$0<1024{print $0 " bytes"}'; }Después, en bash llamamos a la función con el parámetro (número) que queremos convertir
- Uptime de Windows:
systeminfo|find "Boot Time"
Dependiendo de la versión de Windows, el campo puedes ser «Up Time» o similar
- Hacer un tcpdump de todos los puertos a la escucha (en interfaces distintas al localhost), excepto por ejemplo el de ssh
a="tcpdump -i any -nn port 0 $(for port in `netstat -ntlpu 2>/dev/null|egrep -v 127.0.0.1|egrep -v ":22"|egrep -o ":[0-9]+[[:space:]]+"|cut -f2 -d':'|sort|awk 'a != $0; { a = $0 }'`; do echo -n " or port "$port;done)"; echo $a; eval $a
- Para hacer word wrapping en vim (40 caracteres por ejemplo)
:set tw=40
- Sumar una secuencia de números de la salida estándar, por ejemplo:
echo -e 1\\n2\\n5|awk '{sum+=$1}END{print sum}' 8Por ejemplo estoy puede venir bien para saber cuánta memoria usa un proceso que lanza subprocesos (con el mismo nombre):
ps -C processName -o rss=|awk '{sum+=$1}END{print sum}'
- Monitorizar procesos ordenados por uso de cpu, por si no tenemos htop instalado por ejemplo:
watch ps --sort -pcpu -eo pid,ppid,s,tid,nlwp,sched,rtprio,ni,pri,psr,sgi_p,pcpu,stat,eip,wchan:25,f,args:80
- Traps en bash, para por ejemplo borrar archivos temporales que crea un script cuando se presiona ^C:
set -f trap "rm /tmp/temporal; exit 1" SIGINT SIGTERM EXIT
En este caso, se borra el archivo /tmp/temporal cuando se presiona ^C o se termina el script. Como bonus y curiosidad, set -f deshabilita la generación de nombre de archivos, de forma que por ejemplo si se hace un ‘echo *’, imprima realmente un *, en vez de expandirlo a los nombres de ficheros correspondientes
- GRUB2 tips:
cat /etc/default/grub ... # es conveniente comentar la línea siguiente. En caso contrario, en ocasiones el menú de grub no aparecerá a menos que presiones SHIFT en el arranque. Si quieres, puedes dejar la variable sin comentar pero sin asignarle valor: GRUB_HIDDEN_TIMEOUT= # GRUB_HIDDEN_TIMEOUT=0 # y esto para que siempre use la consola de texto: GRUB_TERMINAL=console ...
No olvidar ejecutar update-grub2
- ifenslave, bonding, etc.
En el directorio /sys/class/net/ se encuentran las interfaces de red definidas en el sistema, entre ellas las de bond. Dentro de cada directorio por ejemplo /sys/class/net/bond0 se puede ver información de la interfaz, como cuáles son los esclavos asociados a una interfaz bond (/sys/class/net/bond0/bonding/slaves) o cuál es el slave activo (/sys/class/net/bond0/bonding/active_slave)/sys/class/net/ /sys/class/net/bond0/bonding/slaves /sys/class/net/bond0/bonding/active_slave
- Para saber los bancos y módulos de RAM instalados:
dmidecode -t memory
- Processor / memory bandwidth in GB/s
dd if=/dev/zero of=/dev/null bs=1M count=32768
- Para arreglar el error de cups «/usr/lib/cups/backend/dnssd failed», borramos la impresora y la añadimos especificando la URI a mano de esta forma:
socket://PRINTER_IP:9100
- Compilar/crear un ejecutable estático, una de estas 2 opciones:
./configure --enable-static LDFLAGS="-static" ./configure
- Echar un vistazo rápido al uso en disco:
# files top 10 find . -type f -print0 2>/dev/null| xargs -0 du 2>/dev/null| sort -nr | uniq | head -10 | cut -f2 | xargs -I{} du -sh {} # dirs top 10 find . -type f -print0 2>/dev/null| xargs -0 du 2>/dev/null| sort -nr | uniq | head -10 | cut -f2 | xargs -I{} du -sh {} - Abrir una segunda instancia de una aplicación:
nohup dbus-run-session audacious &