Archive for 2008

Usar una fonera para desbrickear otra fonera

Miércoles, Marzo 26th, 2008

Por una de esas cosas de la vida el otro día me encontré con una fonera muerta en mis manos y sin mis herramientas/utensilios/materiales/ vacaciones_de_las_tiendas/conocimientos_de_electrónica_necesarios, pero con otra fonera en perfecto estado de funcionamiento, así que con un poco de paciencia, algunas ideas de karman y algo de tozudez conseguí volver a la vida la fonera muerta usando el puerto de serie de la otra.

El proceso no es muy complicado y únicamente necesitamos las dos foneras y 3 cables para poder conectar los pines de las foneras.

Después de seguir el proceso del HOWTO fonera serial port y siguiendo las especificaciones del pinout ( extraido de aquí ) es:
fonera_serial
el cable rojo es 3,3V
el cable azul es masa (gnd)
el cable blanco es recepción (rx)
y el cable naranja es transmisión (tx)

por lo que tendremos que conectar los tres cables entre ellas así:
FONERA LIBERADA             FONERA BRICKEADA
------------------ * *     ------------------ * *
|                | 1 *     |                | 2 *
| CHIP RAM       | 2 *     | CHIP RAM       | 1 *
|                | * *     |                | * *
------------------ 3 *     ------------------ 3 *

Para acceder a la fonera brickeada el orden será el siguiente:
1.- Conectamos los cables 1 y 2 en los dos lados y el 3 sólo en la parte de la fonera liberada.
2.- Encendemos la fonera liberada con el firmware que hemos compilado antes para que nos deje libre el puerto serie.
3.- Accedemos a la fonera liberada por ssh y lanzamos cualquiera de los clientes de terminal que tenemos instalados. ( Con minicom NO he conseguido enviar el break para evitar que el redboot no ejecute el script de arranque y con microcom tampoco con el único es con el picocom).
4.- Encendemos la fonera brickeada.
5.- Pasados un par de segundos conectamos el cable 3.
6.- Esperamos y nos apareceran diversos mensajes si están bien conectados los cables hasta que aparecere redboot y ya podemos mandar el ctrl + c que nos pide para interrumpir la ejecución. Si no nos salen los mensajes de manera entendible alguno de los cables no esta bien conectado y tenemos que revisarlos, en caso que pase un minuto y no hayamos recibido nada apagamos la fonera brickeada, comprobamos los cables y volvemos al paso 4.

Y si lo hemos hecho todo bien (y estamos usando picocom) veremos una salida algo como esto:

root@OpenWrt:~# picocom /dev/ttyS0
picocom v1.4

port is : /dev/ttyS0
flowcontrol : none
baudrate is : 9600
parity is : none
databits are : 8
escape is : C-a
noinit is : no
noreset is : no
nolock is : no
send_cmd is : ascii_xfr -s -v -l10
receive_cmd is : rz -vv

Terminal ready

+PHY ID is 0022:5521
Ethernet eth0: MAC address 00:18:84:15:cd:e4
IP: 0.0.0.0/255.255.255.255, Gateway: 0.0.0.0
Default server: 0.0.0.0

RedBoot(tm) bootstrap and debug environment [ROMRAM]
Non-certified release, version v1.3.0 - built 16:57:58, Aug 7 2006

Copyright (C) 2000, 2001, 2002, 2003, 2004 Red Hat, Inc.

Board: ap51
RAM: 0×80000000-0×81000000, [0×80040450-0×80fe1000] available
FLASH: 0xa8000000 - 0xa87f0000, 128 blocks of 0×00010000 bytes each.
== Executing boot script in 1.000 seconds - enter ^C to abort
^C
RedBoot>

Cuando tengamos el redboot para no tener que repetir cada vez esto lo mejor es usar el comando

fconfig
en la consola y activaremos el redboot por la interfaz de red y aumentaremos el tiempo de espera, dejando el script de arranque sin modificar de la siguiente forma:

RedBoot> fconfig
Run script at boot: true
Boot script:
.. fis load -l vmlinux.bin.l7
.. exec
Enter script, terminate with empty line
>> fis load -l vmlinux.bin.l7
>> exec
>>
Boot script timeout (1000ms resolution): 10
Use BOOTP for network configuration: false
Gateway IP address:
Local IP address: 192.168.1.254
Local IP address mask: 255.255.255.255
Default server IP address:
Console baud rate: 9600
GDB connection port: 9000
Force console for special debug messages: false
Network debug at boot time: false
Update RedBoot non-volatile configuration - continue (y/n)? y
… Erase from 0xa87e0000-0xa87f0000: .
… Program from 0×80ff0000-0×81000000 at 0xa87e0000: .
RedBoot>

Con lo que configuraríamos el redboot que escuche en la interfaz de red en la ip 192.168.1.254 y espere 10 segundos antes de ejecutar el script de inicio ( uso los mismos datos que tiene la imágen de la particion del redboot que hay colgada en diversos sitios de internet).

Y ya tenemos nuestra fonera que la podemos jugar con nuestra fonera sin miedo a romperla y sin tener que mover el mundo para arreglarla.

Dejo unas fotos y acabo hasta el próximo día que tenga que escribir algo.

juntas

primera

segunda

PD. ODIO el tratamiento de wordpress de los tabuladores y espacios.

Uso del puerto serie de la fonera

Miércoles, Marzo 26th, 2008

O en el idioma de Shakespeare HOWTO fonera serial port.
Si tenemos una fonera de las antiguas (2100) y tenemos un portátil que no tiene puerto serie, haciendo unos sencillos pasos podremos usar el puerto que trae aunque venga sin conector, en mi caso para acceder al puerto serie de otra fonera que estaba brickeada para recuperarla.
En el firmware de fon no lo he intentado pero se podria adaptar supongo, aunque por preferencia personal he usado OpenWrt.

Los firmwares por defecto de openwrt activan en el puerto de serie una consola con los mensajes del kernel para poder debuguear, por lo que si queremos usar el puerto tenemos que suprimirlo.
En RedBoot (gestor de arranque que trae) creo que no se pueden pasar parámetros al kernel por lo que tendremos que recompilarlo cambiando la linea de comandos del kernel y quitando la opción de la consola en el puerto serie ( la idea la saqué de este mod que usa el puerto serie para añadirle una interfaz IrDa o infrarrojos a la fonera ).
En mis pruebas ( sin tener ningún puerto serie para ver la salida ) intente usar usar kamikaze 7.09 pero la fonera no me arrancaba por lo que he usado kamikaze 7.07 para hacerlo.
Los pasos a seguir son muy sencillos entendiendo como funciona la creación de las imágenes de OpenWrt.

svn checkout https://svn.openwrt.org/openwrt/tags/kamikaze_7.09/ mipsel

con esto nos bajamos todo el árbol de directorios de kamikaze 7.07

cd mipsel
svn checkout https://svn.openwrt.org/openwrt/packages/ feeds/packages/

con esto nos bajaremos unos cuantos paquetes más que podremos compilar de manera automática, que despues explicaré cómo compilar ya que sino no tendremos cliente de terminal serie que podamos usar.

Para configurarlo ejecutaremos:

make menuconfig

y en Target System escogeremos

Atheros [2.6]

que es la arquitectura que tiene la fonera ( es mips big endian ) y saldremos guardando los cambios.
y además tendremos que modificar el fichero de configuración del init

package/base-files/files/etc/inittab

suprimiendo las líneas que abren la consola en el puerto de serie dejandolo así:

::sysinit:/etc/init.d/rcS S boot
::shutdown:/etc/init.d/rcS K stop

creo que no es necesario eliminar las 3 lineas que he borrado pero preferí curarme en salud despues de pelearme unas cuantas veces con kamikaze 7.09 y no arrancase asi que quizás sólo haria falta quitar la linea de ttyS0.
Para terminar ejecutaremos

make kernel_menuconfig

y en la ruta

Kernel Hacking / Default kernel command string

eliminaremos la parte de use console dejandola así:

rootfstype=squashfs,jffs2 init=/etc/preinit

y en

Device Drivers / Character devices / Serial drivers

desactivaremos

Console on 8250/16550 and compatible serial.

guardamos y salimos.
Cuando hayamos terminado lanzaremos

make

y después de un largo rato ( se baja los paquetes y los compila así que tarda un rato bastante largo ) y nos deja en la carpeta bin/ las imágenes listas para flashear nuestra fonera.

Para flashear se puede cualquiera de los tutoriales como por ejemplo este o este por ejemplo, que resumiendo se traduce en acceder al redboot y ejecutar:

ip_addr -h (ip del servidor de tftp que tendra las imagenes a bajarse) -l (ip de la fonera)/24
fis init
load -r -v -b 0x80040450 openwrt-atheros-2.6-root.jffs2-64k
fis create -b 0x80040450 -f 0xA8030000 -l 0x006F0000 -e 0x00000000 rootfs
load -r -b %{FREEMEMLO} openwrt-atheros-2.6-vmlinux.lzma
fis create -r 0x80041000 -e 0x80041000 vmlinux.bin.l7
fis load -l vmlinux.bin.l7

y reiniciar y ya tendremos nuestra fonera lista para usar el puerto de serie sin que esté ocupado por nada.
En OS X Tiger (10.4.X) para usar el servidor tftp que viene podemos usar este howto aunque si preferimos usar http podemos hacerlo añadiendo “-m http” en las líneas de load y poniendo la ruta completa al archivo por ejemplo la tercera línea quedaría así:

load -r -v -b 0x80040450 /openwrt-atheros-2.6-root.jffs2-64k -m http

y se lo bajaría de la raíz de nuestro servidor web.

Para usar el puerto serie necesitaremos un cliente de terminal serie, que en la distribución por defecto no viene, pero tienen varios listos para compilar.

Para compilar un paquete que viene en la propia distribución únicamente necesitaremos poner los archivos que corresponden al paquete que queremos compilar en la carpeta package y en el make menuconfig seleccionarlos. El proceso se haría de la siguiente manera:
estando en la carpeta mipsel ( donde nos hemos bajado todo el repositorio subversion ) crearemos un link simbólico a las carpetas que queramos compilar, en este caso, los tres clientes de terminal serie que vienen, que son minicom, picocom y microcom de la siguiente manera:

cd package
ln -s ../feeds/packages/utils/picocom/
ln -s ../feeds/packages/utils/minicom/
ln -s ../feeds/packages/utils/microcom/
cd ..

que nos creará los tres archivos simbólicos a las carpetas pertinentes que contienen los archivos necesarios, con lo que ejecutaremos

make menuconfig

y en la sección

utilities / terminal

nos salen los tres programas para marcar.

Si los marcamos como M nos creara el paquete ipk que podremos instalar con el comando ipkg install archivo.ipk (pueden ser direcciones web ya que puede bajárselo), en cambio si los marcamos como * los metería en la imagen del firmware por lo que tendríamos que volver a flashear con la nueva imagen. Como ya tenemos la fonera flasheada y sólo queremos los paquetes los marcamos como M.
Salimos y guardamos y ejecutamos de nuevo

make

y nos generará los paquetes. Los paquetes los genera en bin/packages.

Al tener los paquetes, los pasamos a la fonera y los instalamos y ya podemos usar el puerto de serie para lo que queramos/necesitemos.

Para usar minicom tendremos que configurarlo antes con:

minicom -s

microcom es para “scriptar” la terminal y picocom se lanzaría con:

picocom /dev/ttyS0

Y con esto y un bizcocho ahora me pongo a escribir otro tocho.

PD. Lo he subido aquí para el que lo quiera usar:

openwrt-atheros-2.6-root.jffs2-64k

openwrt-atheros-2.6-vmlinux.lzma

microcom_1.02-1_mips.ipk

minicom_2.3-1_mips.ipk

picocom_1.4-1_mips.ipk

Mejorando la búsqueda en MobileSafari

Lunes, Marzo 10th, 2008

