Un poco como continuación de un post de hace casi 2 años, en el que comentaba ejemplos de cosas que se pueden hacer con Bash en una o dos líneas de código.
Ahora quiero hacer cosas un poco más complejas (y alguna que otra sencilla, pero curiosa), en una nueva sección de códigos para copiar y pegar en vuestros terminales:
Servidores
Montar un servidor FTP rápido
Ésta es una solución para un apaño, para el caso en que necesitemos activar un servidor FTP para pasar un fichero a alguien, o para que nos pasen algún fichero... o por ejemplo por si queremos instalar un plugin en WordPress rápidamente y somos unos paranoicos de la seguridad (y por tanto no queremos dejar un servidor FTP corriendo siempre).
Dependencias: python y pyftpdlib
Si queremos lanzar el servidor en un puerto diferente al 21:
Si además queremos dar permisos de escritura en la carpeta actual:
Sacar listado de las ips que más han visitado una web servida por Apache
Dependencias: Apache
Si queremos conocer las direcciones que más han entrado hoy nuestro servidor.
Podríamos cambiar el cat por tail -n X, así vemos sólo las últimas visitas.
Fuente: Count IP Addresses in Access Log File
Descargar una URL cambiando el User-agent
Para ver con los ojos de un robot, o para hacer pruebas con nuestros scripts:
Así me disfrazo del robot de rastreo de Microsoft...
Borrar todas las bases de datos de un servidor MySQL excepto mysql, test e information_schema
A veces, necesitamos limpiar un servidor de base de datos, o quitar todas las tablas menos algunas:
Dependencias: MySQL
Si no queremos poner el password de la base de datos en la línea de comandos, nos lo pedirá dos veces.
Barra de progreso al importar datos a MySQL
Cuando tenemos gran cantidad de datos para importar, muchas veces nos ponemos de los nervios al ver que no acaba, y como no sabemos cuánto queda, nos frustramos y desesperamos. Para ello, tengo varias soluciones, una sin entorno gráfico (para servidores) y otra con él (para escritorio)
Dependencias: mysql, pv
Y ahora con entorno gráfico, vamos con barra de progreso y notificación al final:
Dependencias: mysql, pv, zenity, notify-send
Adminsitración
Módulos del kernel instalados en el sistema
En muchas instalaciones podemos pedir el listado de módulos instalados en el sistema con:
Pero en otros sitios no funciona. De todas formas, es un listado de archivos con extensión .ko a partir de una ruta específica, así que:
Dibujar un árbol jerárquico de archivos y directorios (tree)
Bueno, el caso es hacer algo parecido al comando tree sin tener el comando tree.
Fuente: Tree
Borrar una estructura de archivos y directorios en una carpeta a parte
No sé cómo explicar esto, es un poco difícil, imaginemos que estamos dentro de un directorio X que tiene unos archivos y unos directorios dentro, luego tenemos un directorio Y que tiene lo mismo que X junto con más cosas.
El caso típico es la instalación a mano de plugins en ciertos programas. El plugin tiene muchos archivos que se copian junto con otros archivos del programa, por lo que tendremos los archivos del programa y el plugin mezclados.
Lo que queremos hacer es borrar el plugin:
Para usar esto, nos ponemos en el directorio que contiene la estructura que queremos borrar (pero la queremos borrar de /directorio/de/programa).
Cambiar stack size sin ser root (o cualquier cosa de ulimit)
Tal vez queremos cambiar algún parámetro de ulimit dentro del usuario actual y nos deniega el permiso. Puesto que ulimit no tiene ejecutable asociado, no podemos usarlo directamente con sudo. Y si nos hacemos root, no somos el usuario que queremos ser...
Dependencias: sudo configurado y usuario en sudoers.
Sacar un listado de directorios ordenados por tamaño
Muy útil cuando nos estamos quedando sin sitio en el disco y no sabemos dónde se nos ha ido. Aunque tarda un montón si nuestro disco es grande.
Listar los archivos más grandes dentro de todas las carpetas
Encuentra todos los archivos a partir de la ruta actual y los ordena por tamaño. Alguna vez he encontrado un .iso perdido en mi hdd que no hacía más que comer espacio.
Reiniciar un dispositivo de entrada en Linux
En ocasiones, puede que un ratón / touchpad u otro dispositivo de entrada deje de funcionar correctamente en nuestro servidor X. Para ello, primero averiguamos el ID del dispositivo con:
Luego hacemos:
$ xinput disable ID
$ xinput enable ID
Nos podemos ahorrar muchos reinicios innecesarios con esto.
Cambiar el título de una ventana bajo el ratón
Escribimos el nombre, hacemos click en la ventana y tendrá otro nombre. Muy útil para organizar nuestro escritorio.
Dependencias: zenity, wmctrl
Comprimir un tar.gz en multi-hilo
Cuando creamos un archivo tar.gz con
la compresión se realiza en un sólo núcleo del procesador por lo que, cuando hay gran cantidad de datos, la compresión puede ser muy lenta. Pero podemos utilizar pigz para comprimir, si tenemos varios procesadores o varios núcleos, podremos aprovecharlos todos para realizar la compresión. Y es tan fácil como:
Es lo mismo pero sustituyendo el argumento z por el comando que queremos utilizar para realizar la compresión. Si por ejemplo quiero comprimir mi carpeta de documentos y descargas:
Para descomprimir, como siempre, en lugar de usar c, usamos x:
Cifras y letras
Búsquedas en un archivo con contexto
Con la siguiente instrucción podemos buscar un patrón dentro de un fichero y veremos 3 líneas por arriba y 3 líneas por abajo. Muy útil para no perdernos cuando buscamos en textos muy extensos.
Por cierto, el patrón puede ser un texto sencillo o una expresión regular.
Sacar N dígitos del número PI
Una frikada en toda regla...
Donde N=10, 100, 1000, 12345... no lo hagáis muy grande porque puede tardar mucho tiempo...
Obtener un número aleatorio
Es nuestro dado para la terminal:
Ya que sólo sacamos un byte, el número más grande será 255, pero podemos sacar números más grandes aumentando el valor. Si pedimos más de 4 bytes, el resultado se dividirá en dos números.
Fuente: Código para llevar
Extraer una cadena de texto aleatoria
Si te parece demasiado aleatoria, démosle caracteres más normales...
También lo podemos hacer con openssl:
Esta forma puede dar el siguiente error: unable to write 'random state', normalmente se debe a que el archivo $HOME/.rnd es propiedad de otro usuario, como puede ser root.
Crear un comando rot13 para consola
Diversión sin límites codificando mensajes con el algoritmo rot13:
Así podremos hacer lo siguiente:
$ echo "Hola mundo!" | rot13
Ubyn zhaqb!
$ echo "Ubyn zhaqb!" | rot13
Hola mundo!
Reemplazar espacios por guiones bajos sólo en el texto entrecomillado
En el ejemplo se ve muy claro, sólo cambiamos los espacios de la URL que está entre comillas.
¿ Alguna curiosidad interesante o algún mini-script que te haya salvado la vida ? Me encantaría leer vuestros comentarios.
Actualización 16-02-2015 : Añadido un truco más para que quede un número redondo.
Foto: Robert Couse-Baker (Flickr CC-by)