| Subcribe via RSS

La consola de Linux - crear directorios con mkdir

Diciembre 4th, 2006 | No Comments » | Posted in linux

Un comando que seguramente todo el mundo conoce es mkdir, que sirve para crear directorios:

mkdir midirectorio

Sin embargo, mkdir tiene un par de opciones interesante poco conocidas.

Por ejemplo:

mkdir -p miprograma/documentacion/html

Si añadimos la opción -p mkdir se encarga de crear, si no existen, los directorios miprograma y documentacion. Si usaras este comando sin la opción -p obtendrías como resultado un error.

Otra opción que puede resultar interesante es -m, que crea el directorio con los permisos indicados, por ejemplo:

mkdir -m750 miprograma

Creará el directorio miprograma con los permisos 750 (o sea: rwxr-x—).

La consola de Linux - cambiar directorios rápidamente

Noviembre 29th, 2006 | No Comments » | Posted in linux

¿Alguna vez has sufrido la incomodidad de trabajar simultáneamente con dos directorios? Imagina por ejemplo que estás trabajando con /var/www/coches/images y /home/gorka/documentos/webs/imagenes y que necesitas estar cambiando constantemente de uno a otro. Esto se puede solucionar de varias formas, por ejemplo

  • Abrir dos terminales o una terminal con dos pestañas (CTRL+MAYS+T para abrir una nueva pestaña) y en cada una tener un directorio.

Pero la que voy a tratar ahora es mediante el uso de los comandos pushd y popd. El comando pushd funciona de la siguiente forma:

pushd .

y lo que hace es añadir a una pila el directorio indicado (en este caso el directorio actual ‘.’). Luego popd nos permite recuperar ese directorio de la pila. Vamos a verlo en un ejemplo (el comando pwd muestra el directorio actual):

$ pwd
/home/gorka/documentos/webs/imagenes
$ pushd .
cd /
$ pwd
/
$ popd
$ pwd
/home/gorka/documentos/webs/imagenes

Para ver qué directorios tenemos en pila podemos usar dirs. Por ejemplo:

dirs
/home/gorka/documentos/webs/imagenes
/

El problema de pushd y popd es que cada vez que hacemos una llamada a popd quitamos el elemento de la pila y tendremos que volver a añadirlo. Esta es la razón que me hacía dudar de la utilidad de estos comandos. Sin embargo, hace poco Asier (un conocido) me sugirió este ‘truquillo’:

Si usamos dirs así:

dirs +1

tendremos el primer elemento de la pila. De esta forma podemos usar:

cd `dirs +1`

y nos llevará al primer directorio que tenemos almacenado.

Curiosamente no me funciona cuando en la ruta del directorio está mi directorio ‘home’, que al guardar queda representado como ‘~’. Por ejemplo si hago:

cd $HOME
pushd .
cd /
cd `dirs +1`

El resultado será:

bash: cd: ~: No existe el fichero ó directorio

Seguiré investigando para ver cuál puede ser el problema ¿Alguien tiene alguna pista?

La consola de Linux - comparar dos directorios

Noviembre 27th, 2006 | No Comments » | Posted in linux

En más de una ocasión te habrás encontrado con la necesidad de tener que comparar el contenido de dos directorios, por ejemplo para ver qué fichero falta en uno de los directorios. Yo suelo usar el siguiente script:

ls $1 > $1.listado
ls $2 > $2.listado
comm $1.listado $2.listado $3
rm $1.listado
rm $2.listado

(Yo lo tengo guardado en un fichero llamado compara en un directorio incluido en el PATH; para poder ejecutarlo desde cualquier sitio).

El trabajo principal lo hace el comando comm, que compara dos ficheros y muestra las diferencias entre ellos. En este caso compara dos ficheros que contiene cada uno el listado de un directorio.

Por ejemplo tengo el directorio dir1 que contiene:

fichero_1.txt
fichero_comun.txt

y el directorio dir2 que contiene:

fichero_2.txt
fichero_comun.txt

Para comparar los directorios uso lo siguiente:

./compara dir1 dir2

y muestra el siguiente resultado:

fichero_1.txt
        fichero_2.txt
                fichero_comun.txt

En la primera fila tenemos los ficheros que están únicamente en el primer directorio, en el segundo tenemos los que están en el segundo directorio. Por último nos muestra los ficheros que se encuentran en ambos directorios.

El comando comm permite además las siguientes opciones:
-1 no muestra la columna correspondiente al fichero 1.
-2 no muestra la columna correspondiente al fichero 2.
-3 no muestra la columna común.

Así, si no queremos que aparezcan los ficheros presentes en ambos directorios usaremos:

./compara dir1 dir2 -3

Por comodidad yo uso el script anterior siempre con la opción 3 activada:

ls $1 > $1.listado
ls $2 > $2.listado
comm $1.listado $2.listado $33
rm $1.listado
rm $2.listado

La consola de Linux - hacer un fichero ejecutable

Noviembre 22nd, 2006 | 2 Comments | Posted in linux

En más de una ocasión nos encontraremos con que tenemos que convertir algún fichero en ejecutable, por ejemplo algún sencillo script que creemos. Por defecto los ficheros no son ejecutables así que debemos usar el comando chmod. El comando chmod cambia los permisos de un fichero:

chmod permisos fichero

Para más información sobre el comando chmod consultar la página del manual:

man chmod

Pero para hacer el fichero ejecutable podemos simplemente usarlo así:

chmod +x fichero

Flash player 9 en Ubuntu

Noviembre 22nd, 2006 | 3 Comments | Posted in firefox, linux, ubuntu

Ayer se publicó una actualización del Macromedia Flash player para Linux. La he probado en Ubuntu y parece que funciona perfectamente. Se puede instalar de varias formas, aquí os dejo la mía (sacada del readme.txt):

  1. Descárgate el plugin aquí.
  2. Descomprime el fichero descargado en tu carpeta de usuario.
  3. Copia el fichero libflashplayer.so a la carpeta ./mozilla/plugins (esta carpeta está oculta, pulsa CTRL-H para verla). Por si acaso haz una copia de seguridad (o renombra) el archivo libflashplayer.so de la carpeta ./mozilla/plugins (si es que existe ese fichero).

¡y listo! Ya puedes ver todas esas páginas que exigen la versión 9 de flash.

Ahora puedes borrar la carpeta donde habías descomprimido el fichero descargado.

La consola de Linux - sustituir un texto en un fichero

Noviembre 21st, 2006 | 3 Comments | Posted in linux, ubuntu

En más de una ocasión nos encontraremos con la necesidad de cambiar todas las ocurrencias de una palabra o texto de un fichero por otro. Existen varios programas que nos permiten hacerlo e incluso podemos usar la herramienta de reemplazar de nuestro editor de textos favorito. Sin embargo también podemos hacerlo desde la consola usando el comando sed. Este comando permite leer un fichero, hacer modificaciones al texto y guardarlo en otro fichero (sed es mucho más versátil que eso, pero es una buena simplificación).

Por ejemplo, para sustituir los ‘;’ por tabuladores en un fichero (el tabulador es el símbolo ‘\t’) podemos usar el comando:

sed -e 's/;/\t/g' fichero_origen.txt > fichero_destino.txt

que cambiará los ‘;’ del fichero_origen.txt por tabuladores y guardará el resultado en el fichero fichero_destino.txt. Evidentemente, si queremos que los cambios se guarden en el mismo fichero basta con hacer una pequeña modificación:

sed -e 's/;/\t/g' fichero_origen.txt > fichero_origen.txt

’s/;/\t/g’ es lo que se llama una expresión regular, muy usadas en la edición de ficheros. Las expresiones regulares son un poco complicadas de aprender, pero una vez que las manejas con cierta soltura te preguntas cómo podías vivir sin ellas (ojo, si te lo preguntas con mucha intensidad quizá es el momento de dedicar más tiempo a tu vida social). En otro post hablaré más extensamente sobre las expresiones regulares.

Voy a completar este post con otro ejemplo; vamos a sustituir las apariciones de ‘cabeza’ por el texto ‘pie’ en un fichero:

sed -e 's/cabeza/pie/g' fichero_origen.txt > fichero_destino.txt

por si quedaba alguna duda :-).

La consola de Linux - consultar qué aplicaciones tenemos instaladas

Noviembre 20th, 2006 | No Comments » | Posted in linux, ubuntu

En distribuciones basadas en Debian, como Ubuntu, pueden consultarle los programas que tenemos instalados usando dpkg. Por supuesto que también puede consultarse con la herramienta de instalación de paquetes, pero ahora estamos hablando de cómo hacerlo a través de la consola.

Si usamos:

dpkg -l

veremos el listado completo de paquetes instalados. Es una buena opción si te sobra el tiempo :-). Lo mejor es filtrar los resultados usando el comando grep. En el siguiente ejemplo vamos a ver cómo ver sólo los paquetes relacionados con postgresql:

gorka@homer-desktop:~$ dpkg -l | grep postgresql
ii  postgresql                             7.5.16.1                               object-relational SQL database management system (transi
ii  postgresql-7.4                         7.4.12-3                               object-relational SQL database, version 7.4 server
ii  postgresql-8.1                         8.1.4-0ubuntu1                         object-relational SQL database, version 8.1 server
ii  postgresql-client                      7.5.16.1                               front-end programs for PostgreSQL (transitional package)
ii  postgresql-client-7.4                  7.4.12-3                               front-end programs for PostgreSQL 7.4
ii  postgresql-client-8.1                  8.1.4-0ubuntu1                         front-end programs for PostgreSQL 8.1
ii  postgresql-client-common               53ubuntu3                              manager for multiple PostgreSQL client versions
ii  postgresql-common                      53ubuntu3                              manager for PostgreSQL database clusters

Sencillo, cómodo y rápido.

La consola de Linux - programar el apagado del ordenador

Noviembre 16th, 2006 | 2 Comments | Posted in linux, ubuntu

En Linux es posible programar el apagado del ordenador usando el comando shutdown.

Para apagar el ordenador inmediatamente:

shutdown -h now mensaje

mensaje es el mensaje que se enviará cuando llegue el momento de apagar, no es necesario poner este parámetro.

Si queremos apagar el ordenador a una hora determinada:

shutdown -h hh:mm mensaje

donde hh:mm es la hora a la que queremos que se apague.

También podemos usar esta forma para apagar, por ejemplo, dentro de 30 minutos:

shutdown -h +30 mensaje

donde +30 indica el número de minutos que queremos esperar hasta el apagado.

La consola de Linux III - diciendo que sí a todo

Noviembre 13th, 2006 | No Comments » | Posted in linux, ubuntu

Existe un comando sumamente curioso llamado yes. Pruébalo en la consola tecleado:

yes

y verás por qué es curioso. Para pararlo pulsa CRTL-C. También puedes probar con esta variación:

yes no me gusta repetirme

Puede que parezca inútil un comando cuya única funcionalidad es repetir indefinidamente una cadena. Sin embargo puede resultar muy útil usando tuberías; supongamos un programa que nos pregunte un montón de veces ‘¿Está seguro (s/n)?’ (hay muchos, pero ahora no se me ocurre ninguno) y la respuesta sea siempre ’sí’. Para ahorrarnos el trabajo de teclear s constantemente podemos usar el comando yes:

yes s | programa_pregunton

y yes se encargará de enviarle a programa_pregunton todas las ’s’ que hagan falta.

Dos cosas:

- hay que estar seguro de que queremos contestar a todo que sí.
- hay que ser muy vago para encontrarle utilidad a este truquillo :-P.

La consola de Linux II - buscar archivos

Noviembre 11th, 2006 | 1 Comment | Posted in linux, ubuntu

Esta vez le toca el turno al comando ‘locate’, que nos permite buscar archivos rápidamente en el disco duro. Por ejemplo:

locate fotos

nos va a buscar en todo el disco duro los archivos que incluyan en su nombre la palabra ‘fotos’. Esta búsqueda se va a terminar rápidamente. La razón es que no se hace la búsqueda recorriendo todos los directorios, sino que se busca en una base de datos que contiene todos los archivos del ordenador. Si queremos actualizar la base de datos tendremos que usar el comando ‘updatedb’:

sudo updatedb

Nota: Hay algunas tareas que sólo puede realizar el administrador del sistema. sudo es un comando que nos convierte temporalmente en administradores; sólo para la ejecución del comando que viene a continuación.

Si al usar el comando locate la lista de resultados es demasiado larga podemos usar el comando ‘grep’ para filtrarla. Por ejemplo si sólo queremos fotos que contengan en el nombre de archivo la palabra fotos:

locate fotos | grep coche

o podríamos buscar sólo los archivos que contienen la palabra fotos y la extensión jpg:

locate fotos | grep .jpg

Es posible que te preguntes qué significa la barra vertical ‘|’. Este símbolo es lo que se llama una tubería (o pipe en inglés) que lo que hace es enviar la salida del primer comando al segundo. En este caso envía al comando grep el listado completo que mostraría ‘locate fotos’ para que lo filtre.

Para más información teclear en la consola:

man locate
man updatedb
man grep

El comando ‘man’ nos muestra la página del manual del comando solicitado.