Una de las funciones que se le echa en falta al navegador del iPod Touch/iPhone es la opción de buscar un texto en la web que nos encontramos, pero gracias al intérprete que lleva de javascript en esta web encontramos una bookmarklet que nos ilumina la palabra buscada, pero si tenemos una web muy larga (o un pdf de apuntes pasados a html con este manual) se nos queda corto el bookmarklet ya que pueden ser textos muy largos.Para solucionarlo he creado un par de bookmarklets más usando como apoyo el original, que lo que hacen es llevarte a la aparición anterior/siguiente de la palabra que buscamos.Son los siguientes:buscar siguiente y buscar anterior.El uso es el mismo que el bookmarklet original, los añadimos como favoritos al navegador y antes de ejecutar cualquiera de ellos, ejecutamos el original para que nos marque las ocurrencias, y ya podremos movernos entre las ocurrencias de las búsquedas sin necesidad de pasarnos la vida moviendo la web entera a mano hasta encontrarlas.Saludos y hasta la próxima.

Curiosidades curiosas

Lunes, Febrero 18th, 2008

Hace unos dias un amigo puso una duda en el foro de wadalbertia sobre un conflicto de licencias en un instalador de Apache + MySQL + phpBB2 + (Base de datos del antiguo hackxcrack) que han publicado. Lamentablemente, este instalador es solo para sistemas Microsoft Windows.

No sé por qué, pero se lo tomaron a mal. Le respondieron con ironias, “denúncianos a la benemérita” y cosas por el estilo.

La cosa se lió, intentaron atacar su servidor (posteó el ataque en el foro y ¡voilá! el intento de ataque cesó), le insultaron, le banearon, suplantaron a otro amigo mio, borraron sus post…

La verdad es que no lo entiendo, todo por una puta duda :S.

El caso es que según la licencia de Apache, no hace falta importar los sources. Perfecto. Ahora mi duda es: han editado el código de los archivos del phpBB2 (bajo licencia GPL), eliminando toda referencia a sus creadores en la cabecera. ¿Es esto legal?Miedo me da postear esa duda, no sea que los superexpertos en seguridad himformática vengan a estos lares a molestar.

Bien, cuando los ánimos se relajaron un poco más, un miembro de ese foro, llamado pintxo, dijo que entre los moderadores/administradores se pasaban una imagen de vmware que llevaba instalada una Debian, con el foro portado a GNU/Linux. Así podían ver su preciado foro desde su GNU/Linux.Ahí se me cayó el alma a los pies. Creo que nos hemos vuelto locos todos. ¿Usar otro sistema operativo virtualizado para tener montado un apache+mysql+phpbb y ver un miserable foro?.

Para más INRI, pintxo aseguró que los amigos de KaR]V[aN (osea, Nitz, yo y todos los que pululamos por el irc) teniamos envidia de que no pudieramos hacer una cosa de tal índole intelectual.

¡Y qué casualidad! Justo unos dias después he encontrado este magnífico instalador del foro de hackxcrack para cualquier sistema operativo, sin usar máquinas virtuales (hay que ser gilipollas…).

Lo podeis descargar de aquí.

PD: Os juro por Snoopy, Mafalda y la cobertura de mi móvil que este instalador no lo he hecho yo ni tampoco lo ha hecho Nitz }-).

Fonera (con openwrt) como repetidor

Miércoles, Febrero 6th, 2008

Hace un tiempo pedí una fonera, que básicamente es un punto de acceso wifi, donde además cedes parte de tu ancho de banda para que lo usen los miembros de la comunidad de FON y a cambio tienes varias opciones:

  1. Cobrar parte de lo que pague la gente que use tu punto de acceso.
  2. Poder conectarte a cualquier punto de acceso de la red FON.

La fonera viene por defecto “capada” para que solamente se pueda configurar y acceder a través de su interfaz web, pero usando algunos métodos, se puede llegar a sus tripas y poder acceder al openwrt modificado que lleva.

Las modificaciones hechas, nos limitan las funcionalidades, así que después de acceder a ella, y con este manual, instalamos openwrt y ya podemos usarla para algunas funcionalidades más, como centralita aircrack. También podríamos instalarle dd-wrt, aunque, como preferencia personal, la tengo con openwrt.

