• 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
  • 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}'
    8

    Por 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 &
Trucos, notas, fixes y consejos
Etiquetado en:    

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *