Cajón de sastre

Introducción

Este es mi pequeño cajón de sastre (o cajón desastre). Un lugar para poner todas esas cosas que resulta útil poder consultar de vez en cuando, pero que no encajan o no tienen suficiente contenido para tener una sección propia.

 

Administración

Linux

Misc

Reiniciar Linux 'suavemente' cuando se ha quedado colgado (y CTRL+ALT+SUPR no funciona):

Pulsar ALT+SysRq (ImprPant) y sin soltar teclear REISUB (dejando algunos segundos entre cada tecla):

R: raw - teclado en modo directo
E: end - pedirle a los procesos que terminen (si pueden, SIGTERM).
I: kill - matar los procesos que no hayan terminado (forzar su cierre, SIGKILL).
S: sync - Volcar (sincronizar) el buffer de escritura a disco.
U: umount - desmonta los sistemas de ficheros .
B: reboot - reinicia el ordenador.

 

SSH

Conectarse por SSH sin password:
ssh-keygen -t rsa; ssh-copy-id -i ~/.ssh/id_rsa.pub usuario@maquina-remotao
ssh-keygen -t rsa; scp ~/.ssh/id_rsa.pub usuario@maquina-remota:~/.ssh/authorized_keys2

 

dd / ddrescue / recuperación de discos

Clonar un disco con dd si no hay errores (más rápido al copiar bloques grandes):
dd bs=4M if=/dev/sda of=/dev/sdb

Clonar un disco con dd ignorando errores (ignorando sectores defectuosos tras un desastre):
dd bs=512 if=/dev/sda of=/dev/sdb conv=noerror,sync

Clonar un disco con ddrescue (equivalente a lo anterior):

ddrescue -v /dev/sda /dev/sdb

Hacer una imagen (comprimida de disco) con dd, mostrando el progreso para un disco de 120 gigas:
dd bs=4M if=/dev/sda | pv -brept -s 120g | gzip > imagen.bin.gz

Aun más rebuscado... Hacer una copia de seguridad comprimida de un disco local (de 500GiB) a un equipo remoto de forma segura (sobre SSH) y mostrando progreso:
sudo dd if=/dev/sdc | pv -brept -s 500g | gzip | ssh usuario@maquina-remota dd of=imagen.bin.gz

 

Regenerar el UUID de una partición (tras clonarla por ejemplo):
tune2fs -U random /dev/sda1

Comprobar el UUID de una partición (para añadirlo a /etc/fstab por ejemplo). Cualquiera de estas alternativas ayudará:

vol_id /dev/sda1blkid /dev/sda1ls -l /dev/disk/by-uuid/

 

Servicios

Iniciar / parar / reiniciar un servicio en Debian (y Ubuntu)
sudo /etc/init.d/nombreDelServicio start        # stop, restart...

Añadir un servicio en Debian (y Ubuntu):
cd /etc/init.d
sudo cp skeleton nombreDelServicio
sudo chmod u+x nombreDelServicio
vi nombreDelServicio        # (editar el script para ejecutar el programa deseado)
update-rc.d nombreDelServicio start 99 2 3 4 5 . stop 0 1 6 .

Eliminar un servicio en Debian (y Ubuntu):
update-rc.d –f nombreDelServicio remove

 

Apt/dpkg

Listar todo el software instalado (mediante paquetes) en el equipo (para instalarlo en otro equipo tal cual :D ):
dpkg --get-selections > pkg.list

 

Find/Grep/Awk...

Buscar archivos que contengan cierto texto, y evitar problemas con los archivos que contengan espacios en el nombre:
find . -type f -print0 | xargs -0 grep -l 'cadenaBuscada'o
find . -name "patronArchivos" -type f -print0 | xargs -0 grep -l 'cadenaBuscada'Reemplazar todas las coincidencias de texto en un archivo (ver http://www.ee.ucl.ac.uk/~hamed/misc/awk1line.txt):
cat archivo.txt | awk '{gsub(/texto-a-reemplazar/,"texto-reemplazado");print}' > archivo-salida.txt

 

Rsync

Copiar un directorio
rsync -av directorioorigen/ directoriodestino/Duplicar un directorio (borra archivos que no existan en origen)
rsync -av --delete  directorioorigen/ directoriodestino/Actualizar un directorio (borra archivos que no existan en origen, pero no sobreescribe archivos más nuevos en destino)
rsync -av --delete -u directorioorigen/ directoriodestino/Backup incremental diario de un directorio (las versiones antiguas de archivos modificados se mueven a otro directorio)
rsync -avb --delete --backup-dir=../backup_$(date -d yesterday +%y-%m%-d) directorioorigen/ backup_actual/Backup completo diario, conservando antiguo backup completo y usando sólo el espacio necesario para las diferencias (hard links a los archivos no modificados)
rsync -av --delete --link-dest=../backup_$(date -d yesterday +%y-%m%-d_%H-%M) directorioorigen/ backup_$(date +%y-%m%-d_%H-%M)/

 

Vi

Eliminar los ^M al final de un archivo de texto importado desde Windows; en vi escribir:
:%s/^V^M//g

Evitar que al pegar texto se retabule (conservar la tabulación del texto pegado):
:se noai

 

Compilar e instalar PHP con GD nativo

(http://cumu.li/2008/5/13/recompiling-php5-with-bundled-support-for-gd-on...):

# Instalar herramientas básicas
apt-get install build-essential debhelper fakeroot
# Ruta para el código fuente
cd /usr/src
# Descargar el código de PHP
apt-get source php5
# Instalar las dependencias necesarias para compilar PHP
apt-get build-dep php5
# Editar la configuración
cd php5-5.2.3
vi debian/rules
# Sustituir "--with-gd=shared,/usr " por "--with-gd=shared "
# Compilar (¡lleva un buen rato!)
dpkg-buildpackage -rfakeroot
cd ..
# Instalar el nuevo paquete que hemos compilado con GD incluido.
dpkg -i php5-gd_5.2.3-1ubuntu6.3_i386.deb

 

Depurar cabeceras HTTP con TCPDUMP

# sudo tcpdump -s 0 -l -A 'tcp dst port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

 

Webs útiles

 

 

Windows

 

SSH

Instalar OpenSSH (sobre Cygwin)

- Agregar los paquetes Admin -> cygrunsrv y Net -> openssh
- En un terminal bash de cygwin:
ssh-host-config -y- Cuando nos pregunte por "CYGWIN=" responderemos con:
tty ntsec- Iniciamos el servicio:
net start sshd

 

Ejecutar un comando remoto sobre SSH usando Putty (desde Windows contra una máquina remota Linux por ejemplo) y sin tener que teclear la contraseña cada vez que lo usamos:
plink.exe USUARIO@MAQUINA -pw PASSWORD -P PUERTO "COMANDO REMOTO"

 

Webs útiles

  • XP Tweaks - Scripts y archivos .reg reutilizables para 'tunear' Windows.

 

 

Servidores

Webs útiles

 

 

Programación

Webs útiles

Misc (un poco de todo)

 

Patrones

 

Groovy
  • Groovy - Si juntamos Java y Ruby tenemos Groovy; esta es la página principal del proyecto.

 

PHP
  • PHP.net - La guía de referencia fundamental.
  • PHPUnit - Framwork para tests unitarios en PHP.
  • Debugging PHP - Un tutorial breve de PHPUnit.

 

AJAX

 

CSS