Como no había encontrado ningún manual para usarla en modo repetidor con openwr,t me he puesto a intentar hacerlo y la forma es la siguiente (asumo que openwrt ya está instalado como explica en alguno de los links anteriores y nos encontramos en la shell):

wlanconfig ath0 create wlandev wifi0 wlanmode sta nosbeacon

con este comando nos crea una interfaz en modo cliente que será la que usaremos para conectarnos a la red que queremos repetir y la configuraremos con los comandos que siguen:

iwconfig ath0 essid "NOMBRE DE LA RED"

Si tiene encriptación WEP, usaremos además

iwconfig ath0 key "LA CLAVE"

si es hexadecimal o

iwconfig ath0 key s:"LA CLAVE"

si es en ascii. Después levantaremos la interfaz con

ifconfig ath0 up

y lanzaremos el cliente dhcp que trae openwrt

udhcpc -i ath0

En caso que la red no tenga dhcp antes de levantarla usaríamos

ifconfig ath0 "LA IP QUE TOQUE"

El gateway lo configuraríamos con

route add default gw "LA IP DE LA PUERTA DE ENLACE"

y las DNS en el archivo /etc/resolv.conf

vi /etc/resolv.conf
apretamos la letra "i"
escribimos en las dos primeras líneas
nameserver "DNS PRIMARIA"
nameserver "DNS SECUNDARIA"
apretamos ESC y escribimos (aunque no se vea) ":wp" y apretamos enter

En estos momentos ya navegaríamos desde la línea de comandos de la fonera, por lo que en caso de “emergencia” podríamos usar wget, irssi o utilidades del estilo, pero para que nos aumente la señal crearemos otra interfaz en modo servidor y haremos que lo que reciba lo envíe a través de esta interfaz. Para hacerlo usaremos:
wlanconfig ath1 create wlandev wifi0 wlanmode master
nos crea esta nueva interfaz que pasaremos a configurar a continuación:
iwconfig ath1 essid "EL NOMBRE DE LA NUEVA RED"
y la levantamos con:
ifconfig ath1 up
Ahora si buscasemos ya veríamos una nueva red con el nombre que le hayamos puesto (abierta con lo que si la quisiesemos con alguna encriptación habría que añadir algunos comandos) a la que nos podríamos conectar, pero no tendría conexión a ningún sitio.Para dar la conexión tendremos que dar una ip a esa interfaz en modo master (que sea de otro rango diferente a la red a la que nos conectemos, por ejemplo 192.168.0.1 o 192.168.10.1 o alguna otra con el comando ifconfig ath1 XXX.XXX.XXX.XXX), en los clientes alguna en el mismo rango (192.168.0.X donde X sería un número de 2 a 254 que no este usada o 192.168.10.X lo mismo en este caso y poner de puerta de enlace la ip que le hemos puesto a la fonera anteriormente en la interfaz en modo master) y ejecutar en la fonera el script que use de ejemplo al montar el gateway adaptado para este caso particular:

el script es este:
http://www.ecst.csuchico.edu/~dranch/LINUX/ipmasq/examples/rc.firewall-iptables
o el mirror local es este:

http://teidova.ath.cx/wp-content/uploads/2007/09/script.txt
y tendríamos que cambiar las lineas
IPTABLES=/usr/sbin/iptables
y
EXTIF="ath0"
INTIF="ath1"

y ya estaría, ya tenemos nuestra fonera como repetidor.Al ejecutar el script da unos cuantos errores, que son los de el depmod y modprobe que en openwrt no están, pero poder navegar podremos, lo que no funcionará bien será el dcc de irc y algunas otras cosas que cargaría los módulos pertinentes en el caso de tenerlo.
Sólo lo he probado con la fonera, pero supongo que serviría con cualquier chipset madwifi, como mucho habría que modificar las rutas del iptables, modprobe y depmod en el script final y en un pc normal en vez de udhcpc se usaria dhclient, por el resto sería básicamente lo mismo, incluso la parte de crear la conexión en modo cliente se podría usar por sí sola usando cualquier chipset.
Para que esto funcionase siempre tendríamos que poner todos los comandos en un script y hacer que se ejecutase en el inicio.
Y con esto ya está nuestra fonera 100% operativa.
Saludos.

