Archivo por meses: junio 2013

Un poco de… consola (IV): rm y find, cp, pushd y popd

Aquí van 3 pequeños «truquillos», tips, o utilidades (como queráis llamarlos), todos para sacarle un poco más de provecho a la consola de GNU/Linux.

Borrar un número grande de archivos

Imaginaos que queréis borrar todos los archivos .txt de un directorio y el número de ellos es muy elevado. Lo normal es que, estando dentro de dicho directorio, ejecutéis lo siguiente:

$ rm *.txt 

Si el número de archivos es muy grande, el comando rm no podrá procesarlos y os dirá algo similar a esto: «lista de argumentos demasiado larga». ¿Qué hacemos entonces para borrar los archivos? Pues podemos echar mano del comando find de esta forma:

$ find . -name "*.txt" -exec rm {} \;

Al lanzarlo, buscará todos los archivos terminados en .txt y, por cada uno de ellos, ejecutará un rm ARCHIVO (los dos paréntesis «{}» indican dónde va el archivo encontrado en dicho comando).

De esta forma, el comando rm sólo procesará un archivo cada vez y podréis borrar todos todos los archivos que queráis.

Esto es aplicable a otros comandos que tengan problemas similares para procesar una lista de argumentos muy larga (si no recuerdo mal, al comando mv también le ocurre este problemilla).

Backup de un archivo con cp

Si queremos hacer un backup de un archivo podemos usar cp de esta forma tan simple:

$ cp archivo archivo_backup

donde archivo es nombre del fichero que queremos salvaguardar y archivo_backup es el nuevo nombre que le daremos (será la copia de seguridad).

Pues hay una forma más corta de hacer esto, y es así:

$ cp archivo{,_backup}

Lo que hace esto es, precisamente, realizar una copia del archivo original y nombrarlo tal y como el original más la coletilla «_backup».

Recuperar último directorio accedido

Situación: estamos en un directorio cuyo path es bastante largo de poner. Sabemos que luego volveremos a él. Si queremos evitar tener que escribir toda la ruta entera, podemos usar los comandos pushd popd. Los usaremos como se indica a continuación.

Estando en el directorio cuya ruta (muy larga…) queremos guardar, ejecutamos este comando:

$ pushd .

Esto guarda en la pila de directorios dicho directorio, de forma que cuando ejecutemos esto:

$ popd

Nos sacará el último directorio de la pila, en este caso, el que habíamos metido antes, con lo cuál nos ahorramos escribir todo el path de nuevo. Lo que hace popd es sacar dicho path de la pila de directorios y nos mueve a dicho directorio, en otras palabras, hace un cd path_directorio.

De momento lo dejamos ahí. En otro artículo de esta serie… más.

Arrancando tu equipo de forma remota desde tu dispositivo Android

Imaginaos que, estando fuera de casa, queréis acceder a algún archivo o servicio de vuestro PC de casa pero éste está apagado. Lo que os voy a explicar aquí es cómo encenderlo de forma remota mediante wake on lan.

En el equipo a encender

En el equipo que queréis encender tenéis que instalar ethtool, que es una utilidad que permite controlar diversos parámetros de la tarjeta de red. Para ello, como siempre:

# aptitude install wakeonlan ethtool

Una vez instalado, tenemos que configurar nuestra tarjeta de red para que, una vez que se apague el equipo, ésta quede «a la escucha» de paquetes especiales de red llamados MagicPacket (paquetes mágicos), de forma que, cuando reciba uno, la máquina se encenderá. Para ello ejecutamos -como root- el siguiente comando:

# ethtool -s eth0 wol g

Con «-s eth0» indicamos la interfaz que queremos configurar con Wake On Lan y con «wol g» le decimos que queremos configurar dicha interfaz tal y como comentábamos, esto es, que «despierte» (que arranque) al recibir un «MagicPacket».

En el dispositivo Android

Ahora vamos al dispositivo Android. En este caso, instalamos la aplicación Wake On Lan (intuitivo, no?). Una vez instalada, simplemente tenemos que indicar el equipo queremos encender. Para ello, especificamos la dirección MAC de la tarjeta de red del equipo queremos encender y su IP. También se especifica un puerto, que normalmente es el puerto 7 o el puerto 9, pero os funcionará con cualquier puerto.

Lógicamente, si la IP que indicáis es la IP local del equipo (algo como 192.168.1.3), esto sólo os funcionará si estáis precisamente en esa misma red (por ejemplo, conectados por wifi al router de vuestra casa). Pero nosotros queríamos encenderlo estando fuera de casa, usando para ello nuestra conexión de datos 3G/HSDPA del móvil. Os cuento cómo tenéis que hacerlo.

