Archivo de la etiqueta: bash

Establecer Fish como shell por defecto en Ubuntu

[linux]

Por fin tengo equipo nuevo en el trabajo, un precioso portátil HP con su flamante Windows 8 … que ha durado como 5 minutos hasta que lo he sustituido por un Ubuntu 😛

Así que de nuevo tengo que ver como sustituir el aburrido bash por Fish:

1. Instalamos Fish. Lo cual es tremendamente sencillo ya que se instala a través del Centro de software de Ubuntu. Mejor si descargamos el paquete de la web que tendrá una versión más reciente.

2. Abrimos el terminal, y tecleando fish ya nos lanza el nuevo shell. Pero mejor si esto es automático. Para ello tenemos que añadir el comando fish en uno de estos dos ficheros: .bashrc o .bash_profile, ambos en la carpeta home del usuario. La diferencia fundamental es que .bashrc se lanza si la shell es “interactiva” mientras que .bash_profile se lanza si es una shell de “login”. En esta página tenéis una explicación más detallada de las diferencias entre los ficheros.

3. (Opcional) Para muchas tareas (en mi caso todo lo que use Ruby), es necesario que el terminal se lance en modo “login”, ya que RVM define su path en .bash_profile.  Podemos lanzar la shell de login con el comando /bin/bash --login, pero entonces tendríamos que volver a lanzar fish. Lo ideal es indicar al terminal que se lance en modo “login”. Para ello, En el menú del terminal, vamos a Editar -> Perfiles… Seleccionamos uno (puede ser el Default o creamos uno nuevo) y le damos a Editar. En la pestaña Título y comando, seleccionamos la opción Ejecutar el comando como un intérprete de conexión.

Copia de seguridad automática de un blog WordPress – Parte 1: Crear la copia de los ficheros y base de datos

[blog]

Hace ya tiempo que estoy concienciado de lo importante que son las copias de seguridad, pero aún así no siempre me acuerdo de tener las copias al día. Es por esto que lo ideal es tener todo el proceso automatizado, pero no todos los servidores web nos ofrecen esta opción. Hasta ahora siempre he usado hostings gratuitos. El servicio no era el mejor y tiene múltiples inconvenientes, pero sobre todo se quedan muy pobres en las opciones que ofrecen para realizar copias de seguridad. Esto, unido a que tras actualizarme a la última versión de WordPress empezó a fallar el blog, me decidieron a buscar un servidor de pago.

Mis requisitos eran tener acceso al servidor por SSH y poder crear tareas CRON. Tras comparar algunas opciones, me decidí por 1and1, que tenía el mejor precio y cumplía con mis requisitos. He leído que su servicio de atención al cliente no es el mejor, pero las dudas que yo he tenido me las han respondido con rapidez.

Dicho esto, empecemos con la copia de seguridad:

Yo tengo el WordPress en el directorio raíz del FTP. Debería haberlo puesto en una subcarpeta, pero ahora ya no me apetece cambiar, así que se queda así y buscaré como solucionar los problemas que salgan.

En el mismo directorio raíz he creado una carpeta llamada backup. Lo primero será impedir el acceso a esta carpeta. Para ello en el fichero .htaccess que también se encuentra en el raíz, añadimos lo siguiente:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?la-url-de-tu-web.com$
RewriteRule ^backup - [F]
</IfModule>

En esta carpeta de backup tendremos dos ficheros que se encargarán de hacer las copias de seguridad de la base de datos y de los ficheros. Empecemos con la copia de seguridad de la base de datos. El fichero se llamará wordpress-backup-files.sh y su contenido será el siguiente:

#!/bin/sh
tar czf /path-to-files/backup/`date "+%Y%m%d-%H-%M"`-wordpress-files.tar.gz /path-to-files/ --exclude='/path-to-files/backup' --exclude='/path-to-files/backup/*' --exclude='/path-to-files/logs' --exclude='/path-to-files/logs/*'

El primer parámetro será el nombre del fichero con el contenido del blog. Se genera automáticamente con la fecha. Los --exclude especifican que ficheros y carpetas no queremos añadir a la copia. En este caso, como nuestra carpeta de backup está al mismo nivel que el resto, la excluimos, así como su contenido, y hacemos lo mismo con la carpeta de logs.

La segunda parte será hacer una copia de seguridad de la base de datos. De ello se encargará el fichero wordpress-backup-bd.sh cuyo contenido será:

mysqldump -h [host de la base de datos] -u [usuario] -p[contraseña] [nombre de la base de datos] | gzip > /path-to-files/backup/$(date +%Y%m%d-%H-%M)-wordpress-mysql.gz

Por último tendremos que programar el cron para que ejecute estos dos ficheros. En mi caso lanzaré la copia de seguridad el domingo a las 3:00 la base de datos y a las 3:30 los ficheros:

#Weekly database backup
0 3 * * 0 /path-to-files/backup/wordpress-backup-bd.sh

#Weekly files backup
30 3 * * 0 /path-to-files/backup/wordpress-backup-files.sh

Impedir que se apage la pantalla al ver un vídeo flash a pantalla completa en Ubuntu

[linux] [programación]

Hace unas semanas abandoné Windows XP definitivamente para pasarme a Linux Ubuntu y la verdad es que estoy encantado. Muchos de los inconvenientes que recuerdo de veces anteriores en las que he intentado usar Linux han desaparecido y el ordenador ha encontrado una segunda juventud, funcionando más rápido de lo que ha ido nunca.

Pero como no, algunas cosillas siguen siendo muy de Linux, como por ejemplo que cuando estoy viendo un vídeo flash a pantalla completa, Ubuntu considere que no estás haciendo nada e intente apagar la pantalla. Esto supongo que es problema de flash, porque con el VLC no pasa.

En esta página explican como solucionar el problema, desactivando y activando el economizador de energía cuando se detecta un alto uso del procesador, pero esta solución no me estaba funcionado, así que opté por la solución más sencilla, mover el ratón un píxel cada 5 minutos. Así que cuando voy a ver un vídeo largo, lanzo el script y evito que se apague la pantalla.

Aquí tenéis el código, que cada 5 minutos mueve el ratón un píxel a la derecha, y después un píxel a la izquierda.

#!/usr/bin/env bash

sleep_period=5m

while true; do
  xdotool mousemove_relative 1 0
  xdotool mousemove_relative -- -1 0

  sleep ${sleep_period}
done

El programa xdotool no viene por defecto con Ubuntu,  pero lo podéis encontrar en el “Centro de software de Ubuntu”. También recordad cambiar los permisos de ejecución con chmod +x

Cositas útiles para Linux

[linux]

Almacenar en un fichero el listado de ficheros en un directorio:

find ./ -type f -print | tee ../listado.txt

Buscar que fichero contiene determinada frase de forma recursiva en un directorio:

grep -H -r "la frase" ./directorio

Cambiar los permisos de todos los ficheros de forma recursiva:

find ./ -type f -exec chmod 755 {} ;

Comprimir un directorio:

tar cvzf directorio.tar.gz ./directorio

Contar todos los fichero en un directorio y sus subdirectorios:

ls -R ./directorio | wc -l

Copiar una carpeta manteniendo la fecha de modificación de los ficheros:

cp -a -p ./directorio/ /destino/

Descomprimir un fichero:

tar xzvf directorio.tar.gz

Eliminar una carpeta y todas sus subcarpetas:

rm -rf DIRNAME

Mover todos los ficheros de un determinado tipo de la carpeta actual a otra carpeta:

find ./ -iname "*.extension" -type f -exec /bin/mv {} /carpeta/destino ;

Mover todos los ficheros y directorios de una carpeta al nivel superior:

mv ./directorio/* .

Mover todos los ficheros y directorios a una subcarpeta:

mv !(subcarpeta) subcarpeta

Listar todos los discos disponibles:

lsblk o fdisk -l

Listar todos los ficheros zip ordenados por fecha:

ls -alt *.zip

Realizar una copia de seguridad del Mac en un PC de la misma red

[mac]

La situación es la siguiente. Tengo el MacBook y un PC. En el PC ya lo tengo todo montado para hacer copias de seguridad regularmente, y ahora que he estado haciendo más trabajo en el Mac, quería tener un sistema similar. Estaba haciendo las copias de seguridad del Mac en una memoria USB, pero no me estaba gustando el sistema, por lo que se ocurrió lo siguiente:

Hacer la copia de seguridad del Mac directamente en el PC, en un disco duro del que hago copia de seguridad regularmente, de manera que al hacer la copia del PC, también estoy haciendo una tercera copia de la del Mac.

  1. Compartir una carpeta en el PC.
    En mi caso sigo usando un Windows XP. En el Explorador de Windows vamos a Herramientas -> Opciones de carpeta -> Pestaña “Ver”. Abajo del todo hay una opción llamada “Utilizar uso compartido simple de archivos” que debemos desmarcar.
    Ahora vamos a la carpeta que queremos compartir. Pulsamos con el botón derecho -> Propiedades -> Pestaña “Compartir”. Seleccionamos “Compartir esta carpeta” y pulsamos el botón de “Permisos”. Por defecto “Todos” pueden leer la carpeta. Yo personalmente prefiero quitar este permiso. Después le doy permisos solo a mi usuario. Pulsamos en “Agregar…”, escribes tu nombre en el recuadro, y pulsas en “Comprobar nombres”. Si el nombre es correcto, lo autocompletará con el nombre del equipo. Pulsamos en “Aceptar” y le damos permisos de “Control total”. “Aplicamos” y “Aceptamos” hasta salir de los menús. Debería aparecer una mano en el icono de la carpeta, indicando que se está compartiendo.

  2. Montar la carpeta en el Mac
    Abrimos el Finder y vamos al menú “Ir” -> “Conectarse al servidor…”. En la dirección podemos usar tanto la IP como el nombre del equipo, y quedará algo como smb://nombreDeMiPC y pulsamos en “Conectar”. Aparecerá un listado de los recursos compartidos. Seleccionamos el que queremos montar y “Aceptar”. Nos pedirá el nombre de usuario y contraseña de Windows, los introducimos y el recurso aparecerá en la barra lateral del Finder.

  3. Realizar la copia de seguridad
    La forma más sencilla de hacer esta copia es usando RSYNC. Para ello abrimos el Terminal y escribimos la instrucción:

    rsync -azv /Carpeta/De/Origen/ /Carpeta/De/Destino/
    

    Es importante que la carpeta de destino exista, ya que RSYNC no la crea automáticamente. Las opciones significan lo siguiente:
    z: Permite compresión, lo que hace que la transferencia sea más rápida. Supongo que su utilidad dependerá de la velocidad de la conexión y del tipo de fichero que se envíe.
    v: Verbose, va mostrando por pantalla los ficheros que se van procesando.
    a: Modo de archivo. Activa el modo recursivo (para que se copien las subcarpetas), mantiene los enlaces simbólicos, los permisos y las fechas de creación/modificación.

  4. Automatizarlo todo
    Para que la carpeta del PC se monte automáticamente al iniciar sesión, vamos a “Preferencias del Sistema” -> “Cuentas” -> “Arranque” y pulsamos sobre el signo más "+". Aquí seleccionamos la carpeta compartida y pulsamos sobre Añadir.
    Para evitar tener que escribir las instrucciones del RSYNC cada vez, o tal vez queremos sincronizar varias carpetas, podemos crear un fichero de texto e introducir tantas sentencias de RSYNC como queramos, una por línea. Después guardamos el fichero y de damos como extensión “.command”. Por ejemplo, el mio se llama “backup.command”. Le cambiamos los permisos para que se pueda ejecutar con:

    chmod 744 backup.command
    

    Ahora para realizar la copia de seguridad lo único que tendremos que hacer será dar doble click sobre este fichero.