Tecla DEL en windows en un mac intel

Jueves, Enero 31st, 2008

Los mac no llevan la tecla supr, cosa que en OS X se usa con la tecla Fn y SUPR, pero en windows dicha combinación no funciona, así que si se está acostumbrado a usar esta tecla hay que buscar alguna solución y mirando en internet en esta dirección, que ya no funciona pero se puede verse aquí, podemos usar alguna tecla que no usemos para darle dicha funciona.Los pasos se resumen en instalarse el Windows Server 2003 Resource Kit Tools y usando la utilidad remapkey.exe que viene en ese pack de herramientas cambiar el mapeo del teclado cambiando la tecla que nos interese, en el caso de la imagen que esta a continuación es la tecla de la manzanita a la derecha del espacio:remapkey
En OS X, algo parecido se puede hacer con el programa  doublecommand.

Reverse ssh en osx

Martes, Enero 8th, 2008

O cómo acceder a un ordenador con mac OSX al que tenemos filtrada la entrada.

En un lugar de la mancha de cuyo nombre no quiero acordarme… digo estaba yo no recuerdo bien haciendo el que… cuando uno de mis adalides (ibook g4) luchando contra el enemigo (router xavi de telefonica) precisó de mi ayuda para salir de un aprieto ( no se navegaba ) asi que raudo y presto me puse manos a la obra a intentar comunicarme con él, pero ¡no podía ser!, ¡estaban cerradas las vías de comunicación! (estaba filtrada cualquier entrada por el router, al cual no podía cambiar la configuración) Y tras unos cuantos intentos he aquí el diario de guerra de la hazaña:

Requisitos:

  • Servidor ssh en un puerto accesible con la opción GatewayPorts en enabled desde el ordenador con OSX.
  • Un poco de ganas de jugar con ssh.

La situación sería algo así:

OSX->router(filtrado)->ssh_externo

Para poder acceder al OSX usaremos la opción de redireccionar un puerto remoto del servidor al que estamos accediendo a un puerto local (-R). Según la transcripción del man (man ssh) nos dice:

-R [bind_address:]port:host:hostport
Specifies that the given port on the remote (server) host is to
be forwarded to the given host and port on the local side. This
works by allocating a socket to listen to port on the remote
side, and whenever a connection is made to this port, the connec-
tion is forwarded over the secure channel, and a connection is
made to host port hostport from the local machine.

Como dice ahí lo que hace es poner un puerto a la escucha en el ordenador remoto y al recibir una conexión envía los datos por el túnel seguro y se estable la conexion desde el ordenador local al puerto que hemos definido, en el caso que nos trae entre manos usaremos el 22 (ssh por defecto):

el comando a ejecutar desde el pc que tiene el filtro de entrada sería algo así:

ssh -p 22 -R 22000:localhost:22 -f -N usuario@servidor

(lo que esta en cursiva son los parámetros opcionales y las negritas son las opciones a adaptar en cada caso)

voy a explicar que es cada uno de los parámetros:

  • -p 22 -> no es necesario en caso de que el puerto del servidor ssh sea el 22, en caso contrario se ha de poner el puerto que sea.
  • -R 22000:localhost:22 -> hacemos que el puerto 22000 del servidor remoto del ssh sea una redirección al puerto 22 del servidor que no tiene acceso a internet. Por defecto sólo escucha en la interfaz 127.0.0.1, por lo que se puede acceder únicamente en local, aunque si indicamos antes 0.0.0.0 (ssh -R 0.0.0.0:XXX:XXXXXX:XXXX) escuchará en todas las interfaces disponibles y podremos acceder desde el exterior.
  • -f -> después de ejecutar el túnel se va a segundo plano, por lo que podremos seguir usando la shell.
  • -N -> se usa si únicamente queremos usar la redirección de puertos y no queremos tener la línea de comandos del pc en el que lo ejecutamos, activando la redirección de los puertos pero no el intérprete de comandos.
  • usuario -> el usuario con el que podemos entrar al servidor ssh, si no ponemos usuario se intentara loguear con el usuario con el que estamos en ese momento.
  • servidor -> la dirección del servidor al que nos conectaremos, puede ser una ip o una dirección.

