| Subcribe via RSS

Automatizar la conexión a sFTP

Septiembre 25th, 2009 | 2 Comments | Posted in Bash, linux, privacidad-y-seguridad

En este artículo os voy a contar cómo descargar ficheros mediante sFTP (FTP encriptado) de manera automatizada; es decir, sin tener que andar ejecutando el comando ni tener que meter la clave a mano cada vez.

El script es bien sencillito:

#!/bin/bash
 
# Aquí ponemos los datos de conexión
USUARIO=usuario
CLAVE=clave
HOST=miftp.com
PUERTO=22
 
lftp -p${PUERTO} -u ${USUARIO},${CLAVE} sftp://${HOST} << CMD
get copia_seguridad.bz2 copia_seguridad.bz2
bye
CMD

Basta con que sustituyas estos datos por los de tu servidor:

USUARIO=usuario
CLAVE=clave
HOST=miftp.com
PUERTO=22

El puerto se puede dejar el de ssh por defecto, pero en varios servidores me he encontrado que usan uno distinto así que la opción para especificar el puerto es muy útil para mí.

lftp (sophisticated file transfer program) es el que se va a encargar de identificarse en el servidor mediante sftp. Todo lo que escribamos entre <

Me he pasado un buen rato hasta que he conseguido ponerlo en marcha así que lo dejo aquí por si a alguien le puede servir de ayuda.

Aquí podéis ver otra forma de hacerlo

Tags: , , ,

Introducción a Bash: control de flujo en nuestro script (if/else)

Mayo 25th, 2009 | No Comments » | Posted in Bash, linux, programacion

Hoy vamos a añdadir un poco más de salsa a nuestra introdicción a Bash. Vamos a ver cómo funciona el if/else.

La estructura de un if/else en bash es la siguiente:

if [ condicion ]; then
      ...
else
      ...
fi

(el “else” es opcional).

Ojo, los corchetes deben ir siempre separados de la condición por un espacio.

Comparaciones aritméticas:

Aquí tenéis una lista de comparaciones que se pueden hacer entre números.

  • -lt : menor que (less than)
  • -gt : mayor que (greater than)
  • -le : menor o igual (less or equal)
  • -ge : mayor o igual (greater or equal)
  • -eq : igual a (equal)
  • -ne : distinto de (not equal)

Compraraciones con cadenas

  • = : igual
  • != : distinto
  • < : menor que
  • > : mayor que
  • -n c1 : se cumple si la cadena c1 no está vacía
  • -z s1 : se cumple si la cadena c1 está vacía

If anidados

Desde luego, se pueden usar if/else dentro de otros if/else, se pueden anidar sin problemas.

Ejemplo

Y para ilustrar todo esto vamos a ver un sencillo ejemplo que espera que le pasemos una palabra como parámetro:

#!/bin/bash
 
if [ $# -eq 0 ]; then
	echo "Dime algo, por favor"
else
	if [ $1 = 'hola' ]; then
		echo "Hola! que tal?"
	else
		echo "No te entiendo, solo entiendo la palabra 'hola'"
	fi
fi

Si lo guardamos en un fichero llamado if.sh y le damos permisos de ejecución (chmod +x if.sh) esto es lo que responderá dependiendo de qué parámetros usemos:

$ ./if.sh
Dime algo, por favor
$ ./if.sh nada
No te entiendo, solo entiendo la palabra 'hola'
$ ./if.sh hola
Hola! que tal?
Tags: , ,

Renombrar varios ficheros a la vez con PyRenamer

Mayo 21st, 2009 | No Comments » | Posted in heramientas, linux, ubuntu

PyRenamer es un sencillísimo programa (sencillo de usar) que te permite renombrar un montón de ficheros de golpe. Ya expliqué hace un tiempo cómo cambiar la extensión de varios archivos de golpe desde la consola, pero seguramente este programa le resultará mucho más cómodo a la mayoría.

El programa está disponible bajo licencia GPL y, dado que está escrito en Python, debería funcionar en casi cualquier sistema operativo que disponga de Python y PyGtk (yo sólo lo he probado en mi Ubuntu).

Supongamos que queremos renombrar varios archivos con el siguiente formato:

Nombre serie – 1×01 – El comienzo.avi
Nombre serie – 1×02 – La continuación.avi
Nombre serie – 1×03 – El final.avi

al siguiente formato:

1×01 – El comienzo.avi
1×02 – La continuación.avi
1×03 – El final.avi

Podemos hacerlo siguiendo estos pasos:

Paso 0) Instalar el PyRenamer en nuestra máquina evidentemente.

1) Arrancar el programa.

2) Ir al directorio que contiene los archivos que queremos renombrar.

3) Seleccionamos la pestaña “Patrones”.

4) En “Patrón de selección de archivos” podemos dejar el “*” que viene por defecto o podemos cambiarlo para trabajar sólo con los archivos que nos interesen.

5) En “patrón de nombre de archivo original” escribimos:

Nombre serie - {#}x{#} - {X}

Las llaves sirven para indicar la parte que cambia:

{#} – Sirve para indicar un número
{X} – Sirve para indicar letras

6) En “patrón de nombre de archivo nuevo:

{1}x{2} - {3}

{1}, {2}, {3} son las coincidencias que ha encontrado en la cadena original, las partes que ha encontrado entre llaves.

En el primer caso:

Nombre serie - {#}x{#} - {X}

Con el fichero:

Nombre serie - 1x01 - El comienzo.avi

El primer {#} recogerá el “1″, el segundo {#} recogerá el “01″ y {X} recogerá “El comienzo.avi”. Con lo que el nombre resultará en:

1x01 - El comienzo.avi

7) Pinchamos el botón “previsualizar” para ver si el renombrado se hace como esperábamos.

8 ) Hacemos click en renombrar y listo.

Tags: , , , ,

¿Por qué no se guardan los archivos ocultos en mi archivo TAR?

Mayo 11th, 2009 | No Comments » | Posted in linux

Probablemente te habrás encontrado alguna vez con este problema al crear un archivo tar: los archivos ocultos en la carpeta “raíz” no se almacenan.

Suponiendo que tienes una carpeta ‘prueba/’ que contiene los siguientes archivos:

.fichero1
fichero2
fichero3

Si haces:

tar cf test.tar prueba/*

no se copiará el archivo .fichero1

Sin embargo si hacemos:

tar cf test.tar prueba/

Sí que se copiará.

Parece una tontería, pero si no te das cuenta puedes perder un montón de tiempo.

Por cierto esto lo encontré aquí.

Tags: , ,

La consola de Linux: averiguar a qué grupos pertenece un usuario

Mayo 4th, 2009 | No Comments » | Posted in linux

Para saber a qué grupos pertenece un usuario basta con usar el siguiente comando:

groups gorka

y nos mostrará un listado con todos los grupos a los que pertenece.

Tags: , ,

Introducción a bash: crear un sencillo script

Abril 27th, 2009 | 1 Comment | Posted in Bash, linux

Con este artículo voy a iniciar una corta serie de artículos para aprender a escribir sencillos scripts de bash.

Bash es un intérprete de comandos de Linux. Los que han trabajado con Windows/MS-Dos les sonarán seguramente los archivos .bat. Estos scripts bash son algo muy similar.

Para crear nuestro primer script debemos crear un fichero, por ejemplo primero.sh y copiamos el siguiente contenido:

echo "Eh, este es mi primer script bash"

Ahora tenemos que hacerlo “ejecutable”, para ello teclearemos en la consola:

chmod +x primero.sh

y ahora podemos ejecutarlo:

./primero.sh

Y ahora vamos a darle un poco más de gracia al asunto. En un script podemos usar los mismos comandos que si estuviéramos en la consola de Linux, por ejemplo: ls -las. Vamos a modificar el script:

echo "Este es el listado de directorios y ficheros:"
ls -las

Más adelante veremos que se pueden pasar parámetros a un script bash, se pueden usar variables, bucles, condiciones, arrays, etc…

Tags: , ,

Bash: listar los usuarios de un ordenador

Abril 24th, 2009 | No Comments » | Posted in Bash, linux, programacion, ubuntu

Dado que últimamente estoy haciendo bastantes cosillas con bash voy a poner una serie de “truquillos” aquí.

NOTA: El ejemplo que propongo aquí es un copia/pega de un script que creé para un servidor y una finalidad muy concretas.

En cierto servidor necesitaba tener un listado de los usuarios. Una posibilidad puede ser ir al directorio home y ver allí los usuarios (cada usuario tendrá un directorio ‘home’).

for directorio in /home/*; do
	echo ./actualizador_cada.sh $directorio.
done

dará como resultado:

/home/gorka
/home/alumno
/home/lost+found
/home/mysql
...

Si queremos que no nos muestre ‘/home’ podemos eliminar esa parte de cada directorio usando una subcadena:

echo ${directorio:6}

(esto mostrará una subcadena de $directorio desde la posición 6 hasta el final)

for directorio in /home/*; do
	echo ${directorio:6}
done

dará como resultado:

gorka
alumno
lost+found
mysql
...

NOTA: esto funciona en un sistema en el que los usuarios tengan directorios ‘home’ iguales a su nombres de usuario.

Seguramente verás que hay algunos usuarios que no te interesan (en mi caso sólo me interesaban los usuarios “reales”) así que añadí unas líneas para eliminar los que no interesaban (mysql, lost+found, etc…):

usuarios_no_validos=( 'mysql' 'lost+found')
for directorio in /home/*; do
	valido=1
	usuario=${directorio:6}
	for usuario_no_valido in ${usuarios_no_validos[@]}; do
		if [ $usuario_no_valido = $usuario ]; then
			valido=0
		fi
	done
	if [ $valido -eq 1 ]; then
		echo $usuario
	fi
done
Tags: , , ,

Añadir soporte para Esperanto en OpenOffice.org (y otros programas en Ubuntu)

Marzo 20th, 2009 | 2 Comments | Posted in Esperanto, openofficeorg

Hoy necesitaba escribir en Esperanto (mi volas lerni Esperanto) y me he dado cuenta que algunas letras (concretamente ĉ, ĵ, ŭ, ?, ĥ, ?) no se podían escribir. Después de una rápida búsqueda en Google (que he empezado en Lernu) he encontrado la solución aquí.

La traduzco y describo paso a paso aquí:

1) Crear un fichero en tu carpeta “home” llamado, por ejemplo: .xmodmap-eo con el siguiente contenido:

! Uzi AltGr kun ne internacia klavoj
! left/right windows-logo key
! in "windows" keyboards the postion of the key is annoying, is where AltGr
! usually resides, so go define it as AltGr
keycode 115 = Mode_switch
keycode 116 = Mode_switch

! ĉi tiu de http://bertilow.com/komputo/linukso.html
! Baza solvo por tajpado de Esperantaj supersignaj literoj estas uzado de la
! klavo AltGr. Por fari tion oni skribu en sia dosiero “.Xmodmap? la jenajn
! liniojn, kiuj modifas la aktualan klavararan?on:

keycode 54 = C NoSymbol ccircumflex
keycode 42 = G NoSymbol gcircumflex
keycode 43 = H NoSymbol hcircumflex
keycode 44 = J NoSymbol jcircumflex
keycode 39 = S NoSymbol scircumflex
keycode 30 = U NoSymbol ubreve

! Tiam AltGr-c kreas “c?-on kun cirkumflekso, kun aldona majuskliga klavo ?i
! kreas “C?-on kun cirkumflekso, k.t.p.

(copy/paste total)

2) Guardar el fichero, abrir una consola y ejecutar el comando:

xmodmap .xmodmap-eo

3) ¡Voilá! A partir de ahora para conseguir la letra ĉ basta con usar la tecla Windows (si tienes, como yo, un teclado Windows) o ALTGR+c.

Si queremos que se cargue esta configuración de teclado cada vez que iniciamos el PC podemos añadirlo al .bashrc de nuestro “home”.

Tags: , , ,

Extraer audio de un DVD en Ubuntu – Devidify

Noviembre 21st, 2008 | 10 Comments | Posted in ubuntu

Hoy me han pedido extraer algunas pistas de audio de un DVD con unas conferencias y pasarlas a MP3. Hace un tiempo tuve que hacer algo similar y me volví un poco loco. Ahora, afortunadamente existe un programa escrito en Python que permite hacerlo de manera muy sencilla: Devidify.

Instalación

No he encontrado ningún paquete en Ubuntu que permita instalarlo cómodamente así que he tenido que hacerlo “a mano”:

1) Instalar los paquetes necesarios:

Tal y como indican en la web:

On an Ubuntu Linux system, ensure the following packages are installed and you’ll be all set: python, python-gtk2, mplayer, lsdvd, lame, vorbis-tools.

Así que abrimos un terminal y el comando que tenemos que usar es:

sudo aptitude install python python-gtk2 mplayer lsdvd lame vorbis-tools

2) Descargar el programa.

Crea una carpeta para descargarte el dividify, por ejemplo yo tengo una carpeta llamada ‘/home/gorka/instaladores’ donde me bajo los programillas a instalar. Entra en la carpeta y teclea:

wget -c http://devidify.googlecode.com/files/devidify-1.14.tar.gz

Puedes entrar en Google Code para ver si hay alguna versión más reciente.

3) Descomprimir e instalar el programa.

tar -zxvf devidify-1.14.tar.gz
cd devidify/
sudo python setup.py install

4) Crear el fichero de configuración.

Crea en tu carpeta de usuario (en mi caso es /home/gorka) un fichero llamado .devidifyrc (con un punto al comienzo, sí) y copia esto:

[devidify]
ogg_quality = 6
mode = mp3
device = /dev/dvd
mp3_bitrate = 192
dir = /home/gorka/dvd2mp3

mode: aquí puedes indicar ogg o mp3, el formato que prefieras.
dir: esta va a ser la carpeta donde se van a guardar las capturas de audio que hagas.

5) Comenzar a usar el programa:

Aplicaciones -> Sonido y vídeo -> Devidify

Cuando arranques basta con pinchar en el botón “Scan DVD”, seleccionar las pistas a extraer y pinchar en “Rip audio track(s)”. Se creará un fichero por cada pista que hayas seleccionado. ¡Así de fácil!

Tags: , , , , ,

Linux: Recuperar un archivo que tiene un nombre con caracteres extraños

Noviembre 6th, 2008 | No Comments » | Posted in linux

En alguna ocasión me ha ocurrido que se suben a algún servidor archivos en cuyo nombre hay caracteres con una codificación diferente a la que usa el servidor. Si el servidor no puede traducirlos a su codificación los dejará “tal cual” pero luego será un dolor de cabeza acceder a ese archivo.

Por ejemplo, si un usuario sube un archivo con el nombre:

sin-título.jpg

es posible (dependiendo de tu servidor) que se almacene como:

sin-t�tulo.jpg

Quizá se te ocurra renombrarlo para que tenga un nombre más adecuado haciendo:

mv sin-título.jpg sin-titulo.jpg

o:

mv sin-t�tulo.jpg sin-titulo.jpg

Lo más seguro es que no te funcione ninguno de estos métodos. Pero tranquilo, antes de abrirte la cabeza y arrancarte el cerebro con una cuchara prueba lo siguiente:

more sin-t�tulo.jpg > sin-titulo.jpg

es posible que te funcione ¡suerte!

Tags: , , ,