Básicamente tenéis que configurar un port forwarding (una redirección de puertos) en el router, de forma que los paquetes UDP dirigidos a la IP pública vuestra y puerto UDP -por ejemplo- 33333-los reenvíe a la dirección de broadcast de vuestra red. Esta dirección será algo acabado en .255. Por ejemplo, si vuestro PC tiene la IP 192.168.1.3, la máscara de red será 255.255.255.0 y, por tanto, la dirección de broadcast es la 192.168.1.255. Ésta es la que tenéis que especificar en el router.

En particular, si nuestro router adsl es Cisco, os indico lo que tenéis que configurar exactamente:

1.- En la interfaz Vlan1 permitiremos el forward de los broadcast:

# ip directed-broadcast

2.- Añadimos un port forwarding a la dirección broadcast de nuestra red y un puerto UDP (el que queramos, da igual):

# ip nat inside source static udp 192.168.1.255 33333 interface Dialer1 33333

donde 33333 es el puerto que hemos especificado (insisto, podemos poner el que queramos entre 1024 y 65535).

Os preguntaréis, ¿por qué no puedo especificar la IP propia del PC en lugar de la dirección broadcast? Pues porque el router retiene la dirección MAC de vuestro PC durante un tiempo (*), pero al cabo de un rato se borra dicha dirección MAC de las tablas del router (para ser más exactos, de las tablas arp del switch que vuestro router adsl incorpora). Esto lo podríais solucionar si en vuestro router podéis meter traducciones arp estáticas, pero no es una opción que esté normalmente disponible en los routers adsl domésticos (al menos no desde el interfaz web, que será seguro el que uséis para «trastear» el router (**)).

Volviendo al tema en cuestión, si simplemente tenéis que especificar la IP pública de vuestro router en la apli Wake On Lan y, como siempre, la MAC del PC que queréis arrancar (eso no cambia).

Claro, prácticamente todo el mundo que usa banda ancha con adsl usa direccionamiento dinámico para la IP pública. ¿Cómo acceder entonces? Pues usáis Dns Dinámico. Existen varios proveedores de este servicio. Yo uso dyndns y me va de perlas.

En un equipo Linux

Si lo quisiéramos arrancar desde un equipo Linux en lugar de un dispostivo Android, instalaríamos el paquete wakeonlan:

# aptitude install wakeonlan

Para arrancar el equipo simplemente ejecutaremos

wakeonlan MAC

donde MAC es la dirección MAC del equipo que queremos arrancar.

 

Para el caso de IP pública:

$ wakeonlan -i IP_PUBLICA_O_NOMBRE -p 33333 MAC

También podéis usar el comando etherwake:

# aptitude install etherwake

Y, de forma similar a como hacíamos con wakeonlan, ejecutaríamos:

$ etherwake MAC

Si alguien se ha perdido y quiere que le concrete/explique algo, que lo comente y se aclara lo que sea necesario. Es posible que use algún tecnicismo pero debo partir de un cierto nivel de redes porque si no este artículo sería eterno. Insisto, si tenéis dudas y os interesa el tema preguntad y hallaréis respuesta -en la medida que esté en mi mano-.

Espero que os sea útil.

 

(*) De hecho, si especificáis la IP del equipo en lugar de la de broadcast, os funcionará durante unos minutos, pero si pasa un rato y probáis es posible que ya no os funcione porque el router ya no recuérda qué MAC corresponde a la IP en cuestión ni por qué puerto del router (del switch, para ser más exactos) tiene que enviar el paquete.

(**) Si alguien quiere ir a más, podéis acceder con telnet ssh y usar una interfaz de comandos que permite ir más allá y tener más control del router que desde el interfaz web.

NOTA: Previamente hay que activar el WOL en BIOS. Si la placa es moderna normalmente no hace falta ni poner el cable desde la tarjeta de red a la placa ya que si soporta PCI 2.2 tendrá la energía suficiente para el WOL. Si tiene tarjeta integrada, obviamente, tampoco hará falta el cable.

 

Juegos retro en GNU/Linux (I)

Si os gusta echar una partida de vez en cuando en el PC y GNU/Linux es vuestro sistema operativo, no hace falta que cojáis la consola o que arranquéis Windows, porque es posible disfrutar de muchos juegos en Linux (*).

Supongo que muchos de vosotros ya sabéis que Steam está disponible para Linux y que no paran de sacar juegos actuales para dicha plataforma, pero no es a este tipo de juegos a los que me refiero en este artículo.

Si usásteis MS-DOS en su momento y echáis de menos esos buenos ratos que pasábais jugando a los diversos y grandísimos juegos disponibles para aquél sistema operativo, estáis de enhorabuena: en Linux es posible jugar a todos ellos.