Al ejecutarlo, nos podremos conectar desde el servidor que tiene alojado el server ssh a traves del puerto 22000 usando el comando

ssh usuario_de_osx@localhost -p 22000

Liberar espacio sin borrar nada (sin magia)

Martes, Enero 8th, 2008

Estaba haciendo copia de seguridad de mi ordenador para formatearlo, cuando me he dado cuenta que en el disco duro tenía muchos archivos repetidos y no tenía espacio para guardarlo… (la manía de al formatear guardar las cosas), así que aprovechandome de las funciones “avanzadas” (desconocidas por muchos más que avanzadas) del sistema de archivos ext3 como por ejemplo los hardlinks en el idioma de Cervantes “enlaces duros”, me propuesto intentar recuperar algo de espacio.

¿Qué son los hard links o enlaces duros?
Los enlaces duros se usan para tener un mismo archivo y acceder desde distintos sitios. Tienen la peculiaridad que si tenemos varios enlaces a un mismo archivo, hasta que no borremos el ultimo de ellos el archivo no se borrará (por lo que no hay archivo original y copias, todos apuntan al mismo espacio físico), al contrario que con los links habituales que estamos acostumbrados a tener un archivo real y los demas apuntan a ese, y si lo borramos los links apuntarian a un sitio inexistente por lo que no servirían.

¿Cómo me van a ayudar a aumentar mi espacio libre?
Muy fácil: si en el disco tenemos N copias de un archivo… porqué no las quitamos y solo dejamos una, poniendo el resto como links duros? Así si lo borramos de un sitio desaparecerá solo de ahí, y en los demás sitios se seguirá manteniendo.

Pues dicho y hecho manos a la obra:
para empezar iremos al directorio donde tenemos los archivos, buscaremos todos los archivos y extraeremos su correspondiente hash que será el que usaremos para comprobar que es el mismo archivo con el siguiente comando (para llegar al directorio se usa el comando “cd /directorio_donde_vamos”):
find . -type f -exec md5sum {} \; > lista.txt
si tenemos algun otro sistema de archivos montado dentro de éste tendriamos que usar la opción “-x” (si usamos mac os x) o “-xdev” (si estamos en gnu/linux).

El proceso puede tardar bastante, dependiendo de la cantidad de información que tengais, asi que iros a dar una vuelta, tomaros algo o ir haciendo otras cosas mientras.

Al finalizar nos habra creado en el directorio donde lo hemos lanzado un archivo que se llama lista.txt donde estaran todos los archivos y su correspondiente hash md5.

Para hacer las comprobaciones de los archivos originales y los repetidos, necesitamos una lista de hash originales, que sacaremos con el comando:
sort lista.txt | awk '{print $1}' | uniq > md5uniq.txt

Al tener los hash originales lo único que nos falta es comprobarlos que estén repetidos y los que esten borrarlos y linkarlos, que lo hará una mezcla de dos scripts: este script al que llamaremos usando el siguiente comando (que lo tendreis que poner en el mismo directorio donde hemos lanzado el find y renombrarlo como archivo.pl):

for i in `cat md5uniq.txt `; do echo $i >> echos.txt ; grep $i lista.txt > archivos.txt ; perl archivo.pl ; done > archivo.sh

Dependiendo de la cantidad de archivos también tarda, asi que otro paseo o lo que queráis y ya tendréis el archivo que será el encargado de devolveros vuestro preciado espacio en el disco duro en el archivo “archivo.sh”.

Para lanzarlo si usáis el comando
bash -x archivo.sh
ireis viendo como va ejecutando linea a linea hasta que termine.

Y creo que con esto… se termina por hoy.