- user, is the name of the SSH user,
- server.com:, is the name of the server (colon is required)
- /my/directory, is the remote directory you want to mount, and
- /media/ssh, is the local directory where the mountpoint will be placed
Autor: Pedro
Cómo recuperar un archivo eliminado por SVN si usas Eclipse
Si has llegado hasta este post, es más que probable que hayas sufrido la pérdida de un archivo y quieras recuperarlo, así que ármate de paciencia (y suerte).
El otro día estaba yo tan alegre trabajando con mi Eclipse escribiendo en PHP cuando pensé: «Ahora es el momento de hacer un Commit». Así que lo hice.
Lo normal es que al hacer un Commit, el SVN gestione los archivos correctamente y todo se sincronice sin problemas ni conflictos con los ficheros modificados y acabe almacenándose como una modificación válida en un lugar seguro. Pero claro, cuando más de una persona toca el mismo fichero, es más que probable que eso empiece a dar problemas. Yo, perdí prácticamente todo el día de trabajo 🙁
Investigando por internet (no sé exactamente dónde) Gracias a la inestimable ayuda de Dani Bru, que encontró por internet el nombre de un directorio mágico donde se guardan backups automáticos, nos pusimos manos a la obra. Yo pensé, «ya… claro!» No tenía ninguna esperanza, pero era la única pista que tenía para ecuperar lo que se había perdido y estos son los pasos que dí para poder recuperarlo.
Por lo visto, además de la copia remota que se genera al hacer un Commit, en algún lugar oculto de la estructura de directorios que crea Eclipse en local (directorios ocultos y demás cosas), va guardando copias de (al menos) el estado anterior al Commit.
Primer paso
Abrimos el terminal y escribimos:
Es posible que tarde algunos segundos, especialmente si nunca antes lo habías ejecutado. Este comando actualiza el índice de directorios del sistema. De manera que en el siguiente paso nos permitirá realizar una búsqueda de manera más precisa. Cuando acabe el comando, no dará ningún mensaje, tan solo nos devolverá el control del terminal.
Segundo paso
Realizamos la búsqueda de la cadena org.eclipse.core.resources, que al parecer es el directorio mágico que puede salvarnos la vida (bueno, el día).
/some/path/to/org.eclipse.core.resources/.history/24/109601fa0cd800101a3dcfaf52c523eb
/some/path/to/org.eclipse.core.resources/.history/24/e077e68009d7001017b898f7b25b1cbb
/some/path/to/org.eclipse.core.resources/.history/25/9095cb8d2bd7001017b898f7b25b1cbb
/some/path/to/org.eclipse.core.resources/.history/26/40fa905e2bd7001017b898f7b25b1cbb
/some/path/to/org.eclipse.core.resources/.history/27/80aeb1582bd7001017b898f7b25b1cbb
/some/path/to/org.eclipse.core.resources/.history/2a/20efb2cb11d800101a3dcfaf52c523eb
/some/path/to/org.eclipse.core.resources/.history/2a/80914b200ed800101a3dcfaf52c523eb
/some/path/to/org.eclipse.core.resources/.history/2d/f0acb5240fd800101a3dcfaf52c523eb
/some/path/to/org.eclipse.core.resources/.history/3/e060608410d800101a3dcfaf52c523eb
/some/path/to/org.eclipse.core.resources/.history/32/a0a33f8f0ad80010160af0d88658fae4
/some/path/to/org.eclipse.core.resources/.history/34/60374f474bd60010182b9a1ddb7c2773
/some/path/to/org.eclipse.core.resources/.history/34/c04a901b4ad60010182b9a1ddb7c2773
/some/path/to/org.eclipse.core.resources/.history/36/c0d19b430bd80010160af0d88658fae4
(…)
Tercer paso
Entramos en el directorio que haga referencia al proyecto que queremos recuperar información. Más concretamente en el directorio oculto .history. Yo en este ejemplo, buscaré algo del directorio android, en el que estoy trabando:
pedro@pedro-laptop:~$ ls
0 13 1c 2 24 28 2f 33 38 41 48 4e 52 60 6a 71 7a 7f 84 88 9 9b a3 a9 af b2 b6 be c2 c7 ce da e6 ec f f3 fd 1 16 1d 20 25 2a 3 34 3a 43 49 5 57 61 6e 72 7b 8 85 89 91 9d a4 ab b b3 b7 c c3 c8 d2 db e7 ed f0 f7 10 17 1e 22 26 2b 30 36 3c 44 4a 50 59 63 6f 75 7d 81 86 8a 94 9f a5 ad b0 b4 b8 c0 c5 ca d7 e2 e8 ee f1 f9 12 18 1f 23 27 2d 32 37 3d 45 4c 51 5f 64 7 77 7e 83 87 8d 97 a0 a8 ae b1 b5 b9 c1 c6 cd d9 e3 ea ef f2 fc
Cuarto paso
Al hacer ls, veremos un montón de directorios con nombres de dos caracteres, sin ningún tipo de orden aparente. Al menos, yo no se lo encontré, pero podemos ordenarlos por fecha de modificación con el siguiente comando:
Ese comando listará los directorios de más antiguo a más actual. Por lo tanto, sólo deberemos revisar el contenido de los directorios de el más nuevo al más antiguo (de abajo a arriba). Es posible que algunos estén vacíos, pero otros contendrán archivos con nombres que parecen un hash MD5. La única manera de saber el contenido de estos ficheros es editándolos. Veamos cómo:
pedro@pedro-laptop:~$ ls -lah
total 20K
drwxr−xr−x 2 pedro pedro 4.0K 2011-09-06 00:30 .
drwxr−xr−x 147 pedro pedro 4.0K 2011-09-06 00:54 ..
−rw−r−−r−− 1 pedro pedro 1.9K 2011-09-06 00:27 1036c7a60ed800101a3dcfaf52c523eb
−rw−r−−r−− 1 pedro pedro 824 2011-09-04 21:14 108c03632ad7001017b898f7b25b1cbb
−rw−r−−r−− 1 pedro pedro 1.3K 2011-09-04 21:25 505f6baf2bd7001017b898f7b25b1cbb
pedro@pedro-laptop:~$ gedit * &
Ahora sólo queda examinar los ficheros para comprobar si este es el directorio que contiene los ficheros que hemos perdido. Si este no es, prueba con el anterior de la lista.
Si tienes algo de suerte, es posible que encuentres lo que necesitas. Yo la tuve y recuperé el trabajo del día. 😀
Suerte y gracias a Dani que hizo que la historia tuviera un final feliz!
Montar una unidad remota a través de SSH
- usuario, es el nombre de usuario con el que entrar,
- servidor.com:, es el dominio del servidor (los dos puntos son necesarios siempre)
- /mi/directorio, es el directorio remoto que quieres montar
- /media/ssh, es el directorio local donde se montará el sistema de archivos
Cambiar el día de inicio de semana en Unity y Gnome
- Abre tu terminal favorito, y edita el fichero /etc/default/locale
pedro@pedro-laptop:~$ sudo nano /etc/default/locale
- Verás una linea que contiene LANG=»en_US.UTF-8″. A continuación deberás añadir las siguiente lineas, sin borrar la que ya existe:
LC_TIME=»en_GB.UTF-8″
LC_PAPER=»en_GB.UTF-8″
LC_MEASUREMENT=»en_GB.UTF-8Guarda los cambios y sal del editor. Con esas opciones, Ubuntu mostrará el formato de fecha en la variante europea del inglés, establecerá el tamaño del papel por defecto en A4 y las medidas en formato métrico.
Para poder disfrutar de la nueva configuración hay que reiniciar el gestor gráfico. Para hacerlo escribe:
pedro@pedro-laptop:~$ sudo /etc/init.d/gdm restart