Además, muchos de estos juegos han sido liberados por las compañías que los crearon mediante licencias freeware, por lo que podéis descargarlos de sus respectivas webs y disfrutar de ellos gratis.

Para jugar a estos clásicos simplemente tenemos que instalar dosbox:

# aptitude install dosbox

Este paquete suele estar en la mayoría de las distros más populares. En particular, en Ubuntu y derivadas lo tenéis.

Una vez instalado, abrís una shell de comandos, os váis al directorio donde tenéis el juego (el archivio .exe) y ejecutáis:

$ dosbox JUEGO.EXE

Por ejemplo, el juego Biomenace fue muy famoso en su época (yo jugué mucho a la versión shareware). Ahora tenéis dicho juego (con licencia freeware) disponible en la web de 3D Realms. Una vez lo descargáis, podéis jugar sin más que descomprimir el zip y ejecutar:

$ dosbox BMENACE1.EXE

También están los siguientes episodios de dicho juego (BMENACE2 y BMENACE3).

Que disfrutéis.

 

(*) Utilizo indistintamente Linux y GNU/Linux para referirme al sistema operativo del pingüino (con su permiso, RMS).

Un poco de… consola (III): comandos curiosos

Aunque solía publicar un artículo cada jueves a las 22:00, a partir de ahora voy a hacerlo los domingos a la misma hora, porque durante la semana voy muy liado y a veces no me da tiempo terminar el artículo.

En este post os voy a comentar algunos comandos curiosos que existen para la consola, y que le darán un toque más «geek» y divertido a vuestro trabajo con la misma.

sl

El comando ls lo usamos constantemente para listar el contenido de un directorio. Un error común al teclearlo es poner sl en lugar de ls. Si lo hacemos (*) se mostrará una locomotora de vapor en la consola. Está realmente bien conseguida.

sl-

Un parámetro muy recurrido al usar el comando ls  es –l, es decir, ls -l, que muestra más información de los archivos y directorios (tamaño, permisos, etc.). Si tecleáis por error sl -l os aparecerá otra locomotora distinta.

sls--

¿Por qué una locomotora? Bueno, alguien dijo que sl significa Steam Locomotive (locomotora de vapor) y ahí lo tenéis.

figlet

Con el comando figlet (**) podemos mostrar bonitos letreros con diferentes tipos de letra en la consola de comandos.

Por ejemplo, si tecleamos figlet -w 92 antonio-mario.com (***) nos mostrará esto:

figlet

Figlet tiene varios tipos de letra que podéis localizar en /usr/share/figlet. Son los archivos con extensión .flf. Vamos a usar uno de ellos con el comando figlet -f smscript antonio-mario.com

figlet1

cacaview

Curioso nombre el de este comando, pero no os despistéis, lo que hace realmente es visualizar una imagen que le pasáis como parámetro en formato ASCII. Como ejemplo, os muestro cómo se ve en ASCII el símbolo del Gran Héroe Americano:

aa

Si queréis tenerla en un fichero, podéis convertir cualquier imágen a ascii con el comando img2txt. Todas estas utilidades están en el paquete caca-utils.

Vídeos en modo texto

Al hilo de lo anterior, comentaros que también es posible ver vídeos en formato Ascii, y es que existe un plugin para mplayer que permite que el vídeo se muestre en este formato. El comando a usar es:

mplayer -vo aa VIDEO

Os muestro una captura de pantalla:

m1

En el caso anterior, los vídeos aparecen en Ascii pero en escala de grises, pero también podéis reproducirlos en color usando la librería libcaca, con lo que disfrutaréis la película mucho más ;-). Para ello:

mplayer -vo caca VIDEO

Aquí tenéis una captura de pantalla:

m

Pero ya, con lo que váis a flipar, es con la peli La Guerra de las Galaxias «rodada» en ascii. Para ello, cogéis un buen cuenco de palomitas, una coca cola y tecleáis esto en la terminal:

telnet towel.blinkenlights.nl

Aquí os dejo una captura de la peli, donde aparecen r2d2
c3po:

r2

Hay muchas más curiosidades, huevos de pascua, trucos… en la consola de Linux, pero por hoy es suficiente. Otro día… más 😉

(*) … y tenemos instalado el paquete sl («aptitude install sl«).

(**) «aptitude install figlet» para instalarlo.

(***) El parámetro -w es para el ancho del texto. Por defecto es 80 y el letrero «antonio-mario.com» ocupa más de ese ancho, por lo que he ido aumentándolo para que entrara todo en una línea. Para más info: figlet –help o bien man figlet.