Change Gnome and Unity week start day
If you have installed the United States language version of Ubuntu, for sure you have your start week day set to Sunday, instead of Monday, at your calendar applet. There isn’t an option where the user can change this in an user-friendly way, and there are a lot of non-US users (like me) who are used to see the week starting by Monday. This little HOW-TO will show you the way to change it step by step.
- Open your favorite terminal application, and edit the file /etc/default/locale
pedro@pedro-laptop:~$ sudo nano /etc/default/locale
- You will se one line containing LANG=»en_US.UTF-8″. Now you have to add the following lines, without removing the first one:
LC_TIME=»en_GB.UTF-8″
LC_PAPER=»en_GB.UTF-8″
LC_MEASUREMENT=»en_GB.UTF-8Save the file and exit the editor. With these options, Ubuntu will display the time format in the english european variant, set the default paper size to A4 and set metrics for use with measurements.
- In order to start using the new configuration you should restart your graphic desktop manager. Just type this:
pedro@pedro-laptop:~$ sudo /etc/init.d/gdm restart

Gtk-WARNING **: Locale not supported by C library
Hace ya algunos días que estoy usando Ubuntu 11.04, aunque es una versión beta, funciona muy bien… sólo hay dos cosas que me han hecho perder algo de tiempo mirando por internet cómo solucionarlo. Una de ellas, es un pequeño warning muy molesto que aparece cada vez que lanzo una aplicación gráfica desde el terminal. El error es el siguiente:
pedro@pedro-laptop:~$ ./cualquier-aplicacion
(process:10945): Gtk-WARNING **: Locale not supported by C library.
Using the fallback ‘C’ locale.
Esto me ha pasado por haber instalado el sistema operativo en inglés en_US, utilizando un teclado en español es_ES. Así que me puse a investigar cómo solucionarlo y siguiendo los siguientes pasos, he conseguido resolverlo:
Lo primero de todo, abrimos un terminal, nos hacemos root y vamos al directorio /var/lib/locales/supported.d/.
pedro@pedro-laptop:~$ sudo su
root@pedro-laptop:/home/pedro# cd /var/lib/locales/supported.d/
root@pedro-laptop:/var/lib/locales/supported.d# ls -lah
drwxr−xr−x 2 root root 4,0K 2011-04-25 20:00 .
drwxr−xr−x 3 root root 4,0K 2011-04-13 12:48 ..
−rw−r−−r−− 1 root root 270 2011-04-10 15:16 en
−rw−r−−r−− 1 root root 36 2011-04-25 20:09 local
Allí, en mi caso, existe un archivo llamado en y otro llamado local. Vamos a añadir manualmente el locale es_ES en un archivo llamado es, de la siguiente manera:
Comprobamos que se ha añadido bien haciendo un cat:
es_ES.UTF-8 UTF-8
Ahora añadiremos al locale es_ES en el fichero de locales por defecto. Para ello sólo tenemos que editar el archivo local y poner en la primera línea el locale que nos interesa, de modo que en mi caso queda de la siguiente manera:
root@pedro-laptop:/var/lib/locales/supported.d$ cat local
es_ES.UTF-8 UTF-8
en_US.UTF-8 UTF-8
Y ya está, ahora solo tenemos que reconfigurar el paquete de locales, para que lo reconozca:
Generating locales…
en_AG.UTF-8… up-to-date
en_AU.UTF-8… up-to-date
en_BW.UTF-8… up-to-date
en_CA.UTF-8… up-to-date
en_DK.UTF-8… up-to-date
en_GB.UTF-8… up-to-date
en_HK.UTF-8… up-to-date
en_IE.UTF-8… up-to-date
en_IN.UTF-8… up-to-date
en_NG.UTF-8… up-to-date
en_NZ.UTF-8… up-to-date
en_PH.UTF-8… up-to-date
en_SG.UTF-8… up-to-date
en_US.UTF-8… up-to-date
en_ZA.UTF-8… up-to-date
en_ZW.UTF-8… up-to-date
es_ES.UTF-8… done
Generation complete.
Fin del problema! Ya no veremos más el molesto Gtk-WARNING 😀
Terminal para Gnome: guake
Hace un tiempo escribí sobre terminales para Gnome en el que hablé de Terminator y Nautilus-terminal, que son dos terminales realmente cómodos para trabajar en modo consola. Aún así, despues del post, seguí probando alguno más y encontré otro que, para mi gusto, es el que más cómodo me resulta de todos. El terminal en cuestión se llama guake y está inspirado en aquellos terminales de míticos juegos como Quake o Doom en los que aparecían desde arriba.
Con tan solo presionar F12, se despliega el terminal y se sitúa por encima de las demás ventanas del escritorio. El terminal es semitransparente por lo que es posible utilizarlo y seguir viendo el contenido del escritorio, muy cómodo cuando necesitas copiar algún texto.

Además puedes configurar fácilmente desde los colores del terminal hasta el tipo de shell (sh, dash, bash…) que ejecutará, desde su menú de propiedades para que quede a tu gusto. Incluso tener múltiples pestañas de terminal abiertas a la vez, para realizar diferentes tareas. Me he acostumbrado tanto a este terminal que ahora me resulta imprescindible.
Para instalarlo, como siempre sencillísimo en Ubuntu, tan solo debes ejecutar el siguiente comando:
Ni uno ni dos: al menos cinco.
Empezamos bien. La primera imagen del vídeo es de Marco Belluci y en los 47 segundos del vídeo se repite también en el segundo 0:36. La licencia con la que el autor distribuye la imagen es CC BY 2.0 lo que requiere al menos «reconocer los créditos de la obra» según dicha licencia.
En el segundo 0:03, tenemos una imagen de Taylor Davis, distribuida también con la misma licencia que la anterior, y (aparentemente) ni rastro del reconocimiento de su obra.
En el segundo 0:20, como ya conocíamos, está la imagen de Daniel Horacio, cuya licencia CC BY-NC-ND 2.0, permite compartir – copiar y distribuir libremente siempre que se reconozcan los créditos al autor de la obra, no se utilice con fines comerciales ni se cree ninguna obra derivada de la original.
En el segundo 0:29, la foto que aparece es de Juan Carlos, su nick es po.psi.que en flickr y la licencia de su imagen es CC BY-SA 2.0, que obliga a reconocer los créditos de la imagen utilizada y cuyo uso implica una redistribución de la nueva obra bajo la misma licencia.
En el segundo 0:34, vemos un balón con un interrogante. La imagen original es de Sergio (su nombre de usuario es sergis blog en flickr) y se publica bajo la licencia CC BY 2.0. Haciendo uso de los derechos que otorga la licencia, han rotado la imagen 90º en sentido antihorario y han modificado la imagen para añadir un interrogante blanco (qué despliegue de conocimientos Comandos para comprimir y descomprimir archivos en linux
| .tar (tar) | |
|---|---|
| Empaquetar |
tar cvf archivo.tar /archivo/mayo/*
|
| Desempaquetar |
tar xvf archivo.tar
|
| Ver el contenido (sin extraer) |
tar tvf archivo.tar
|
| .tar.gz – .tar.z – .tgz (tar con gzip) | |
|---|---|
| Empaquetar y comprimir |
tar czvf archivo.tar.gz /archivo/mayo/*
|
| Desempaquetar y descomprimir |
tar xzvf archivo.tar.gz
|
| Ver el contenido (sin extraer) |
tar tzvf archivo.tar.gz
|
| .gz (gzip) | |
|---|---|
| Comprimir |
gzip -q archivo
(El archivo lo comprime y lo renombra como «archivo.gz») |
| Descomprimir |
gzip -d archivo.gz
(El archivo lo descomprime y lo deja como «archivo» |
| Nota: gzip solo comprime archivos, no directorios | |
| .bz2 (bzip2) | |
|---|---|
| Comprimir |
bzip2 archivo bunzip2 archivo
(El archivo lo comprime y lo renombra como «archivo.bz2») |
| Descomprimir |
bzip2 -d archivo.bz2 bunzip2 archivo.bz2
(El archivo lo descomprime y lo deja como «archivo») |
| Nota: bzip2 solo comprime archivos, no directorios | |
| .tar.bz2 (tar con bzip2) | |
|---|---|
| Comprimir |
tar -c archivos | bzip2 > archivo.tar.bz2
|
| Descomprimir |
bzip2 -dc archivo.tar.bz2 | tar -xv tar jvxf archivo.tar.bz2 (versiones recientes de tar)
|
| Ver contenido |
bzip2 -dc archivo.tar.bz2 | tar -tv
|
| .zip (zip) | |
|---|---|
| Comprimir |
zip archivo.zip /mayo/archivos
|
| Descomprimir |
unzip archivo.zip
|
| Ver contenido |
unzip -v archivo.zip
|
| .lha (lha) | |
|---|---|
| Comprimir |
lha archivo.lha /mayo/archivos
|
| Descomprimir |
lha -x archivo.lha
|
| Ver contenido |
lha -v archivo.lha lha -l archivo.lha
|
| .zoo (zoo) | |
|---|---|
| Comprimir |
zoo -a archivo.zoo /mayo/archivos
|
| Descomprimir |
zoo -x archivo.zoo
|
| Ver contenido |
zoo -v archivo.zoo zoo -L archivo.zoo
|
| .rar (rar) | |
|---|---|
| Comprimir |
rar -a archivo.rar /mayo/archivos
|
| Descomprimir |
rar -x archivo.rar
|
| Ver contenido |
rar -v archivo.rar rar -l archivo.rar
|
Fuente original: Sergio González Durán (http://www.linuxtotal.com.mx/index.php?cont=info_admon_004)
Usando SQLite

¿Qué es SQLite?
SQLite es un pequeño – pero genial – Sistema Gestor de Bases de Datos, como MySQL, Oracle, dBase o FileMaker. Las principales ventajas respecto a otros sistemas de gestión de bases de datos son:
- Es un proyecto de dominio público.
- Tamaño muy reducido, menos de 300Kb, que lo hace perfecto para ser utilizado junto con otras aplicaciones.
- Las bases de datos se guardan en forma de ficheros, por lo que es posible trasladar sin problemas una base de datos (o fichero) a cualquier dispositivo que tenga instalado sqlite.
- Es multiplataforma.
- Estabilidad. Despues de más de 10 años de desarrollo, muchas aplicaciones como Firefox, OpenOffice o incluso Android confían en esta herramienta para gestionar sus datos.
Instalación
Instalarlo es muy sencillo, puedes descargarlo de su página oficial o bien ejecutar el siguiente comando en cualquier distribución basada en Debian:
para instalar la versión 2.x o bien
para instalar la versión 3.x.
Voy a publicar algunos comandos que me han resultado útiles para preparar una base de datos a la que accede una pequeña aplicación en hecha en Mono.
Importar ficheros CSV a SQLite
Supongamos que tenemos el siguiente archivo:
Pedro;Carrasco;http://www.pedrocarrasco.org/
Juan;Gomez;http://www.paginawebdejuan.com/
Federico;Garcia;http://www.paginadefederico.com/
Con el siguiente comando crearemos un fichero llamado personas.db3, que contendrá la base datos que queremos importar:
SQLite version 3.7.2
Enter «.help» for instructions
Enter SQL statements terminated with a «;»
La base de datos destino debe tener la misma cantidad y tipo de datos que el CSV, así que creamos la tabla personas adecuada a la información que queremos importar:
Como nuestro archivo CSV separa los campos mediante el caracter punto y coma (;), lo indicaremos en sqlite de la siguiente manera:
Ahora sólo falta importar el archivo:
Ya está, ahora podemos hacer un SELECT, para comprobar que todo está bien:
Pedro|Carrasco|http://www.pedrocarrasco.org/
Juan|Gomez|http://www.paginawebdejuan.com/
Federico|Garcia|http://www.paginadefederico.com/
Convertir de sqlite3 a sqlite2
La manera más sencilla y rápida de convertir una base de datos de la versión 3 de sqlite a la versión 2 es la siguiente:



