Introduccionalinux PDF

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 212

Introducción a Linux

Version imprimible
Este documento deber servir exclusivamente como material de apoyo al contenido
del curso interactivo accesible a través de internet.

Indice
Presentación............................................................... 2
Módulo I. Introducción.................................................................
Introducción................................................................ 3
Instalación.................................................................. 4
Historia...................................................................... 7
Entornos de trabajo..................................................... 10
Distribuciones............................................................ 17
Módulo II. Órdenes comunes........................................................
Instrucciones habituales................................................ 22
Sintaxis de las órdenes................................................. 26
Sistema de ficheros..................................................... 32
Instrucciones de ficheros...........................................................
Instrucciones de ficheros............................................... 38
Inspeccionar.............................................................. 39
Crear....................................................................... 45
Modificar...................................................................48
Borrar...................................................................... 48
Instrucciones de texto................................................... 49
Instrucciones útiles...................................................... 58
-- Nuevo clasificador --.............................................................
Módulo III. Órdenes avanzadas.....................................................
Redirecciones............................................................ 67
Concatenar órdenes.....................................................75
Uso de variables......................................................... 78

Plataforma de Teleformación de IFES Página 1 de 212


Introducción a Linux

Uso de comillas.......................................................... 79
Estructuras de control................................................... 80
Editores de texto......................................................... 82
F.A.Q.....................................................................................
Apéndices (Conceptos básicos).....................................................
¿Qué es un sistema operativo?....................................... 87
¿Qué es el software libre?............................................. 88
¿Por qué usar software libre?......................................... 90
Licencias de software libre............................................. 92
Internet y herramientas de red....................................... 144
Introducción a MySQL................................................. 169
Grabación de cd´s..................................................... 201
Programación en Bash................................................ 205
Introducción a Linux
Presentación

Reciba la bienvenida al curso de Linux


Para aprender un sistema operativo como Linux es fundamental practicar mucho su
uso. Normalmente, cuando alguien empieza a aprender Linux se encuentra con
algunas aparentes dificultades (dónde está esto, cómo se accede a lo otro...) que
pueden hacernos desmotivarmos. Afortunadamente, en nuestro curso contamos con un
tutor que nos resolverá cualquier duda y tenemos un foro donde podremos compartir
experiencias con nuestros compañeros del curso.

No dudes en preguntar al tutor o escribir en el foro.

A continuación le pedimos que rellene la ficha de datos personales.

Después debe descargar el recurso llamado "ejemplos" del curso. Es muy importante
probarlo todo, hacer todos los ejercicios, modificarlos, probarlos, preguntar al tutor
cualquier duda o comentar las impresiones en el foro.

Página 2 de 212 Introducción a Linux


Introducción a Linux

Módulo I. Introducción
Introducción

Opciones, muchas opciones


Bajo el nombre Linux se encuentran muchas opciones que podemos elegir al usar
nuestro ordenador. Podemos elegir el tipo de kernel, shell, entorno gráfico, distribución,
programas de ofimática, etc.

No te preocupes si alguno de estos nombres no sabes


qué son, puedes mirarlos en el glosario o ya los iremos
aprendiendo poco a poco.

Vamos a aprender a manejar Linux mediante comandos de texto;también se puede


hacer mediante el ratón con programas basados en ventanas (tenemos muchas
opciones), pero el sistema de ventanas es muy parecido al de Windows o al de
Macintosh y es muy sencillo aprenderlo por nuestra cuenta.

Pero si es tan sencillo el método gráfico,¿por qué


vamos a utilizar el arcaico sistema de texto?

El sistema de trabajo basado en texto es arcaico y es más difícil de aprender que el


utilizar programas gráficos, pero una vez que hemos aprendido podemos hacer más
cosas en menos tiempo que con el método gráfico.

Curva de aprendizaje

La curva de aprendizaje es un gráfico que nos gusta mucho a los profesores; muestra
cuánto esfuerzo es necesario para lograr aprender a hacer algo.

Plataforma de Teleformación de IFES Página 3 de 212


Introducción a Linux

En esta imagen podemos ver que cuando llevamos poco tiempo aprendiendo el
entorno de texto, el resultado es muy pequeño, podemos hacer muy pocas cosas, y a
nadie se le ocurre decirle a los amigos: "hoy he aprendido a borrar un archivo". Por el
contrario,al poco tiempo de trabajar con un entorno gráfico (Windows, Macintosh o
Linux), ya podemos hacer lo fundamental y podemos poner en nuestro currículum
"usuario avanzado".

Lo que también se puede ver en la curva de aprendizaje es que cuando llevamos más
tiempo aprendiendo conseguimos hacer tareas que no se puede hacer en modo
gráfico.

De todas maneras, como en Linux podemos elegir ,podemos usar al mismo tiempo
órdenes de teclado y el sistema gráfico, por lo que conseguimos unir lo mejor de ambos
mundos, ser un Usuario avanzado y llegar a ser un Usuario experto.

Todos los ejemplos de código están almacenados en un archivo en el recurso


multimedia llamado "Ejemplos", al principio del temario. Descárgalo y descomprímelo
con la orden tar xzvf ejemplos.tar.gz . Puedes ver el contenido de cualquiera de los
ejemplos con la orden cat nombreDelArchivo , y puedes ejecutarlo con la orden sh
nombreDelArchivo .

Página 4 de 212 Introducción a Linux


Introducción a Linux

Instalación
Aprender a instalar en profundidad un sistema Linux no es un objetivo de este curso.
Sin embargo,practicar las órdenes de Unix es fundamental para el aprendizaje de este
curso, por esto vamos a dar unas pequeñas nociones sobre cómo instalar Linux .

Conseguir una distribución

El primer paso es conseguir una distribución, una colección de programas que forman
el sistema operativo y otros programas.

Comprar

Se puede comprar (que sean libres no significa que no se puedan vender, lo que no se
puede hacer es limitar el derecho de copia), así que puedes ir a un distribuidor de
informática y comprar una distribución grande;no son muy caras y vienen con manuales
muy útiles.

Comprar una revista en el quiosco

En casi todas las revistas de Linux viene incluido un CD-ROM con una distribución de
Linux .

Descargarla de Internet

También se pueden descargar los CD-ROMs de Internet y después grabarlos. Aquí


tenemos una lista de lugares donde se pueden descargar varias distribuciones:

• Mandriva , versión live y para instalar, en CD-ROMs o en DVD.


• Open Suse También varias opciones.
• Fedora La distribución libre de RedHat.
• Knoppix. La distribución live original.

Que te la envíen gratis a tu casa

La distribución *Ubuntu* no sólo dejan descargar y copiar sino que te la envían a casa
¡pagando ellos el transporte!, les cuesta unas tres semanas.

Plataforma de Teleformación de IFES Página 5 de 212


Introducción a Linux

Instalación completa

La instalación completa en disco duro es complicada porque normalmente querremos


tener Linux y mantener Windows , y cuando instalamos Windows , este sistema
operativo ocupó todo el espacio en disco duro para él.

Antes de instalar Linux en un ordenador que ya tiene


Windows es necesario hacer una copia de seguridad de
todos nuestros datos, los programas se pueden volver a
instalar, pero las fotos digitales de las vacaciones
pasadas no las podremos recuperar si se borran durante
el proceso.

Las distribuciones modernas permiten instalar Linux en el espacio que no está


utilizando Windows y normalmente no dan ningún problema, pero hacer copias de
seguridad nunca está de más.

Una vez que está instalado el ordenador al arrancar nos preguntará con cuál de los
sistemas operativos queremos trabajar. Se lo indicamos con las teclas de las flechas
arriba o abajo y la tecla enter cuando está seleccionada la opción correcta.

Ejecución live

Para ejecutar una distribución live, es necesario decirle al ordenador que cuando
arranque busque el sistema operativo en el CD-ROM, y si no hay ninguno que lo
busque en el disco duro.

El programa que se pone en marcha al encender el ordenador se le llama "la BIOS" y


se puede acceder pulsando la tecla Supr en algunos ordenadores, en otros es con la
tecla F1 y en otro es con la tecla F2.

Este programa se maneja con las teclas de las flechas, la tecla enter para hacer
cambios.

Página 6 de 212 Introducción a Linux


Introducción a Linux

El único dato que nos interesa cambiar es la secuencia de arranque, (boot sequence).
En esta secuencia van los dispositivos donde va a buscar el sistema operativo. Le
pondremos como primera opción el CD-ROM , para que si encuentra uno puesto, con
sistema operativo, lance éste. Como segunda opción pondremos el disco duro (HD) ,
para que cuando no queramos arrancar en Linux , saquemos el CD y el ordenador
arranque con el sistema operativo que tenemos instalado.

Historia
Conocer un poco la Historia de estos sistemas operativos no es fundamental, pero nos
aporta un poco de perspectiva para organizar algunos conceptos con los que
trabajaremos en el curso.

Multics

Multics era un sistema operativo multiusuario y multiproceso (de ahí le viene el

Plataforma de Teleformación de IFES Página 7 de 212


Introducción a Linux

nombre) que se intentó hacer en los laboratorios Bell a mediados de los años 60 y que
nunca llegó a funcionar.

Unix

Unos ingenieros, en su tiempo libre ,hicieron por su cuenta una versión reducida del
sistema Multics y como chiste le llamaron Unix ,en contraposición al sistema que no
llegaron a hacer.

En los años siguientes varias empresas realizaron sus propias versiones de Unix
como IBM, HP, Apple, Santa Cruz Operation o Digital para grandes ordenadores.

GNU

A mediados de los 80 surge el movimiento en apoyo del software libre con el proyecto
GNU.

GNU es una sigla recursiva y con un significado chocante; GNU es "GNU is Not Unix",
en español "GNU No es Unix". Es un proyecto que intenta hacer un sistema que
funcione como Unix pero volviendo a programar cada programa necesario para su
funcionamiento. La mayor parte de las órdenes que vamos a ver en este curso las han
hecho bajo el proyecto GNU.

Página 8 de 212 Introducción a Linux


Introducción a Linux

Linux

A principio de los años 90 GNU tenía preparados editores de caracteres, compiladores,


intérpretes de comandos y otras utilidades necesarias para desarrollar un sistema
operativo, pero el programa principal, el kernel, que se encarga de los usuarios, la
ejecución de los programas, su relación con la memoria y los discos duros, se les
retrasaba (en el año 2006 todavía no lo han terminado).Un estudiante finlandés llamado
Linus Torwalds programó uno sin las especificaciones que se habían impuesto los
desarrolladores de GNU, pero que funcionaba.

Plataforma de Teleformación de IFES Página 9 de 212


Introducción a Linux

En 1992 Linus Torwald adoptó la licencia GPL para el kernel: el núcleo ya era libre;a
partir de este punto ,el crecimiento de este sistema en variedad y utilización está siendo
exponencial.

Entornos de trabajo
En Linux tenemos la oportunidad de trabajar en modo texto (consola) o en modo
gráfico (con ventanas), así podremos elegir un método u otro y poder cambiar cuando
queramos.

Entornos de consola

El entorno de consola no es MS-DOS. El entorno de


consola de Unix es mucho más rico y poderoso.

Dentro del entorno de consola también podemos elegir entre varios sistemas, aunque
el más utilizado y el que vamos a estudiar en este curso es el shell llamado Bash.

Página 10 de 212 Introducción a Linux


Introducción a Linux

Maneras en las que se puede utilizar el entorno de consola:

• Sistemas Linux sin entorno gráfico.


• Instalando Cygwin en ordenadores con Windows .
• Utilizando un programa emulador de consola en Linux con sistemas gráficos
podemos poner en marcha varios programas que nos ponen una consola en
una ventana, (Konsole , xterm , Gnome-Term , etc).
• Pulsando la tecla F1 (o F2 ... F5) mientras mantenemos pulsadas las teclas
Control y Alt. En este caso siempre podemos volver al modo gráfico
pulsando Control + Alt + F7.

Entornos gráficos

En Linux , tenemos multitud de entornos de trabajo gráficos

• WindowMaker
• Blackbox
• IceWM
• XFCE
• Gnome
• KDE

WindowMaker

Plataforma de Teleformación de IFES Página 11 de 212


Introducción a Linux

BlackBox

Página 12 de 212 Introducción a Linux


Introducción a Linux

WindowMaker , Blackbox y otros son entornos gráficos donde el método de trabajo es


bastante diferente de otros entornos gráficos habituales (léase Windows ), son
recomendables cuando ya se tenga experiencia y se quiera experimentar con métodos
diferentes de poner en marcha los programas, ver el correo, manejar las ventanas, etc.

Gnome

Plataforma de Teleformación de IFES Página 13 de 212


Introducción a Linux

KDE

Página 14 de 212 Introducción a Linux


Introducción a Linux

Gnome y KDE son los entornos gráficos que más se están utilizando. Gnome es muy
sencillo e intuitivo, KDE tiene más opciones y efectos. Los dos utilizan gran cantidad de
recursos del ordenador (memoria y velocidad); son los recomendados para empezar a
no ser que se esté trabajando con un ordenador lento.

IceWM

Plataforma de Teleformación de IFES Página 15 de 212


Introducción a Linux

XfCE

Página 16 de 212 Introducción a Linux


Introducción a Linux

IceWM o XFCE son los entornos gráficos recomendados para equipos lentos ya que
son ligeros y tienen bastantes características de los sistemas modernos.

Distribuciones
Los sistemas operativos propietarios, como Windows , están desarrollados por
empresas como Microsoft y esta empresa es la que realiza los CDs y los vende.

En el campo de Linux , no hay una única empresa que lo desarrolle, sino que hay
miles de programadores, sin ninguna relación entre ellos que van creando y
modificando los programas que funcionan en Linux . Como estos programas están a
disposición de cualquiera que los quiera utilizar, surgieron las distribuciones, que son
recopilaciones de programas y utilidades que forman el sistema Linux .

Como los programas que se incluyen en una distribución son libres, la empresa que
realiza la distribución no puede limitar el derecho de copia, sólo pueden prohibir la
copia de programas que haya realizado dicha empresa y no haya liberado, así como

Plataforma de Teleformación de IFES Página 17 de 212


Introducción a Linux

logotipos, marcas, etc.

Distribuciones comerciales o de organizaciones

Hay varias empresas que se dedican a recopilar, personalizar, comprobar que


funcionan bien de forma conjunta y empaquetar programas para conseguir
distribuciones de Linux .

Estas empresas tienen como objetivos vender las distribuciones o los servicios de
mantenimiento y personalización a organizaciones o a usuarios finales.

Las distribuciones más importantes actualmente son:

RedHat busca acceder al mercado de los servidores para empresas.

Suse y Mandriva son distribuciones enfocadas para el usuario final.

Página 18 de 212 Introducción a Linux


Introducción a Linux

Debian es una distribución que está hecha por programadores que sólo intenta el
desarrollo del software sin cortapisas.

Ubuntu : recientemente ha surgido esta distribución que es de una empresa, pero está
basada en la de Debian y pretende ser muy sencilla y permanecer libre.

Distribuciones temáticas

Como no hay apenas restricciones a la creación de distribuciones, se van creando


distribuciones con objetivos de lo más variopinto.

Distribuciones enfocadas a un sector de la informática concreto:

• Bioknoppix : programas de uso en bioinformática.


• NetBSD : enfocado en una seguridad estricta.
• FreeBSD : enfocado a la estabilidad del sistema.
• Media Linux : programas multimedia.
• GhostWriter : distribución con herramientas para escritores.
• Oralux : distribución para ciegos (interfase mediante audio).

Plataforma de Teleformación de IFES Página 19 de 212


Introducción a Linux

• JuegaLinex : juegos.

También hay distribuciones adaptadas a un idioma o zona del mundo,;existen


distribuciones centradas en el bengalí o hebreo y distribuciones para prácticamente
cada autonomía española, así comopara varias localidades.

Podemos buscar todas las distribuciones Linux que queramos


en http://distrowatch.com/

Distribuciones live

Las distribuciones live son recopilaciones de programas que están listas para funcionar

Página 20 de 212 Introducción a Linux


Introducción a Linux

sin necesidad de instalar nada en el disco duro, no lo modifican de ninguna manera.

La primera distribución live fue Knoppix , que ya va por la versión 4.0, se desarrolló
para demostrar a los usuarios las posibilidades y facilidad de uso de Linux .

Actualmente tenemos multitud de distribuciones live para:

• Demostraciones de Linux o de funcionamiento de programas.


• Distribuciones con herramientas de recuperación de datos.
• Distribuciones para poder trabajar sin tener que realizar instalaciones o en
ordenadores que no tienen disco duro.

Plataforma de Teleformación de IFES Página 21 de 212


Introducción a Linux

Módulo II. Órdenes comunes


Instrucciones habituales

Comenzamos a escribir

Empezamos a trabajar con Linux , tenemos una pantalla negra (puede ser de otro
color) que hemos sacado en el menú terminales (o xterm o kterm), o hemos pulsado las
teclas Control, Alt y F1 al mismo tiempo (en este caso, volvemos al modo gráfico con
Control + Alt + F7).

Después de escribir el nombre de usuario y la clave (si nos la pide), nos encontramos
un texto que sirve para indicarnos que el sistema está esperando que escribamos una
orden, a este texto le llamaremos "prompt" y lo representaremos en este curso con el
símbolo del dólar (en tu Linux puede ser diferente).

escribimos nuestra primera orden:

$ date

y al darle a la tecla de retorno (o entrar o return ), obtenemos:

$ date
Wed Nov 23 13:22:21 2005
$

Cuando hemos pulsado la tecla retorno le hemos indicado al sistema que la orden
estaba completa, la ha ejecutado y nos ha mostrado el resultado de la ejecución en la
siguiente línea, la fecha y la hora actual, y en la línea siguiente ha vuelto a aparecer el
prompt para indicarnos que está preparado para la siguiente tarea que se le

Página 22 de 212 Introducción a Linux


Introducción a Linux

encomiende.

Errores de escritura

Vamos a escribir una orden incorrectamente para ver qué sucede:

$ dates

al pulsar retorno nos aparece un mensaje parecido al siguiente:

$ dates
sh: dates: command not found
$

Cuando nos equivoquemos nos aparecerán mensajes de error indicando:

• Que no se conoce la orden, porque no está instalada o porque la hemos


escrito mal.
• Que no conoce los argumentos o que están mal escritos.
• Que no puede realizar la orden, por ejemplo que no puede borrar un archivo
que está en un CD-ROM.

Atajos de teclado

En los entornos gráficos un atajo de teclado es una combinación de teclas que hace lo
mismo que un menú.

En el entorno de consola, realmente son atajos para no tener que escribir las órdenes
completas.

Sin estos atajos el trabajo con el teclado sería muy


tedioso, es muy importante que se conozcan y se utilicen
constantemente.

Auto completado

El auto completado se activa cuando tenemos un comando o nombre de archivo escrito


a medias y pulsamos la tecla tabulador (tab).

Plataforma de Teleformación de IFES Página 23 de 212


Introducción a Linux

• Si cuando pulsamos sólo hay una orden que empiece como lo que hemos
escrito, el sistema la escribe.
• Si hay varias posibilidades que casan tendremos que volver a darle al
tabulador y nos mostrará las diferentes posibilidades.

Vamos a ver un ejemplo, la pulsación de la tecla tabulador la marcaremos como


(tab), no aparecerán las letras t, a y b en la pantalla. Normalmente la tecla tabulador
está a la izquierda del teclado, encima de la tecla de bloqueo de mayúsculas y tiene
dibujadas unas flechas horizontales.

Unix distingue entre mayúsculas y minúsculas,


asegúrate de que están tal y como las escribimos aquí.

$ rmd(tab)/e(tab)X(tab)xin(tab)

El texto que tiene que haber aparecido es:

$ rmdir /etc/X11/xinit/

Hemos pulsado 13 teclas y tenemos 21 caracteres, el utilizar el auto completado nos


ahorra alrededor de un 50% de pulsaciones.

Por cierto la orden anterior intentará borrar un directorio


de configuración del sistema, pero si no tenemos
permisos o no está vacío nos dará un error y no lo
borrará, pero por si acaso en lugar de darle a la tecla
control , anularemos la orden manteniendo pulsada la
tecla control (Ctrl ) y pulsamos una vez la tecla c .

Para no ejecutar una orden que hemos escrito pulsamos Ctrl + c

¿Qué sucede cuando hay varias órdenes o archivos que comienzan igual? Al darle al
tabulador el sistema no sabe cuál de ellos poner, pone las letras que puede y nos avisa
con un pitido, podemos forzarle a que nos muestre las diversas opciones con una
segunda pulsación sobre el tabulador (tab), escribir unas letras para que diferencie
entre las opciones posibles y volver a darle al tabulador.

Ejemplo: escribimos:

Página 24 de 212 Introducción a Linux


Introducción a Linux

$ ls /usr/i(tab)

el sistema encuentra en el directorio /usr los directorios que empiezan por i include e
info, como los dos empiezan por i y luego n , el sistema pone la n y nos indica que no
sabe cuál de los dos poner con un pitido, si le damos una segunda vez al tabulador nos
indica cuáles son las opciones:

$ ls /usr/in(tab)(tab)
include/ info/
$ ls /usr/inc(tab)

escribimos una letra(c) que rompa el empate y volvemos a pulsar (tab); ahora el
sistema no tiene dudas y nos mostrará el directorio /usr/include.

Recuperación de órdenes

En el entorno de texto que estamos trabajando se almacenan las órdenes que vamos
escribiendo.Para recuperarlas pulsamos las teclas flecha-arriba o flecha-abajo, y
cuando las tengamos en pantalla pulsamos retorno.

También podemos recuperar una orden antigua y modificarla para que se ejecute con
otras opciones o sobre otros ficheros.

$ ls -l
total 0
drwxr-xr-x+ 3 felix Ninguno 0 Nov 29 14:18 bin
drwxr-xr-x+ 4 felix Ninguno 0 Nov 30 10:19 cursos
drwxr-xr-x+ 4 felix Ninguno 0 Nov 30 12:04 tmp
$ ls -l /usr
total 0
drwxrwxrwx+ 8 ifes Usuarios 0 Nov 21 13:59 X11R6
drwxrwxrwx+ 3 ifes Usuarios 0 Nov 30 08:59 bin
drwxrwxrwx+ 7 ifes Usuarios 0 Nov 21 13:59 doc
drwxrwxrwx+ 2 ifes Usuarios 0 Nov 21 10:45 etc
drwxrwxrwx+ 23 ifes Usuarios 0 Nov 21 14:01 include
drwxrwxrwx+ 2 ifes Usuarios 0 Nov 21 10:45 info
drwxrwxrwx+ 18 ifes Usuarios 0 Nov 21 14:01 lib
drwxrwxrwx+ 5 ifes Usuarios 0 Nov 21 10:45 local
drwxrwxrwx+ 6 ifes Usuarios 0 Nov 25 10:30 man
drwxrwxrwx+ 3 ifes Usuarios 0 Nov 23 09:01 sbin
drwxrwxrwx+ 35 ifes Usuarios 0 Nov 23 09:01 share
drwxrwxrwx+ 2 ifes Usuarios 0 Nov 21 10:45 src
drwxrwxrwx+ 6 ifes Usuarios 0 Nov 21 14:00 ssl
drwxrwxrwx+ 2 ifes Usuarios 0 Nov 21 10:45 tmp
drwxrwxrwx+ 7 ifes Usuarios 0 Nov 24 12:50 var
$ ls -l /usr/X11R6

Plataforma de Teleformación de IFES Página 25 de 212


Introducción a Linux

total 0
drwxrwxrwx+ 2 ifes Usuarios 0 Nov 23 14:26 bin
drwxrwxrwx+ 5 ifes Usuarios 0 Nov 21 13:59 doc
drwxrwxrwx+ 8 ifes Usuarios 0 Nov 21 13:59 include
drwxrwxrwx+ 4 ifes Usuarios 0 Nov 21 13:59 lib
drwxrwxrwx+ 5 ifes Usuarios 0 Nov 21 14:00 man
drwxrwxrwx+ 5 ifes Usuarios 0 Nov 21 13:59 share

En este ejemplo, la primera vez hemos escrito ls -l , la segunda vez flecha arriba
(espacio)/usr, con lo que hemos obtenido ls -l /usr, y la tercera vez flecha arriba
/X11R6, con lo que hemos obtenido ls -l /usr/X11R6.

Las órdenes que escribimos se almacenan en un


archivo, y las recuerda de una sesión a otra aunque se
haya apagado el ordenador.

Sintaxis de las órdenes

Órdenes simples
Hay muy pocas órdenes que tengan utilidad al emplearse sin modificadores ni
argumentos.Suelen dar información del sistema.Las más habituales están en el
siguiente listado:

$ pwd
/home/ifes
$ ls
RCS
bin
cursos
tmp
$ ps
PID PPID PGID WINPID TTY UID STIME COMMAND
1484 1 1484 1484 con 1001 13:22:17 /usr/bin/bash
964 1484 964 1676 con 1001 13:22:25 /usr/local/bin/screen
1612 964 1612 1612 ? 1001 13:22:25 /usr/local/bin/screen
1672 1612 1672 1460 0 1001 13:22:25 /usr/bin/sh
1804 1672 1804 1500 0 1001 13:49:22 /usr/bin/vim
1816 1612 1816 1568 1 1001 13:52:43 /usr/bin/sh
540 1816 1208 540 1 1001 14:01:41 /usr/bin/sh

Página 26 de 212 Introducción a Linux


Introducción a Linux

1620 540 1208 1588 1 1001 14:01:41 /usr/bin/ps


$ date
Thu Nov 24 14:01:41 2005
$ who
felix cesar josemi

Si practicas obtendrás resultados diferentes;vamos a ver qué hacen estas órdenes:

• pwd : nos indica en qué directorio estamos.


• ls : hace un listado de los archivos y directorios que hay en el directorio
donde nos encontramos.
• ps : saca la lista de procesos que se están ejecutando en este momento.
• date : nos indica la fecha y la hora actual.
• who : nos dice quién está conectado en este ordenador.
• cal : saca un calendario.

Opciones

Las opciones son letras o textos que se ponen detrás de la orden,normalmente con
espacios y guiones.

Hacen que el funcionamiento de la orden sea diferente del original.

Veamos unos ejemplos:

$ date
Thu Nov 24 14:36:18 2005
$ date -u
Thu Nov 24 13:36:18 UTC 2005
$ date --iso-8601
2005-11-24

• date : Muestra la fecha y la hora en el formato por defecto.


• date -u : Muestra la fecha y la hora en formato universal (fíjate que muestra
una hora menos si estás en la zona horaria de Madrid con horario de
invierno).
• date --iso-8601 : Muestra la fecha sacando primero el año, el mes y el día.

Cuando la opción está formada por una letra se suele poner un guión delante;cuando
es una opción larga se suelen poner dos guiones, pero esto no es estándar y depende
de la orden de que se trate.

Se pueden poner más de una opción y son equivalentes las siguientes órdenes:

$ ls -l -h

Plataforma de Teleformación de IFES Página 27 de 212


Introducción a Linux

total 0
drwxr-xr-x+ 2 ifes Ninguno 0 Nov 24 12:05 RCS
drwxr-xr-x+ 3 ifes Ninguno 0 Nov 23 13:48 bin
drwxr-xr-x+ 4 ifes Ninguno 0 Nov 24 09:03 cursos
drwxr-xr-x+ 2 ifes Ninguno 0 Nov 24 14:51 tmp
$ ls -h -l
total 0
drwxr-xr-x+ 2 ifes Ninguno 0 Nov 24 12:05 RCS
drwxr-xr-x+ 3 ifes Ninguno 0 Nov 23 13:48 bin
drwxr-xr-x+ 4 ifes Ninguno 0 Nov 24 09:03 cursos
drwxr-xr-x+ 2 ifes Ninguno 0 Nov 24 14:51 tmp
$ ls -lh
total 0
drwxr-xr-x+ 2 ifes Ninguno 0 Nov 24 12:05 RCS
drwxr-xr-x+ 3 ifes Ninguno 0 Nov 23 13:48 bin
drwxr-xr-x+ 4 ifes Ninguno 0 Nov 24 09:03 cursos
drwxr-xr-x+ 2 ifes Ninguno 0 Nov 24 14:51 tmp
$ ls -hl
total 0
drwxr-xr-x+ 2 ifes Ninguno 0 Nov 24 12:05 RCS
drwxr-xr-x+ 3 ifes Ninguno 0 Nov 23 13:48 bin
drwxr-xr-x+ 4 ifes Ninguno 0 Nov 24 09:03 cursos
drwxr-xr-x+ 2 ifes Ninguno 0 Nov 24 14:51 tmp

• Da igual poner antes la opción l o la opción h .


• Las opciones cortas (de una sola letra) se pueden combinar y escribir -lh o
-hl , con un sólo guión.

Argumentos

Los argumentos son textos o nombres de archivos que se pasan a la orden para que
los procese (que haga algo con ellos).

En los dos ejemplos siguientes vamos a utilizar argumentos para la función date del
tipo cadena de texto.

$ date -d 1-may
Sun May 1 00:00:00 2005
$ date -d 1-dec-2005
Thu Dec 1 00:00:00 2005
$ date -r /etc/passwd
Mon Nov 21 10:45:48 2005

En los dos primeros ejemplos utilizamos la opción -d para que nos saque por pantalla
la fecha que le pasamos como argumento, en lugar de la fecha actual;así nos sacará la
fecha del 1 de mayo de presente año o la fecha del 1 de diciembre de 2005.

Página 28 de 212 Introducción a Linux


Introducción a Linux

Como el sistema en el que estoy trabajando está en inglés, los nombres de los meses
tienen que estar en inglés (la abreviatura de mayo, may, en inglés es igual que en
español, pero para diciembre hemos tenido que poner dec ).

Comprueba cómo está instalado el idioma en tu sistema


con los resultados que devuelve date .

En el tercer ejemplo modificamos el comportamiento de date con la opción -r , que


hace que en lugar de sacar la fecha actual, saque la fecha de la última vez que se ha
modificó un archivo. En este último ejemplo el argumento es un fichero.

Acuérdate de utilizar los tabuladores para acabar las órdenes y los nombres de los
directorios y archivos.
Comodines

El uso de los comodines lo hace el sistema operativo,


que busca los archivos que tengan la forma que case
con los comodines y se los pasa al programa, así que
todos los programas admiten comodines.

Los comodines de la baraja son naipes que pueden tomar el valor que nos apetezca en
juegos como el póquer o el rabino.

En la línea de comandos los comodines son:

• El asterisco ( * )
• El cierre de paréntesis ( ? )
• Cualquier símbolo entre corchetes cuadrados ( [ ] ).

El asterisco sirve para indicar cualquier letra, un número de veces ilimitado.

$ ls /bin/a*
/bin/a2p
/bin/addftinfo
/bin/afmtodit
/bin/animate

Plataforma de Teleformación de IFES Página 29 de 212


Introducción a Linux

/bin/annotate
/bin/antiword
/bin/anytopnm
/bin/apropos
/bin/ascii
/bin/asciitopgm
/bin/ash
/bin/aspell-import
/bin/aspell
/bin/atktopbm
/bin/awk
$ ls /bin/an*
/bin/animate
/bin/annotate
/bin/antiword
/bin/anytopnm
$ ls /bin/*ba*
/bin/banner
/bin/basename
/bin/bash
/bin/bashbug
/bin/libart2-config
/bin/tiff2rgba

En los ejemplo anteriores estamos mostrando los archivos que se encuentran dentro
del directorio /bin y que además:

• a* : Empiezan por a y sigue cualquier combinación de caracteres.


• an* : Empiezan por an y sigue cualquier combinación de caracteres.
• *ba* : Hay cualquier combinación de caracteres seguido de las letras ba y
cualquier combinación de teclas después.

El símbolo cierre de interrogación (?) sirve para indicar cualquier letra, pero sólo una
vez.

No te confundas el símbolo de inicio de interrogación (¿)


que no tiene ningún significado en Unix.

$ ls /bin/?sh
/bin/ash
/bin/ssh
$ ls /bin/??sh

Página 30 de 212 Introducción a Linux


Introducción a Linux

/bin/bash

• ls /bin/?sh : buscamos los archivos dentro del directorio bin que empiecen
por cualquier letra y después tengan una s y una hache.
• ls /bin/??sh : buscamos los archivos dentro del directorio bin que empiecen
por cualquier letra, seguido de cualquier otra letra y después tengan una s y
una hache.

El otro comodín que se utiliza es poner las letras que nos interesan entre corchetes ([]).
El sistema busca en su lugar cualquiera de las letras que estén en el corchete una sola
vez.

$ ls /bin/b[ae]*
/bin/banner
/bin/basename
/bin/bash
/bin/bashbug
$ ls /bin/b[ai]*
/bin/banner
/bin/basename
/bin/bash
/bin/bashbug
/bin/bioradtopgm
$ ls /bin/[bc][ae]*
/bin/banner
/bin/basename
/bin/bash
/bin/bashbug
/bin/cal
/bin/cameratopam
/bin/captoinfo
/bin/cat

Así la orden ls /bin/b[ae]* muestra el contenido del directorio /bin/ que empiece con una
b seguido indistintamente por una a o una e , seguido de cualquier letra o grupo de
letras * .

Obtención de ayuda

Para la obtención de ayuda podemos utilizar el comando man

$ man uname
UNAME(1) UNAME(1)
NOMBRE
uname - imprime información del sistema
SINOPSIS

Plataforma de Teleformación de IFES Página 31 de 212


Introducción a Linux

uname [-snrvma] [--sysname] [--nodename] [--release] [--machine]


[--all] [--help] [--version]
DESCRIPCIÓN
Esta documentación no va a ser mantenida a partir de ahora y
puede ser
inexacta o incompleta. La documentación Texinfo es ahora la
fuente
autorizada.
Esta pagina de manual documenta la versión de GNU de uname .
uname
imprime información acerca de la máquina y el sistema operativo
en los
que esta corriendo. Si no se da ninguna opción,uname actúa como
si se
hubiera dado la opción -s -a ;la información seleccionada se
imprime
en el orden `snrvm' con un espacio entre los diferentes
elementos.
OPCIONES
-m , --machine
Imprime el tipo de maquina (hardware).
-n , --nodename
Imprime el hostname del nodo de red de la maquina.
-r , --release
Imprime la versión del sistema operativo.
-s , --sysname
Imprime el nombre del sistema operativo.
-v Imprime la fecha de compilación del sistema operativo.
-a , --all
Imprime toda la información anterior.
--help Imprime un mensaje de uso en la salida estándar y termina
satis-
factoriamente.
--version
Imprime información sobre la version por la salida estándar y
termina satisfactoriamente.
FSF Utilidades Shell de GNU UNAME(1)

Para manejar el resultado, las órdenes más importantes son: tecla q para salir, flecha
arriba o flecha abajo para subir o bajar, / para buscar un texto (se escribe después y se
le da a enter), n para buscar el siguiente texto.
Nadie es capaz de aprenderse todos los comandos que
se utilizan en Unix con todas sus opciones, pero es un
objetivo de este curso que se sepan utilizar las páginas
del manual y encontrar las opciones necesarias para
realizar lo que se quiera hacer.

Página 32 de 212 Introducción a Linux


Introducción a Linux

Sistema de ficheros

El sistema de archivos en Unix


Antes de continuar con las órdenes habituales, es necesario conocer cómo se organiza
la información en Unix .

Ficheros y directorios

Como la mayoría de los sistemas actuales, Unix organiza la información en ficheros y


directorios. También hay otros elementos un poco más exóticos que veremos a su
debido tiempo.

Estructura jerárquica

En Unix no existen los equivalentes a las unidades de MS-DOS (c: o a: ), sino que

Plataforma de Teleformación de IFES Página 33 de 212


Introducción a Linux

todo está en una única estructura en árbol.

El directorio raíz se representa por la barra de dividir (/ ).

Podemos ver qué hay en el directorio raíz con la orden:

$ ls /
bin
cygdrive
cygwin.bat
cygwin.ico
etc
home
lib
mnt
tmp
usr
var

Dentro del directorio raíz nos encontramos varios directorios, como bin, etc, home, tmp,
usr, var, etc. Para ver el contenido de uno de ellos ejecutamos las orden:

$ ls /usr
X11R6
bin
doc
etc
include
info
lib
local
man
sbin
share
src
ssl
tmp

Con esta orden le hemos dicho que nos muestre el contenido de usr, que está dentro
del directorio raíz /.

Para ver el contenido del directorio man que está debajo de usr, que está debajo de /
usaremos la orden:

$ ls /usr/man
es
man1
man5

Página 34 de 212 Introducción a Linux


Introducción a Linux

man7

En una dirección el símbolo / puede tener dos


significados, si está al principio de la dirección, nos
referimos al directorio raíz. Si no está al principio es sólo
una separación entre directorios.

¿Dónde están los discos?

Pero si no se utilizan nombres de unidades, ¿cómo se puede acceder al CD-ROM, a la


disquetera o a un dispositivo USB?.

Unix monta los diferentes dispositivos en un directorio que varía en función de la


personalización de la distribución, para ver donde las guarda tu distribución puedes
meter un CD-ROM de datos y probar con los siguientes comandos:

$ ls /mnt/cd(tab)
$ ls /cd(tab)
$ ls /media/cd(tab)

una de las órdenes anteriores debería funcionar. Si el sistema encuentra el directorio


cd(algo), (estamos utilizando el tabulador), nos mostrará el contenido del CD-ROM.

Usuarios, grupos y permisos

Todos los archivos y directorios de un sistema Unix tienen, entre otras, estas
características:

• Propietario, el nombre del usuario que lo ha creado.


• Grupo, grupo al que está asociado.
• Permisos para el propietario, para el grupo y para el resto de los usuarios.

Así, si escribimos:

$ ls -l /
total 9
drwxrwxrwx+ 3 ifes Usuarios 0 Nov 23 09:01 bin
dr-xr-xr-x 5 0 root 0 Jan 1 1970 cygdrive
-rwxrwxrwx 1 ifes Usuarios 57 Nov 21 11:06 cygwin.bat
-rwxrwxrwx 1 ifes Usuarios 7022 Nov 23 14:26 cygwin.ico

Plataforma de Teleformación de IFES Página 35 de 212


Introducción a Linux

drwxrwxrwx+ 16 ifes Usuarios 0 Nov 23 12:07 etc


drwxrwxrwx+ 3 ifes Ninguno 0 Nov 23 09:30 home
drwxrwxrwx+ 18 ifes Usuarios 0 Nov 21 14:01 lib
drwxr-xr-x+ 2 ifes Ninguno 0 Nov 25 09:11 mnt
drwxrwxrwt+ 4 ifes Usuarios 0 Nov 25 13:18 tmp
drwxrwxrwx+ 16 ifes Usuarios 0 Nov 21 14:00 usr
drwxrwxrwx+ 7 ifes Usuarios 0 Nov 24 12:50 var

podemos ver que el directorio /bin pertenece al usuario ifes y su grupo es Usuarios

Los permisos también aparecen en este listado, pero son un poco más complicados de
entender.

La primera letra de cada línea indica el tipo es cada "objeto", un guión - indica que es
un archivo, una d indica que es un directorio.

Las siguientes nueve letras son las que indican los permisos asociados a ese archivo.

• Las tres primeras letras indican los permisos del propietario.


• Las tres siguientes indican los permisos del grupo.
• Las tres últimas indican los permisos de otros que no sean ni el propietario ni
pertenezcan al grupo del archivo.

En cada grupo de tres letras cada una tienen el significado:

• La primera indica si tiene permiso de lectura (r ) o no (- ).


• La segunda indica si tiene permiso de escritura (w ) o no (- ).
• La tercera indica si tiene permiso de ejecución (x ) o no (- ).

Direcciones absolutas o relativas

Hay dos maneras de indicar la dirección de un fichero o un directorio, en la estructura


de ficheros de un sistema Unix.

• Direcciones absolutas
• Direcciones relativas

Direcciones absolutas

Las direcciones absolutas empiezan con el símbolo / .

Una dirección absoluta es válida siempre.

Direcciones relativas

Página 36 de 212 Introducción a Linux


Introducción a Linux

Las direcciones relativas no empiezan con el símbolo / .

Las direcciones relativas dependen del directorio donde nos encontremos, no


funcionarán si nos encontramos en un directorio diferente.

Normalmente las direcciones relativas son más cortas de escribir que las direcciones
largas.

Ejemplos de direccionamiento absoluto y relativo:

$ # ¿Cuál es mi directorio?
$ pwd
/home/felix
$ # ¿Qué hay en el directorio /usr?
$ ls /usr
X11R6
bin
doc
etc
i686-pc-cygwin
i686-pc-mingw32
include
info
lib
local
man
sbin
share
src
ssl
tmp
$ # ¿Qué hay en mi directorio?
$ ls
bin
cursos
tmp
$ # Ahora con direccionamiento absoluto
$ ls /home/felix
bin
cursos
tmp
$ # Que hay dentro de cursos
$ ls cursos
bin
linux
$ # Dentro de cursos con direccionamiento absoluto
$ ls /home/felix/cursos
bin

Plataforma de Teleformación de IFES Página 37 de 212


Introducción a Linux

linux

Lo que se escribe en la consola después del símbolo #


será ignorado hasta que empiece la siguiente línea, se
puede utilizar para poner comentarios. El sistema lo
ignora.

Directorios virtuales

Cuando ponemos una dirección relativa podemos trabajar con dos directorios virtuales:

• Directorio actual ( . ).
• Directorio superior ( .. ).

El directorio actual (un punto) se utiliza cuando una orden necesita un argumento que
es un directorio, en lugar de poner la ruta completa del directorio donde nos
encontramos, como /home/francisco/proyecto, ponemos simplemente.

El directorio superior (representado por un punto seguido de otro punto, ..) nos indica el
contenido del directorio padre del que nos encontramos. Podemos escribir ls .. , o
incluso ls ../.. , que nos listará el directorio padre del directorio padre del actual (o sea el
abuelo ;-)).

Instrucciones de ficheros
Instrucciones de ficheros
A continuación veremos las órdenes para trabajar con el sistema de archivos más
habituales, así como sus opciones más usadas.

Podemos ver la descripción oficial de cada orden, con


todas sus opciones tecleando man orden.

Página 38 de 212 Introducción a Linux


Introducción a Linux

Las órdenes se pueden agrupar por lo que hacen:

• Ver
• Crear
• Modificar
• Borrar

Inspeccionar
Ver

Instrucciones que nos dan información sobre el sistema de archivos. No modifican


nada.

pwd

La orden pwd nos muestra en qué directorio nos encontramos.

Hay muchas órdenes en las que si no les indicamos otro


directorio, utilizan el actual, por lo que es importante
conocer en dónde estamos en cada momento.

Es una de las pocas órdenes de Unix que no tienen opciones.

$ pwd
/home/ifes/cursos/linux
$ cd /home
$ pwd
/home

Al principio del ejemplo nos encontramos en el directorio linux, dentro de cursos, dentro
de ifes, dentro de home, dentro del directorio raíz. Cambiamos de directorio con la
orden cd y pwd nos indica la nueva dirección.

ls

ls sirve para ver qué archivos o directorios hay en un directorio.

Plataforma de Teleformación de IFES Página 39 de 212


Introducción a Linux

Si no le indicamos el directorio nos muestra el contenido del directorio actual (podemos


saber cuál es nuestro directorio con la orden pwd ).

Hacemos un listado del directorio actual.

$ ls
Makefile
RCS
admin
literal
out
src
tmp
$ pwd
/home/ifes/cursos/linux

Hacemos un listado del directorio /usr

$ ls /usr
X11R6
bin
doc
etc
include
info
lib
local
man
sbin
share
src
ssl
tmp

Hacemos un listado de los archivos que acaban en sh del directorio /bin.

$ ls /bin/*sh
/bin/ash
/bin/bash
/bin/ppmflash
/bin/sh
/bin/ssh

Las opciones más habituales de ls son:

• -l : Hace que el listado sea largo, dando más información además del
nombre.
• -h : Los datos de tamaño de archivo están en formato humano, en kbytes o

Página 40 de 212 Introducción a Linux


Introducción a Linux

mbytes.
• -a : Nos muestra todos los archivos, incluidos los ocultos.

Una opción que utilizo es ls -rlt que hace un listado largo (-l ), ordenado por fecha de
modificación (-t ) en orden creciente (-r ). De esta manera los ficheros que aparecen al
final son los últimos en los que se ha estado trabajando.

Si el entorno de texto no te acaba de mostrar la


información que necesitas puedes interactuar con el
entorno gráfico o con alguna herramienta interactiva
como md(midnight comander).

cat

La orden cat sirve para concatenar archivos y mostrarlos por pantalla.

Varios ejemplos, para practicar puedes probar con los archivos que se encuentran en el
directorio /etc.

$ # Miramos qué archivos hay en el directorio tmp


$ ls tmp
bin
carta1.txt
carta2.txt
cursos
kk.tar.gz
last_sesion.txt
sesion.sh.1448.tmp
sesion.sh.1528.tmp
tree-1.5.0.tgz
$
$ # Miramos el contenido de tmp/carta1.txt
$ cat tmp/carta1.txt
Nuevos ordenadores
=====================================
Thu Dec 1 08:53:49 2005
Para: mantenimiento
Hay que instalar los nuevos ordenadores para que los utilicen en
el
departamento de idiomas.
$
$ # Miramos el contenido de tmp/carta2.txt
$ cat tmp/carta2.txt
Actualización de software
=====================================

Plataforma de Teleformación de IFES Página 41 de 212


Introducción a Linux

Thu Dec 1 08:55:43 2005


Para: mantenimiento
Actualizar los ordenadores con la nueva versión de OpenOffice
disponible en el repositorio habitual.
$
$ # Miramos el contenido de todas las cartas
$ cat tmp/carta*
Nuevos ordenadores
=====================================
Thu Dec 1 08:53:49 2005
Para: mantenimiento
Hay que instalar los nuevos ordenadores para que los utilicen en
el
departamento de idiomas.
Actualización de software
=====================================
Thu Dec 1 08:55:43 2005
Para: mantenimiento
Actualizar los ordenadores con la nueva versión de OpenOffice
disponible en el repositorio habitual.

less

Cuando un archivo es más grande que la pantalla y lo vemos utilizando el comando


cat, el sistema no espera a que lo leamos, sino que lo pasa a toda velocidad. Para
poder verlo poco a poco está el comando less.

Cuando vemos la ayuda de cualquier programa con man, estamos utilizando el


programa less para ver esta ayuda poco a poco.

less es un programa interactivo, todas las órdenes anteriores eran no interactivas, le


dábamos el nombre de la orden, sus opciones y parámetros y se ejecutaba. En los
programas interactivos el programa espera la interacción del usuario, para qué le diga
qué quiere en cada momento.

Para ver un archivo grande podemos probar:

$ less /etc/passwd

Cuando estamos viendo el archivo le podemos indicar qué queremos que haga
mediante órdenes de una sola tecla, las más importantes son:

• flecha abajo : sube el texto una línea.


• f lecha arriba : baja el texto una línea.
• avance página : sube una pantalla.
• retroceso página : baja una pantalla.

Página 42 de 212 Introducción a Linux


Introducción a Linux

• / : búsqueda, a continuación escribimos el texto que queremos buscar y


pulsamos enter.
• n : vuelve a buscar la siguiente aparición del texto que estamos buscando.
• N : busca hacia el principio del texto.
• q : finalizar la ejecución de less.

file

La orden file nos indica de qué tipo son los archivos, ya que la extensión es sólo un
adorno en Unix.

$ file /home/felix/tmp/*.*
/home/felix/tmp/blame-1.3: directory
/home/felix/tmp/calculos.txt: ASCII text
/home/felix/tmp/calendario.txt: ASCII text, with CRLF line
terminators
/home/felix/tmp/carta.txt: ISO-8859 text
/home/felix/tmp/carta1.txt: ASCII text
/home/felix/tmp/carta2.txt: ISO-8859 text
/home/felix/tmp/grandes.txt: ISO-8859 English text, with CRLF
line terminators
/home/felix/tmp/kk.tar.gz: gzip compressed data, from Unix
/home/felix/tmp/last_sesion.txt: ASCII text, with CRLF line
terminators
/home/felix/tmp/numeros.txt: ASCII text, with CRLF line
terminators
/home/felix/tmp/ordenes.txt: ASCII text
/home/felix/tmp/sesion.sh.1076.tmp: ISO-8859 text, with CRLF, LF
line terminators
/home/felix/tmp/sesion.sh.1140.tmp: ASCII text
/home/felix/tmp/sesion.sh.1188.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1196.tmp: ASCII text
/home/felix/tmp/sesion.sh.1208.tmp: ISO-8859 text, with CRLF, LF
line terminators
/home/felix/tmp/sesion.sh.1256.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1344.tmp: ASCII text
/home/felix/tmp/sesion.sh.1392.tmp: ASCII text
/home/felix/tmp/sesion.sh.1448.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1504.tmp: ASCII text
/home/felix/tmp/sesion.sh.1540.tmp: ASCII text
/home/felix/tmp/sesion.sh.1572.tmp: ASCII text
/home/felix/tmp/sesion.sh.1596.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1632.tmp: ISO-8859 English text
/home/felix/tmp/sesion.sh.1664.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1668.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1696.tmp: ASCII text
/home/felix/tmp/sesion.sh.1704.tmp: ISO-8859 text

Plataforma de Teleformación de IFES Página 43 de 212


Introducción a Linux

/home/felix/tmp/sesion.sh.1708.tmp: ISO-8859 text


/home/felix/tmp/sesion.sh.1720.tmp: ASCII text
/home/felix/tmp/sesion.sh.1728.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1732.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1744.tmp: ISO-8859 English text
/home/felix/tmp/sesion.sh.1752.tmp: ISO-8859 text, with CRLF, LF
line terminators
/home/felix/tmp/sesion.sh.1808.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1816.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1856.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1880.tmp: ASCII text
/home/felix/tmp/sesion.sh.1900.tmp: ASCII text
/home/felix/tmp/sesion.sh.1904.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1936.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1948.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1952.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1972.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.1976.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.472.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.664.tmp: ASCII text
/home/felix/tmp/sesion.sh.676.tmp: ASCII text
/home/felix/tmp/sesion.sh.748.tmp: ISO-8859 text, with CRLF, LF
line terminators
/home/felix/tmp/sesion.sh.792.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.880.tmp: ISO-8859 text, with CRLF, LF
line terminators
/home/felix/tmp/sesion.sh.924.tmp: ASCII text
/home/felix/tmp/sesion.sh.964.tmp: ASCII text
/home/felix/tmp/sesion.sh.972.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.992.tmp: ISO-8859 text
/home/felix/tmp/sesion.sh.996.tmp: ISO-8859 text
/home/felix/tmp/tree-1.5.0.tgz: gzip compressed data, from Unix

wc

wc nos indica el número de líneas, palabras y letras que tiene un archivo.

$ # cifras de /etc/passwd
$ wc /etc/passwd
7 9 718 /etc/passwd
$ #
$ # sólo las líneas
$ wc -l /etc/passwd
7 /etc/passwd
$ #
$ # todas las cartas
$ wc tmp/carta*
12 25 206 tmp/carta1.txt

Página 44 de 212 Introducción a Linux


Introducción a Linux

11 25 219 tmp/carta2.txt
23 50 425 total

Las opciones más habituales son:

• -l : sólo saca el número de líneas.


• -w : sólo saca el número de palabras (grupos de letras separados por
símbolos).
• -c : sólo saca el número de letras (incluidos símbolos, espacios, etc.).

Crear
Instrucciones para crear archivos o directorios.

En este apartado no veremos otros métodos para crear archivos como son los
procesadores de texto o la redirección, porque técnicamente no son órdenes, se verán
en otros módulos.

touch

touch seguido de uno o varios nombres crea unos archivos con esos nombres si no
existían, si ya existía le cambia la fecha de modificación.

$ #####################################
$ #
$ # listamos los archivos de texto
$ # que están dentro del directorio tmp
$ #
$ ls tmp/*.txt
tmp/carta1.txt
tmp/carta2.txt
tmp/last_sesion.txt
$ #####################################
$ #
$ # creamos 3 archivos de texto
$ # dentro del directorio tmp
$ #
$ touch tmp/ene.txt tmp/feb.txt tmp/mar.txt
$ #####################################
$ #
$ # listamos los archivos de texto
$ # que están dentro del directorio tmp
$ # para ver si están los archivos nuevos
$ #
$ ls tmp/*.txt
tmp/carta1.txt

Plataforma de Teleformación de IFES Página 45 de 212


Introducción a Linux

tmp/carta2.txt
tmp/ene.txt
tmp/feb.txt
tmp/last_sesion.txt
tmp/mar.txt
$ #####################################
$ #
$ # sacamos un listado largo para ver
$ # el tamaño de los nuevos
$ # y comprobamos que es cero.
$ #
$ ls -l tmp/*.txt
-rw-r--r-- 1 felix Ninguno 206 Dec 1 08:54 tmp/carta1.txt
-rw-r--r-- 1 felix Ninguno 219 Dec 1 08:56 tmp/carta2.txt
-rw-r--r-- 1 felix Ninguno 0 Dec 1 09:59 tmp/ene.txt
-rw-r--r-- 1 felix Ninguno 0 Dec 1 09:59 tmp/feb.txt
-rw-r--r-- 1 felix Ninguno 36 Dec 1 09:43 tmp/last_sesion.txt
-rw-r--r-- 1 felix Ninguno 0 Dec 1 09:59 tmp/mar.txt

mkdir

mkdir seguido del nombre de uno o varios directorios, los crea.

Una opción muy interesante es -p , si en el directorio a crear tiene que estar bajo otro
directorio y éste no existe también lo crea.

$ #############################################
$ #
$ # creamos el directorio trabajo
$ #
$ mkdir trabajo
$ #
$ # nos metemos en este directorio
$ #
$ cd trabajo
$ #
$ # creamos directorios con subdirectorios
$ #
$ mkdir -p clientes/opel clientes/seat prov/cepsa prov/pirelli
$ #
$ # salimos del directorio trabajo
$ # subiendo al directorio superior
$ #
$ cd ..
$ #
$ # hacemos un listado recursivo
$ # del directorio trabajo

Página 46 de 212 Introducción a Linux


Introducción a Linux

$ #
$ ls -lR trabajo
trabajo:
total 0
drwxr-xr-x+ 4 felix Ninguno 0 Dec 1 10:17 clientes
drwxr-xr-x+ 4 felix Ninguno 0 Dec 1 10:17 prov
trabajo/clientes:
total 0
drwxr-xr-x+ 2 felix Ninguno 0 Dec 1 10:17 opel
drwxr-xr-x+ 2 felix Ninguno 0 Dec 1 10:17 seat
trabajo/clientes/opel:
total 0
trabajo/clientes/seat:
total 0
trabajo/prov:
total 0
drwxr-xr-x+ 2 felix Ninguno 0 Dec 1 10:17 cepsa
drwxr-xr-x+ 2 felix Ninguno 0 Dec 1 10:17 pirelli
trabajo/prov/cepsa:
total 0
trabajo/prov/pirelli:
total 0

cp

cp sirve para copiar archivos.

• cp archivoOrigen archivoDestino : copia el archivo origen (que tiene que


existir) a destino, si no existe el destino lo crea

$ # copiamos el archivo passwd del directorio etc


$ # a un nuevo archivo que se llamará archivo_de_claves.txt
$ # en el directorio actual
$ cp /etc/passwd archivo_de_claves.txt

• cp archivoOrigen directorioDestino ; copia el archivo origen en el directorio


destino, manteniendo el nombre.

$ # copiamos el archivo passwd del directorio /etc


$ # al directorio tmp manteniendo el nombre
$ cp /etc/passwd tmp

• cp archivo1 archivo2 ... directorio : copia los archivos indicados en el


directorio de destino, cuando copiamos varios archivos es obligatorio que el
último argumento sea un directorio.

$ # copiamos todos los archivos con la extensión txt

Plataforma de Teleformación de IFES Página 47 de 212


Introducción a Linux

$ # que estén en el directorio tmp


$ # al directorio clientes, debajo de trabajo,
$ # debajo del directorio actual,
$ # manteniendo los nombres de los archivos
$ cp tmp/*.txt trabajo/clientes

Modificar
Para modificar archivos se usan editores en modo interactivo, no órdenes. También se
procesan archivos mediante redirección que se estudiará más adelante.

mv

La orden mv sirve para mover o renombrar un archivo o directorio.

Las maneras de poner los argumentos son las siguientes:

• mv archivo nuevoNombre: renombra el archivo como nuevo nombre.


• mv archivo directorio: mueve el archivo al directorio manteniendo el nombre.
• mv archivo directorio/nuevoNombre: mueve el archivo al directorio
cambiando el nombre.

En la lista anterior se puede sustituir archivo por directorio y la orden mv funciona


exactamente igual.

Borrar
rm

Para borrar archivos utilizamos la orden rm seguida del nombre del archivo o archivos
que queremos borrar.

rm no borra directorios a no ser que le demos algunas opciones extra.

Las opciones más habituales son:

• -i : interactiva, pregunta si queremos borrar interactivamente


• -f : forzado, no pregunta, los borra.
• -r : recursivo, le podemos poner directorios y los borra completamente.

Página 48 de 212 Introducción a Linux


Introducción a Linux

En Unix, en modo texto, no tenemos papelera, lo que


borremos no podremos recuperarlo, es muy importante
que antes de borrar nos aseguremos en qué directorio
estamos (pwd ) y que borremos con la opción de
borrado interactivo (rm -i archivos ).

rmdir

rmdir sirve para borrar directorios vacíos. Si contienen algún archivo o directorio, da un
error y no los borra.

Para borrar directorios y todo su contenido se puede utilizar la orden rm -r , pero


nuestros datos estarán más seguros si nos acostumbramos a borrar el contenido y
luego borrar sólo directorios vacíos con rmdir directorio.

Instrucciones de texto
Las instrucciones de texto son muy importantes porque los archivos de configuración,
programación y otros muchos están en formato texto, así como el resultado de las
órdenes también son de texto y podremos realizar acciones sobre estos resultados
intermedios.

head

Plataforma de Teleformación de IFES Página 49 de 212


Introducción a Linux

head (cabeza en inglés)

sirve para mostrar el principio de un archivo.

Nos puede ser útil para ver el aspecto de un documento o ver su definición.

Por defecto head muestra las primeras 10 líneas del archivo. Se puede modificar con la
opción -n número donde número puede ser 1,2,8,88, etc.

tail

tail (cola en inglés) sirve para mostrar el final de un documento.

Se utiliza mucho para ver archivos que van aumentando de tamaño, añadiendo lo que
va pasando al final (logs).

Las opciones más habituales son:

• -n número: Indicamos cuantas líneas del final queremos ver. Si no indicamos


nada nos muestra 10.
• +número: Nos muestra desde la línea número hasta el final.
• -f : Le indicamos que nos muestre las últimas líneas y tail se queda
esperando, observando el archivo, en el momento que cambia nos muestra
que líneas se han añadido. Esta opción es útil si queremos ver cómo va
aumentando un archivo.

sort

Página 50 de 212 Introducción a Linux


Introducción a Linux

sort sirve para ordenar.

Veamos varios ejemplos:

$ # sacamos por pantalla el archivo passwd


$ cat /etc/passwd
SYSTEM:*:18:544:,S-1-5-18::
Administradores:*:544:544:,S-1-5-32-544::
Administrador:unused_by_nt/2000/xp:500:513:U-NUEVO2Administrador,S-1-5-21-20
ASPNET:unused_by_nt/2000/xp:1002:513:ASP.NET Machine
Account,U-NUEVO2ASPNET,S-1-5-21-2000478354-1563985344-839522115-1002:/home/A
felix:unused_by_nt/2000/xp:1003:513:U-NUEVO2felix,S-1-5-21-2000478354-156398
ifes:unused_by_nt/2000/xp:1001:513:U-NUEVO2ifes,S-1-5-21-2000478354-15639853
Invitado:unused_by_nt/2000/xp:501:513:U-NUEVO2Invitado,S-1-5-21-2000478354-1
$ # sacamos por pantalla el archivo passwd
$ # pero esta vez ordenado
$ sort /etc/passwd
ASPNET:unused_by_nt/2000/xp:1002:513:ASP.NET Machine
Account,U-NUEVO2ASPNET,S-1-5-21-2000478354-1563985344-839522115-1002:/home/A
Administrador:unused_by_nt/2000/xp:500:513:U-NUEVO2Administrador,S-1-5-21-20
Administradores:*:544:544:,S-1-5-32-544::
Invitado:unused_by_nt/2000/xp:501:513:U-NUEVO2Invitado,S-1-5-21-2000478354-1
SYSTEM:*:18:544:,S-1-5-18::
felix:unused_by_nt/2000/xp:1003:513:U-NUEVO2felix,S-1-5-21-2000478354-156398
ifes:unused_by_nt/2000/xp:1001:513:U-NUEVO2ifes,S-1-5-21-2000478354-15639853

Plataforma de Teleformación de IFES Página 51 de 212


Introducción a Linux

Las opciones más habituales son:

• -n: ordena teniendo en cuenta los números.


• -f: no tiene en cuenta las minúsculas o mayúsculas (si no ponemos esta
opción primero muestra las mayúsculas y luego las minúsculas).
• -r: hace que invierta el resultado.

echo

La orden echo saca por pantalla el texto que le pasemos como

argumento.

Es útil cuando queramos saber el valor de una variable o introducirle un texto a un


programa.

$ echo hola
hola
$ echo la variable HOME vale $HOME
la variable HOME vale /home/felix

Para sacar el valor de una variable tenemos que poner un símbolo dolar $ delante del
nombre, pero esto ya lo veremos más adelante.

grep

Página 52 de 212 Introducción a Linux


Introducción a Linux

La orden grep sirve

para seleccionar las líneas que queremos mostrar, nos sirve para buscar dentro de
archivos sin tener que verlos por completo.

$ grep felix /etc/passwd


felix:unused_by_nt/2000/xp:1003:513:U-NUEVO2felix,S-1-5-21-2000478354-156398

Las opciones más habituales son:

• -i: ignora si la cadena está en mayúsculas o minúsculas. Normalmente sólo


busca las líneas que contengan exactamente la misma cadena, teniendo en
cuenta las minúsculas o mayúsculas.
• -v: muestra las líneas en las que no aparece la cadena buscada. Es el
significado contrario al habitual.
• -l: No muestra las líneas que contienen las cadenas, sólo los nombres de los
archivo.

Veamos algunos ejemplos:

$ # Vamos a realizar varias búsquedas en el directorio


$ # /usr/include en los ficheros con las extensión .h
$ #
$ #
$ # Buscamos los que contengan la cadena Linux
$ #
$ grep Linux /usr/include/*.h
/usr/include/bfd.h:/* Linux shared library support routines for
the linker. */

Plataforma de Teleformación de IFES Página 53 de 212


Introducción a Linux

/usr/include/bfdlink.h: wrap_hash. Used by PowerPC Linux for


'dot' symbols. */
/usr/include/expat.h:/* Expat follows the GNU/Linux convention of
odd number minor version for
/usr/include/libmng.h: (eg. Windows, Linux and some others)
/usr/include/libmng.h: TO RECAP: for sRGB systems (Windows,
Linux) no action required!
/usr/include/libmng_types.h:/* * - changed inclusion of lcms.h
for Linux platforms * */
/usr/include/pngconf.h:/* This is an attempt to force a single
setjmp behaviour on Linux. If
$ #
$ # Ahora sólo el nombre de los archivos
$ #
$ grep -l Linux /usr/include/*.h
/usr/include/bfd.h
/usr/include/bfdlink.h
/usr/include/expat.h
/usr/include/libmng.h
/usr/include/libmng_types.h
/usr/include/pngconf.h
$ #
$ # Repetimos las búsquedas anteriores pero
$ # sin que me importe si está en mayúsculas o minúsculas
$ #
$ # Buscamos los que contengan la cadena Linux
$ #
$ grep -i Linux /usr/include/*.h
/usr/include/bfd.h:/* Linux shared library support routines for
the linker. */
/usr/include/bfd.h:extern bfd_boolean
bfd_i386linux_size_dynamic_sections
/usr/include/bfd.h:extern bfd_boolean
bfd_m68klinux_size_dynamic_sections
/usr/include/bfd.h:extern bfd_boolean
bfd_sparclinux_size_dynamic_sections
/usr/include/bfdlink.h: wrap_hash. Used by PowerPC Linux for
'dot' symbols. */
/usr/include/expat.h:/* Expat follows the GNU/Linux convention of
odd number minor version for
/usr/include/lcms.h:// like linux, SGI, VAX, FreeBSD, BeOS, etc.
/usr/include/libmng.h: (eg. Windows, Linux and some others)
/usr/include/libmng.h: TO RECAP: for sRGB systems (Windows,
Linux) no action required!
/usr/include/libmng_types.h:/* * - changed inclusion of lcms.h
for Linux platforms * */
/usr/include/netdb.h:/* Original linux netdb.h merged with
winsock.h types */
/usr/include/netdb.h: /* Different from the linux versions - note

Página 54 de 212 Introducción a Linux


Introducción a Linux

the shorts.. */
/usr/include/pngconf.h:/* This is an attempt to force a single
setjmp behaviour on Linux. If
/usr/include/pngconf.h:# ifdef linux
/usr/include/pngconf.h:# endif /* linux */
/usr/include/pngconf.h:# ifdef linux
/usr/include/pngconf.h:# endif /* linux */
$ #
$ # Ahora sólo el nombre de los archivos
$ #
$ grep -il Linux /usr/include/*.h
/usr/include/bfd.h
/usr/include/bfdlink.h
/usr/include/expat.h
/usr/include/lcms.h
/usr/include/libmng.h
/usr/include/libmng_types.h
/usr/include/netdb.h
/usr/include/pngconf.h
$ #
$ # Ahora vamos a buscar los archivos que no
$ # tengan una cadena por ejemplo "function"
$ #
$ grep -vl function /usr/include/*.h
/usr/include/Imlib.h
/usr/include/Imlib_private.h
/usr/include/Imlib_types.h
/usr/include/_ansi.h
/usr/include/_syslist.h
....
....
/usr/include/xmi.h
/usr/include/xtiffio.h
/usr/include/zconf.h
/usr/include/zlib.h

cut

Si grep nos permite qué lineas de un archivo nos interesan, la orden cut nos deja elegir
qué parte de la línea queremos ver.

Las dos maneras habituales de indicarle qué queremos ver son:

• cut -f campos -d'delimitador' archivo

Trabajando de esta manera el programa divide cada línea utilizando el delimitador (que
es una letra o un símbolo, como: , o un espacio en blanco, etc.) y nos muestra sólo los

Plataforma de Teleformación de IFES Página 55 de 212


Introducción a Linux

campos que le hayamos indicado con el argumento campos .

Unos ejemplos de indicarle los campos que nos interesarían serían:

• 3 : Sólo sacara el tercer campo.


• 1,5,7 : Sacará los campos 1, 5 y 7.
• 2,6-10 : sacará los campos 1, 6, 7, 8, 9 y 10.
• -5 : sacará todos los campos 1, 2, 3, 4 y 5.
• 3,8- : sacará el campo 3 y desde el campo 8 hasta el final.

Podemos ver que ocurre con el fichero /etc/passwd, que está separado en campos por
':'.

$ # nombres de usuarios
$ cut -f1 -d':' /etc/passwd
SYSTEM
Administradores
Administrador
ASPNET
felix
ifes
Invitado
$ # números de usuario
$ cut -f3 -d':' /etc/passwd
18
544
500
1002
1003
1001
501
$ # nombres y números
$ cut -f1,3 -d':' /etc/passwd
SYSTEM:18
Administradores:544
Administrador:500
ASPNET:1002
felix:1003
ifes:1001
Invitado:501

• La otra manera de trabajar con cut es eligiendo los caracteres que nos
interesan, cut -c caracteres archivo.

Le indicamos qué caracteres nos interesan de la misma manera que los campos.

$ ##############################
$ #

Página 56 de 212 Introducción a Linux


Introducción a Linux

$ # sólo las primeras 10 letras


$ #
$ cut -c -10 /etc/passwd
SYSTEM:*:1
Administra
Administra
ASPNET:unu
felix:unus
ifes:unuse
Invitado:u
$ ##############################
$ #
$ # las siguiente 10 letras
$ #
$ cut -c 11-20 /etc/passwd
8:544:,S-1
dores:*:54
dor:unused
sed_by_nt/
ed_by_nt/2
d_by_nt/20
nused_by_n
$ ##############################
$ #
$ # Las 20 primeras letras de cada línea
$ #
$ cut -c -20 /etc/passwd
SYSTEM:*:18:544:,S-1
Administradores:*:54
Administrador:unused
ASPNET:unused_by_nt/
felix:unused_by_nt/2
ifes:unused_by_nt/20
Invitado:unused_by_n

sed

sed nos permite hacer sustituciones cuando nos muestra un fichero.

Con esta técnica no modificamos los archivos sólo el


resultado que aparece, más adelante sí que lo haremos.

Plataforma de Teleformación de IFES Página 57 de 212


Introducción a Linux

Las sintaxis es sed "s/busqueda/sustitucion/g" archivo .

$ ############################################################
$ #
$ # sacamos el archivo original para que podamos comparar
$ #
$ cat tmp/carta.txt
Hola, soy felix
El próximo día 8 es mi cumpleaños,
espero que vengas a mi fiesta y traigas muchos
regalos.
Zaragoza, 30 de noviembre de 2008
$ ############################################################
$ #
$ # sustituimos felix por mi nombre completo
$ #
$ sed "s/felix/Félix Jorge Anadón Trigo/g" tmp/carta.txt
Hola, soy Félix Jorge Anadón Trigo
El próximo día 8 es mi cumpleaños,
espero que vengas a mi fiesta y traigas muchos
regalos.
Zaragoza, 30 de noviembre de 2008
$ ############################################################
$ #
$ # sustituimos las letras oes por ceros
$ #
$ sed "s/o/O/g" tmp/carta.txt
HOla, sOy felix
El próximO día 8 es mi cumpleañOs,
esperO que vengas a mi fiesta y traigas muchOs
regalOs.
ZaragOza, 30 de nOviembre de 2008
$ ############################################################
$ #
$ # sustituimos los dobles espacios por un único espacio
$ #
$ sed "s/ / /g" tmp/carta.txt
Hola, soy felix
El próximo día 8 es mi cumpleaños,
espero que vengas a mi fiesta y traigas muchos
regalos.
Zaragoza, 30 de noviembre de 2008

Instrucciones útiles

Otras instrucciones potentes

Página 58 de 212 Introducción a Linux


Introducción a Linux

seq
Cuando necesitamos una lista de números utilizaremos la orden seq.

Le podemos indicar el inicio el incremento y el final. Si no le ponemos incremento,


supondrá que es 1. Si no le ponemos inicio supondrá que empezaremos desde el 1.

$ ############################################################
$ #
$ # orden completa
$ #
$ seq 10 2 20
10
12
14
16
18
20
$ ############################################################
$ #
$ # sólo ponemos el inicio y el final
$ #
$ seq 38 42
38
39
40
41
42
$ ############################################################
$ #
$ # solo indicamos hasta donde queremos llegar
$ #
$ seq 10
1
2
3
4
5
6
7
8
9
10

find

find es seguramente la orden más compleja y con la página del manual más grande del

Plataforma de Teleformación de IFES Página 59 de 212


Introducción a Linux

entorno Linux.

find sirve para buscar, pero también sirve para buscar y hacer algo con lo encontrado.

Su sintaxis es: find directorio opciones comparaciones acciones

• directorio es el directorio donde vamos a empezar a buscar recursivamente,


es obligatorio, si queremos buscar en el directorio actual tenemos que
indicárselo mediante un punto: (. ).
• opciones : estas opciones cambian el modo en el que se realiza la
búsqueda, como -daystart que hace que los tiempos se busquen teniendo en
cuenta el comienzo del día, no por horas. -maxdepth o -mindepth que regula
el número de directorios donde busca.
• comparaciones : nos permiten elegir lo que queremos buscar. Podemos
buscar por fechas (o minutos) de modificación o de acceso, por tamaños,
nombres o quien es el propietario.
• acciones : lo habitual es mostrarlo por pantalla, pero también podemos hacer
que saque los datos de ese archivo de una manera diferente, o que ejecute
una orden de Unix, como rm, cat, grep, etc. sobre los archivos encontrados.

Vamos a ver unos ejemplos que aporten algo de claridad a esta maraña de opciones.

$ ############################################################
$ #
$ # busqueda por nombre
$ # desde el directorio actual
$ #
$ find . -name carta.txt
./tmp/carta.txt
$ ############################################################
$ #
$ # búsqueda por nombre en todo
$ # el disco duro
$ #
$ find / -name passwd
/etc/passwd
$ ############################################################
$ #
$ # búsqueda por nombre en todo
$ # el disco duro
$ # con comodines entre comillas
$ #
$ find / -name "*.mp3"
/cygdrive/c/Archivos de programa/C-Media 3D
Audio/Driver/Advance/MUSIC/Demo3_Bass.mp3
/cygdrive/c/Archivos de programa/C-Media 3D
Audio/Driver/Advance/MUSIC/Demo3_Front.mp3
/cygdrive/c/Archivos de programa/C-Media 3D

Página 60 de 212 Introducción a Linux


Introducción a Linux

Audio/Driver/Advance/MUSIC/Demo3_Rear.mp3
/cygdrive/c/Archivos de programa/C-Media 3D
Audio/Driver/Advance/MUSIC/Demo3_Side.mp3
/cygdrive/c/Archivos de programa/Winamp/demo.mp3
/cygdrive/c/Documents and Settings/felix/Mis
documentos/mp3/campanas.mp3
/cygdrive/c/Documents and Settings/felix/Mis
documentos/mp3/cantatas/2/1/bwv_20_01.mp3
/cygdrive/c/Documents and Settings/felix/Mis
documentos/mp3/cantatas/2/1/bwv_20_02.mp3
/cygdrive/c/Documents and Settings/felix/Mis
documentos/mp3/cantatas/2/1/bwv_20_03.mp3
/cygdrive/c/Documents and Settings/felix/Mis
documentos/mp3/cantatas/2/1/bwv_20_04.mp3
$ ############################################################
$ #
$ # búsqueda por fecha de modificación en minutos
$ # menos de 10 en el directorio cursos
$ #
$ find cursos -mmin -10
cursos/linux/src
cursos/linux/src/.contenidos.txt.swp
cursos/linux/src/contenidos.txt
cursos/linux/tmp
$ ############################################################
$ #
$ # búsqueda fecha de acceso
$ # por días
$ # empezando a las 00 horas de hoy
$ # el disco duro
$ #
$ find cursos -daystart -atime -1
cursos
cursos/bin
cursos/bin/hazmenu.pl
cursos/bin/hazmenu.sh
cursos/bin/ponenlaces.sh
cursos/linux
cursos/linux/.vimrc
cursos/linux/admin
cursos/linux/admin/contenidos.txt
cursos/linux/admin/especificaciones.txt
cursos/linux/literal
cursos/linux/literal/img
cursos/linux/literal/img/180px-Linus_Torvalds.jpeg
cursos/linux/literal/img/bios.png
cursos/linux/literal/img/blackbox.jpg
cursos/linux/literal/img/curva_aprendizaje.png
cursos/linux/literal/img/curva_aprendizaje4.png

Plataforma de Teleformación de IFES Página 61 de 212


Introducción a Linux

cursos/linux/literal/img/gnome.png
cursos/linux/literal/img/icewm.jpg
cursos/linux/literal/img/kde.jpg
cursos/linux/literal/img/logo_debian.gif
$ ############################################################
$ #
$ # búsqueda por tamaño
$ # archivos de más de 100 kb
$ #
$ #
$ #
$ find cursos -size +100k
cursos/linux/literal/img/blackbox.jpg
cursos/linux/literal/img/gnome.png
cursos/linux/literal/img/icewm.jpg
cursos/linux/literal/img/kde.jpg
cursos/linux/literal/img/xfce.png
cursos/linux/out/img/backbox.jpg
cursos/linux/out/img/blackbox.jpg
cursos/linux/out/img/gnome.png
cursos/linux/out/img/icewm.jpg
cursos/linux/out/img/kde.jpg
cursos/linux/out/img/xfce.png
cursos/linux/src/RCS/contenidos.txt,v

Ahora otra serie de ejemplos con acciones.

$ ############################################################
$ #
$ # busqueda por nombre
$ # de archivos vacíos
$ # y posterior borrado
$ #
$ find tmp -type f -size 0 -exec rm {} \;
$ ############################################################
$ #
$ # búsqueda de archivos que se llaman carta y algo más
$ # sacamos el nombre del archivo y
$ # sacamos las líneas que contienen la cadena Para
$ #
$ find . -name "carta*" -print -exec grep Para {} \;
./tmp/carta.txt
./tmp/carta1.txt
Para: mantenimiento
./tmp/carta2.txt
Para: mantenimiento de software

tar

Página 62 de 212 Introducción a Linux


Introducción a Linux

tar sirve para agrupar varios archivos en un único archivo, con o sin compresión.

También sirve para ver el contenido de archivos con formato tar o extraer los archivos
de este formato.

Cuando se agrupa con esta orden a los archivos generados les solemos poner las
extensiones .tar , .tar.gz o.tgz .

Se utiliza profusamente para hacer copias de seguridad, copiar directorios para


trasladarlos y es el formato en el que se distribuyen la mayor parte de los programas
para Linux.

La sintaxis de esta orden es: tar opciones archivos.

Entre estas opciones tiene que estar obligatoriamente una de las siguientes:

• c: para crear un archivo "tar"


• x: para extraer de una archivo "tar"
• t: para listar de un archivo "tar"
• Otras órdenes menos usadas.

Además hay otras opciones que suelen acompañar a las opciones anteriores:

• v: va mostrando qué está haciendo el programa


• z: el fichero que creamos o del que sacamos archivos está comprimido (con
el algoritmo gZip)
• f fichero: sirve para indicarle el archivo dónde metemos los archivos que
queremos agrupar.

Veamos unos ejemplos:

$ # miramos el contenido del directorio tmp


$
$ ls tmp
introduccion_a_linux-50h-mod_01-ud_01-introduccion.htm
introduccion_a_linux-50h-mod_01-ud_02-instalacion.htm
introduccion_a_linux-50h-mod_01-ud_03-historia.htm
introduccion_a_linux-50h-mod_01-ud_04-distribuciones.htm
introduccion_a_linux-50h-mod_01-ud_04-entornos.htm
introduccion_a_linux-50h-mod_02-ud_01-instrucciones_habituales.htm
introduccion_a_linux-50h-mod_02-ud_02-sintaxis_ordenes.htm
introduccion_a_linux-50h-mod_02-ud_03-sistema_de_ficheros.htm
introduccion_a_linux-50h-mod_02-ud_04-instrucciones_de_ficheros.htm
introduccion_a_linux-50h-mod_02-ud_05-instrucciones_de_texto.htm
introduccion_a_linux-50h-mod_02-ud_06-instrucciones_utiles.htm
introduccion_a_linux-50h-mod_03-ud_01-instrucciones_avanzadas.htm
introduccion_a_linux-50h-mod_03-ud_02-editores_de_texto.htm

Plataforma de Teleformación de IFES Página 63 de 212


Introducción a Linux

introduccion_a_linux-50h-mod_anexo-ud_01-glosario.htm
ordenes.txt
separa.smf
$
$ # opción c, creamos un fichero
$ # opción z, estará comprimido
$ # opción v, que nos muestre qué está haciendo
$ # opción f, le indicamos el nombre del fichero (tmp.tar.gz)
$ # qué vamos a meter, el directorio tmp
$
$ # podríamos escribirlo:
$ # tar -c -z -v -f tmp.tar.gz tmp
$
$ # pero se pueden agrupar las órdenes y
$ # escribirlo así:
$
$ tar czvf tmp.tar.gz tmp
tmp/
tmp/introduccion_a_linux-50h-mod_01-ud_01-introduccion.htm
tmp/introduccion_a_linux-50h-mod_01-ud_02-instalacion.htm
tmp/introduccion_a_linux-50h-mod_01-ud_03-historia.htm
tmp/introduccion_a_linux-50h-mod_01-ud_04-distribuciones.htm
tmp/introduccion_a_linux-50h-mod_01-ud_04-entornos.htm
tmp/introduccion_a_linux-50h-mod_02-ud_01-instrucciones_habituales.htm
tmp/introduccion_a_linux-50h-mod_02-ud_02-sintaxis_ordenes.htm
tmp/introduccion_a_linux-50h-mod_02-ud_03-sistema_de_ficheros.htm
tmp/introduccion_a_linux-50h-mod_02-ud_04-instrucciones_de_ficheros.htm
tmp/introduccion_a_linux-50h-mod_02-ud_05-instrucciones_de_texto.htm
tmp/introduccion_a_linux-50h-mod_02-ud_06-instrucciones_utiles.htm
tmp/introduccion_a_linux-50h-mod_03-ud_01-instrucciones_avanzadas.htm
tmp/introduccion_a_linux-50h-mod_03-ud_02-editores_de_texto.htm
tmp/introduccion_a_linux-50h-mod_anexo-ud_01-glosario.htm
tmp/ordenes.txt
tmp/separa.smf
$
$ # para ver su contenido usamos
$ # la opción t
$
$ tar tzf tmp.tar.gz
tmp/
tmp/introduccion_a_linux-50h-mod_01-ud_01-introduccion.htm
tmp/introduccion_a_linux-50h-mod_01-ud_02-instalacion.htm
tmp/introduccion_a_linux-50h-mod_01-ud_03-historia.htm
tmp/introduccion_a_linux-50h-mod_01-ud_04-distribuciones.htm
tmp/introduccion_a_linux-50h-mod_01-ud_04-entornos.htm
tmp/introduccion_a_linux-50h-mod_02-ud_01-instrucciones_habituales.htm
tmp/introduccion_a_linux-50h-mod_02-ud_02-sintaxis_ordenes.htm
tmp/introduccion_a_linux-50h-mod_02-ud_03-sistema_de_ficheros.htm
tmp/introduccion_a_linux-50h-mod_02-ud_04-instrucciones_de_ficheros.htm

Página 64 de 212 Introducción a Linux


Introducción a Linux

tmp/introduccion_a_linux-50h-mod_02-ud_05-instrucciones_de_texto.htm
tmp/introduccion_a_linux-50h-mod_02-ud_06-instrucciones_utiles.htm
tmp/introduccion_a_linux-50h-mod_03-ud_01-instrucciones_avanzadas.htm
tmp/introduccion_a_linux-50h-mod_03-ud_02-editores_de_texto.htm
tmp/introduccion_a_linux-50h-mod_anexo-ud_01-glosario.htm
tmp/ordenes.txt
tmp/separa.smf
$
$ # podemos borrar el directorio tmp
$ # pues tenemos una copia en tmp.tar.gz
$
$ ls tmp*
tmp.tar.gz
tmp:
introduccion_a_linux-50h-mod_01-ud_01-introduccion.htm
introduccion_a_linux-50h-mod_01-ud_02-instalacion.htm
introduccion_a_linux-50h-mod_01-ud_03-historia.htm
introduccion_a_linux-50h-mod_01-ud_04-distribuciones.htm
introduccion_a_linux-50h-mod_01-ud_04-entornos.htm
introduccion_a_linux-50h-mod_02-ud_01-instrucciones_habituales.htm
introduccion_a_linux-50h-mod_02-ud_02-sintaxis_ordenes.htm
introduccion_a_linux-50h-mod_02-ud_03-sistema_de_ficheros.htm
introduccion_a_linux-50h-mod_02-ud_04-instrucciones_de_ficheros.htm
introduccion_a_linux-50h-mod_02-ud_05-instrucciones_de_texto.htm
introduccion_a_linux-50h-mod_02-ud_06-instrucciones_utiles.htm
introduccion_a_linux-50h-mod_03-ud_01-instrucciones_avanzadas.htm
introduccion_a_linux-50h-mod_03-ud_02-editores_de_texto.htm
introduccion_a_linux-50h-mod_anexo-ud_01-glosario.htm
ordenes.txt
separa.smf
$
$ # borramos el directorio tmp
$
$ rm -rf tmp
$
$ # ¡mucho cuidado al usar rm -rf!
$
$ # restauramos el directorio desde el archivo tar
$
$ tar xzvf tmp.tar.gz
tmp/
tmp/introduccion_a_linux-50h-mod_01-ud_01-introduccion.htm
tmp/introduccion_a_linux-50h-mod_01-ud_02-instalacion.htm
tmp/introduccion_a_linux-50h-mod_01-ud_03-historia.htm
tmp/introduccion_a_linux-50h-mod_01-ud_04-distribuciones.htm
tmp/introduccion_a_linux-50h-mod_01-ud_04-entornos.htm
tmp/introduccion_a_linux-50h-mod_02-ud_01-instrucciones_habituales.htm
tmp/introduccion_a_linux-50h-mod_02-ud_02-sintaxis_ordenes.htm
tmp/introduccion_a_linux-50h-mod_02-ud_03-sistema_de_ficheros.htm

Plataforma de Teleformación de IFES Página 65 de 212


Introducción a Linux

tmp/introduccion_a_linux-50h-mod_02-ud_04-instrucciones_de_ficheros.htm
tmp/introduccion_a_linux-50h-mod_02-ud_05-instrucciones_de_texto.htm
tmp/introduccion_a_linux-50h-mod_02-ud_06-instrucciones_utiles.htm
tmp/introduccion_a_linux-50h-mod_03-ud_01-instrucciones_avanzadas.htm
tmp/introduccion_a_linux-50h-mod_03-ud_02-editores_de_texto.htm
tmp/introduccion_a_linux-50h-mod_anexo-ud_01-glosario.htm
tmp/ordenes.txt
tmp/separa.smf
$

zip/unzip

zip y unzip se usan para comprimir o descomprimir grupos de archivos.

Normalmente se usa cuando estamos compartiendo datos con usuarios de Windows,


que utilizan habitualmente este formato.

Para comprimir se escribe: zip ficherozip lista de ficheros o directorios.

Para descomprimir se escribe: unzip ficherozip.

-- Nuevo clasificador --

Página 66 de 212 Introducción a Linux


Introducción a Linux

Módulo III. Órdenes avanzadas


Redirecciones
La redirección es una de las herramientas más potentes cuando trabajamos con la
consola de Linux.

Hasta ahora, cuando ejecutábamos una orden el resultado salía por pantalla, la
pantalla es lo que se conoce como salida estándar.

Podemos decirle que cuando ejecute una orden el resultado no salga por pantalla sino
que lo redirija a un fichero (por ejemplo). De esto ya hemos visto ejemplos en los
ejercios del curso.

Redirección de la salida estándar

Para redirigir la salida estándar a un fichero tenemos que terminar la orden con el
símbolo mayor que (> ) y el nombre del fichero donde vamos a guardar los resultados
de la ejecución.

$ # ejemplo de redirección
$
$ cal -m 5 2006 > tmp/calendario.txt
$
$ # Hemos ejecutado la orden cal(endario) con la opción
$ # -m (las semanas empiezan en monday, lunes)
$ # pero por pantalla no aparece nada, el resultado está
$ # guardado en el archivo calendario.txt dentro del directorio tmp
$
$ # Podemos verlo utilizando la orden less o cat
$
$ cat tmp/calendario.txt
May 2006
Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
$

Cuando redirigimos la salida de una orden a un fichero y éste no existe el sistema lo

Plataforma de Teleformación de IFES Página 67 de 212


Introducción a Linux

crea antes de escribir en él.

Si el fichero ya existe y redirigimos a él una orden, su contenido es borrado antes de


empezar a escribir en él.

Si queremos añadir al final de un fichero el resultado de una orden, sin borrar el


contenido previo, tendremos que utilizar el operador >>.

$ # guardo la fecha actual en un fichero.


$
$ date > fecha.txt
$
$ cat fecha.txt
Fri Dec 2 09:51:22 2005
$
$ # vuelvo a guardarla
$
$ date > fecha.txt
$
$ cat fecha.txt
Fri Dec 2 09:51:31 2005
$
$ # ¡la primera fecha ha desaparecido!
$
$ # para no borrar las anteriores utilizamos el
$ # operador >>, que añade el resultado de la orden
$ # al final del archivo.
$
$ date >> fecha.txt
$ echo "---------------" >> fecha.txt
$ cal -m >> fecha.txt
$ cat fecha.txt
Fri Dec 2 09:51:31 2005
Fri Dec 2 09:51:32 2005
---------------
December 2005
Mo Tu We Th Fr Sa Su
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
$

Redirección de la entrada estándar

La entrada estándar es mucho menos importante que la salida estándar, en casi todas

Página 68 de 212 Introducción a Linux


Introducción a Linux

las órdenes se puede poner como argumento el nombre de un fichero que es lo que
hace la redirección de la entrada.

Algunas órdenes no tienen la opción de indicarle el nombre de un fichero, pero la


redirección funciona siempre.

Para redireccionar la entrada se pone el símbolo < seguido del archivo con el que
queremos alimentar el archivo.

$ # creo un fichero con números


$
$ seq 20 > tmp/numeros.txt
$
$ # lo ordeno mediante sort
$
$ sort tmp/numeros.txt
1
10
11
12
13
14
15
16
17
18
19
2
20
3
4
5
6
7
8
9
$
$ # con sort no haría falta redireccionar
$ # pero lo hacemos por motivos didácticos
$
$ sort < tmp/numeros.txt
1
10
11
12
13
14
15

Plataforma de Teleformación de IFES Página 69 de 212


Introducción a Linux

16
17
18
19
2
20
3
4
5
6
7
8
9

Redirección de los errores

Cuando ejecutamos un programa y se producen errores, por la pantalla salen tanto los
errores como los resultados correctos.

Por ejemplo, si nos ponemos a buscar en todo el disco duro, habrá carpetas donde no
tengamos permisos de escritura y nos saldrá un error.

Para que los errores no salgan por pantalla los podemos redirigir con el operador 2>

No podemos separar el 2 del > .

$ # buscamos los archivos que tengan más de un mega


$ # en el disco duro
$ # y metemos sus nombres en el archivo grandes.txt
$ #
$ # los errores los metemos en grandes.errores
$
$ find / -size +1000k > tmp/grandes.txt 2> tmp/grandes.errores
$
$ # miramos a ver cuantos archivos hay y cuantos errores se han
producido.
$
$ wc -l tmp/grandes.*
6 tmp/grandes.errores
781 tmp/grandes.txt

Página 70 de 212 Introducción a Linux


Introducción a Linux

787 total

Si sabemos que se van a producir errores pero no nos interesan se pueden redirigir al
dispositivo nulo, que es como tirarlos a la basura.

$ # buscamos los archivos que tengan más de un mega


$ # en el disco duro
$ # y los metemos el archivo grandes.txt
$ #
$ # los errores los eliminamos
$
$ find / -size +1000k > tmp/grandes.txt 2> /dev/null
$
$ # miramos a ver cuantos archivos hay
$
$ wc -l tmp/grandes.*
781 tmp/grandes.txt

Uso de tuberías

Es muy común que el resultado de una orden lo queramos volver a tratar mediante otra
orden por ejemplo:

$ # vamos a buscar cuál es el número asociado a un usuario


determinado
$
$ # buscamos en el archivo etc/passwd los usuarios que se llaman
felix
$ # y lo guardamos para su posterior tratamiento
$
$ grep felix /etc/passwd > tmp/felix.txt
$
$ # podemos ver qué hemos obtenido con
$
$ cat tmp/felix.txt
felix:unused_by_nt/2000/xp:1003:513:U-NUEVO2felix,S-1-5-21-2000478354-156398
$
$ # como nos interesa el tercer campo lo cortamos con cut
$
$ cut -d':' -f 3 tmp/felix.txt
1003
$
$ # ahora ya podemos borrar el archivo temporal
$
$ rm tmp/felix.txt
$

Plataforma de Teleformación de IFES Página 71 de 212


Introducción a Linux

Todo lo anterior lo podemos escribir de forma mucho más resumida utilizando tuberías
(mediante el símbolo | ) que pasa la salida de una orden a la siguiente.

$ grep felix /etc/passwd | cut -d':' -f 3


1003

Se pueden concatenar varias tuberías, no sólo una:

$ find / -name '*.h' | grep "sys" | head -n 30 | less


/cygdrive/c/WINNT/system32/faxcount.h
/cygdrive/c/WINNT/system32/iasperf.h
/cygdrive/c/WINNT/system32/msdtcprf.h
/cygdrive/c/WINNT/system32/perfci.h
/cygdrive/c/WINNT/system32/perffilt.h
/cygdrive/c/WINNT/system32/perfwci.h
/cygdrive/c/WINNT/system32/pschdcnt.h
/cygdrive/c/WINNT/system32/rasctrnm.h
/cygdrive/c/WINNT/system32/rsvpcnts.h
/home/felix/tmp/blame-1.3/lib/sysexit_.h
/home/felix/tmp/blame-1.3/src/system.h
/lib/gcc/i686-pc-cygwin/3.4.4/include/syslimits.h
/lib/gcc/i686-pc-cygwin/3.4.4/install-tools/gsyslimits.h
/lib/gcc/i686-pc-mingw32/3.4.4/include/syslimits.h
/lib/gcc/i686-pc-mingw32/3.4.4/install-tools/gsyslimits.h
/lib/perl5/5.8/cygwin/CORE/iperlsys.h
/usr/include/cygwin/in_systm.h
/usr/include/cygwin/sysproto.h
/usr/include/gtk-2.0/gtk/gtkfilesystem.h
/usr/include/mingw/sys/fcntl.h
/usr/include/mingw/sys/file.h
/usr/include/mingw/sys/locking.h
/usr/include/mingw/sys/param.h
/usr/include/mingw/sys/stat.h
/usr/include/mingw/sys/time.h
/usr/include/mingw/sys/timeb.h
/usr/include/mingw/sys/types.h
/usr/include/mingw/sys/unistd.h
/usr/include/mingw/sys/utime.h
/usr/include/netinet/in_systm.h
$
$ # buscamos archivos que acaben en .h
$ # nos quedamos con los que contengan el texto sys
$ # nos quedamos con las 30 primeras
$ # lo vemos poco a poco con un programa interactivo

Página 72 de 212 Introducción a Linux


Introducción a Linux

Podemos ir viendo cómo se van uniendo las órdenes


escribiendo la primera orden, recuperándola y poniendo
la tubería y la siguiente orden, y así sucesivamente y
vemos cómo va quedando.

$ find / -name '*.h'


/lib/gcc/i686-pc-cygwin/3.4.4/install-tools/include/stddef.h
/lib/gcc/i686-pc-cygwin/3.4.4/install-tools/include/unwind.h
....
....
/usr/X11R6/include/Xm/XmosP.h
/usr/X11R6/include/Xm/XmP.h
/usr/X11R6/include/Xm/XmStrDefs.h
/usr/X11R6/include/Xm/XpmP.h
$
$ # ejecutamos la primera orden
$
$ # vemos que está sacando montones de archivos
$ # recuperamos la orden y la añadimos la tubería
$ # y la orden grep para limitar qué resultados se muestran
$
$ find / -name '*.h' | grep "sys"
/cygdrive/c/WINNT/system32/faxcount.h
/cygdrive/c/WINNT/system32/iasperf.h
/cygdrive/c/WINNT/system32/msdtcprf.h
/cygdrive/c/WINNT/system32/perfci.h
/cygdrive/c/WINNT/system32/perffilt.h
/cygdrive/c/WINNT/system32/perfwci.h
/cygdrive/c/WINNT/system32/pschdcnt.h
/cygdrive/c/WINNT/system32/rasctrnm.h
/cygdrive/c/WINNT/system32/rsvpcnts.h
/home/felix/tmp/blame-1.3/lib/sysexit_.h
/home/felix/tmp/blame-1.3/src/system.h
/lib/gcc/i686-pc-cygwin/3.4.4/include/syslimits.h
/lib/gcc/i686-pc-cygwin/3.4.4/install-tools/gsyslimits.h
/lib/gcc/i686-pc-mingw32/3.4.4/include/syslimits.h
/lib/gcc/i686-pc-mingw32/3.4.4/install-tools/gsyslimits.h
/lib/perl5/5.8/cygwin/CORE/iperlsys.h
/usr/include/sys/acl.h
/usr/include/sys/cdefs.h
....
....
/usr/lib/gcc/i686-pc-cygwin/3.4.4/install-tools/gsyslimits.h
/usr/lib/gcc/i686-pc-mingw32/3.4.4/include/syslimits.h
/usr/lib/gcc/i686-pc-mingw32/3.4.4/install-tools/gsyslimits.h

Plataforma de Teleformación de IFES Página 73 de 212


Introducción a Linux

/usr/lib/perl5/5.8/cygwin/CORE/iperlsys.h
$
$ # vemos que está sacando sólo los que contienen el texto sys
$ # recuperamos la orden y la añadimos la tubería
$ # y la orden head para que sólo saque 30
$
$ find / -name '*.h' | grep "sys" | head -n 30
/cygdrive/c/WINNT/system32/faxcount.h
/cygdrive/c/WINNT/system32/iasperf.h
/cygdrive/c/WINNT/system32/msdtcprf.h
/cygdrive/c/WINNT/system32/perfci.h
/cygdrive/c/WINNT/system32/perffilt.h
/cygdrive/c/WINNT/system32/perfwci.h
/cygdrive/c/WINNT/system32/pschdcnt.h
/cygdrive/c/WINNT/system32/rasctrnm.h
/cygdrive/c/WINNT/system32/rsvpcnts.h
/home/felix/tmp/blame-1.3/lib/sysexit_.h
/home/felix/tmp/blame-1.3/src/system.h
/lib/gcc/i686-pc-cygwin/3.4.4/include/syslimits.h
/lib/gcc/i686-pc-cygwin/3.4.4/install-tools/gsyslimits.h
/lib/gcc/i686-pc-mingw32/3.4.4/include/syslimits.h
/lib/gcc/i686-pc-mingw32/3.4.4/install-tools/gsyslimits.h
/lib/perl5/5.8/cygwin/CORE/iperlsys.h
/usr/include/cygwin/in_systm.h
/usr/include/cygwin/sysproto.h
/usr/include/gtk-2.0/gtk/gtkfilesystem.h
/usr/include/mingw/sys/fcntl.h
/usr/include/mingw/sys/file.h
/usr/include/mingw/sys/locking.h
/usr/include/mingw/sys/param.h
/usr/include/mingw/sys/stat.h
/usr/include/mingw/sys/time.h
/usr/include/mingw/sys/timeb.h
/usr/include/mingw/sys/types.h
/usr/include/mingw/sys/unistd.h
/usr/include/mingw/sys/utime.h
/usr/include/netinet/in_systm.h
$
$ # vemos que está sacando sólo los 30 primeros
$ # recuperamos la orden y la añadimos la tubería
$ # y la orden less para poder leerlo con comodidad
$
$ find / -name '*.h' | grep "sys" | head -n 30 | less
/cygdrive/c/WINNT/system32/faxcount.h
/cygdrive/c/WINNT/system32/iasperf.h
/cygdrive/c/WINNT/system32/msdtcprf.h
/cygdrive/c/WINNT/system32/perfci.h
/cygdrive/c/WINNT/system32/perffilt.h
/cygdrive/c/WINNT/system32/perfwci.h

Página 74 de 212 Introducción a Linux


Introducción a Linux

/cygdrive/c/WINNT/system32/pschdcnt.h
/cygdrive/c/WINNT/system32/rasctrnm.h
/cygdrive/c/WINNT/system32/rsvpcnts.h
/home/felix/tmp/blame-1.3/lib/sysexit_.h
/home/felix/tmp/blame-1.3/src/system.h
/lib/gcc/i686-pc-cygwin/3.4.4/include/syslimits.h
/lib/gcc/i686-pc-cygwin/3.4.4/install-tools/gsyslimits.h
/lib/gcc/i686-pc-mingw32/3.4.4/include/syslimits.h
/lib/gcc/i686-pc-mingw32/3.4.4/install-tools/gsyslimits.h
/lib/perl5/5.8/cygwin/CORE/iperlsys.h
/usr/include/cygwin/in_systm.h
/usr/include/cygwin/sysproto.h
/usr/include/gtk-2.0/gtk/gtkfilesystem.h
/usr/include/mingw/sys/fcntl.h
/usr/include/mingw/sys/file.h
/usr/include/mingw/sys/locking.h
/usr/include/mingw/sys/param.h
/usr/include/mingw/sys/stat.h
/usr/include/mingw/sys/time.h
/usr/include/mingw/sys/timeb.h
/usr/include/mingw/sys/types.h
/usr/include/mingw/sys/unistd.h
/usr/include/mingw/sys/utime.h
/usr/include/netinet/in_systm.h

Es muy habitual acabar una orden que genera muchas


líneas con | less para poder verlas más cómodamente.

También son finalizaciones habituales | wc para saber


cuantas líneas genera o | grep cadena para quedarnos
sólo con las líneas que nos interesan.

Concatenar órdenes

Plataforma de Teleformación de IFES Página 75 de 212


Introducción a Linux

Órdenes seguidas

Normalmente cuando tenemos que poner varias órdenes se escriben en diferentes


líneas.

El mismo resultado se produce si las escribimos en la misma línea, separadas por


punto y coma (; ).

$ # es lo mismo escribir
$
$ ls tmp/*.txt
tmp/calculos.txt
tmp/calendario.txt
tmp/carta.txt
tmp/carta1.txt
tmp/carta2.txt
tmp/grandes.txt
tmp/last_sesion.txt
tmp/numeros.txt
tmp/ordenes.txt
$ date
Fri Dec 2 12:01:41 2005
$
$ # que separarlo con punto y coma
$ ls tmp/*.txt; date
tmp/calculos.txt
tmp/calendario.txt
tmp/carta.txt
tmp/carta1.txt
tmp/carta2.txt
tmp/grandes.txt
tmp/last_sesion.txt
tmp/numeros.txt
tmp/ordenes.txt
Fri Dec 2 12:01:41 2005

Tanto la separación en diferentes líneas como con punto y coma hacen que se
ejecuten las órdenes, una después de otra independientemente de si se han ejecutado
bien o mal.

A veces querremos que una orden se ejecute sólo si la orden anterior se ha realizado
con éxito.

$ tar czvf usuario.tar.gz proyecto;rm -rf proyecto

En el código anterior realizamos una copia de seguridad del directorio proyecto y a

Página 76 de 212 Introducción a Linux


Introducción a Linux

continuación lo borramos.

Si la copia de seguridad no se ha producido porque hemos escrito algo mal o no


tenemos permisos de escritura o está el disco lleno o cualquier otra cosa, el directorio
se borrará de cualquier manera, habremos perdido el directorio sin tener la copia de
seguridad.

Ejecución condicional

Para asegurarnos de que una orden se ejecute sólo si la anterior se ha realizado las
concatenaremos con el símbolo && , sin separar.

$ tar czvf usuario.tar.gz proyecto && rm -rf proyecto

con este código creamos el archivo donde guardamos la copia de seguridad y sólo en
el caso de que todo haya ido bien borraremos el directorio.

Otras veces querremos que se ejecute una segunda orden sólo si la primera ha fallado.

Para concatenar órdenes y que se ejecute la segunda sólo cuando falle la primera se
utiliza el símbolo || .

Así en

cat /etc/passwd || echo "no puedo abrirlo" >> /tmp/errores.txt

Si se puede abrir, la segunda orden no se ejecuta. Si no lo podemos abrir, por el motivo


que sea, ejecutaremos la orden echo, que guardará un texto en el archivo errores.txt.

Agrupar órdenes con paréntesis

Hay veces que queremos agrupar varias órdenes para ejecutarlas si se cumple una
condición o queremos que el resultado de todas ellas vaya a un único archivo. Para
hacer esto se ponen las órdenes entre paréntesis.

$ echo escribe el año;read a; cal -m $a || (echo el mes $a no es


correcto; cal -m -y)

En el ejemplo anterior el sistema nos pide el valor de la variable a , donde


almacenamos el año que nos interesa, intentamos sacar el calendario de ese año y si
se produce un fallo realizamos dos acciones, ya que están entre paréntesis, sacar un
mensaje de error y sacar el calendario del año actual). Los años válidos son del 1 al
9999.

Plataforma de Teleformación de IFES Página 77 de 212


Introducción a Linux

$ (date;echo;cal -m;pwd) > /tmp/estado.txt

es una manera mucho más corta (y elegante) que escribir:

$ date >/tmp/estado.txt
$ echo >>/tmp/estado.txt
$ cal -m >> /tmp/estado.txt
$ pwd >>/tmp/estado.txt

Uso de variables
Las variables sirven para almacenar valores para utilizarlos más adelante.

Las variables se pueden establecer de dos maneras:

$ a=32
$ read b
hola

• poniendo el nombre de la variable, el símbolo = y el valor que se le asigna.


No puede haber espacios antes ni después del igual. Si el valor va a tener
espacios hay que ponerlo entre comillas.
• leyendo el valor de la variable interactivamente con la orden read .:

Para utilizar el valor de una variable tenemos que añadirle el símbolo del dolar ($ )
antes del nombre.

Utilizando variables podemos ahorrarnos tener que escribir mucho texto.

$ t=/tmp/archivo_temporal.txt
$
$ find / -size +10000k > $t
$ wc $t
$ head $t
$ rm -f $t

Nos hemos creado la variable t con el valor de un archivo que se utiliza mucho. Así en
las siguientes órdenes sólo escribimos $t y no tenemos que escribir el nombre
completo.

Cuando veamos las estructuras de control veremos más utilidades de las variables.

Variables del sistema

El sistema define y utiliza varias variables que podemos ver y utilizar.

Página 78 de 212 Introducción a Linux


Introducción a Linux

Por ejemplo la variable HOME indica cuál es nuestro directorio personal. Podemos ver
su valor con la instrucción:

$ echo $HOME

Si hacemos un programa que depende del directorio del usuario podemos poner esta
variable en lugar de tener que modificarlo.

Para ver las variables del sistema utilizamos la orden set


.

Para ver todas utilizamos esta orden pero con tuberías


set | less o set | grep -i home .

Uso de comillas
En el shell utilizamos 3 tipos de comillas.

• comilla simple ('). En la tecla a la derecha el cero. Sirve para escribir texto
literal.
• comilla doble ("). En la tecla del 2 con mayúsculas pulsadas. Si dentro de
estas comillas hay una variable se sustituye por su valor.
• comilla grave (`). En la tecla que hay a la derecha de la tecla p, al pulsarla no
sale nada en la pantalla, hay que pulsar un espacio después. Su contenido
se ejecuta y es sustituido por el resultado de la ejecución.

$ # uso de las comillas para asignar un valor que tiene espacios


$
$ v="¿alguien ha visto un pingüino resfriado?"
$
$ echo 'no sustituyo las variables ($v)'
no sustituyo las variables ($v)

Plataforma de Teleformación de IFES Página 79 de 212


Introducción a Linux

$
$ echo "con comillas dobles sí ($v)"
con comillas dobles sí (¿alguien ha visto un pingüino
resfriado?")
$
$ # uso de comillas graves
$
$ echo "hoy es `date`"
hoy es Fri Dec 2 13:08:53 2005

Estructuras de control
Las estructuras de control son "instrucciones" que hacen que unas órdenes se repitan o
se ejecuten de forma condicionada por variables o estados del sistema.

Todos los lenguajes de programación tienen estructuras de control, pero esto es un


entorno de trabajo, las estructuras nos permiten hacer gran cantidad de cosas en poco
tiempo.

for

La estructura for hace que se repitan una serie de órdenes asignando a una variable
un valor diferente cada vez que se repite el bucle.

for i in pepe juan ana


do
tar czvf /var/backup/$i.tar.gz /home/$i && rm -rf /home/$i
done

Como podemos ver en el ejemplo anterior for va seguido del nombre de la variable que
vamos a utilizar, en este caso i, después la palabra in seguida de una lista de palabras,
letras o números que son los valores que irá tomando la variable. Después de la lista
viene la palabra do indicando que empiezan las órdenes que se van a repetir. Después
de las órdenes hay que poner la palabra done para indicar que hemos acabado las
órdenes que se repiten.

Vamos a seguir paso a paso qué hace el código anterior:

• asigna a i el valor pepe.


• crea el archivo /var/backup/pepe.tar.gz partiendo del directorio /home/pepe.
• si se ha ejecutado bien la orden anterior se borra el directorio /home/pepe.
• asigna a i el valor juan.
• crea el archivo /var/backup/juan.tar.gz partiendo del directorio /home/juan.
• si se ha ejecutado bien la orden anterior se borra el directorio /home/juan.

Página 80 de 212 Introducción a Linux


Introducción a Linux

• asigna a i el valor ana.


• crea el archivo /var/backup/ana.tar.gz partiendo del directorio /home/ana.
• si se ha ejecutado bien la orden anterior se borra el directorio /home/ana.
• terminamos el bucle.

Podemos hacer bucles que combinen los conocimientos anteriores:

$ for i in enero febrero marzo abril;do echo "$i tiene `echo


$i|wc -c` letras";done
enero tiene 6 letras
febrero tiene 8 letras
marzo tiene 6 letras
abril tiene 6 letras

La instrucción superior tiene una alta densidad de técnicas recientemente aprendidas,


vamos a verlas con más detalle:

• Separación mediante ; . Debemos fijarnos que al acabar la lista (abril ), va un


punto y coma, pero no va después de do.
• Dentro de la cadena de echo sacamos el valor de la variable i.
• Utilizamos comillas graves para sacar el resultado de ejecutar una orden.
• En este caso la orden que se ejecuta es la combinación de dos órdenes
unidas mediante una tubería, la salida de la orden echo se le pasa a wc
para que cuente cuantas letras tiene. Como wc -c cuenta también el carácter
de retorno, nos muestra una letra de más. Podíamos arreglarlo pasándole
menos letras. Lo siguiente ya es para nota.

$ for i in enero febrero marzo abril;do echo "$i tiene `echo


$i|cut -c 2- |wc -c` letras";done
enero tiene 5 letras
febrero tiene 7 letras
marzo tiene 5 letras
abril tiene 5 letras

Si queremos realizar un bucle numérico como en


muchos lenguajes de programación podemos usar como
lista del for la orden seq entre comillas graves.

$ for i in `seq 1 10`;do echo hola $i;done


hola 1
hola 2

Plataforma de Teleformación de IFES Página 81 de 212


Introducción a Linux

hola 3
hola 4
hola 5
hola 6
hola 7
hola 8
hola 9
hola 10

Editores de texto
Un editor de texto es simplemente un programa que nos permite escribir y modificar
archivos de texto.

Los editores de texto nos permiten también escribir programas, varias órdenes
seguidas en diferentes líneas, hacer pruebas y volver a modificar los archivos de texto.

Entre los programadores usuarios de Linux la mayoría utiliza Vim o Emacs, que son
editores de texto con multitud de trucos, opciones y atajos. Pero cuesta mucho tiempo
aprender a manejarlos con soltura.

Página 82 de 212 Introducción a Linux


Introducción a Linux

Editor vim.

Si no se va a trabajar intensivamente en modo consola es recomendable editar


nuestros archivos de texto con programas gráficos como Kate o gedit.

Plataforma de Teleformación de IFES Página 83 de 212


Introducción a Linux

Editor Kate.

Página 84 de 212 Introducción a Linux


Introducción a Linux

Editor gedit.

En modo texto hay varios editores sencillos como joe, pico o nano.

Plataforma de Teleformación de IFES Página 85 de 212


Introducción a Linux

F.A.Q.

Página 86 de 212 Introducción a Linux


Introducción a Linux

Apéndices (Conceptos básicos)


¿Qué es un sistema operativo?
Un sistema operativo es un programa (o conjunto de programas) de control que tiene
por objeto facilitar el uso de la computadora y conseguir que ésta se utilice
eficientemente. Se encarga de gestionar y asignar los recursos hardware que requieren
los programas.

El sistema operativo es el programa principal de nuestro computador: sin él no


funcionaría ningún otro y todos los demás programas se ejecutan sobre él, siendo el
S.O. quien los administra y gestiona.

El objetivo fundamental de los sistemas operativos es, por lo tanto, gestionar y


administrar eficientemente los recursos hardware, permitiendo que se ejecuten
concurrentemente varios programas, sin que haya conflictos en el acceso de cada uno
de ellos a cada uno de los recursos que necesite, y sin que ningún programa
monopolice alguno de ellos. Los recursos hardware son: el procesador (CPU ), la
memoria principal, los discos y otros periféricos.

Pensemos en un sistema multiusuario, esto es, un ordenador utilizado desde diversos


terminales por varios usuarios (por ejemplo, el ordenador de un banco que gestiona las
cuentas de los clientes o el ordenador que gestiona la reserva de los billetes de una
línea aérea). Obviamente, si varios usuarios están utilizando la misma computadora,
debe haber alguien o algo que asigne los recursos y evite los conflictos que puedan
surgir cuando dos programas requieran los mismos elementos (la misma unidad de
disco, o la impresora, por ejemplo). Esta es una de las funciones del sistema operativo.

Además de esta función de asignar los recursos a cada programa, el sistema operativo
se encarga de contabilizar éstos, y de la seguridad (que un usuario no pueda acceder
sin autorización a la información de otro, por ejemplo).

Del mismo modo, es normal que un ordenador ejecute varios programas


simultáneamente. Pueden darse conflictos cuando dos aplicaciones quieran modificar
el mismo fichero. Es función del sistema operativo controlar estas situaciones para que
no se produzcan daños o pérdidas de información, como por ejemplo podría ocurrir si
dos agencias de viaje intentan vender el mismo billete simultáneamente.

El sistema operativo facilita el uso de la computadora. Para ello crea un sistema de


capas que evita al usuario y a las aplicaciones de mayor nivel tener que estar
pendiente de las operaciones de menor nivel. Por ejemplo, cada dispositivo de E/S

Plataforma de Teleformación de IFES Página 87 de 212


Introducción a Linux

(entrada/salida, como el teclado, la pantalla, la impresora, etc.), para ser utilizado,


requiere varias instrucciones máquina que establezcan un dialogo entre las unidades
centrales y el periférico, enviando o captando el dato de salida o de entrada,
respectivamente. Estas instrucciones dependen considerablemente de las
características concretas del periférico. Si se trata, por ejemplo, de una unidad de
disco, hay que considerar el ancho de los buses, el tamaño de su memoria intermedia,
el arranque (y parada) de los motores de la unidad, el código identificador de la
posición a donde hay que acceder, etc. Por otra parte, un dispositivo dado, estas
instrucciones u operaciones son comunes para grabar o leer cual tipo de información
(programas o datos), sea cual sea su naturaleza. El sistema operativo, con objetivo de
facilitar el trabajo de los programadores, contiene módulos de gestión de entradas /
salidas que evitan a los usuarios tener que incluir esas instrucciones cada vez que
hacen una operación de entrada o salida. Se puede decir que esos programas del
sistema operativo hacen transparente al usuario las características hardware concretas
de los dispositivos.

El sistema operativo también hace que la computadora se utilice eficientemente. Para


poner de manifiesto cómo el sistema operativo puede incrementar la eficiencia
consideremos otro sencillo ejemplo. Los programas tradicionalmente se ejecutan
secuencialmente; es decir, hasta que no concluye la ejecución de una instrucción no se
ejecuta la siguiente. Supongamos que dentro de un programa hay una instrucción que
implica la escritura de una página en una impresora láser. Hasta que no acabe de
imprimirse dicha página el programa no puede continuar ejecutándose. Sin embargo, el
sistema operativo puede recoger la orden de impresión, almacenarla en memoria y
encargársela a una rutina de impresión, dejando el programa que había efectuado la
llamada original a la impresora liberado para poder seguir trabajando.

En resumen, el sistema operativo efectúa, entre otras, las siguientes funciones:

• Facilita el uso de la computadora, en general, la comunicación computadora


/ usuario
• Gestiona y asigna recursos hardware (procesador, memoria y periféricos) a
los distintos programas o tareas
• Gestiona y mantiene los archivos en dispositivos de memoria masiva
• Apoya a otros programas
• Protege los datos y los programas, cuestión especialmente compleja en
sistemas multiusuario
• Identifica y autentifica a los usuarios que hacen uso de la computadora.
• Contabiliza la utilización de los recursos realizada por los distintos usuarios

¿Qué es el software libre?


Adaptado de:
, un documento de

Página 88 de 212 Introducción a Linux


Introducción a Linux

¿Qué es el software?
Empecemos con la definición de Software : son los componentes no físicos(programas)
que un ordenador --o un aparato con capacidades de computación-- necesita para
funcionar.

Lamentablemente, el castellano no ha adoptado una palabra propia para definir este


concepto y nos vemos obligado a usar este anglicismo. Durante una época, en los
albores del ordenador personal en la década de los 80, se propuso el término logical ,
pero no llegó a prosperar su uso.

El software, por el tipo de licencia, se divide en dos grupos principales: Software Libre
y Software Propietario .

El software propietario
Este software se define como aquel cuya licencia restringe drásticamente su uso.
Puede ser creado por desarrolladores para el uso en una única empresa, como es el
caso de numerosas aplicaciones verticales, aunque en este caso la empresa cliente
suele retener la propiedad completa del software, o por pequeñas empresas, que lo
venden bajo numerosos tipos de licencias, algunas de ellas gratuitas (pero no libres).
Sin embargo, cuando nos referimos a este tipo de software, estamos pensando en el
que es producido principalmente por grandes empresas. La más conocida de ellas
probablemente sea Microsoft, pero existen otras: Oracle, Adobe,...

En este caso, cuando pagas por un programa, no pagas por el cdrom, el programa o su
código, solamente pagas por su licencia, que es la autorización de su uso, con las
condiciones que ponga la empresa propietaria de dicho software.

En general, las condiciones que tiene la licencia del software propietario son éstas,
aunque la empresa propietaria del mismo suele poner las que le interesa:

No se puede averiguar el código fuente del programa; no se puede usar más que en
una sola máquina; no se puede copiar ni prestar a un amigo (para que lo copie ni para
que lo use, aunque nosotros no lo estemos usando); no se puede ceder, no se puede
alquilar.

Esto hace que, por ejemplo, haya que pagar 2 veces por el mismo programa si se
instala en 2 puestos de trabajo, aunque sean usados por la misma persona (en casa y
en la oficina).

Además de no poder aprender sobre el software viendo el código, ni adaptarlo a

Plataforma de Teleformación de IFES Página 89 de 212


Introducción a Linux

nuestras posibilidades sin incurrir en delito.

Algunas de estas empresas utilizan en ocasiones procedimientos comerciales que


intentan monopolizar el mercado, causando el mayor número de incompatibilidades
posibles para evitar que se use otro software que no sea el de su empresa y tener que
estar pagando para actualizar cada poco tiempo los programas.

El software libre

Este software ha sido desarrollado principalmente por una comunidad de usuarios, para
ponerlo al servicio de la sociedad. Hay excepciones, en que una empresa comercial,
por algún motivo, desarrolla un software abierto y lo pone a disposición de la
comunidad de usuarios.

Para que un software sea libre, ha de cumplir los siguientes requisitos:

Libertad de uso: se puede usar de la manera que se quiera, por quien quiera, en
el número de ordenadores que se quiera.
Libertad de código: la cual permite ver el código, estudiarlo, usarlo, copiarlo,
mejorarlo, adaptarlo a nuestras necesidades y ponerlo a disposición de la
comunidad. El código fuente de un programa libre, debe estar a la disposición de
quien lo quiera.
Libertad de distribución: se puede copiar, regalar o vender, cómo y a quien se
quiera. Sin dar explicaciones a los autores.

Una lista de las licencias más frecuentes de código abierto está disponible en la página
web de la Open Source Iniciatives:
. Quizás el máximo exponente del software libre son las distribuciones GNU/Linux, más
conocidas globalmente como Linux.

¿Por qué usar software libre?


Adaptado de
, un documento de

Por economía
Usando software propietario, por cada ordenador, hay que tener una licencia de cada
programa que se use. Por poner un ejemplo, el sistema operativo que es lo mas básico
para que funcione el ordenador, la versión que se comercializa actualmente para uso

Página 90 de 212 Introducción a Linux


Introducción a Linux

doméstico es el WindowsXP home y su licencia suele superar los 120 Euros, pero para
poder hacer algo más que encender el ordenador necesitamos programas de ofimática
como la suite de Microsoft Office XP y algunos programas de audio, publicación y
retoque fotográfico, por ejemplo.

El precio del software de cada terminal de trabajo puede superar ampliamente los 600
euros pudiendo invertir este dinero en la compra de nuevos equipos o periféricos que
se necesiten si usamos software libre.

Una distribución de Linux, que se puede conseguir de forma gratuita, aunque puede
costar desde los 20 a los 80 euros, donde se suelen incluir, algún manual, además de
soporte técnico y el código fuente del programa para su estudio o modificación, un
paquete de programas, entre los que hay software de oficina, editores
gráficos,herramientas para la administración de redes, servidores de páginas
web,correo electrónico, edición de publicaciones... Un paquete de software
que difícilmente podría pagar una persona normal... y pocas empresas con un parque
de ordenadores.

Por su filosofía
Porque el software libre, ha sido y es creado por miles de personas que cooperan
desde todas las partes de la geografía mundial coordinndose mediante Internet, de
forma descentralizada además de desinteresada en su mayoría, aportan su
conocimiento, su trabajo y su tiempo, para la creación de este software, que ha sido
propuesto a la Unesco a formar parte del patrimonio de la Humanidad.

El Software Libre es la prueba de que las cosas pueden funcionar de muchas formas
diferentes a como funcionan actualmente.

Enseña los valores de la cooperación por encima de la competición, el de la libertad


frente a la restricción, compartir frente a retener, la difusión del conocimiento frente al
oscurantismo y a valorar a las personas por su forma de ser y no por su apariencia,
género o raza, ya que en la red desaparecen estas características.

Por favorecer el desarrollo tecnológico


La política de desarrollo del software libre, tiene el mismo modelo que (hasta hace
poco) la comunidad científica, que ha funcionado tan bien a la Humanidad. Cada
descubrimiento, se pone inmediatamente en conocimiento del resto de la comunidad, lo
que permite una rápida evolución.

Mientras que el software propietario, lejos de potenciarlo, lo frena poniendo

Plataforma de Teleformación de IFES Página 91 de 212


Introducción a Linux

impedimentos para que otras compañías no puedan mejorarlo.

Por seguridad

El software libre basa su robustez y su seguridad en su transparencia. Miles de


miembros de la comunidad del software libre, participa activamente en la búsqueda de
fallos de seguridad, que son rápidamente reportados, siendo los mismos que
encuentran los fallos muchas veces los que reportan la solución, o los mismos
desarrolladores, en poco tiempo.

Mientras que el software propietario, basa su seguridad en el oscurantismo, esto es, no


dar a conocer los fallos de seguridad del software, para que no puedan ser
aprovechados por supuestos atacantes.

Esto no hace más que dar una ficticia seguridad a sus usuarios, que ven como día a
día, se ven afectados por una gran cantidad de virus, gusanos e intrusos informáticos.

Licencias de software libre

Introducción a las licencias de software libre


Jorge Nonius.
v. 0.92, 16 de abril de 2002
Resumen
Este artículo introduce a los usuarios de Debian GNU, con poco o ningún conocimiento
jurídico, en el Derecho español sobre propiedad intelectual y su efecto en las licencias
de software libre. Continua la serie dedicada a la propiedad intelectual que se inició con
la "Introducción a la propiedad intelectual" publicada también en La Espiral. Se
completa con tres apéndices en el apartado 7.

El artículo se centra en el Derecho español, pero las normas sobre propiedad


intelectual de programas de ordenador son prácticamente idénticas en todos los

Página 92 de 212 Introducción a Linux


Introducción a Linux

Estados miembros de la Unión Europea.

El punto de vista adoptado no es siempre el del autor o fabricante de software, sino que
más bien se les trata de igual a igual con los usuarios, consumidores y demás personas
con derechos y libertades implicados en la creación, explotación y utilización del
software.

© 2001, Jorge Nonius. La versión más actualizada se encuentra disponible en


http://www.laespiral.org/xml/. Para ponerse en contacto con el autor: jnonius@terra.es.
Este artículo puede ser copiado y distribuido en las condiciones de la licencia GNU
para documentación libre, GFDL (http://www.gnu.org/copyleft/fdl.html).

[Nota de La Espiral: El autor, que firma con seudónimo, es usuario de Debian GNU y
Licenciado en Derecho.]

Los derechos del autor del software


Este artículo continua la serie dedicada a la propiedad intelectual que se inició con la
"Introducción a la propiedad intelectual" publicada en La Espiral, pero, a diferencia de
allí, aquí no se trata sólo de los derechos de autor, sino también de los derechos de los
consumidores y usuarios, de ciertas libertades públicas, y en suma de un abigarrado
conjunto de situaciones jurídicas que aparecen en los conflictos, teóricos o prácticos,
acerca de las licencias de software libre. Utilizaremos siempre el término "libertad" en
su acepción técnica estricta: Libertad es la situación jurídica en que se encuentra uno
cuando no le alcanza una prohibición. Las prohibiciones, que adoptan muchas formas y
muchas más denominaciones (deberes, obligaciones, cargas, sujeciones) provienen de
muchas fuentes: directamente de la ley, por medio de un contrato, de una demanda
judicial o de una sentencia, etc. De estas prohibiciones trata este primer apartado.

En el segundo apartado trataremos las libertades y restricciones a los usuarios


implicadas en una licencia de software, y en especial en una de software libre. Pero
antes daremos un repaso rápido a la contrapartida de las libertades de los usuarios: los
derechos del autor del software, reconocidos y garantizados por la LPI.

Vamos a explicar cuáles y cómo son los derechos del autor del programa. Por ahora
trataremos al software como una obra intelectual más, sin fijarnos demasiado en
aquello que lo caracteriza y distingue de, por ejemplo, una novela o una canción.
Después de tratar algunas cuestiones generales (1.1), definiremos quién es el titular de
los derechos de autor de un programa (1.2), sobre qué objetos recaen y sus tipos (1.3),
qué es y qué implica la divulgación y la publicación del software (1.4), cuál es el
multiforme contenido del derecho de autor y sus límites (1.5), su duración (1.6), las
formas de explotación y cesión de derechos (1.7) y finalmente las garantías legales de
todo esto (1.8).

Plataforma de Teleformación de IFES Página 93 de 212


Introducción a Linux

El lector que conozca los fundamentos jurídicos de la propiedad intelectual puede


saltarse este apartado 1 y pasar directamente al 2.

Cuestiones generales sobre el software como


obra protegida
La LPI sólo protege los programas originales generados por el intelecto. Ésta es la
definición legal de programa protegible. Un programa no expresado (p. ej. una idea) no
es un programa, ni tampoco lo es un programa no original, aunque veremos que se
reconocen ciertos grados de originalidad en la LPI, por ejemplo para los programas
derivados. No están protegidos pues los programas no originales y en cierto modo
tampoco los que se encuentren en dominio público, que son aquellos para los que ha
transcurrido el plazo de duración. Tampoco están protegidos los programas que,
aunque originales, estén destinados a producir fallos en el funcionamiento del sistema
(virus, etc). Estas exclusiones se irán detallando en su lugar más adelante, pues deben
ser analizadas con cuidado. [P. ej.: La divulgación de programas inéditos que estén en
dominio público genera derechos de propiedad intelectual a favor del divulgador].

El software no es patentable. Excepciones


La propiedad intelectual de los programas se reconoce y regula en la LPI ya que el
software es oficialmente considerado "obra generada por el intelecto" . Por contra, el
software no tiene consideración oficial o legal de objeto patentable, pues en derecho
español sólo son patentables las invenciones nuevas de aplicación industrial. Resulta
que los programas de ordenador no se consideran invenciones (?), en un juicio más
formal que de fondo, y por lo tanto no pueden patentarse.

Dicho de otro modo, un programa no puede ser objeto de propiedad industrial, que es
el conjunto de derechos de los inventores sobre sus inventos y de las empresas sobre
sus marcas y rótulos comerciales, o de los ingenieros sobre topografía de
semiconductores, etc. Es una propiedad "incorporal" o "inmaterial" , lo mismo que la
propiedad intelectual, pero se regula no en la LPI sino en la LP y LM, conforme a reglas
y mecanismos diferentes.

No obstante, un programa protegido por la LPI puede ser también objeto de protección
por la LP si forma parte de un invento patentado. En ese caso, ambas vías de
protección de derechos, la garantizada por LPI y la que garantiza la LP, son
independientes, compatibles y acumulables. Véase en el Apéndice B la referencia de
las leyes citadas.

Página 94 de 212 Introducción a Linux


Introducción a Linux

¿Es el software equivalente a una obra literaria?


No es realmente necesario etiquetar a los programas de ordenador como obras
literarias, artísticas o científicas. Puede leerse en tratados internacionales y normas de
la Unión Europea que los programas de ordenador han de quedar protegidos como
"obras literarias" , por alguna extraña razón; tal vez porque, como no son obras
científicas (?) ni artísticas (??), en algún cajón hay que meterlos (???). Al fin y al cabo,
el programa fuente viene expresado en lenguaje humano, aunque sea tan poco literario
como C++. Este asunto es demasiado general, y no hace falta tratarlo aquí. Mejor
veamos qué protección dispensa la LPI a los programas de ordenador, comparémosla
con la dispensada a las obras literarias, y concluyamos sobre las diferencias
encontradas.

Adelantemos que hay diferencias, y muy notables. Probablemente a causa de que los
programas no son en absoluto equivalentes a las obras literarias.

Los titulares de los derechos de propiedad


intelectual sobre un programa
Menores de edad y asalariados

Los autores de programas que sean menores de edad son por supuesto considerados
titulares únicos de sus derechos, igual que los mayores de edad. Pero sólo los menores
de 18 años y mayores de 16 independientes -de acuerdo con sus padres o tutores-
pueden ceder sus derechos de explotación del programa sin la autorización de quien
les tenga a su cargo.

Si un asalariado crea un programa original durante y con motivo de su relación laboral


con un empresario, se entiende que cede a éste en exclusiva sus derechos de
explotación sobre el programa, salvo pacto en contra. Pero el empresario no puede
disponer del software con fines distintos de los de su actividad empresarial habitual.
Más adelante volveremos sobre este delicado asunto.

Programas colectivos y en colaboración


La LPI nunca considera "autoras" de las obras intelectuales a las personas jurídicas
(asociaciones, sociedades anónimas, fundaciones), sino sólo a las personas naturales
o físicas, con una excepción: ¡los programas de ordenador! Técnicamente hablando

Plataforma de Teleformación de IFES Página 95 de 212


Introducción a Linux

hay otro caso en el que también se dice que una persona jurídica queda equiparada al
autor de la obra: las obras colectivas.

Obra colectiva es un concepto difícil de definir con precisión. Para la LPI, programa de
ordenador colectivo es el generado por iniciativa y coordinación de una persona
(natural o jurídica), que lo edita y divulga bajo su nombre. El programa colectivo está
constituido por aportaciones de diferentes programadores, de las que resulta una
creación única y autónoma, sin atribución de partes o cuotas a cada aportador, y sin
que uno solo de ellos pueda atribuirse derechos sobre el conjunto del programa.

Programa colectivo no es lo mismo que programa creado en colaboración, que nace


del trabajo de varios coautores y permite la explotación separada de cada aportación.
Volveremos sobre esta distinción enseguida, apartado 1.3.

Titulares originarios y derivados


El autor es el titular originario de los derechos de propiedad intelectual sobre su
programa. Pero muchos de esos derechos, como veremos más adelante, pueden ser
cedidos a otras personas, que no por ello pasan a ser autores obviamente, pero sí
titulares de los derechos. Decimos en este caso que son titulares derivados, o
simplemente titulares. Al hablar de titular originario diremos simplemente "autor" .

Tipos de programas
Los programas pueden clasificarse según varios criterios con arreglo a la LPI:

1. Por la autonomía del programa tenemos programas independientes y


programas dependientes.
2. Por el número de autores y su forma de cooperar tenemos programas
individuales, programas en colaboración y programas colectivos.
3. Por su originalidad tenemos programas estrictamente originales por un lado
y programas derivados y compuestos por otro.

Ahora nos interesa sólo dar algunas definiciones. Llamamos programa independiente al
constituido como una "creación autónoma" , aunque se publique conjuntamente con
otros programas. Se distingue del programa compuesto, formado por varios programas
independientes preexistentes.

Decimos que un programa es realizado en colaboración si resulta unitariamente del


trabajo de varios desarrolladores, en el que es posible separar las aportaciones de
cada cual y de explotarlas independientemente. En este caso, los programadores son
co-autores, y pueden entre ellos pactar lo contrario y explotar por su cuenta cada cual
su parte. Si no hay acuerdo, el único límite a la explotación separada consiste en no

Página 96 de 212 Introducción a Linux


Introducción a Linux

perjudicar la explotación común. Para divulgar y modificar un programa en colaboración


hace falta el consentimiento de todos los coautores, que sólo el juez puede excusar.
Los derechos de autor pertenecen a cada coautor en la proporción que entre ellos
pacten; en otro caso, se aplican las reglas generales del Código Civil sobre la
comunidad de bienes.

Programa derivado es el que se ha obtenido de un modo u otro de software anterior, p.


ej. traduciéndolo, adaptándolo, modificándolo o revisándolo. En general debe hablarse
de programa derivado ante cualquier transformación de un programa preexistente. Pero
cuidado: La LPI protege los derechos de los dos autores: el del programa primitivo y el
del derivado.

Un programa se dice "compuesto" si se ha obtenido de la incorporación de uno o más


programas preexistentes y sin la colaboración de los autores originarios. Se considera
obra protegida siempre que haya autorización de los titulares de los programas
originarios y se respeten sus derechos sobre ellos. Es decir: el autor del programa
compuesto tiene derechos sólo sobre la composición, no sobre el software que la
compone. La distribución Debian GNU/Linux Potato, p. ej., es una obra compuesta,
compuesta de software. Debian sólo tiene derechos sobre la composición en sí, no
sobre los programas independientes incluidos en la distribución.

Un programa (obra intelectual) se distingue del soporte en que está contenido (bien
mueble, como puede ser un CD). El soporte del programa es el material en que se
plasma, no es lo mismo que el programa. [Advertencia probablemente superflua: El
significado de soporte al que nos referimos nada tiene que ver con el utilizado
constantemente en informática de "servicio de apoyo" ]. Lo importante es que son
distintos e independientes los derechos sobre el programa (derechos inmateriales, de
propiedad intelectual) y los derechos sobre el CD (derechos materiales, de propiedad
común). Al cederse los derechos de propiedad intelectual no necesariamente se ceden
los derechos sobre el soporte. Viceversa y más importante: ser dueño del soporte no
significa ser titular de los derechos sobre el programa que incorpora.

Divulgación y publicación de un programa


Divulgar un programa es expresarlo de modo que se haga accesible al público por
primera vez en cualquier forma. La divulgación es facultad exclusiva y personalísima
del autor, se dice incluso que es un "derecho moral" (véase más adelante). Lo
importante de todo esto es la fecha de divulgación, porque a partir de ella se cuenta el
plazo de duración de los derechos de propiedad intelectual.

La publicación del programa es una forma de divulgarlo, de las más importantes pero
no la única. Publicar un programa es expresarlo de modo que lo hace accesible al
público mediante ejemplares o copias. Verdaderamente es la forma principal de

Plataforma de Teleformación de IFES Página 97 de 212


Introducción a Linux

divulgación del software, por eso no trataremos otras, como la comunicación pública,
apenas concebible en el ámbito de los programas de ordenador. No obstante, véase el
apartado 1.7.

Facultades del autor del programa y sus límites


Los derechos del autor se manifiestan ante todo en dos grupos de facultades: 1º Los
derechos morales, o facultades personalísimas que tiene sobre los programas que ha
creado; y 2º Los derechos patrimoniales, como la facultad exclusiva de explotarlos en
cualquier forma y obtener remuneración por ello; o el derecho a obtener remuneración
por el simple acceso a las fuentes; y el derecho a autorizar o prohibir su uso,
divulgación y explotación; etc.

El derecho moral es una figura que sólo encontraremos en los derechos continentales,
no en las leyes anglosajonas, al menos con el mismo aspecto. No puede cederse en
vida, como parece deducirse del texto de la LPI. En realidad son varios los derechos
morales del autor:

1. Decidir si su programa ha de divulgarse y en qué forma;


2. Decidir si el programa aparecerá con su nombre, bajo seudónimo o
anónimamente;
3. Exigir el reconocimiento de su condición de autor del programa, y el respeto
a su integridad, sin deformaciones, modificaciones o atentados que
perjudiquen el interés o reputación del autor;
4. A modificar el programa cuando le plazca, aunque ha de respetar los
derechos adquiridos por otras personas. Volveremos sobre esto al tratar de
las modificaciones de los programas;
5. A retirar su programa por cambio de convicciones (derecho de
arrepentimiento), indemnizando a quienes perjudique la retirada,
normalmente los usuarios y el explotador del programa. Esta facultad y las
dos siguientes no es probable que un programador las ejercite nunca;
6. A acceder al ejemplar único o raro de su programa que se halle en poder de
otra persona, indemnizando los posibles perjuicios;
7. A publicar su programa en colección escogida o completa.

Para más detalles sobre el derecho moral, véanse los artículos 14 a 16 LPI.

Los derechos patrimoniales son los que tienen relevancia económica. Los trataremos
muy sintéticamente en el apartado 1.7, dedicado a la explotación del software.

Duración de los derechos. Programas en


dominio público

Página 98 de 212 Introducción a Linux


Introducción a Linux

Los derechos de propiedad intelectual nacen con la simple creación del programa, no
es preciso anunciarlo ni registrarlo. Pero, como en las demás propiedades
intelectuales, los derechos no duran indefinidamente; se disfrutan por un tiempo y
después se extinguen; se dice entonces que el programa pasa al dominio público.

Esto es esencial, al menos en teoría. Veamos: Una vez creado el programa, nacen los
derechos de propiedad intelectual sobre él, que duran toda la vida del autor y 70 años
tras su muerte, contados desde el 1 de enero del año siguiente al de la muerte, y
después se extinguen. Hay reglas especiales para los programas anónimos y
seudónimos, los realizados en colaboración y los programas colectivos, los programas
publicados por partes, que no detallaremos aquí (veánse los artículos 26 y 30 LPI).

Sin embargo, el derecho moral dura toda la vida del autor, pero sólo dos de sus
facultades duran después indefinidamente sin límite de tiempo: exigir el reconocimiento
de la autoría y exigir la integridad del programa. El resto de las facultades se extinguen
con la muerte del autor, salvo la divulgación del programa inédito durante su vida, pero
éste es un caso muy extraño y tampoco lo trataremos.

Cuando los derechos de explotación se extinguen por transcurso del plazo, el programa
pasa al dominio público, es decir, puede ser utilizado por cualquiera siempre que
respete la autoría e integridad del software. Trataremos de nuevo el dominio público,
con más fundamento, en el apartado 4.

Formas de explotación del programa. Cesión de


derechos
Explotar un programa es difundirlo en cualquier forma con obtención de beneficio.
Comprende todas las modalidades posibles de ganar utilidad con el programa, pero las
más importantes son las formas de explotación tipificadas por la LPI, que son las
habituales: fijación o grabación, reproducción, transformación y distribución.

Los beneficiarios de la explotación son en principio los autores, a quienes se llama


también titulares originarios de los derechos de propiedad intelectual sobre el
programa, pero es muy normal ceder la explotación a empresarios especializados,
quienes pagan al autor por ello. A estos les llamamos titulares derivados.

No podemos ver aquí en detalle cuánto hay detrás de las reglas sobre explotación de
los programas, recomendamos al lector interesado que acuda a la "Introducción a la
propiedad intelectual" publicada en La Espiral. Nos arreglaremos con una sinopsis:

• Todo el que no sea titular ha de obtener autorización para explotar el


programa, salvo en casos tasados que veremos después. Al titular
corresponde la facultad de explotar el software, con los medios presentes o

Plataforma de Teleformación de IFES Página 99 de 212


Introducción a Linux

futuros, ya que los tipos legales (reproducción, distribución, transformación)


sólo son algunos de los posibles. Cualquier otra modalidad corresponde
siempre y en exclusiva al autor, mientras no la ceda a otra persona. Cada
modalidad de explotación es además independiente una de otra.
• No hemos citado una modalidad de explotación, la comunicación pública,
porque es dudoso que sea apta para el software, como sí lo es para, por
ejemplo, una obra musical. Remitimos al lector al otro artículo de esta serie
para algunos detalles sobre esta jurídicamente compleja forma de
explotación, de todos modos seguramente inaplicable a los programas, pues
no hay forma de acceder a ellas si no es mediante copia.
• Las formas típicas de explotación son, repetimos, la fijación, la reproducción
u obtención de copias, la modificación y la distribución. Nos ocuparán el
resto de este artículo, así que ahora no diremos mucho sobre ellas.

Pero lo dicho no es suficiente. A riesgo de resultar esquemáticos en exceso, aunque


con la seguridad de no dejar cosas importantes sin atender, recapitulemos las
facultades del autor de un programa (se encuentran principalmente en el art. 99 LPI):

1. Derecho exclusivo de autorizar o prohibir la divulgación del programa,


derecho al reconocimiento de la autoría, y demás derechos llamados
morales. Los trataremos con un enfoque diferente en el apartado 4.2.
2. Derecho exclusivo de explotación del programa. Aquí comienzan los
obstáculos para las libertades de los usuarios que expondremos después.
Algunos de ellos no sólo igualan, sino exceden, las facultades de los autores
de los demás tipos de obras. Resulta que la explotación de un programa de
ordenador se entiende que incluye:
1. La reproducción incluso para uso personal, o sea: la copia privada,
que por tanto está expresamente prohibida. Es ilícito copiar
programas sin autorización del autor, autorización normalmente
expresada en una licencia. La prohibición de copia es muy completa:
Cuando la carga, presentación, ejecución, transmisión o
almacenamiento de un programa requiera copiarlo (reproducirlo),
debe disponerse de autorización del autor;
2. La transformación y su reproducción. De todos modos, es muy difícil
transformar un programa si se carece del código fuente, código que el
autor no tiene en modo alguno obligación legal de ceder a nadie;
3. La distribución pública. Pero como incluso la reproducción privada
está prohibida, como acabamos de ver, resulta que también está
prohibida o imposibilitada la distribución privada, aunque la LPI no lo
diga expresamente.
3. Cuando se produce la cesión del derecho de uso, es decir cuando tenemos
a un usuario legítimo (después definiremos este concepto), se entiende que
es una cesión no exclusiva -el autor del programa puede ceder el uso a más
personas, o crear más usuarios legítimos, dar más licencias en suma-; se
entiende que la cesión es intransferible -el usuario no puede dar licencias a

Página 100 de 212 Introducción a Linux


Introducción a Linux

su vez-; y la finalidad de la cesión es satisfacer las necesidades únicamente


del usuario y de nadie más.

Este es el panorama con que se enfrentan las licencias de software libre, que vienen a
subvertir los términos: No limitar al usuario, que explote el programa a su entero placer,
sin restricciones. ¿Permite esto la LPI española? ¿No se encontrará una licencia de
software libre, y especialmente las copyleft que son las más interesantes desde el
punto de vista teórico-jurídico, con el muro infranqueable de algún derecho del autor
que sea inviolable, ni siquiera contando con la propia voluntad del autor? A esto tratan
de responder los apartados siguientes. Pero antes, y para rematar el cuadro,
trataremos brevemente el sistema de garantías de los derechos de autor.

Garantías legales de los derechos del autor del


programa
Registro de programas

Ya sabemos que la autoría se reconoce por la simple creación del programa, no es


preciso inscribirlo en ningún Registro. Pero el hecho es que tener un programa
registrado refuerza muchísimo la prueba de la autoría (art. 101 LPI). Los programas no
se patentan, no pueden patentarse, pero sí pueden registrarse. Por cierto que el
software libre puede registrarse, precisamente como software libre, y esto no quita
nada a la licencia, que sigue siendo de software libre en sus términos literales. El
Registro se limita a dar publicidad de su existencia y a dar fe de su validez. De hecho
es la misma licencia lo que se inscribe.

Pero todo esto es teoría. Los programas se inscriben en la llamada Sección VII del
Registro General de la Propiedad Intelectual, cuya organización y funciones básicas se
exponen en la "Introducción a la propiedad intelectual" . En realidad sólo se inscribe en
él una descripción del programa o la determinación de los elementos que permiten su
completa identificación, que se entiende contenida en las diez primeras y diez últimas
hojas del código fuente (?), o en un resumen de un máximo de 20 folios del manual de
uso (??), "siempre y cuando [dice el Reglamento del Registro] éste reproduzca los
elementos esenciales del programa" (???) (arts. 13 y 14.7 del Reglamento de 1993). Si
el programa es inédito (o sea: si no se ha publicado) entonces debe adjuntarse todo el
código fuente (????). Estas son las reglas. No se dispone de datos acerca del uso que
los programadores hacen del Registro, pero al parecer sí lo usan.

¿Cómo da publicidad el Registro a los programas inscritos? Esto tampoco es lo que

Plataforma de Teleformación de IFES Página 101 de 212


Introducción a Linux

parece: El Registro es ciertamente público, pero de un programa inscrito sólo podemos


consultar los datos personales del autor y sus derechos sobre el programa (esto es: la
licencia si existe). Y sólo nos proporcionarán el título y la fecha de publicación. Por
supuesto, jamás nos permitirán consultar el código fuente ni los manuales. Así lo dice
el art. 32 del Reglamento.

Infracciones de los derechos del autor del programa


Hay que estar de acuerdo con la FSF en que las leyes de copyright presentan como
infracciones lo que, visto desde el punto de vista del usuario del software, son
libertades truncadas que éste podía esperar disfrutar en el uso normal de un programa,
libertades que de hecho se reconocen para otro tipo de obras. Una vez uno compra un
libro (soporte físico de una obra intelectual, literaria tal vez) no necesita licencia
especial para leerlo. ¿Por qué ha de ser así con el uso del software? Volveremos
después sobre esto. Pero nuestro esquema no estaría completo si no se citaran aquí lo
que la LPI llama claramente infracciones del derecho de autor. [Un tratamiento más
extenso del sistema de protección de los derechos de autor se encuentra en la
"Introducción a la propiedad intelectual" ]. Ahora nos centraremos en las infracciones
de los derechos de autor de los programas de ordenador. Se encuentran especificadas
en el art. 102 LPI y son éstas (asústese el lector):

• Poner en circulación una o más copias de un programa, conociendo o


pudiendo presumir su naturaleza ilegítima (no tener licencia para copiarlo).
Está prohibido copiar un programa de ordenador sin licencia. Esta es la regla
y sólo una licencia puede excusar de su cumplimiento. En los apartados 4.3
y 6.2 trataremos este asunto de nuevo.
• Almacenar o simplemente tener con fines comerciales una o más copias
ilegítimas.
• Poner en circulación o tener con fines comerciales instrumentos cuyo único
uso es facilitar la supresión o neutralizar sin autorización cualquier
dispositivo técnico utilizado para proteger un programa de ordenador. ¿Hay
que entender que además de los virus, este tipo de software tampoco es
obra protegida? No, pues la ley sólo se refiere a ponerlo en circulación. Éste
es de todos modos un caso dudoso.

En fin, si no se arregla de otro modo y por las buenas, el autor o titular que considere
violados sus derechos ha de acudir al Juez de 1ª Instancia de la localidad en donde se
haya producido la infracción, al que pedirá que se condene al infractor a devolverle el
beneficio ilícito, a indemnizarle por los perjuicios, a detener la actividad ilegal e
impedirle que pueda reanudarla. Entretanto estudia el litigio y dicta sentencia, el juez
puede adoptar medidas cautelares que llegan a ser muy gravosas para el presunto
infractor, como el secuestro de los equipos y materiales de reproducción y copia, etc.
No podemos entrar en detalles, además muy técnicos y farragosos, fuera del objetivo
de esta "Introducción" . Para las infracciones de las licencias de software libre, véase el

Página 102 de 212 Introducción a Linux


Introducción a Linux

apartado 4.7.

Las libertades de los usuarios


Después del examen general del apartado anterior, toca ahora cambiar el enfoque para
tratar un tipo muy especial de fórmula de cesión de derechos de explotación todavía
poco conocida en los medios profesionales jurídicos: la licencia de software libre. Para
esto es necesario partir de las libertades del usuario del programa, no de los derechos
de autor. Éstos se encuentran protegidos por la LPI, como hemos visto en el apartado
1. Las libertades de los usuarios por contra tienen sus garantías (en la Constitución y
en otras leyes que se citarán) muy difuminadas y dispersas, no en un único cuerpo
legal sistemático.

Para empezar despejaremos algunos problemas de nomenclatura. Reservaremos el


término software libre ( "free software" ), que abreviaremos sl, para los programas que
se ajustan a la especificación de la Free Software Foundation, que es la más rigurosa,
pero puede utilizarse también como denominación genérica del conjunto de licencias
que liberan las facultades típicas del copyright básicas para la libre utilización del
software, aunque no se ajusten estrictamente a la definición de la FSF y siempre que
del contexto se deduzca a qué nos referimos (en los apartados 3.1 y 4.1 se encuentran
las definiciones). Sin embargo, no nos atendremos necesariamente al criterio de la
compatibilidad de las licencias con la GPL, no porque este punto de vista no tenga
importancia, en realidad es tal vez el más importante, sino porque la propia FSF
dispone de documentación apropiada -véanse las referencias al final en el apéndice C-
y porque aquí deseamos examinar solamente la compatibilidad de las licencias de
software libre con el Derecho español.

Huelga decir que el objetivo es el de saber a qué atenernos en España cuando surjan
conflictos de intereses relacionados con el software libre. Y es que la FSF opera
obviamente con categorías jurídicas anglosajonas, sutilmente diferentes de la europeas
continentales en lo sustancial, y decididamente distintas en los formalismos. Tenemos
que asegurarnos de que hablamos consistentemente, pues las palabras son
importantes. Para empezar, los hispanohablantes no tenemos ningún problema en
distinguir algo que es gratis de algo que es libre, pequeñez que a los angloparlantes les
ha costado mucha tinta.

El primer objetivo es entonces disponer de un vocabulario apropiado, no


obligatoriamente castellanizado, por exigencias prácticas obvias y que sirva para
entendernos en nuestras discusiones.

Pero hay un segundo objetivo: Comprender lo mejor posible las licencias de software,
que es el instrumento utilizado por el movimiento del sl en general, y por el copyleft en
particular, para articular jurídicamente un fenómeno que sobrepasa el ámbito del

Plataforma de Teleformación de IFES Página 103 de 212


Introducción a Linux

software, alcanza a la documentación técnica y científica y comienza a sustentar la


distribución de otro tipo de bienes y productos (véase el apartado 5). No es que
software libre y copyleft hayan surgido de las licencias, sino que éstas han
"instrumentado" tales movimientos, se han servido de ellas para recuperar las
libertades académicas, científicas y de los usuarios. De hecho, parece que el software
libre es incluso un modelo de negocio, pero también es un fenómeno social, un método
de investigación y de docencia.

Orbitando las licencias de software se encuentran muchos asuntos que no podemos


tratar, pero tan importantes que se citan a continuación algunos:

• Conflictos graves, comerciales o no, entre distribuidores de software, p. ej. el


pleito ATT-Berkeley de 1992, o la cuestión GNU v. KDE de 1997.
• Aparición de sistemas operativos libres, con representantes como la rama
BSD o GNU/Linux, en competencia insospechada con los grandes
fabricantes de software cerrado (expresión que usaremos en lugar de
software propietario, más adelante se explica por qué).
• Alianzas expresas o tácitas entre fabricantes de software libre y hardware,
en competencia también inesperada con los chips dominantes. Es el caso
del acuerdo Apple-Universidad Carnegie Mellon para el MacOS X, o el
impulso dado por el software libre a los chips Alpha, SPARC...
• Nuevos modelos de negocio, como el de Cygnus con el compilador GCC,
acuerdos de Red Hat con Penguin Computer y con la misma Cygnus
Solutions (noviembre de 1999).
• La aparición de un instrumento incomparable de colaboración profesional y
científica, y de fórmulas como la FDL para la transmisión de documentación
técnica. Véase sobre esto el apartado 5.
• Iniciativas legislativas, como la reciente sobre uso de software libre en la
Administración pública del Perú, 9 de abril 2002.

Todos estos son asuntos del mayor interés, en el apéndice C se encontrarán algunas
referencias. También se trata de cuestiones complejas, pero alejadas en cierto modo
de nuestro tema, mucho más restringido: las licencias de software según el Derecho
español, y especialmente las de software libre.

Comenzaremos con unas cuantas frases fuertes y un esquema lo más breve posible,
para comodidad del lector, de lo que ya se ha ido apuntando con otro enfoque en el
apartado 1, es decir: Qué exige la LPI española a las licencias de software libre para
considerarlas viables o atendibles por los jueces (éstos como último recurso, claro
está).

Premisas del software libre


El sistema jurídico español, como todos los europeos y anglosajones de corte

Página 104 de 212 Introducción a Linux


Introducción a Linux

"constitucional" , se basa en la libertad, en el sentido de que uno puede hacer lo que


guste mientras no esté prohibido. Esta es una afirmación muy general, pero nos sirve
para enfocar la cuestión tal y como interesa, o sea: desde el punto de vista de las
libertades del usuario, y no el de los derechos de autor. Este último, así lo esperamos,
ha quedado expuesto ya en el apartado 1. Para más detalles, véase la "Introducción a
la propiedad intelectual" publicada en La Espiral.

En nuestros modernos sistemas legales se entiende que la libertad tiene límites, no se


garantiza la libertad absoluta. Un género esencial de esos límites a la libertad son los
derechos y libertades de los demás. Así que nuestra primera afirmación queda "uno
puede hacer lo que guste mientras no dañe los derechos y libertades de los demás" .
Por supuesto, los derechos y libertades de los demás tampoco son absolutos.

Las libertades del usuario de software


Algunos derechos y libertades se consideran fundamentales, se les garantiza una
protección reforzada sobre los demás derechos y libertades ordinarias. De entre ellos,
las licencias de software se encuentran con los siguientes, que vamos a clasificar en
tres grupos:

1) En el primer grupo tenemos los fundamentos de nuestra sistema político. No se trata


de un auténtico reconocimiento de libertades y derechos fundamentales, sino de su
basamento:

• La libertad es el fundamento de todo lo demás. Se ha dicho muchas veces, y


no se trata sólo de una dificultad idiomática del inglés, que el concepto
software libre trata de la libertad, no del precio. El concepto de libertad es
calificado por nuestra Constitución, nada menos que en el primer párrafo de
su primer artículo, como uno de los valores superiores del ordenamiento
jurídico español, junto con la justicia, la igualdad y el pluralismo político.
• Es cometido de los poderes públicos promover las condiciones para que la
libertad y la igualdad de los individuos y grupos sean reales y efectivas;
remover los obstáculos que impiden o dificultan su plenitud; y facilitar la
participación de todos en la vida cultural (art. 9.2 CE).
• El libre desarrollo de la personalidad es uno de los fundamentos de nuestro
orden político (art. 10.1 CE).

2) El segundo grupo es el más importante a efectos prácticos. Se trata de las libertades


y derechos fundamentales que directa y necesariamente los jueces han de proteger.
Los más importantes son los tres últimos de los que se citan a continuación,
directamente esgrimibles ante argumentos del tipo "el software libre atenta contra la
libre expresión, embota la creatividad y vulnera el copyright" , etc. No es así, sino
justamente al contrario. En términos jurídicos, el usuario de cualquier software debería
poder argüir conforme a los siguientes ítems, que incluso tienen protección de amparo

Plataforma de Teleformación de IFES Página 105 de 212


Introducción a Linux

garantizada hasta el recurso ante el Tribunal Constitucional, y aplicables según las


circunstancias. Son los siguientes:

• Derecho a la igualdad y no discriminación por condición social (art. 14 CE).


• El uso de la informática será limitado por la ley para garantizar el pleno
ejercicio de los derechos de los ciudadanos (art. 18.4 CE). Este artículo se
incluyó en la Constitución con una finalidad relativamente clara: evitar que
mediante la informática se alcanzara un control excesivo sobre las personas,
y con la misma finalidad se promulgó la Ley de protección de datos
personales de 1998. Pero cabe una segunda interpretación interesada, y un
poco traida por los pelos, pero no irrazonable: Las limitaciones al uso del
software, especialmente algunas cláusulas abusivas (véase el apartado 6),
dificultan de tal modo el pleno ejercicio de los derechos de los consumidores
y ciudadanos en general que deben quedar restringidas por la ley [Me
complace hacer constar aquí que estando ya estas líneas escritas,
encuentro este mismo argumento como motor del proyecto (proposición) de
ley sobre uso del software libre en la Administración pública remitido al
Congreso peruano en abril de 2002 por los congresistas VILLANUEVA
NÚÑEZ y RODRICH ACKERMAN, así como en la admirable carta que el
primero dirigió al gerente de Microsoft del Perú. Los textos se pueden
encontrar en http://www.gnu.org.pe/rescon.html]
• Derecho a la libre expresión de pensamientos e ideas (art. 20.1.a CE).
• Derecho a la producción y creación literaria, artística, científica y técnica (art.
20.1.b CE).
• Derecho a la educación y a la libertad de enseñanza. Aunque la libertad
académica, y una de sus componentes, la libertad de estudio, no figuran
expresamente en el art. 27 CE, puede entenderse que se encuentran
implícitamente reconocidas por la Constitución, pues son necesarias y
congruentes con el modelo docente general que pretende garantizar.

3) Finalmente tenemos los principios rectores de la política social y económica. No son


derechos y libertades fundamentales propiamente dichos, sino directrices que,
aplicadas a éstos, han de inspirar su efectividad y garantía. Se trata concretamente del
mandato que la Constitución contiene en el art. 44, dirigido a los poderes públicos, de
promover y tutelar el acceso a la cultura, a la que todos tenemos derecho, así como a
la ciencia y la investigación científica y técnica en beneficio del interés general.

El derecho de autor no es un derecho fundamental


Por contra, y desde el punto de vista del autor del programa, no puede decirse que
haya derechos fundamentales implicados. No es pensable una lesión a los derechos de
propiedad intelectual que afecte también a un derecho fundamental de los que
acabamos de citar, ni a ningún otro, con una sola excepción, por lo demás bastante
rara en la práctica: el atentado contra el honor, la reputación, la imagen del autor,

Página 106 de 212 Introducción a Linux


Introducción a Linux

derivado de una infracción de los derechos de propiedad intelectual (véase el art. 18.1
CE). Este es un caso poco usual y no vamos a tratarlo, salvo algunos apuntes en 4.5.2.

En realidad, sí tiene que ver la propiedad intelectual con un derecho fundamental, pero
de los que la Constitución considera de segunda categoría, el derecho de propiedad
(art. 33 CE). No puede negarse que tanto el fenómeno del software libre, como más
acentuadamente el copyleft, parecen superficialmente ir directos contra el derecho de
propiedad (intelectual). Nada más falso. El software libre se basa en el derecho de
autor para, sobre él, modular sus facultades intrínsecas a las necesidades prácticas de
las libertades que hemos citado antes, sin machacarlo en modo alguno. Simplemente el
software libre tiene copyright.

Asímismo, una licencia copyleft, que impide la redistribución de software con


restricciones añadidas a las de la distribución originaria, no atenta contra el derecho de
autor del programa originario, pero esto no es obvio y en lo que sigue tratará de
demostrarse. Tampoco atenta contra los derechos del autor del programa derivado,
que modificó el software porque la licencia copyleft se lo permitía, si no no hubiera
podido hacerlo; y se ve obligado a redistribuirlo con licencia copyleft por el mismo
motivo, es decir: por haber aceptado previamente una licencia copyleft, una decisión
voluntaria y libre.

Naturalmente que cuando uno acepta una licencia (copyleft o no) ve limitadas algunas
de sus libertades y derechos, se dice que asume obligaciones, deberes y sujeciones, lo
mismo que cuando se casa o cuando firma un préstamo hipotecario. Simplemente
acepta de forma libre los términos que se le ofrecen. En este sentido puede decirse que
la GNU-GPL es un tratado de desarme (WAYNER), porque da total libertad a todos,
salvo a quien quiere apropiarse -para sí y con exclusión de los demás- de la libertad
que recibió, la que le permitió y permite explotar el programa.

El derecho de propiedad, decimos en España, queda delimitado por su función social


de acuerdo con la ley (art. 33 CE). No puede haber otra finalidad del Derecho de
propiedad intelectual que garantizar al autor la percepción de los beneficios de su
explotación, lo que es perfectamente acorde con los postulados del software libre. Pero
tampoco hay función social de la propiedad del software que no sea su libre uso y
explotación por quien sepa hacerlo.

No debe olvidarse que el autor tiene derecho al honor y a la propia imagen, ya se ha


dicho; pero también él mismo está manifestando, al escribir código, su libertad de
expresión de pensamientos e ideas y su derecho a la producción científica y técnica.

En resumen, las licencias de software son expresión de un derecho individual ordinario:


el derecho de autor. Aunque la autoría de una obra tiene mucho que ver con algunos
derechos fundamentales, es muy dudoso que, fuera de los aspectos relacionados con
la reputación del autor, los demás sean considerados por un juez como expresión de

Plataforma de Teleformación de IFES Página 107 de 212


Introducción a Linux

sus derechos fundamentales. Por contra, los usuarios sí pueden esgrimir sus derechos
y libertades fundamentales frente a ciertos atentados contra el software libre (véase el
apartado 4.7).

Las normas imperativas de la LPI


Los límites de las libertades de la gente sobre los programas de ordenador, y los
derechos sobre ellos de sus autores o titulares, se encuentran principalmente en la LPI,
aunque no solamente. Debe tenerse en cuenta también toda la legislación existente
sobre protección de los consumidores y usuarios, competencia desleal, condiciones
generales de la contratación y tantos otros asuntos. No se hará aquí así, nos
limitaremos al campo de los derechos de autor, o de propiedad intelectual. Más
adelante añadiremos de todos modos algunas notas sobre estas cuestiones.

La LPI está pensada sobre todo para proteger a los autores, es decir, sus derechos
ordinarios sobre la obra; no para proteger las libertades de los demás (usuarios, otros
programadores), aunque no falten artículos que garantizan algunas, muy escasas e
indefensas, como vamos a ver.

Efectivamente, ya se habrá advertido que hay reglas claramente limitativas a los


usuarios o destinatarios de los programas o a quienes los explotan; y otras por contra
limitan a los autores. Esto es lo que puede esperarse de un sistema jurídico que no
admite libertades o derechos absolutos. Pero lo importante ahora está un paso más
allá: Hay reglas de la LPI que son solamente indicativas, pueden no seguirse sin
cometer ninguna ilegalidad (se llaman reglas "dispositivas" ); y también hay reglas que
necesariamente han de seguirse, a riesgo de que después el sistema no te proteja si
las infringes, se llaman reglas "imperativas" .

Uno no puede saltarse las reglas imperativas de la LPI impunemente. ¿Cómo se


sancionan sus infracciones? Depende del grado de la infracción, pero para resumir
diremos que va desde tener la falta por inexistente -como una cláusula inválida de una
licencia, simplemente no se aplica- hasta la prisión -desde luego, sólo en casos muy
graves y poco frecuentes. Ahora lo que interesa es recalcar que si una licencia de
software contiene cláusulas contrarias a las normas imperativas de la LPI, tales
claúsulas no valen, incluso si el perjudicado hubiera dado su acuerdo para aceptar la
licencia (p. ej., porque desconocía que tales claúsulas eran ilegales).

Beneficios irrenunciables de los autores de software


Aunque una licencia de software libre no implica renuncia alguna, al menos en sentido
técnico, conviene aclarar algunas cuestiones que al parecer sus críticos mantienen en
reserva. Para empezar, en España es en general posible la exclusión voluntaria de la
ley aplicable, lo mismo que la renuncia de derechos reconocidos en la ley, a condición

Página 108 de 212 Introducción a Linux


Introducción a Linux

de que no se contraríe el interés o el orden público ni se perjudique a terceros (art. 6.2


CC). Lo que no se permite es obligar a nadie a renunciar a sus derechos
irrenunciables, y justamente para prevenir esta posibilidad se establecen las reglas que
se citan a continuación, pensadas para proteger al autor de contratos leoninos con
empresarios sin escrúpulos, no para proteger a distribuidores de software dominantes
frente al desorganizado público de usuarios, en su mayoría desconocedores de las
posibilidades inauditas de sus máquinas.

Por lo tanto, interesa saber cuáles son esas normas imperativas. Relacionarlas todas
no es fácil ni por suerte tampoco muy útil. Basta conocer las más importantes. Hay de
todo: beneficios renunciables sólo por acuerdo de las partes, ventajas irrenunciables...
Nos quedaremos únicamente con las reglas imperativas relevantes sobre los
programas de ordenador:

1) Los derechos morales son irrenunciables y no transmisibles (artículo 14 LPI).


Veremos más adelante que las licencias de software libre no afectan a esta limitación,
véase el apartado 4.2.

2) La cesión de derechos de autor no puede alcanzar nunca a las modalidades de


utilización o medios de explotación o difusión inexistentes o desconocidos al tiempo de
la cesión (artículo 43.5 LPI). En general, para la cesión de derechos y el efecto de esta
regla sobre el software libre véase el apartado 4.2.

3) También son irrenunciables los beneficios que la LPI otorga a los autores en los
actos de transmisión de sus derechos, o contratos de cesión de derechos de autor. Así
lo dice el artículo 55 de la Ley. Esto tiene mucha más importancia, y de hecho algunos
de los siguientes ítems nos dará algún trabajo después. Pero en general las licencias
de software libre no se ven afectadas por estas reglas sobre "derechos irrenunciables" ,
aunque parezca paradójico. Piénsese que al fin y al cabo la GPL (p. ej.) no supone
renuncia alguna para el autor, sino la cesión voluntaria de sus derechos transmisibles.
Todo esto se tratará después, ahora nos limitaremos a enumerar, sólo
aproximativamente, los beneficios irrenunciables de los autores al ceder sus derechos:

• Es nula la cesión de derechos de explotación respecto del conjunto de obras


que pueda el autor crear en el futuro (art. 43.3).
• Es obligatorio documentar las cesiones (art. 45).
• Durante 10 años desde la cesión de la explotación, el autor puede exigir la
revisión de la cantidad con que se le ha remunerado si considera (y logra
probar) que es inequitativa o desproporcionada al beneficio obtenido por el
cesionario o explotador del programa (art. 47).
• Supongamos que Juan cede sus derechos a Pedro mediante la licencia L-1,
y Pedro los cede a su vez a otro mediante L-2. Si L-2 no respeta los términos
de L-1, esta primera licencia puede quedar sin efecto y dejar de amparar a
Pedro, a requerimiento de Juan (art. 68.1.d LPI).
• Las cesiones no exclusivas son intransmisibles (art 50.1).

Plataforma de Teleformación de IFES Página 109 de 212


Introducción a Linux

• En general, las obligaciones de los editores suponen en muchos casos -en el


polo opuesto- derechos irrenunciables del autor del programa.

Garantías a favor de los usuarios


Por otro lado están las normas imperativas de la LPI que establecen garantías a favor
de los usuarios, insoslayables para el autor. A diferencia de antes, algunas garantías
no desaparecen ni siquiera mediante pacto en contra, pero otras sí (se encuentran en
el art. 100 LPI). Las primeras son éstas:

• El usuario legítimo -véase más adelante su definición- siempre ha de poder


hacer una copia de seguridad, si es necesaria (?) para la utilización del
programa.
• El usuario legítimo siempre puede observar, estudiar y verificar el
funcionamiento del programa para determinar las ideas y principios implícitos
[algoritmo] en cualquier elemento, mientras lo haga durante cualquiera de las
operaciones de carga, visualización, ejecución, transmisión o
almacenamiento del programa que tiene derecho a hacer.

Las siguientes son facultades del usuario legítimo, pero son renunciables mediante
pacto contrario entre el usuario y el autor:

• Puede reproducir o transformar un programa, incluída la corrección de


errores, si es necesario para su utilización legítima y conforme con la
finalidad. Pero cabe pacto en contra, que es lo normal, pues mal pueden
corregirse los errores sin tener a mano el código fuente.
• El autor no puede oponerse a que el titular de derechos de explotación
realice o autorice versiones sucesivas y programas derivados. El lector ha
leído bien: la LPI garantiza al titular de derechos de explotación
(aparentemente no al mero usuario) de un programa del que no sea autor la
posibilidad de modificarlo o de que otros lo hagan con su autorización. Este
apartado supone un aparente obstáculo a algunos requerimientos del
software libre, lo despejaremos después. Aunque no parece que un usuario
realice con el mero uso una explotación del programa, la LPI no parece
excluirlo, tal vez a causa de una redacción defectuosa del precepto o por
falta de sistemática. Nuestra conclusión provisional podría ser: La LPI
garantiza a cualquier usuario o explotador legítimos hacer este tipo de
transformaciones en el código. Pero desde luego, necesitará para ello el
código fuente. Y la interpretación estándar no es ésa, sino la siguiente: Esta
regla se refiere sólo a los programas realizados por encargo, o sólo a los
titulares no autores de derechos de explotación distintos del mero uso.
• Tampoco puede el autor de un programa oponerse a su reproducción y
transformación si se dan todas las condiciones siguientes:
1. Que sea indispensable para obtener la información necesaria para la
interoperabilidad con otros programas de un programa creado de

Página 110 de 212 Introducción a Linux


Introducción a Linux

forma independiente;
2. Que la reproducción o transformación la haga el usuario legítimo o
persona facultada para utilizar una copia del programa, o persona
autorizada en su nombre;
3. Que la información necesaria para conseguir la interoperabilidad no
haya sido puesta a disposición, fácil y rápidamente, de las personas
citadas antes;
4. Que la reproducción o transformación se limiten a las partes del
programa original necesarias para la interoperabilidad;
5. Que el resultado se utilice sólo para la interoperabilidad del programa
creado de forma independiente; sólo se comunique a terceros si es
necesario para la interoperabilidad; y no se utilice para el desarrollo,
producción y comercialización de un programa sustancialmente
distinto en su expresión o para cualquier otro acto que infrinja los
derechos de autor.

Estas reglas sobre la interoperabilidad (excepción o límite a la prohibición de reproducir


y transformar un programa sin autorización del autor) no pueden interpretarse de modo
que se perjudique injustificadamente los legítimos intereses del titular de los derechos
de autor, o se contraríe la explotación normal del programa. Está claro además que
esta garantía para el usuario, muy limitada y borrosa, no es efectiva si no se
proporciona el código fuente, al menos de las partes del programa necesarias para la
interoperabilidad.

Una interpretación restrictiva acerca de los derechos sobre los interfaces es la


siguiente: La especificación del interfaz está protegida, pero no lo están los protocolos
en que se base y que sean necesarios para escribir código que cumpla las
especificaciones. Tales protocolos no pueden ser obra protegida.

Hasta aquí llega la protección que garantiza la LPI a los usuarios de programas de
ordenador. No olvidemos que esta ley, como todas las de su clase en los demás
países, y lo mismo en los tratados internacionales, está pensada para proteger los
derechos del autor. De un autor preconcebido, idealizado en el literato, en el pintor,
indefensos frente a los editores, los galeristas. Un autor de aspecto distinto al del titular
de derechos de explotación de un programa de ordenador, p. ej. un gran fabricante de
software cerrado. Sea como sea, la LPI reconoce y protege sobre todo los derechos del
autor de un programa, no los del usuario del programa.

Ahora estamos listos para acometer nuestra tercera tarea: Seguir aclarando la
terminología, dar algunas definiciones más, desentrañar el contenido estándar de una
licencia de software y, digamos en general, perder un poco el respeto a las más
abtrusas discusiones jurídicas e incluso poder participar en ellas. Para esto, disponer
de un lenguaje preciso es esencial.

Plataforma de Teleformación de IFES Página 111 de 212


Introducción a Linux

Cuestiones generales y terminológicas sobre las


licencias de software
Inevitablemente y antes de nada, hemos de ponernos de acuerdo sobre las
definiciones, sobre el significado de los conceptos que vamos a emplear, que
confrontaremos con los de la ley española para obtener conclusiones congruentes.
Añadiremos más definiciones, que no necesitaremos hasta entonces, en el apartado
4.1.

Qué es una licencia de software


Es un tipo de contrato de software, de software ya creado. Recae sobre los derechos
de propiedad intelectual. En este artículo no se tratan los contratos de software por
crear, como el contrato de desarrollo de programas por encargo, servicios de
adaptación de software; ni contratos como "escrow" , etc. Pero ojo: sí trata de los
derechos de propiedad intelectual originados por motivo de esos contratos, o de
cualquier otro por el que se genere software original.

Externamente una licencia puede adoptar muchas formas, desde un documento en


papel hasta un archivo electrónico de texto, parte de un ejecutable, etc. Puede ser un
acto jurídico independiente o puede integrarse documentalmente en el seno de otro
contrato, aunque la LPI exige documentos independientes. La licencia puede recaer
sobre software también muy variado, aunque la LPI hable sólo de programas. En
esencia es una oferta de acuerdo realizada por el autor o titular del programa, que si es
aceptada por un usuario o explotador del software, pasa a convertirse en contrato entre
las partes. Aquí hay varios conceptos involucrados, necesitamos desmenuzarlos.

Qué es una licencia


En realidad lo que llamamos licencia pasa por varios estadios: Primero es una
declaración unilateral del autor del programa en la que expresa las condiciones en que
se puede acceder a él y explotarlo. Como tal declaración prácticamente no tiene ningún
valor legal, sólo lo adquiere (se dice que pasa a ser ley entre las partes) cuando otra
persona acepta sus términos. Como es lógico, cuando la licencia se rechaza, o no se
acepta, simplemente no llega a tener efecto.

Es preciso recalcarlo: Aunque la licencia es unilateral, pues la origina el autor


voluntariamente y en los términos que le interesen, está pensada para ser aceptada o
rechazada por otros, normalmente quienes van a usar el programa o van a explotarlo
de algún modo. Si la contraparte rechaza la licencia no hay más que hablar:
probablemente el autor del programa no cederá su software, p. ej. no permitiendo su

Página 112 de 212 Introducción a Linux


Introducción a Linux

instalación. Pero si la licencia es aceptada, entonces deja de ser una declaración


unilateral y se convierte en un negocio bilateral, entre licenciante (el autor o el titular de
los derechos de autor) y licenciatario (quien va a usar o explotar el software).

A este negocio puede llamársele "licencia" o "licencia contractual" o también "acuerdo


de licencia" . Su denominación técnica precisa es, para la mayoría de los casos, la de
"contrato de cesión de derechos de uso y/o explotación del programa de ordenador" .

Es normal que el documento de licencia contenga otras cuestiones, como garantía,


servicios de soporte y postventa, que no tienen nada que ver con la propiedad
intelectual ni con el software libre, y no los tratamos en este artículo. Tal vez haya
ocasión en versiones sucesivas de tratar alguno de estos asuntos.

Qué es "software"
La LPI no habla nunca de software desde luego, sino de "programas de ordenador" ,
que define (art. 96) como secuencia de instrucciones o indicaciones destinadas a ser
utilizadas, directa o indirectamente, en un sistema informático para realizar una función
o una tarea o para obtener un resultado determinado, cualquiera que sea su forma de
expresión o fijación.

No es una bella definición, ni tampoco un modelo de precisión. Dice la LPI que gozan
de la misma protección que los programas tanto la documentación preparatoria como la
documentación técnica y los manuales de uso. Ya sabemos además que se protegen
las versiones sucesivas y los programas derivados, pero no los creados con el fin de
ocasionar efectos nocivos a un sistema informático. Tampoco están protegidas las
ideas y principios en que se base cualquier elemento de un programa, incluidos los que
sirven de fundamento a los interfaces. Esta exclusión parece referirse a los algoritmos y
otros elementos, que no necesitamos determinar completamente para saber a qué nos
referimos con el término legal genérico "programa de ordenador" . En la práctica, el
problema de la definición se plantea ante casos como los sitemas expertos, los
interfaces, etc.

Los programas no pueden patentarse, pero sí formar parte de un objeto patentado.


Entonces, la protección de la Ley de Patentes también se activa a favor del programa,
aunque sea indirectamente. [Nota sobre patentes: Recuérdese lo dicho en el apartado
1, en Derecho español son patentables las invenciones nuevas de aplicación industrial,
pero los programas de ordenador no se consideran invenciones, y por lo tanto son no
patentables]. Asímismo un programa puede incorporar una marca comercial, sea su
mismo título u otra marca. La marca comercial del programa no es objeto de protección
por la LPI pero sí por la Ley de Marcas, lo mismo que antes.

Por supuesto podemos considerar incluidos en la definición legal de programa todo


aquello que técnicamente lo es: ejecutables de cualquier tipo, módulos, controladores,

Plataforma de Teleformación de IFES Página 113 de 212


Introducción a Linux

aplicaciones de usuario y sistemas operativos, suites, paquetes y distribuciones, con


toda la documentación. La GPL concretamente se aplica a programas y a "cualquier
otro tipo de trabajo" . No olvidemos que la LPI exige que la secuencia de instrucciones
sea original, obra del intelecto, y se destine a un sistema informático. La Directiva
1991/250, traspuesta a la ley española en 1993, incluye los programas "incorporados al
hardware" . En España, por otra parte, la topografía de semiconductores está protegida
en una ley propia de 1988; véase el art. 104 LPI.

Son programas protegidos tanto los originales como los derivados, las versiones
sucesivas y las originadas en bifurcaciones. Tenemos obras independientes, como un
kernel; y obras compuestas, como paquetes y distribuciones. Tenemos obras originales
como el primer núcleo Linux, y obras derivadas como un kernel 2.2.x.

Sin embargo, puede que no encontremos software en dominio público por expiración
del plazo de duración de los derechos, pues no han transcurrido años suficientes desde
la aparición de los primeros programas a mediados del siglo XX. Es cierto que,
además, este software sólo tiene utilidad histórica.

¿Puede un autor poner su software en dominio público voluntariamente? No en


Derecho español, para el cual una obra está en dominio público sólo cuando se
extinguen todos los derechos de explotación por transcurso del plazo de duración. No
es exactamente lo mismo que carecer de copyright, como lo definen la FSF y la OSI en
su digamos "plataforma jurídica anglosajona" . Volveremos sobre todo esto más
adelante en 4.1.

Quién es el autor del software


Aquí no vamos a extendernos, porque esto ha debido quedar claro desde el apartado
1. Recordemos los conceptos de autor asalariado, y de obra colectiva frente a obra en
colaboración. Un programa como Windows XP es obra colectiva, creada por
asalariados de Microsoft, que asume la autoría del programa y sin que ninguno de los
desarrolladores puedan reclamar la explotación separada sobre su parte. La
distribución Debian GNU/Linux es una obra en colaboración en cuanto a los
componentes individuales, pero la distribución en sí es una obra colectiva, compuesta,
cuyo titular es una asociación de desarrolladores voluntarios que se sirve de la
organización Software In The Public Interest, Inc. para dotarse de personalidad jurídica,
titular de los derechos de autor de la distribución en sus diferentes versiones [Esta
explicación es conforme con el Derecho español, y en realidad vale para todo el
mundo. Se incluye aquí a título de ejemplo, esperemos que apropiado].

Una observación común en la literatura jurídica acerca de lo ventajosa que resulta la


protección del programa no libre para una empresa de software por las reglas del
derecho de autor, se basa en que normalmente los autores de los programas son
anónimos y quien se beneficia de los derechos de autor (la empresa) no es autor. Pero

Página 114 de 212 Introducción a Linux


Introducción a Linux

lo cierto es que, primero, la observación también rige para los autores de obras
literarias salvo excepciones; segundo, la observación no se aplica al software libre,
cuyos autores no son casi nunca anónimos; y, tercero, la mayor parte de los derechos
de explotación -y por tanto su protección legal- queda cedida a la comunidad de
usuarios y por tanto las vías para obtener beneficio no derivan ya de la exclusividad.

Quién es "usuario legítimo" del software


Este es un concepto mucho más importante, aunque la LPI no lo define. Podemos
suponer, en un examen superficial de las premisas del apartado 2.1, o simplemente
deduciéndolo de nuestra experiencia cotidiana, que usuario legítimo es quien ha
comprado el software, y en efecto así es cuando la compra del soporte incorpora
-mediante la licencia- la autorización para usarlo.

Pero hablando estrictamente, no existe la "compraventa de software" . Lo que uno


compra en la tienda (tal vez un CDROM con un juego o una distribución GNU) no es el
programa, sino sólo su soporte más una oferta de licencia para uso y explotación
-licencia que después habrá de aceptar. Y esto es todo (y nada menos, dirán el
vendedor, el distribuidor, el titular de derechos de explotación y/o el autor del
programa). Esta explicación suele encontrarse en las licencias de software propietario,
que en este artículo y por las razones que se explicarán después, preferimos
denominar "software cerrado" . No es una explicación realmente necesaria, pues todo
software nace con copyright.

Pero también puede adquirirse software por ftp anónimo gratuitamente con licencia
copyleft, y por supuesto quien lo obtiene así puede usarlo muy legítimamente;
simplemente la LPI no estaba pensando en esta circunstancia. Cuando se aprobó la
LPI en 1987, incluso cuando se aprobó en Bruselas en 1991 la directiva que obligó a
hacer algunas modificaciones en la ley española en 1993, el software libre no era un
movimiento lo suficientemente relevante en Europa y menos en España.

Lo relevante para nosotros ahora es otra cosa: No hay otro tipo de obras para las que
la LPI distinga entre usuarios legítimos e ilegítimos, sólo hace la distinción para los
programas de ordenador y para las bases de datos. No se habla nunca de usuario
ilegítimo de un libro, o espectador ilegítimo de un cuadro. Esto parece absurdo, y
puede que lo sea en cierto sentido que vamos a explicar. Ante todo, no estamos
hablando de quien roba un CD que contiene un programa, o roba un libro, o entra en un
museo sin pagar. Estamos hablando de quien usa un programa que instaló desde un
CD prestado por un amigo, de quien ha leído un libro prestado por un amigo, de quien
contempla en casa un cuadro prestado por un amigo. Es evidente que en los dos
últimos casos no hablamos de "lector ilegítimo" ni de "espectador ilegítimo" , pero para
la LPI el primer fulano, el del programa de ordenador prestado, ése es un usuario
ilegítimo. Esta es una extraña asimetría. Nos dará que hablar después.

Plataforma de Teleformación de IFES Página 115 de 212


Introducción a Linux

Quién es el responsable ante el usuario


El autor tiene siempre algunas obligaciones frente a quienes explotan su obra. Ante
todo responde de la autoría y de la originalidad de la obra. Responde también de su
propia capacidad jurídica para licenciar el programa. El supuesto que más problemas
puede dar es el de un redistribuidor de software que él cree libre y que en realidad no lo
es, por error, a sabiendas o mediante engaño (y esto tendrá que probarlo).

Ocurre que las exigencias jurídicas del software libre (sl) pueden confundir: Redistribuir
software libre del que no se es autor no traslada automáticamenten al redistribuidor las
responsabilidades del autor. Para empezar, la habitual cláusula de ausencia de
garantía deja claras ya algunas cosas. En general, si el licenciante del programa
original (normalmente el autor pero no necesariamente, p. ej. en el caso de los
asalariados) y el licenciatario (quien tal vez lo va a modificar y redistribuir) acuerdan
válidamente los términos de la licencia, está claro que de la autoría de los programas
responde cada cual: del original el autor o licenciante; y del derivado el licenciatario,
pero por motivo de una segunda licencia, en la que es él ahora el licenciante de un
tercero licenciatario, y así sucesivamente. Más en general no es posible, ni
seguramente útil, tratar los diferentes supuestos de responsabilidad (patrimonial o no,
ya sea civil, penal o administrativa). Es un asunto demasiado amplio, árido y complejo.
Y a efectos prácticos no muy útil. Tal vez sea éste, como otros del presente artículo,
objeto apropiado para una apartado FAQ en versiones sucesivas. De todos modos, uno
debería ser capaz de deducir la respuesta a su duda a partir de cuanto contienen la
presente "Introducción" (ésa es su finalidad).

Contenido deseable de una licencia de software


Lo que sigue pretende indicar al lector, que probablemente no será ducho en
cuestiones jurídicas, en qué debería fijarse al leer una licencia para entenderla
correctamente y sin mucho trabajo. El método no va a ser la presentación de un
prototipo de licencia abstracta, sino el examen de la mejor licencia concreta que hemos
podido encontrar, ya sirva a un programador tal cual, o como modelo para obtener otra
a su gusto, o tal vez de anticristo para estigmatizarla a placer. Se trata de la GPL.

La GNU-GPL es una pieza jurídica de gran valor. Entre otras utilidades, contiene la
estructura completa del sistema de cesión de derechos de autor sin atentados al
copyright y respetuosa con los derechos y libertades de los usuarios. Es superior
técnicamente a los mejores ejemplos de licencias de software no libre, es más
completa que las licencias breves tipo BSD, y mucho más clara y fácil de leer que
cualquier otra de software no libre que conozcamos.

Para empezar, la GNU-GPL carece de traducciones oficiales. Pero esto no es ningún

Página 116 de 212 Introducción a Linux


Introducción a Linux

problema práctico, primero porque hay traducciones oficiosas; segundo, porque el


inglés original es fácilmente traducible a términos jurídicos de cualquier país; tercero,
porque el texto evita deliberadamente los tecnicismos y expresiones o rodeos oscuros.
Sin ser coloquial, que casi lo es, pasa por ser un modelo de redacción jurídica.

Estas cualidades no se deben sólo a su punto de vista distinto al de la propiedad


intelectual. Por cierto, la GPL no se opone a la propiedad intelectual, pero su enfoque
no es desde luego el de la protección de los derechos de autor -para eso ya está la
LPI- sino el del respeto de la libertad de los usuarios. Para redactar una licencia que
acabaría por dar nombre a una forma de distribución ( "copyleft" ) la FSF debió sortear
más de un serio escollo, además de enfrentarse con críticas no siempre benévolas, con
el punto de mira desviado y finalmente incapaces de demoler el imponente edificio que
se estaba levantado bajo su protección. Por ahora no disponemos de un modelo mejor,
aunque todo es perfectible. Las directrices Open Source son muy prácticas, pero
técnicamente hablando no son un modelo de licencia, y en términos jurídicos significan
un paso atrás sobre el esquema de la FSF, como se tratará de demostrar después. No
son tampoco fáciles de entender. Pero su importancia e influencia son enormes y le
dedicaremos el apartado 4.5.2. Iremos dando indicaciones por orden, para desmenuzar
la licencia deseable, aunque no llegaremos a los detalles.

La forma más segura de licenciar el programa consiste en incluir un anuncio al principio


de cada fichero fuente, unas líneas de indicación de autoría y año de publicación (es
decir, lo que se llama "línea de copyright" ) y la indicación de uno o dos lugares
fácilmente accesibles donde encontrar el texto completo de la licencia.

Una licencia no necesita un preámbulo que exponga la justificación de las cláusulas o


cuerpo de la licencia, pero la GPL tiene uno, y muy útil porque sirve para solventar las
dudas que pueden aparecer al leer o al aplicar las cláusulas. La GPL no es neutral,
pretende ser interpretada en un sentido dado y no en otro distinto u opuesto. Su sentido
es el de la libertad, y está recogido justamente en el preámbulo, que forma parte de la
licencia misma, aunque esto la FSF no se ha ocupado de indicarlo así. De todos
modos, la licencia es toda ella autoexplicativa, e interpretarla debería de resultar fácil.
No puede decirse lo mismo de muchas otras licencias estándar que hemos podido
consultar.

En el cuerpo de una licencia de software debe encontrarse 3 grupos de cláusulas, sólo


en lo que se refiere a los derechos de autor; habrá más apartados si se tratan asuntos
sobre garantías, servicios de apoyo, pagos y demás, pero las materias ajenas a la
propiedad intelectual no son tratadas en estas notas. Los grupos de cláusulas son los
siguientes, y se incluye después de cada uno, como ejemplo, las cláusulas
correspondientes de la GPL. La discusión del grupo segundo, el cuerpo principal sobre
explotación del programa, la dejamos para el apartado 4.

1. Cláusulas generales

Plataforma de Teleformación de IFES Página 117 de 212


Introducción a Linux

1. Definiciones y ámbito de aplicación de la licencia. Advertencias de


copyright (GPL cláusula 0)
2. Formas de aceptación de la licencia (GPL cláusula 5)
2. Uso y explotación del programa
1. Copia, modificación y distribución libres (GPL cláusulas 1 a 3)
2. Copyleft, o persistencia de la libre distribución de programas
derivados (GPL cláusulas 4, 6 y 10)
3. Integridad del sistema copyleft en caso de impedimento forzoso a la
libre distribución (GPL Cláusula 7)
4. Posibilidad de límites geográficos a la libre distribución (GPL claúsula
8)
3. Intangibilidad de la licencia. Versiones sucesivas (GPL cláusula 9)

Las diferencias entre el orden lógico y el de presentación por la GPL se deben a


necesidades prácticas de exposición de la FSF. Comprobaremos que para analizar el
funcionamiento de una licencia de software libre es más apropiada la ordenación
lógica. A continuación tratamos las cláusulas generales, y como se ha dicho dejamos
las relativas a la explotación para el apartado 4.

Cláusulas generales
Definiciones, ámbito de aplicación de una licencia y avisos de copyright

Estas declaraciones de la licencia no tratan directamente de la explotación del


software, e incluso pueden ser teóricamente innecesarias, pero siempre ayudan a la
comprensión del cuerpo principal. En cuanto a las definiciones, podemos usar las
contenidas en las leyes o bien habremos de hacerlo nosotros mismos. Son esenciales
las de programa u objeto licenciado, programa derivado (el obtenido a partir del que
ahora licenciamos) y las formas de explotación. De todo ello se encuentra información
en los apartados anteriores. Es típico de las licencias, como de muchos otros contratos,
fijar los términos importantes que vayan a usarse más a menudo: "usted" puede ser el
licenciatario, "titular del copyright" o simplemente "titular" es el autor o el
derecho-habiente de las facultades de explotación que van a autorizarse, "versiones y/o
programas derivados" son el resultado de cualquier modificación del programa, incluida
la traducción, etc. Todo esto depende de las concretas necesidades en cada caso.

Una licencia debe delimitar claramente su ámbito geográfico de aplicación, su duración


(que puede ser indefinida) y las formas de explotación que se van a tratar, las que se
retienen y las que se ceden. Aquí bastará limitarse a definirlas lo mejor posible y
siempre que parezca conveniente o necesario. Hacen referencia a cuestiones
generales tratadas en otras partes de este artículo, así que no las repetimos. Es clásico
advertir que la licencia no se aplica a la entrada o a la salida del programa, salvo que
se diga otra cosa, es decir: siempre que una y otra no sean a su vez obra protegida.

Página 118 de 212 Introducción a Linux


Introducción a Linux

Es casi esencial que el programa incluya de algún modo uno o más avisos de copyright
y de la licencia, como ya hemos reseñado antes.

La copia impresa debe prevalecer sobre la información que muestre la pantalla, porque
es más sencillo hacer modificaciones de última hora en aquélla.

Formas de aceptación de la licencia

Este asunto es clave, al menos formalmente, pero no debe dar problemas en su puesta
en práctica. No hay auténtica licencia hasta su aceptación por el destinatario, esto ya lo
sabemos. La forma de la aceptación es variada, las hay muy rebuscadas, incluso
puede encontrarse algunas definitivamente abusivas para el usuario (véase el apartado
6.1). Aquí nos referiremos sólo a las habituales. En esencia, se trata de que queden
claras las voluntades del licenciante y del licenciatario, por cualquier medio admitido.

Primero, es conveniente advertir al destinatario que no está obligado a aceptar la


licencia para el uso y la copia privada, pero sí para la modificación y distribución (o
redistribución) del programa. Los dos primeros actos son privados, normalmente; pero
los segundos involucran a terceras personas. A primera vista, de lo dicho se podría
deducir que este software no va a tener "usuario legítimo" en el sentido genuino de la
LPI, ni estará prohibida la copia privada, también en contra de la LPI. Pero no es así. El
uso y la copia privada son actos que normalmente sólo conocen los mismos usuario y
copista, p. ej. si se realizan en casa. Por tanto no tiene mucho sentido exigir la
aceptación de la licencia para estas dos formas de explotación. Esto es así sobre todo
para el software libre, en donde por definición prácticamente todo usuario es legítimo y
quedan autorizadas las formas principales de explotación. Obviamente, para el
software cerrado la situación es muy distinta, ya que su explotación está radicalmente
restringida desde el mismo uso. De hecho, desde antes del uso, pues para algunos
fabricantes el romper los precintos del paquete de CDs supone la aceptación de la
licencia (puede comprobarse en las licencias de conocidas casas comerciales).

Suele darse por válido que la realización de actos de explotación permitidos por la
licencia suponen su aceptación. Por supuesto, pulsar "aceptar" en el ejecutable
interactivo tiene exactamente -jurídicamente- ese valor, aunque debería darse la
oportunidad al usuario de poder usar el programa durante un tiempo para
comprobaciones y ajustes, antes de la aceptación. En fin, que no hace falta una
declaración pesonal por escrito, firmada y fechada, para aceptar una licencia. Sí tal vez
para rechazarla, si uno cree que ha realizado, por error o defecto del programa, algo
que puede significar la aceptación de lo inaceptable. El software libre, de todos modos,
no se enfrenta con estos problemas casi nunca.

Intangibilidad de la licencia
El contenido de una licencia, sobre todo de una licencia de software libre, no es libre.

Plataforma de Teleformación de IFES Página 119 de 212


Introducción a Linux

Dicho de otro modo, el efecto de una licencia de sl no es reflexivo, no se aplica a sí


misma. Una licencia no puede permitir su propia modificación entretanto esté en vigor,
salvo por acuerdo expreso de ambas partes. En Derecho español se dice, más en
general, que los términos de un contrato no pueden quedar al arbitrio de uno solo de
los contratantes. Por todo esto se exige que la licencia sea intangible, intocable
mientras esté en vigor.

Tenemos que distinguir las novaciones, o cambios que puede sufrir una licencia por
acuerdo entre las partes o por sentencia judicial, p. ej. si un tribunal anula una claúsula
abusiva; de las revisiones de una licencia-modelo o general, como p. ej. la GNU-GPL.
El supuesto interesante es el segundo. Una licencia-tipo, como la GPL o la FDL, que al
fin y al cabo son obras literarias, están protegidas por las leyes de derechos de autor,
aquí aplicados estrictamente con la finalidad de mantener el texto sin cambios. Estas
licencias están sujetas al copyright, en este caso de la FSF, con domicilio en
Boston-MA. Esto significa que quien use la GPL para licenciar su programa y mantenga
el nombre de la licencia en el ejemplar que utilice para su programa, debe mantenerla
íntegra y sin modificaciones. En otro caso, y si prefiere el autor realizar algún cambio,
no será ya "licencia GPL" y no podrá utilizar tal denominación. A esto se refiere la GPL
en la advertencia © que va antes del preámbulo.

La intangibilidad de las licencias-tipo se debe a su papel de destinataria de tantas


remisiones que circulan por ahí. La seguridad del tráfico exige que los términos literales
no cambien. Aún así, una licencia modelo puede pasar revisiones, y por tanto podemos
encontrarnos con versiones distintas, pero no deberían serlo mucho sino sólo en
mejoras, aclaraciones y tratamiento de casos nuevos. Todas las versiones deben
ajustarse al espítitu de la licencia original, en otro caso habrá de redactarse una
licencia distinta y con otro nombre o identificador. La FSF admite además que si
alguien licencia su programa con la versión x puede hacerlo al mismo tiempo con
referencia a cualquier versión posterior. Esto se contrapesa estableciendo que cuando
no se especifique el número de versión de la licencia, el destinatario elegirá la que más
le convenga, algo perfectamente válido y respetuoso con el usuario.

¿Puede revocarse una licencia?

Una licencia es revocable por el autor en muchas circunstancias y en ejercicio de varias


facultades. Una de ellas, el caso del llamado derecho de arrepentimiento, por cambio
de convicciones del autor, forma parte del derecho moral. Por supuesto tiene un límite:
indemnizar los perjuicios que pueda producir a terceros. Y lo mismo ocurre con
cualquier revocación unilateral (no pactada) de la licencia. Si hay acuerdos sobre este
asunto, habrá que estar a lo acordado. En el sl la situación no tiene mayor relevancia,
salvo en un caso: la revocación de la licencia copyleft ¿Es ello posible? Y de serlo,
¿qué consecuencias tiene para el autor? ¿Y para los licenciatarios antiguos y nuevos?
En el software de uso masivo, sea libre o no, las dificultades en la aplicación práctica
de las reglas sobre revocación de licencias son tan grandes que se usa otra fórmula:

Página 120 de 212 Introducción a Linux


Introducción a Linux

nueva licencia para una nueva versión del programa; o bien la doble licencia. Los
problemas resueltos de esta forma resultan más manejables, pero no dejan de ser
serios. Su tratamiento aquí excede del ámbito de las presentes notas, aunque se
espera poder tratarlo mínimamente en versiones sucesivas.

Tipos de licencias de software


Aunque la GNU-GPL, BSD, XFree86, Mozilla, y otras muchas son las licencias más
conocidas, lo cierto es que no podríamos enumerarlas todas porque cada autor puede
tener la suya, y una distinta para cada programa. Pero esto no es ningún problema, por
varias razones. Primera, porque disponemos de un instrumento de análisis de las
licencias: las premisas del apartado 2.1 de este artículo. Segunda, porque hay varias
licencias que sirven como modelos para otros programas, y así hablamos de "tipo BSD"
para referirnos a licencias similares a la del sistema operativo de Berkeley. Hay incluso
licencias y modelos creados en abstracto, sin referencia a un concreto programa, como
la misma GNU-GPL o la Open Source Definition. Las licencias típicas son muy
cómodas de usar ya que el autor de un programa dado, conocedor de la que más le
conviene, la incluye tal cual o hace sólo las modificaciones que precisa, sin el trabajo
de redactar una por entero, o encargarla a un abogado. Por otro lado, quienes van a
usar o explotar un programa (los licenciatarios) también conocen estas licencias típicas
y saben de antemano a qué atenerse. Igualmente, los abogados y los jueces tienen
mejor conocimiento de ellas que de una licencia nueva u original. Todo esto simplifica
las relaciones y los negocios y resulta útil.

Nosotros vamos a ocuparnos sólo de las licencias típicas. Las más interesantes son las
licencias de software libre, ya que en una licencia se materializa la voluntad del autor
sobre cómo desea que su programa se use y explote, y las de software libre
materializan una voluntad radicalmente contraria a la que la LPI espera de un autor. En
particular, las licencias copyleft revierten literalmente las relaciones autor-usuario que la
LPI presupone.

Por contra, las licencias de software no libre, exactamente las de software cerrado, se
asientan en la LPI y desde ella pueden incluso lanzarse más allá en la limitación de los
derechos y libertades de los usuarios. Pero esto sólo es válido, como ya sabemos, si
no se atenta contra las normas imperativas, que conocemos del apartado 2.1.3. Por
eso se dice que las licencias de software no libre están acompasadas con la LPI y son
por lo tanto mucho menos interesantes. La lectura completa de una de estas licencias
no libres puede resultar además una penosa experiencia.

Con todo, sólo las licencias típicas forman ya un buen montón. Tampoco tiene mucha
utilidad hacer una selección, pues la FSF y la OSI ya han hecho algunas muy valiosas,
aunque no siempre detalladas, y de las que en el apéndice C se encuentran las
referencias. Nosotros vamos a examinarlas de una forma distinta, y nos evitaramos

Plataforma de Teleformación de IFES Página 121 de 212


Introducción a Linux

tanto el tedio de la exposición de licencias una por una, como una lectura árida o
abrumadora. De todos modos, se encontrará en 4.6 una breve discusión final sobre los
criterios de las clasificaciones principales.

Y llegamos por fin al núcleo de la cuestión.

Las licencias de software libre


Más definiciones
Necesitamos aún algunas definiciones más para seguir aclarando la terminología que
estamos usando y otra nueva que introduciremos enseguida. Las definiciones más
útiles para hablar de software libre son, de nuevo por su rigor jurídico, las de la FSF,
que usamos en este artículo por convención.

Tenemos dos grandes superconjuntos: el software libre y el resto del software, que por
tanto llamamos no libre. Cualquier otra terminología para estos superconjuntos no es
aceptable en español. Por cierto, software no libre no es sinónimo de "software
propietario" , y como esta última expresión es horrible además de inexacta, nosotros no
la utilizaremos, además en el fondo nos sobra. En caso necesario hablaremos de
"software cerrado" . Es más preciso hablar en general de software no libre, y de paso
englobamos a los semipropietarios, semilibres, sharewares y demás. Esta terminología
también nos facilitará la comprensión cabal de un cuadro bastante grande de licencias.

"Software libre" (sl) es el que incorpora una autorización general no discriminatoria para
usar, copiar, modificar y distribuir el programa original o sus derivados, gratuitamente o
no. Debe proporcionarse las fuentes, directa o indirectamente, pero siempre de forma
fácil y asequible. Todo programa que no incorpore esta autorización no es libre,
decimos que es software no libre.

Abusaremos un poco del lenguaje llamando "licencia libre" a la licencia de un programa


libre.

Estas definiciones no son pacíficas. Nosotros las usaremos convencionalmente, pero


ignorar cuánto hay detrás es un pobre servicio al conocimiento, porque no se trata de
pequeñeces. Para empezar, las definiciones de software libre ( "free software" ) y
fuente abierta ( "open source" ) no son coincidentes, aunque vienen ciertamente a
significar casi lo mismo. Pero estas diferencias no son importantes por ahora, las
dejamos para el apartado 4.5.2.

También es esencial distinguir sl (superconjunto) de copyleft (subconjunto). Éste es


software libre cuyos términos de distribución no permiten a los re-distribuidores añadir a
su licencia restricciones adicionales a las de la licencia de que se sirvieron. Esto

Página 122 de 212 Introducción a Linux


Introducción a Linux

supone la perpetuación de la condición de libertad del software hasta su extinción. El


copyleft determina la imposibilidad (jurídica) de apropiarse del software libre. Y éste es
el hallazgo de la FSF, al que dedicaremos por entero el apartado 4.5.1. El resto del sl
que no es copyleft puede ser modificado añadiendo restricciones a la libre distribución
que no se encontraban en la licencia del programa originario. Los ejemplos
característicos son las licencias BSD y X11.

Esta segunda dicotomía "sl-copyleft v. sl-no-copyleft" es en cambio pacífica, porque los


términos de distribución de, p ej., la GNU-GPL son claros y terminantes. Es cierto que
una cuestión de estrategia invitó a la FSF a redactar la Lesser GPL, y que se han
detectado una o dos lagunas relativamente importantes, pero procedentes sólo de una
interpretación forzada del sentido de su texto. Un programa es copyleft o no lo es, y
esto es fácil distinguirlo. Aun así, la FSF habla de "grados" de copyleft (hay programas
más copyleft que otros), y finalmente introduce una última subdivisión: "copyleft
compatible GNU v. copyleft no compatible GNU" . Lo mismo hace la OSI con su
calificación de compatibilidad Open Source. Pero estas expresiones, graduación y
compatibilidad, forman otro de los asuntos en los que, dado el ámbito de este artículo,
no podremos entrar a fondo hasta una versión ulterior.

En Derecho anglosajón se incluye dentro del sl el software que se encuentra en


dominio público, pero esto generalmente no es así en los Derechos continentales. En
primer lugar, no es fácil con arreglo a la ley española encontrar programas en dominio
público por las razones expuestas antes, simplemente no ha transcurrido suficiente
tiempo desde la aparición de los primeros programas protegidos para que se haya
producido la extinción de los derechos de autor sobre ellos (recuérdese: toda la vida del
autor y 70 años más). Segundo, probablemente las fuentes pueden no estar
disponibles. Tercero, el Derecho español admite la apropiación del dominio público
inédito (art. 129.1 LPI), y desde luego la apropiación de las obras derivadas del dominio
público, pero no del dominio público mismo. Con razón la FSF considera que el
software en dominio público no es en modo alguno copyleft, sobre todo en Derecho
anglosajón. Ni siquiera tiene que ser necesariamente libre, p. ej. no lo es si las fuentes
no estan disponibles. Volveremos aún sobre el dominio público en 4.5.1.

Encaje general de las licencias de software libre


en la ley española
Sin rodeos, no plantean problemas en Derecho español, son perfectamente válidas y
viables. Trataremos de demostrarlo en lo que resta de este apartado 4. En primer lugar:

1. No afectan a los derechos morales del autor, aunque la existencia del


llamado derecho de arrepentimiento, típico de los Derechos continentales,
parece sugerir otra cosa. Pero ya tratamos este asunto (superficialmente, es

Plataforma de Teleformación de IFES Página 123 de 212


Introducción a Linux

cierto) en el apartado 3.2.2 al hablar de la revocación de las licencias.


Aunque allí quedaron temas por tratar, éste en particular quedó allanado. Se
trata de un asunto más teórico que otra cosa, de todos modos. Y aún
volveremos de nuevo a él cuando tratemos de la Open Source Definition.
2. En cuanto a los derechos patrimoniales del autor, tampoco hay nada en las
licencias de software libre que infrinja las normas imperativas de la LPI. En
efecto:
1. El derecho de autorizar o prohibir la explotación de la obra se
manifiesta justamente en la facultad del autor de dar licencia a su
programa, siempre que no se vulneren otras normas imperativas u
obligaciones asumidas.
2. Las licencias de software libre no implican renuncia del derecho de
remuneración, aunque en muchos casos se renuncie de hecho a una
remuneración, que es cosa distinta, perfectamente renunciable. Es
claro que el autor no renuncia a la explotación por sí mismo. Y
respecto de la explotación por los demás, la cede con causa
(liberalidad, prestigio, obtención de una marca comercial, de apoyo en
el mantenimiento del programa, etc, etc).
3. Las licencias regulan sobre todo la cesión de los derechos de
explotación, que es su cometido, y por tanto son el vehículo apropiado
para contener las condiciones de uso y explotación de un programa
de ordenador.

Una dificultad más seria se encuentra en la limitación que la ley española impone a
cualquier cesión de derechos de explotación: Queda limitada siempre a los medios de
explotación existentes en el momento de la cesión, esto es, en el momento de la
aceptación de la licencia; y no se extiende por tanto a los medios futuros de copia,
modificación, etc, ni a los inexistentes. Por su parte la GPL deja bien claro que la
explotación libre autorizada se refiere "a cualquier medio" (claúsula 1) y queda
restringida a determinadas formas de explotación (y no a otras), concretamente la
copia, modificación y distribución. Si se produce una explotación de distinto tipo, la GPL
deja de amparar al licenciatario (cl. 1 y 4), pero el sentido de la GPL es el de respetar
las libertades del usuario, no la restricción injustificada del uso y explotación de los
programas; y no entra, salvo lo ya señalado, en buscar limitaciones más allá de las
necesarias a su finalidad. Por lo tanto se concluye que la GPL ampara formas de
explotación sobrevenidas después de la aceptación de la licencia, pero siempre que no
se atente contra el espíritu de la GPL. Aunque nunca está de más avisar al licenciante,
puede incluso ser imprescindible.

También hemos de resolver una aparente contradicción entre la regla imperativa de la


LPI que dice "las cesiones no exclusivas son intransmisibles" (art. 50.1) y el hecho de
que una licencia de sl, que consiste en una cesión no exclusiva, justamente permite la
transmisión ulterior de derechos por el licenciatario si éste crea un programa derivado.
Pero no hay tal contradicción. Por al menos dos razones: 1ª La esencia del sl está en la
cesión de derechos de explotación sin exclusiva, y no en ninguna renuncia del

Página 124 de 212 Introducción a Linux


Introducción a Linux

copyright. Mediante la licencia libre el autor cede sus derechos de explotación sin
exclusiva, pero ello no permite al licenciatario re-licenciar la obra originaria, ni licenciar
su obra derivada en términos contrarios a los aceptados en la primera licencia. 2ª El art.
50.1 no es realmente una norma imperativa, existe para proteger al autor, pero éste
puede disponer de ella, es en realidad una norma dispositiva. Se incluyó en su
momento como imperativa por pura precaución, pues el tenor literal de la LPI da que
pensar. Para los más juristas: una licencia de sl tiene algo de donación modal (te doy
algo si haces esto), y esta es otra forma de demostrar que la contradicción es sólo
aparente.

A continuación veremos con más detalle las libertades aparejadas a una licencia de
software libre. Seguiremos el orden expuesto al final del apartado 3.2, o sea: el
segundo grupo de claúsulas que teníamos pendientes. Puede adelantarse que no se
trata de un examen pormenorizado de cuantas cuestiones suscitan los rótulos de los
apartados, sino un vistazo general. Esto podemos en cierto modo permitírnoslo porque,
primero, estamos tratando con el negativo de las habituales licencias de software
cerrado, innecesariamente prolijas y obsesivas. Segundo, estamos tratando acerca de
las libertades, más simples de expresar que las sujeciones.

Libertades de uso y reproducción


Estas libertades no nos darán ya mucho trabajo. Todo ha quedado definido en
apartados anteriores y sabemos por tanto que una licencia de sl otorga libertad
prácticamente plena para utilizar y copiar el programa cuando, como, cuanto y donde a
uno le apetezca. Suele incluirse restricciones formales, como el mantenimiento del
aviso de copyright, que si son razonables no hacen al programa no libre.

Por supuesto, es lícito bajo licencia de sl cobrar por el acto físico de transfererir copias
del programa (p. ej. en CDROM), así lo dice entre otras la GPL en el último inciso de la
cláusula 1. ¿Significa esto que la cesión de derechos de explotación del programa (que
es una transferencia de objeto inmaterial) ha de ser gratuita si se utiliza la GPL? Aquí la
GPL parece confundir el programa (obra intelectual, inmaterial, objeto de los derechos
de autor) con el soporte de la obra (un binario o código fuente, grabados en un
CDROM). Debería estar claro que la GPL no exige gratuidad en la cesión de derechos
de explotación, no hay restricción a los derechos de autor ni a la libertad del usuario,
pero es un hecho la cesión gratuita en muchas ocasiones. Además, ¿a quién se cobra
por una cesión de derechos de explotación muy amplia y con destinatario
indeterminado? Este asunto es muy teórico y no merece más atención en este
momento.

Libertad de modificación

Plataforma de Teleformación de IFES Página 125 de 212


Introducción a Linux

Tampoco aquí encontraremos a estas alturas dificultades mayores, aunque siempre es


posible complicarse la vida. Uno puede modificar libremente un programa libre, que lo
es porque entre otras cosas se dispone de su código fuente. Puede traducirse,
transformarse, combinarse con otros, o dividirse. Todos los programas o colecciones
de programas obtenidos son obras derivadas, pero (un gran pero) no necesariamente
libres.

¿Qué ocurre si redistribuímos un programa en el que hemos incluído parte del código
de un programa libre? Que el programa obtenido ha de ser libre en su totalidad. Es
decir, no puede extraerse de un programa libre copias u obras derivadas que a su vez
se licencien como libres sólo en la parte derivada. En varias ocasiones la GPL tiene en
cuenta este supuesto, especialmente para los trabajos derivados (claúsula 2),
exigiendo que la licencia se aplique al programa "como un todo" , de modo que el
carácter libre se transfiera al programa derivado. Aunque hay excepciones.

Esta es una exigencia coherente con las bases del sistema copyleft, de hecho es la
primera exigencia del copyleft, en el ámbito de la modificación de programas. Es el
primer supuesto que nos encontramos en nuestro recorrido con el llamado
incorrectamente "virus copyleft" , calificado también de efecto contaminante. Desde el
punto de vista de las libertades del usuario es más bien un efecto supermineralizante,
reconstituyente. Estos calificativos no tienen mucha importancia, sí el efecto mismo por
supuesto. Pero esta restricción no es toda la cláusula copyleft, en realidad no lo es en
absoluto en cuanto a las modificaciones que no se redistribuyen. Más bien, la
transmisión del carácter libre de un programa original a sus derivados es una exigencia
del copyright: Si el programa original es copyleft, porque el derecho del autor del
programa derivado se origina en una licencia copyleft, de la que no puede sustraerse. Y
si el programa original no es copyleft, exactamente igual.

Luego el mal llamado carácter contaminante del copyleft resulta que se da bajo
cualquier licencia, como cualquier jurista esperaría. Las críticas habituales suelen tener
lugar en otro plano, sea económico, empresarial o político. Por ejemplo, que la
contaminación por licencias no libres es una calamidad para el usuario, que la
producida por licencias Open Source no copyleft es incierta, y que la producida por el
copyleft es defitivamente una bendición para el usuario y la libre computación en
general, porque mantiene la libertad. Nada de esto se deduce del Derecho, que, todo lo
más, establece reglas muy generales, como que lo accesorio sigue la suerte de lo
principal (art. 379 CC) y que los derechos sobre una mezcla indivisible son
proporcionales a los elementos mezclados (art. 381 CC), siempre que no haya otros
pactos.

Puede darse el caso de un programa que posee partes identificables no derivadas de


un programa libre. Entonces, y siempre que se trate de trabajos independientes y
separados ( "autónomos" en nuestra nomenclatura del apartado 1), sólo entonces no
se transmite el copyleft. Pero si esas partes se distribuyen como un todo derivado del

Página 126 de 212 Introducción a Linux


Introducción a Linux

programa libre, la distribución del todo debe producirse según la licencia libre, cuyas
autorizaciones se extienden al todo. La finalidad de esto (véase cl. 2 GPL) no es otra
que la de controlar la distribución de los trabajos derivados del programa libre. Además,
y esto es esencial en las distribuciones y paquetes, la reunión o colección de trabajos
libres y no libres en un volumen de almacenamiento o medio de distribución NO hace
que unos trabajos pasen al ámbito licenciado por otros. Esto se ajusta como un guante
a las reglas comunes, o sea las del CC que hemos citado. Vamos a ser más explícitos.

Adquisición de propiedad: Unión y especificación de


cosas
Como base del debate sobre cómo han de transmitirse los efectos de las licencias de
programas originales a los programas derivados, vamos a utilizar las reglas del CC
citadas arriba, y algunas más. Se trata de saber cómo se adquiere la propiedad sobre
objetos derivados, bien por unión de cosas distintas (mezcla y adjunción), bien por
especifición de una cosa. Este es un viejo asunto de los juristas, desde hace más de
2000 años. "Nada más complicado y de más difícil apreciación jurídica en la vida real...
Las relaciones que supone... han llegado a [considerarse] de casi imposible
determinación..." , así se expresaba un magistrado, J.Mª MANRESA, hace un siglo
aproximadamente. Con esta alentadora perspectiva, vamos a basarnos en las normas
del CC aplicables a los bienes muebles, porque de cierto que los programas de
ordenador no son inmuebles (!).

Unión de programas

Tenemos dos tipos de unión de cosas, la mezcla y la adjunción. La mezcla de


elementos supone que éstos resultan después inseparables, de modo que cada
propietario adquiere un derecho proporcional sobre la parte que le corresponde según
el valor de las cosas mezcladas (art. 381 CC).

La adjunción ocurre por la unión de cosas heterogéneas que se unen indisolublemente


para constituir un solo y nuevo objeto, no desmontable. En este objeto pueden
distinguirse tal vez sus antiguos componentes, pero no pueden ya separarse. En este
caso, la regla es que lo accesorio sigue la suerte de lo principal (art. 375 CC).
Accesorio es lo que facilita el uso o perfecciona lo principal (art. 376 CC). Pero suele
utilizarse como criterio más práctico el del valor económico de los componentes (art.
377.1º CC).

Versiones de programas o especificación

La especificación consiste en dar a una cosa una nueva forma. Más estrictamente, es
dar nueva forma a una cosa ajena, creándose así una nueva cosa de más valor. El art.
383 CC dice que el especificador hace suya la cosa nueva, si efectivamente es de

Plataforma de Teleformación de IFES Página 127 de 212


Introducción a Linux

mayor valor, aunque habrá de indemnizar al dueño de la cosa especificada (


"versioneada" ). En otro caso, éste puede optar por quedarse con la nueva especie,
indemnizando el valor de la obra nueva; o pedir indemnización de la materia original.

Todo esto sólo vale si quien mezcla, adjunta o especifica actúa de buena fe.

Exigencias razonables para la modificabilidad del


software
Por supuesto, no hay modificación factible de un programa de ordenador si no se
dispone del código fuente. La disponibilidad del código recompilable puede darse de
varias formas, pero sólo algunas son admitidas en la definición de software libre. Habrá
de escogerse alguna de éstas en tal caso y dependiendo de la explotación que se
prevé:

• Acompañar las fuentes completas en formato electrónico y en el soporte


habitualmente utilizado para intercambiar programas. Actualmente estos
medios y soportes son casi siempre ftp anónimo y/o CDROM. La carencia
simultánea de estos dos citados resulta inaceptable.
• Acompañar un compromiso escrito, válido por un plazo razonable (la FSF
exige 3 años), de proporcionar las fuentes a quien las pida a un coste no
superior al de la distribución física por medio estándar (ftp y CDROM al
menos).
• Una tercera forma de poner a disposición el código fuente, y que
normalmente sólo debería aplicarse a usos no comerciales, es la de
acompañar el programa con la información recibida por el licenciatario sobre
la oferta anteriormente citada del código fuente. Esto sirve para disminuir
costes y no cargar a ciertos usuarios con elementos posiblemente inútiles.
• [Queda claro que las fórmulas segunda y tercera sólo tienen sentido cuando
la distribución del programa únicamente es en programa objeto o binario
ejecutable]

La LPI no define "código fuente" . La GPL y las OSD dicen que es "la forma preferida
del trabajo cuando se hacen modificaciones" . Para un ejecutable, fuente es el código
completo de todos sus módulos, ficheros asociados de definición de interfaces y
guiones utilizados para controlar la compilación e instalación del ejecutable. No
comprende necesariamente el código que suele acompañar a los componentes
principales del sistema (el compilador y el núcleo sobre el que funciona el ejecutable),
salvo que el propio componente principal acompañe al ejecutable.

Libertad de distribución

Página 128 de 212 Introducción a Linux


Introducción a Linux

Todas las formas anteriores de explotación pueden ser realizadas individualmente y sin
conocimiento por nadie. Pero la distribución es inherentemente relacional, ya que hay
intercambio, y es en este punto en el que reside una de las más importantes polémicas
dentro del sl. En su seno, la libertad de distribución no se pone en duda, libertad sin
restricciones aparentes, salvo por cuestiones formales, algunas limitaciones
geográficas lógicas, asuntos de poca monta comparados con la general libertad de
distribuir y redistribuir programas originales o transformados.

También está claro para todos que la distribución sólo es libre si puede tener por causa
cualquiera que sea lícita: ánimo de lucro, altruismo, proselitismo... Asímismo no admite
dudas que el sl sólo es libre si la licencia del programa libre original persiste durante
toda la vida útil del software y de sus derivados, que por lo tanto también han de ser
libres. La cuestión es la de la transmisión de efectos de las licencias, que ya
avanzamos en el apartado anterior. ¿Se transmite el carácter libre de un programa a
sus programas derivados siempre, o sólo para determinadas modificaciones
(derivaciones, agregaciones, paquetes, bibliotecas, distribuciones), tal vez sólo para la
redistribución? ¿O se reconstituye plenamente el copyright? Esto depende de la
licencia misma, y por eso el movimiento del software libre se articula no mediante una
forma especial de escribir código, ni por una nueva mercadotecnia, ni por el apoyo del
sector empresarial, todo eso son consecuencias de mover la palanca sobre cierto punto
de apoyo: esos extraños e indigeribles documentos llamados licencias de software.

El criterio para resolver el dilema reside, obviamente y una vez más, en las libertades
ciudadanas, incluidas las exigencias de la libre competencia, entre las que no está
-más bien al contrario- la limitación de entrada en el mercado por apropiación de
resultados obtenidos en el desarrollo de software, mucho menos de software libre. Así,
el copyleft es una exigencia de la auténtica libre competencia.

No se conoce ninguna norma jurídica que prohíba la apropiación del software, ahí está
la LPI para garantizar que los programas pertenecen a sus autores. Pero el art. 81 del
Tratado de la Comunidad Europea (ojo: en la nueva numeración de Amsterdam) califica
de incompatibles con el mercado común, y quedan prohibidas, las prácticas tendentes
a impedir, restringir o falsear la competencia; y en particular el limitar o controlar la
producción y el desarrollo técnico, subordinar la celebración de contratos a la
aceptación por la contraparte de prestaciones suplementarias sin relación con su
objeto. También prohíbe el art. 82 abusar de la posición dominante, p. ej. limitando la
producción o el desarrollo técnico en perjuicio de los consumidores. No es el sl el que
usa estas prácticas, de hecho las dificulta. Por contra, hay paladines del software
cerrado y (teóricamente) de la libre competencia que se encuentran expedientados en
Bruselas por presuntas prácticas ilícitas.

Este apartado 4 trata de las libertades del usuario de software, no de los derechos de
autor. Muchos entienden que la libertad del usuario no puede restringirse mediante el
uso de la misma libertad. Si quien modifica un programa libre hace uso de sus

Plataforma de Teleformación de IFES Página 129 de 212


Introducción a Linux

derechos de autor (de su libertad, dirá él tal vez) añadiendo en la licencia del programa
derivado (y en perjuicio de sus usuarios) restricciones que no figuraban en la licencia
del programa libre original, lo que está haciendo no es ejercitar sus derechos de autor
-que están indeleblemente unidos a la licencia libre original- sino apropiarse
ilegítimamente de algo que no le corresponde a él en exclusiva, la libertad de los
demás a usar y explotar libremente el nuevo programa, libertad garantizada por las
constituciones, sin duda por la Constitución española cuando reconoce el derecho
fundamental a la producción científica y técnica (art. 20.1.b CE).

Las licencias libres tipo BSD-original no pudieron tener en cuenta que el software
estaba empezando a ser usado masivamente y a gran escala, los fabricantes
intentaban patentar los productos y prescindir de una vez por todas de los desarrollos
abiertos. Habiendo encontrado mejor cobijo en la ley de derechos de autor que en la de
patentes, actualmente han debido frenar su expansión tras la recuperación del modelo
de software libre.

Este modelo se ha repuesto del declive de los años 80 añadiendo a su definición la


única prohibición importante que contiene la licencia deseable: Está prohibido al
destinatario de un programa libre restringir la libertad de explotación de los programas
derivados creados por él. Esta prohibición es tan importante que se dedica el apartado
siguiente sólo a ella. Tiene incluso nombre propio.

Copyleft o prohibición de añadir restricciones sobre los


programas derivados de un programa libre
La esencia jurídica del software libre se encuentra en la libre explotación de los
programas por los usuarios, sin discriminación. A su vez, el autor de un programa
derivado tiene el derecho exclusivo de autorizar o prohibir la explotación de su obra.
Pero el programa derivado existe y es legítimo porque la licencia del programa original
facilita su creación, porque es libre. Y como es libre, exige la persistencia de la libertad
de uso y explotación sobre los programas derivados. De haber resistido las
universidades en las últimas décadas sus carencias financieras de otra guisa, y no
aprovechando a toda costa el modelo de patentes, tal vez no hubiera sido necesario
tener que recordar semejantes afirmaciones. Pero ha sido necesario. El recordatorio de
la existencia de libertades fundamentales, constitucionalmente garantizadas, ha
tomado la forma de una cláusula prohibitiva, la cláusula copyleft.

El mejor ejemplo de cláusula copyleft es, de nuevo, la GNU-General Public License, o


simplemente GPL, publicada por la Free Software Foundation. En realidad la cláusula
se halla dividida en tres apartados, números 4, 6 y 10 de la versión 2 de 1991.

Las modificaciones sobre la licencia original pueden ser irrelevantes (correcciones


gramaticales, de ordenación, inclusión de asuntos ajenos al derecho de autor). El

Página 130 de 212 Introducción a Linux


Introducción a Linux

copyleft se ocupa sólo de las modificaciones relevantes, que afectan a los términos de
la explotación del programa. Pueden a su vez ser de dos tipos: las que hacen la
explotación más libre (difíciles de imaginar) y las que la restringen, por ejemplo
cerrando el software, licenciándolo sólo para uso no comercial, impidiendo su
modificación, copia o redistribución. De éstas sí hay numerosos ejemplos. Son las del
segundo tipo las modificaciones prohibidas por el copyleft. La LesserGPL permite una
excepción "estratégica" , para las bibliotecas y otros elementos, que no podemos tratar
aquí, ni es para nuestro estudio demasiado importante.

Persistencia de la libertad del software

El copyleft pretende justamente la transmisión de los efectos de la licencia del


programa originario a las licencias de los programas derivados, como cualquier
licencia, aunque no se trata sólo de eso: Requiere seriamente la persistencia del
carácter libre del software libre modificado y (re)distribuido. El copyleft preserva el
carácter de sl prohibiendo que de un programa libre se obtenga otro no libre o que se
redistribuya con restricciones adicionales a las libertades de los destinatarios.

El copyleft no afecta directamente a los derechos del autor del programa originario,
pero sí a los del autor del programa derivado en el momento de su redistribución.
¿Cómo es esto posible? Porque el segundo aceptó la licencia del primero. Copyleft no
es lo contrario de copyright. El copyleft contiene lo que técnicamente se conoce en
Derecho como "condición resolutoria" [otros preferirán hablar de "modo" , pero esto
apenas tiene importancia]. Se trata de un suceso (condición) que, de darse, produce
determinado efecto en los derechos. El suceso en nuestro caso es la infracción de una
licencia, que por tanto queda desactivada (resuelta). La condición resolutoria implícita
en el copyleft se produce al añadirse restricciones a la libre explotación del programa
derivado sobre las que figuraban en la licencia del programa original.

La cláusula copyleft la impone el autor de la obra original en uso de sus facultades de


copyright, no en contra de tales facultades, que ya hemos demostrado no quedan
afectadas por ello. Y la aceptación por el destinatario de la licencia con cláusula
copyleft supone que si vulnera la cláusula, la licencia deja de ampararle a él y al
programa derivado que redistribuya, que pasa a ser automáticamente ilegítimo. Lo
mismo que en cualquier explotación de otras obras intelectuales distintas del software.

Estructura de la cláusula copyleft

El copyleft es fácil de entender, se condensa en una prohibición. Pero lo cierto es que


se encuentra formada por varios elementos:

1. Una sujeción: No cabe explotación del programa sino en los mismos


términos copyleft. Cualquier explotación en términos diferentes no queda
amparada por la licencia. Esto es un requerimiento general en casi cualquier
contrato de cesión de derechos. La explotación indebida por alguien no

Plataforma de Teleformación de IFES Página 131 de 212


Introducción a Linux

afecta a todos los demás que sí ajusten el uso del programa copyleft a sus
términos.
2. Una obligación: Quien redistribuya el programa copyleft u otros derivados de
él, ha de poner ipso facto a disposición del receptor una licencia copyleft
equivalente, sin restricciones adicionales. Como aclara la GPL (cl. 6), el
licenciatario original, ahora licenciante del programa derivado, no es
responsable del incumplimiento de la licencia original por terceras personas.
Pero sí es responsable de ajustar la redistribución a los términos copyleft.
3. Una carga: Si se desea incorporar partes del programa copyleft a otros
programas libres que tengan condiciones de distribución distintas, debe
obtenerse permiso del autor de aquél. Es decir, la incorporación es posible
pero su legitimidad no es automática, depende de que en la transmisión de
derechos se preserven las condiciones que hacen libre al programa
incorporado, y se promueva o fomente el uso compartido y la reutilización
del software en general.

La claúsula copyleft se complementa con una aclaración y una excepción, ambas de


poca importancia en el fondo:

• Integridad del copyleft en caso de impedimento forzoso a la libre distribución


(cl. 7 GPL): No puede redistribuirse un programa copyleft si, por
impedimento forzoso (decisión judicial, vínculo con patentes, etc), la
redistribución no va a poder ser copyleft.
• Posibilidad de limitaciones geográficas a la distribución libre (cl. 8 GPL):
Normalmente por motivos de vinculación con patentes o interfaces bajo
copyright, pero siempre que se incluyan en la licencia indicaciones al
respecto, claras y prominentes.

Y esta es la construcción jurídica, tomada de la FSF aunque podría servir cualquier


otra. Ha sustentado, desde el Derecho y sin litigios judiciales, la realización de sistemas
como GNU, del núcleo Linux, de colectivos como Debian y de innumerables foros; ha
estimulado la formación de empresas, proyectos editoriales y docentes; la aparición de
cuerpos orgánicos de software libre en distribuciones multiformes... No son sus únicos
frutos, como se verá en el apartado 5.

Notas finales, un poco fuera de lugar

El copyleft, mediante un dispositivo jurídico impecable, da y asegura la libertad, protege


al autor favoreciendo la explotación de su programa, incluso por sí mismo si lo desea, e
impide en fin que nadie, salvo eventualmente él mismo y con dificultades, tome
demasiado control en el desarrollo. Es un artilugio equivalente, salvando ciertas
distancias, a la división de poderes del Derecho constitucional (LOCKE,
MONTESQUIEU y demás). El control por el explotador del programa nunca podrá ser
absoluto, pero el de los demás usuarios y desarrolladores tampoco. Y el programa con
más distribución será necesariamente el mejor posible, en otro caso será corregido

Página 132 de 212 Introducción a Linux


Introducción a Linux

rápidamente. Etc.

Esto es teóricamente cierto, pero la realidad no se ajusta exactamente a esta


descripción. ¿Por qué? Porque la rentabilidad financiera del copyleft sólo se manifiesta
si alcanza a cubrir una rama de desarrollo mínima explotable, sea un solo programa o
una plataforma completa. Si no es el caso, no deja por ello de ser rentable, pero no
necesariamente en términos financieros, de generación de ingresos, de inversión y
crecimiento. Hay otras rentabilidades buscadas por el copyleft, prioritarias en realidad.
Hay economistas que pueden demostrar si es o no cierto lo anterior, al cabo sólo una
conjetura.

Evidentemente no es cierto que el copyleft haga a un programa menos libre porque


"limita la libertad del autor del software derivado" . Esta es una apreciación incorrecta.
Por una parte, el copyleft preserva el carácter libre del software sin afectar en nada a la
esencia del copyright (sí por supuesto al ejercicio de determinadas facultades del
copyright, como cualquier contrato de cesión de derechos de autor). Segundo, entre la
libertad de un número determinado de usuarios que desean apropiarse del software
derivado y la del número indeterminado de usuarios que no tienen tal intención, el
copyleft opta por éstos, pero no exactamente quitando libertad a aquéllos, no
restringiéndoles su libertad de elección (lo que sí se produce mediante determinadas
prácticas comerciales en perjuicio de los usuarios) sino hasta después de aceptar la
licencia, que por tanto han de respetar. Para todos los demás usuarios, los que no
desean vulnerar la libertad de distribución, el copyleft simplemente no les supone ni
siquiera una prohibición, porque la mayoría nunca agotamos toda la libertad que se nos
ofrece. Si el copyleft es una camisa de fuerza, al menos se la pone uno mismo. Pero
más bien el copyleft es un pacto de no agresión, y esto es saludable, no vírico. Al
contrario, hay pautas comerciales que sí pueden resultar víricas, lo son de hecho. Pero
es tan fácil hablar en términos tales (contagio general-monopolio, etc) como poco
seguro.

El copyleft, o más bien las manifestaciones de su potencia, son una materia enorme,
que excede lo jurídico con creces. Se ha pretendido con lo anterior dar breve cuenta de
ello. Quedan muchas cuestiones por tratar y explicar, como las dobles licencias, la
remota posibilidad de un programa copyleft que entra efectivamente en dominio
público, los problemas específicos de los paquetes, distribuciones, medios de
almacenamiento y canales de distribución. Confiamos en una versión ulterior de este
artículo para tratarlos apropiadamente.

No obstante la claridad de su construcción jurídica, y por razones que en este artículo


no podemos tratar sino muy por encima, a los hombres de negocios el sistema copyleft
no les gustaba. Temían su aspecto comunista, anarquista o libertario. En esencia, no
les gustaba la cláusula que impedía apropiarse, al no restringir la libertad de los demás,
del trabajo realizado a costa de su dinero. También se encontraban los programadores
que sufrían un temor análogo respecto del futuro fruto de su esfuerzo. Este temor

Plataforma de Teleformación de IFES Página 133 de 212


Introducción a Linux

provenía de un malentendido, inexcusable pero persistente, acerca de cómo


rentabilizar los proyectos copyleft, normalmente origen de riqueza (fondo) si son
buenos claro está; pero no necesariamente generadores de dinero (flujo) si la
explotación es defectuosa. En el software no copyleft no pasa exactamente lo mismo,
porque los costes de desarrollo y mantenimiento no garantizan siquiera lo primero. Por
supuesto, también el software no libre puede ser objeto de explotación defectuosa. El
caso es que en el movimiento del software libre se produce una bifurcación en
1997-1998. Para nosotros es "la" bifurcación, porque afectó a las definiciones y a las
licencias y su clasificación.

Autorización de restricciones adicionales: Open Source


La distribución de software, y en particular la re-distribución de software modificado, es
el punto crítico del sl. La Iniciativa Open Source (OSI) surge de las Directrices Debian
de Software Libre (DFSG), adaptadas en 1997 sin cambios sustanciales a unos
términos más generales bajo el rótulo que se usa actualmente: Definición de Fuente
Abierta (Open Source Definition - OSD). No se trata de una licencia, ni siquiera de un
modelo de licencia, sino de directrices para la clasificación y adopción de licencias en
productos de software (programas, paquetes y distribuciones).

La definición de fuente abierta no es del todo equivalente a la de software libre. Las


diferencias esenciales son dos: Una fundamental, pues la OSD entiende por libertad
del usuario una situación jurídica menos amplia que el sl, según la definición de éste
hecha por la FSF, que es la que estamos utilizando en este artículo por su notable rigor
y ajuste a las exigencias constitucionales y legales españolas. La otra diferencia es
instrumental, está ubicada en la cláusula de persistencia del sl, que en la OSD no es ya
necesariamente software libre tras la distribución, con o sin modificaciones del software
originario. Se permite añadir determinadas restricciones a los términos de distribución
de originales y redistribución de derivados. Esto es una simplificación compacta que
debe explicarse y matizarse.

El punto de vista de la FSF no es sólo económico, que no se excluye de todos modos,


sino ultrajurídico pues comprende también postulados éticos y por lo tanto filosóficos.
El punto de vista de la OSI, que reconoce inspirado por la FSF, es sin embargo sólo
económico (disminución de precios, apertura de nuevos mercados). Se trataba de
atraer a los hombres de negocios y a importantes sectores de desarrolladores al
movimiento del sl, lo que se consiguió en parte. Pero no se logró mediante la atracción
de aquéllos al ámbito del sl, sino eliminando la necesidad de persistencia del sl, vale
decir llevando a los usuarios al coto de los temerosos. El copyleft quedó eliminado de la
definición deseable de sl, se volvió a las definiciones más antiguas, perfeccionadas es
cierto, de lo que podía entenderse por software libre, expresión que además se cambió
por "fuente abierta" , menos expresiva en inglés y todavía menos en castellano. Para el
Derecho, la OSD no impide restringir la libertad del usuario, facilita la apropiación del

Página 134 de 212 Introducción a Linux


Introducción a Linux

software derivado, aunque su intención primordial sea asegurar al autor la posibilidad


de apropiación exclusiva del fruto principal del esfuerzo invertido, sobre todo en los
desarrollos más originales, con marca, etc.

Estructura de la OSD

Para examinar detalladamente la OSD bastaría con tratar cuatro de los diez apartados
que tiene la versión 1.0, ya que el último es tan sólo es un ejemplo, sin valor normativo,
y los cinco restantes tratan cuestiones que han quedado ya examinadas en apartados
anteriores. Pero sólo daremos unas breves notas.

Interesan los apartados que eliminan la necesidad del copyleft y, en general, la


persistencia de la libre explotación, que son los números 3, 4, 8 y 9. El número 3
permite cambiar los términos de sl del programa originario a términos no libres en el
programa derivado (tipo BSD), y se justifica -erróneamente- en la necesidad de evitar al
autor del programa originario el riesgo que supone a su reputación la derivación de un
programa con código muy defectuoso que se pudiera atribuir no al autor derivado, sino
a él, al autor del programa original. Lo mismo para evitar caballos de troya,
prohibiciones locales sobre transferencia tecnológica, como en criptografía, etc. El
apartado 4 exige la integridad del código original (algo legítimo) con medidas
innecesariamente restrictivas. El punto 8 sirve para separar claramente un programa
libre de una colección no libre de software. El programa libre lo seguirá siendo en
cuaquier caso, incluso si después se desagrega de la colección. Y el 9 señala que la
parte no transmite su carácter al todo. Esto supone la estanqueidad de las licencias. La
eficacia de la licencia de un programa no dependerá de las de los otros que se
encuentren en el mismo medio o soporte.

El argumento de la posible mayor vulnerabilidad del sl frente al software no libre, por


ejemplo ante caballos de troya, simplemente no tiene que ver con las condiciones
jurídicas de modificación y distribución del software, y naturalmente no es tratado aquí.
El software no es vulnerable en ese sentido por motivo del tipo de licencia que lleva
aparejada. Sí es necesario, en ciertos ámbitos de distribución y ante cierto tipo de
modificaciones (es decir, no siempre) un seguimiento adecuado de las versiones y de
su autoría. Pero estas exigencias no se atienden alterando el sistema copyleft, basta el
sistema de marcas, que nada tiene que ver con los derechos de autor; y un buen
sistema de control de versiones, se supone. No podemos tratar estos asuntos ahora, y
tal vez estemos en un error. Pero hay indicios de que estos argumentos contra el sl y el
copyleft son inválidos.

Para disipar los temores de los hombres de negocios, o quienquiera que vea tras el
copyleft al gran satán, es aconsejable muchas veces el uso adecuado de la Ley de
Marcas. Quien desee apropiarse de sl para mantener la autoría sin riesgos de
confusión hará mejor en registrar una marca, creándose así versiones oficiales de fácil
control y gestión. Esto es lo que se ha hecho con Linux -que es GPL- y tantos otros

Plataforma de Teleformación de IFES Página 135 de 212


Introducción a Linux

casos. Todo ello sin tocar la licencia libre, incluso manteniendo la cláusula copyleft.

Clasificaciones de las licencias


No vamos a reproducir las clasificaciones más importantes, que puede encontrar el
lector en www.gnu.org/philosophy/categories.html y en el artículo de B. Perens en
"Open Sources..." citado al final, Apéndice C. Aquí nos basta retener tres
clasificaciones muy generales pero importantes:

1. La división básica con la que se está de acuerdo, aunque no completamente,


entre software libre-software no libre. Esperamos haber convencido al lector
de que el término open source-fuente abierta es menos riguroso.
2. La división GNU añade dos criterios más a su clasificación de licencias:
"grado" de copyleft y compatibilidad con el sistema GNU, que aunque son de
interés no podemos tratar ahora.
3. La compatibilidad Open Source se basa en criterios más simples que los
anteriores de GNU, éstos más rigurosos en todos los sentidos.

Confiamos en versiones ulteriores de estas notas para desarrollar todo esto como
merece.

Infracción de una licencia de software libre


Para este asunto se recomienda consultar www.gnu.org/licenses/gpl-violation.html. Allí
se ofrece sintéticamente el camino para reaccionar ante lo que uno cree que es una
infracción de las condiciones de explotación y uso del software libre. En resumen, se
trata de comprobar la infracción, documentarla, e informar al titular del copyright, único
legitimado en apariencia para actuar contra el infractor. La FSF presta asistencia para
reaccionar contra las infracciones de la GPL.

Reacción por quien no es titular del copyright


En este subapartado presentamos una conjetura, probablemente válida, pero de la que
desconocemos aplicaciones prácticas: Es muy probable que en España dispongamos
actualmente de una o dos fórmulas de reacción adicionales frente a un atentado contra
una licencia de sl, vías que GNU-España extrañamente no menciona, y que trataremos
de demostrar sumariamente.

Es cierto que, bajo una licencia de software libre con copyleft, estrictamente hablando
sólo el titular del copyright (¡que no es necesariamente el autor!) tiene acción jurídica
contra la infracción de su derecho, manifestado en la licencia violada. Pero también lo
es que los usuarios del programa copyleft cuya licencia alguien ha infringido tienen

Página 136 de 212 Introducción a Linux


Introducción a Linux

interés legítimo en que la infracción se rectifique. Los usuarios pueden incluso haberse
organizado, por ejemplo en un colectivo de desarrolladores o simplemente en una
asociación de consumidores. Pues bien, la suma [interés legítimo + organización de un
grupo de consumidores] abre claramente la vía judicial también para quienes no son
autores, vía no basada en el copyright directamente sino indirectamente, a través de la
licencia. De hecho, debería bastar el interés legítimo esgrimido por un solo usuario,
pero esto puede resultar a menudo impracticable y es de más difícil digestión por los
jueces.

Esta vía está fundamentada muy sencillamente en el ensamblaje de varios preceptos


de la Constitución española y algunos más de otras leyes ordinarias. En síntesis, se
trata de la protección judicial de un genuino interés legitimo, para el que los grupos, y
singularmente las Asociaciones de Consumidores, se dice que tienen "legitimación
activa" . Puede llegar a obtenerse incluso protección administrativa (oficinas
municipales de consumo, p. ej.). No nos extenderemos aquí, sólo citaremos los
artículos, que el lector puede consultar por su cuenta: arts. 9.2 y 24.1 CE, 2.1.e y .f
LCU y 6.7º LEC.

Con esto ha debido de quedar tratado lo más importante. Para completar el cuadro sólo
resta tratar brevemente dos asuntos complementarios y de distinto interés.

Expansión del modelo de las licencias de software libre


Este apartado se incluye como ilustración del potencial de la construcción jurídica
contenida en las licencias de software libre, y no pretende ni de lejos dar cuenta al
mismo nivel que en los apartados anteriores de los modelos que se citan.

La Licencia de Documentación Libre. Otras licencias similares

No vamos a tratar de la licencia de documentación libre, GNU-FDL (GFDL o


simplemente para nosotros FDL), propuesta por la FSF para los manuales de uso,
documentación técnica y otros textos. El lector sabrá ahora leerla y comprender su
significado por sí solo, es similar a la GPL. Estrictamente hablando, en Derecho
español no es necesaria, pues la documentación de un programa se protege con el
mismo copyright que el del programa mismo. Pero en la práctica es muy útil, por dos
razones: En primer lugar permite modular las exigencias de una licencia copyleft,
pensada para el software, a las de los textos escritos, por ejemplo preservando algunos
fragmentos, normalmente todo el contenido no técnico, cláusulas externas, etc, de la
característica autorización de libre explotación. Es la licencia apropiada para la
documentación del software, pero no sólo. Efectivamente, y en segundo lugar, una
licencia como la FDL permite, sin merma de los derechos de autor, la formación de
proyectos colectivos de documentación libre, normalmente técnicos y científicos. No es
apropiada para libros de poemas y memorias, al menos no se pensó con esa finalidad.
En general, la documentación FDL debe permitir la libre modificación del contenido

Plataforma de Teleformación de IFES Página 137 de 212


Introducción a Linux

técnico, no del valorativo-personal.

Para la FDL, en la documentación libre debe distinguirse claramente los siguientes


textos de un manual o trabajo técnico cualquiera:

• Textos de Cubierta, que son los de Portada y Contraportada.


• Página de Título, que incluye la página de título misma y además las
necesarias para contener legiblemente cuanto la FDL requiere. En los libros
con formatos carentes de esta página, se llama Página de Título al texto
inmediato a la aparición más prominente del título de la obra, que precede al
comienzo del Cuerpo del Texto.
• Cuerpo del Texto.
• Secciones Secundarias, para materias como notas editoriales, advertencias
legales, valorativas, etc, sin conexión directa con el Cuerpo del Texto. Dentro
de ellas se encuentran las Secciones Invariantes, inalterables en las
modificaciones.
• Puede, incluso a veces debe, incluirse secciones como Historia,
Reconocimientos y Dedicatorias. Obligatoriamente han de quitarse en las
modificaciones las aprobaciones (endorsements), homologaciones o
similares que recaigan sobre el texto original, pues son exclusivos de éste.

La advertencia de copyright y el aviso de licencia FDL deben contener las siguientes


indicaciones: a) cuáles son los Textos de Cubierta, si los hay, ya sean de portada o
contraportada; y b) cuáles son las Secciones Invariantes. No puede exponerse ahora ni
siquiera los aspectos más relevantes de este singular sistema de liberación de
facultades de propiedad intelectual.

Tal vez a los teóricos del sl les sorprenda que el ejercicio del Derecho sea una
profesión abierta, en el sentido de que los profesionales intercambiamos libremente
nuestros conocimientos y argumentaciones jurídicas (¡no los derechos sobre nuestros
libros!). Es un hecho normal, indiscutido, el que unos a otros nos fusilemos nuestros
textos, desde siempre jamás, con ciertos límites, claro está. La FDL y otras licencias
parecidas tal vez completen el régimen de libertad intelectual de que disfrutamos los
juristas, propiciando p. ej. textos universitarios libres, de los que tan necesitados están
los estudiantes, los profesores y los profesionales.

El examen de la documentación libre requeriría un trabajo por sí solo, pero en cuanto al


contenido jurídico de las licencias lo esencial ya ha quedado expuesto antes. Además
de la FDL se puede encontrar documentación amparada en licencias libres como la
FreeBSD Documentation Lic., la Apple's Common Documentation Lic., la algo menos
estricta Open Publication Lic., que puede o no aplicarse "copylefting" , y algunas más.
También se dispone de la Open Science Lic., licencia libre y copyleft, redactada para
dar esa cobertura a datos en general, no sólo software.

Adviértase que otra idea surgida en el seno de Debian, Open Hardware, no tiene

Página 138 de 212 Introducción a Linux


Introducción a Linux

directamente que ver con las licencias de software. Consiste en un programa de


certificación, exactamente de calificación de hardware según ciertas especificaciones,
diseñado para verificar que una configuración de máquina es apta para un sistema
Linux o FreeBSD. Incluye la promoción de un certificado de la verificación, llamado
"certificado open hardware" para uso por los vendedores y consumidores.

Software no libre

Comprende todo el software que no es libre. Es un género, con muchas especies.

Primero tenemos el software semilibre, cuya licencia contiene autorización para la libre
copia, modificación y distribución, pero siempre que no tengan carácter comercial. Esta
es una restricción muy importante sobre todo a la distribución, que desnaturaliza la
finalidad del sl, por eso no lo calificamos como libre. Por ejemplo, el software semilibre
no permite su incorporación a paquetes copyleft. La restricción de la autorización a la
explotación no comercial añade muy poco a la libertad de uso, o más bien restringe la
posibilidad de ser utilizado. Parte de una idea errónea o de una valoración incorrecta
del ánimo de lucro. La primera versión de la GPL encajaba en esta definición, pero la
versión 2 (1991) retiró la restricción, por innecesaria.

El segundo grupo de software no libre es el "propietario" . Esta denominación es


inexacta por más de un motivo. Con ella quiere denominarse lo que la FSF llama
"software no libre que no es semilibre" . Podría decirse entonces que es software
aprisionado, enjaulado, inaccesible. Desde luego está lleno de limitaciones al libre uso,
es intransferible, incopiable sin convertirse uno en infractor, inmodificable (no mejorable
por los usuarios directamente) y de ningún modo redistribuíble. En este artículo
preferimos denominarlo software "cerrado" . Así entendidos, estos programas ni
siquiera forman parte de la máquina. No serían ni contendrían piezas que uno puede
examinar, reparar, o sustituir si son defectuosas. Pero la realidad es que el software sí
forma parte de la máquina, y no hay razón para que quien puede reparar o repintar o
recauchutar un automóvil utilitario no pueda hacerlo en un programa utilitario, sobre
todo si es un sistema operativo o un compilador.

Hay otras subespecies de software no libre, las repasamos en los apartados siguientes,
apuntando rápidamente las restricciones que imponen a las libertades básicas de los
usuarios.

En este artículo no tratamos el pseudotipo "software comercial" , categoría para


nosotros inútil porque no es puesta en cuestión por el sl; aunque sí por el software
semilibre, que no admite el uso comercial de los programas licenciados. Tampoco
podemos tratar fenómenos tan extraños como MSAgent, una especie de "software libre
revocable" que no es en modo alguno software libre.

Plataforma de Teleformación de IFES Página 139 de 212


Introducción a Linux

Restricciones de uso
Lo que califica a un programa como semilibre es que su uso y explotación quedan
limitados a un destino no comercial. Esta restricción no resulta aceptable, ya lo hemos
dicho, y no la trataremos más.

También el software cerrado impone graves restricciones de uso del software. Se


prefiere en este artículo llamar al software propietario "software cerrado" no por afán de
neologismo sino para ilustrar mejor que su uso y explotación no son libres, además de
por corrección idiomática y jurídica. Sobre él no es preciso decir mucho más de cuanto
ha quedado expuesto en los apartados anteriores, y quien desee información adicional
hará bien en acudir a un manual de propiedad intelectual sobre programas de
ordenador, cosa que este artículo no pretende ni puede ser.

No tiene sentido examinar las limitaciones impuestas en las licencias estándar de


software cerrado, ya se han citado algunas en apartados anteriores, como la fórmula de
aceptación de licencia consistente en romper los precintos del paquete de CDs, es
decir, antes de toda posibilidad de uso y comprobación, contra el art. 10bis LCU. En el
software cerrado simplemente la licencia no tiene otra finalidad que la de plegarse de
modo obsesivo a las facultades del copyright (de la LPI en España), prescindiendo de
cualquier consideración sobre las libertades constitucionalmente garantizadas de los
usuarios de software, sin otra finalidad que la explotación exclusiva, normalmente no
por su autor sino por un titular derivado, y lesionando (sin advertirlo, claro está) sus
propios intereses de mercadotecnia y desarrollo.

El uso queda prohibido sin licencia aceptada, imposibilitándose la instalación,


restringiéndola a monopuesto, o necesitándose una reactivación de la licencia si se
supera determinado número de componentes del hardware (!). No pueden evitar estas
licencias el que se apliquen las normas imperativas que hemos visto en el apartado
2.1.3, pero quedan restringidas al máximo, de hecho se imposibilitan porque las
modificaciones necesarias no son factibles sin el código fuente, nunca disponible.

Con lo visto hasta ahora, queda claro que la subcategoría "shareware" se refiere a
programas cerrados que restringen el uso si no se paga una cantidad de dinero
adicional pasado un período de prueba. Normalmente son programas incompletos,
mejor dicho mutilados.

Limitaciones a la libre reproducción y copia


Estas actividades no son autorizadas en el softawre cerrado, e incluso pueden
impedirse automáticamente. Las copias de seguridad se restringen en lo posible. La
copia privada es calificada incorrectamente de piratería en varias licencias que se ha
podido consultar.

Página 140 de 212 Introducción a Linux


Introducción a Linux

Límites a libre transformación y modificación


En el software cerrado y sus variantes la transformación está prohibida, y ni siquiera es
factible, pues el código fuente nunca se acompaña en la distribución. Los componentes
del software no pueden separarse legítimamente. Caso de hacerse alguna
transformación legítima, si la licencia se revoca los archivos fuentes derivados han de
destruirse (!). El shareware tampoco es modificable, pues casi siempre es cerrado y
además no acompaña las fuentes.

El denominado "freeware" es normalmente software cerrado que, aunque puede


redistribuirse con muchos límites -no libremente- no puede sin embargo ser modificado,
entre otras razones porque el programa fuente no está disponible. No es en modo
alguno software libre contra lo que indica su (impropio) nombre.

Límites a la libre distribución


En el software cerrado la distribución y la redistribución están sencilla y rotundamente
prohibidas, salvo en los casos del llamado freeware. Esto incluye la prohibición de
alquiler y préstamo.

Conclusión

El matemático David Hilbert, refiriéndose a la teoría de conjuntos creada por Georg


Cantor, objeto del desprecio de otros matemáticos, decía "nadie podrá expulsarnos del
paraíso que Cantor ha creado para nosotros" . Desde los ingenieros y programadores
hasta los usuarios menos avezados, pasando por distribuidores, empresas comerciales
y universidades, formamos legión quienes hacemos correr sobre nuestras máquinas
programas libres, hackeados y compilados por nosotros mismos conforme a nuestras
necesidades y gustos, que nos prestamos y copiamos libremente, con la destreza y
seguridad que permiten el mejor banco de pruebas posible, una variedad inagotable de
soluciones, siempre en renovación, y una documentación de calidad superior a la
estándar de los programas no libres. El software libre, sobre todo si es copyleft,
mantiene e impulsa el entusiasmo universal en la computación, especie en peligro en
las dos últimas décadas, e incluso comienza a servir de referencia para otros ámbitos
de la libertad intelectual.

No es seguro que esta apreciación de la realidad sea completa, pero es la de mucha


gente. Además, es el objeto de una polémica contemporánea trascendental, que no se
trata en este artículo sino muy de pasada. Las piezas puestas en juego por el software
libre son muchas y poderosas. Es cierto que el software libre trata de la libertad, y que

Plataforma de Teleformación de IFES Página 141 de 212


Introducción a Linux

éste no es un asunto sólo comercial o industrial. Simplemente, es una asunto muy


grande, de enjundia, origen o final de conflictos a veces muy serios.

En fin, tal vez la cosa esté a estas alturas algo más clara y podamos parafrasear a
Hilbert tranquilamente, pero sin bajar la guardia: Nadie podrá expulsarnos del paraíso
que la GNU-GPL ha creado para nosotros.

Apéndices
Apéndice A - Abreviaturas utilizadas
• CC - Código civil
• CE - Constitución española
• CP - Código penal
• Disp. Ad. - Disposición adicional
• Disp. Trans. - Disposición transitoria
• FSF - Free Software Foundation
• GNU-GPL - Licencia Pública General del proyecto GNU - GNU's Not Unix
• LCU - Ley de consumidores y usuarios
• LEC - Ley de enjuiciamiento civil
• LPI - Ley de propiedad intelectual
• MEDC - Ministerio de Educación, Cultura y Deporte
• OSD - Definición de Fuente Abierta, de la Open Source Initiative
• OSI - Open Source Initiative
• RD - Real Decreto
• RTV - Radiotelevisión
• sl - Software libre
• UE - Unión Europea

Apéndice B - Leyes, reglamentos, tratados


internacionales
Disposiciones españolas:

• La LPI vigente está recogida en el texto refundido de 1996, aprobado por


Real Decreto Legislativo 1/1996 de 12 de abril, publicado en el BOE núm. 97
de 22 de abril. Las últimas reformas se produjeron en marzo de 1998 y enero
de 2000. Está en elaboración una nueva modificación, por motivo de la
Directiva 2001/29/CE del Parlamento y Consejo, 22 de mayo, publicada el 22
de junio 2001, sobre armonización de determinados aspectos de los
derechos de autor y derechos afines en la sociedad de la información.
• Ley orgánica, de protección al honor, a la intimidad personal y familiar y a la

Página 142 de 212 Introducción a Linux


Introducción a Linux

propia imagen, 1/1982 de 5 de mayo.


• Ley general para la defensa de los consumidores y usuarios, 26/1984 de 19
de julio.
• Ley de patentes, 11/1986 de 20 de marzo.
• Ley de protección de las topografías de los semiconductores, 11/1988 de 3
de mayo.
• Ley de marcas, 17/2001 de 7 de diciembre.
• El Código penal español fue aprobado por la Ley Orgánica 10/1995 de 23 de
noviembre, BOE 281 de 24 de noviembre.
• Ley de enjuiciamiento civil, 1/2000 de 7 de enero.
• Real Decreto 1584/1991 de 18 de octubre, que aprueba el Reglamento del
Registro General de la Propiedad Intelectual. Es el que viene aplicándose
hasta que se encuentre totalmente en funcionamiento el sistema de registro
diseñado por el Real Decreto 733/1993 de 14 de mayo, que aprueba el
nuevo Reglamento del Registro General de la Propiedad Intelectual.
• RD 114/2000 de 28 de enero (BOE 33 de 8 de febrero), de la Comisión
Interministerial para actuar contra las actividades vulneradoras de los
derechos de propiedad intelectual e industrial (Comisión antipirateo).
• Reglamento del Consejo de la UE que prohibe la comercialización de
mercancías piratas y la intervención de las aduanas para impedirla, Rgl.(CE)
241/1999 de 25 de enero, DOCE 2.2.1999 L 27.

Convenios internacionales:

• Convenio de 14 de julio de 1967 que establece la Organización Mundial de


la Propiedad Intelectual.
• Convenio de Berna de 9 de septiembre de 1886 para la protección de las
obras literarias y artísticas, revisado en París el 24 de julio de 1971.
• Convención Universal de Ginebra de 6 de septiembre de 1952 sobre
Derecho de Autor, revisada en París el 24 de julio de 1971.

La Organización Mundial de la Propiedad Intelectual (OMPI) con sede en Ginebra, y la


Organización Mundial del Comercio (OMC) son foros generadores de importantes
documentos y acuerdos internacionales en materia de derechos de propiedad
intelectual.

Apéndice C - Referencias
Se incluye sólo una breve nota de los materiales utilizados.

Un libro introductorio, que no trata a fondo las cuestiones jurídicas pero sí el tema
general del software libre, WAYNER, P., "La ofensiva del software libre" , ed. Granica,
Barcelona, 2001.

Los sitios web en los que puede encontrarse información sobre los asuntos tratados en

Plataforma de Teleformación de IFES Página 143 de 212


Introducción a Linux

este artículo son naturalmente innumerables. Un buen libro en línea se encuentra en


www.oreilly.com/opensources/ , "Open Sources: Voices from the open source
revolution" , con artículos de E. S. Raymond, M. K. McKusick, S. Bradner, R. Stallman,
M. Tiemann, P. Vixie, L. Torvalds, R. Young, L. Wall, B. Behlendorf, B. Perens, T.
O'Reilly, y J. Hamerly y T. Paquin con S. Walton, ed. O'Reilly Ass., Inc., 2000.

Para conocer los fundamentos del software libre, y no sólo los jurídicos, es evidente
que el directorio recomendado está en www.gnu.org/philosophy/ . La mejor aplicación
práctica de la teoría del proyecto GNU está basada en www.debian.org/social_contract.
Un buen lugar para empezar a leer sobre programas libres y sus problemas en cuanto
a licencias es www.opensource.org

En castellano puede consultarse http://gsyc.escet.urjc.es/sobre/, grupo SoBre de


software libre.

Una lectura nueva y práctica se encuentra en el proyecto (proposición diríamos en


España) de ley sobre uso del software libre en la Administración pública, remitido al
Congreso peruano el 9 de abril de 2002 por los congresistas E.VILLANUEVA NÚÑEZ y
J.RODRICH ACKERMAN, http://www.gnu.org.pe/rescon.html.

Artículos
• Lista por temas
• Lista por autor
• Licencia GFDL
• Licencia GPL

La Espiral
• Objectivo/ Noticias
• Recetas
• Contribuir
• Historia
• Repositorio CVS
• Contacto

v. 0.92, 16 de abril de 2002


© Copyright 2001, 2002, 2003, 2004, La Espiral, debian-laespiral@lists.debian.org
Permitida la cópia y distribución textual, integral, siempre y cuando se mantenga este
aviso.

Página 144 de 212 Introducción a Linux


Introducción a Linux

Internet y herramientas de red


Navegadores de la World Wide Web (WWW)
Adaptado de:
, un documento libre del Grupo de usuarios Gulic

Durante muchos años Netscape Communicator 4 fue el único navegador


multiplataforma real, dando cobertura a muchos de los distintos UNIX comerciales
existentes. Puesto que Linux no podía ser menos, casi desde que Linux tiene interfaz
gráfico ha existido una versión del navegador de Netscape para este sistema operativo.

Netscape Communicator 4 proporciona soporte para navegación de páginas web con


JavaScript y Flash 5, y permite visualizar documentos PDF dentro del navegador
(mediante un plugin para el Adobe Acrobat Reader). También nos permite gestionar el
correo electrónico y componer páginas web. Los Linuxeros siempre hemos considerado
que el navegador de Netscape consumía demasiados recursos en Linux, además de
tener bastantes problemas de estabilidad. Debido a éste y a otros factores importantes,
como fueron la forma de competir con la casa Microsoft Corporation, Netscape
Communications Corporation llegó a la sana conclusión de que la mejor manera de
mantener su navegador en el mercado era liberando su código fuente. Así nació el
proyecto Mozilla .

Sin embargo, Mozilla sigue siendo un navegador excesivamente pesado para un


número importante de máquinas. Dentro de la comunidad del Software Libre, se
alzaron voces en contra de ese desperdicio de recursos, proponiendo la creación de
navegadores alternativos. Aquí listamos algunas de las alternativas que podemos
encontrar en el área de los navegadores web dentro del Software Libre:

• Netscape Communicator: Bajo dicho nombre podemos encontrar el


navegador original de Netscape. La última versión es la 4.77.

• Epiphany: Es un navegador que utiliza el motor de rendering Genko de


Mozilla para mostrar el contenido de la World Wide Web. Sin embargo,
puesto que utiliza las bibliotecas de GNOME y GTK es ligeramente más
rápido que Mozilla, y se integra perfectamente con el resto de las
aplicaciones GNOME.

• Konqueror: Gestor de ficheros, navegador web y visor de documentos del


KDE.

• Mozilla: Es un sofisticado navegador gráfico de la World Wide Web que


soporta un gran número de tecnologías, como por ejemplo soporte para

Plataforma de Teleformación de IFES Página 145 de 212


Introducción a Linux

HTML 4.0, CSS 2, JavaScript y Java. Además de poder ser utilizado como
un sencillo visor de HTML. Mozilla está basado en parte del código de los
navegadores Netscape Communicator y Netscape Navigator.

• Mozilla Firefox: Navegador que también procede de fundación Mozilla. En


los últimos tiempos se está convirtiendo en un navegador de referencia por
su rapidez y sencillez de uso.

Bueno, seguro que en el momento de leer este apartado, habrán surgido nuevos
navegadores web dentro del mundillo del Software Libre.

Mozilla
Mozilla es probablemente el más completo de los navegadores multiplataforma. Esto es
debido a que implementa soporte para un gran número de tecnologías de la World
Wide Web, y se ciñe rigurosamente a los estándares del W3C (nombre con el que se
conoce al World Wide Web Consortium, que es el organismo encargado de la
estandarización de las diferentes tecnologías presentes en la World Wide Web).

Página 146 de 212 Introducción a Linux


Introducción a Linux

Ventana del navegador web Mozilla

Para centrarnos en el manejo de Mozilla empezaremos mirando la Figura. En ella


podemos observar la clásica ventana de navegación de Mozilla que es semejante a la
de otros muchos navegadores. A continuación enumeramos los elementos de la
ventana de arriba a abajo y de izquierda a derecha:

1. Barra de menús

2. Barra de herramientas de navegación

3. Barra de herramientas personales

4. Panel lateral

5. Área de visualización de la navegación

6. Barra de tareas

La visualización de la mayor parte de estos elementos puede activarse o desactivarse


desde el menú VER -> BARRA DE HERRAMIENTAS de la barra de menú del
programa.

Adicionalmente disponemos de una barra denominada barra de componentes. Dicha


barra se muestra como unos pequeños iconos a la izquierda de la barra de tareas
(parte inferior de la ventana del programa). Dicha barra nos permite lanzar de forma
sencilla y rápida algunas de las otras herramientas de Internet que acompañan al
navegador web Mozilla. Entre dichas herramientas disponemos de un editor de HTML y
de un lector de noticias y de correo electrónico.

Navegación básica
Para navegar por la World Wide Web basta con introducir la dirección de la máquina o
recurso al que deseamos acceder en la barra de herramientas de navegación. La
misma barra dispone a la izquierda de botones para avanzar o retroceder a través de
las páginas visitadas, recargar la página actual, o detener la descarga. A la derecha de
la barra disponemos de un botón de acceso rápido al menú de impresión, con el que
podemos imprimir la página actual. Para simplificar el aprendizaje, si dejamos el
puntero del ratón sobre cualquiera de los botones durante unos segundos la aplicación
nos informará de la función de cada uno.

Además de las funciones básicas la barra de herramientas de navegación nos permite


realizar búsquedas de términos en Internet. Para ello basta con introducir las palabras

Plataforma de Teleformación de IFES Página 147 de 212


Introducción a Linux

a buscar en la propia barra y a continuación pulsar en el botón BUSCAR. El navegador


consultará al buscador que tengamos configurado (por defecto se trata del de Netscape
Network) y nos mostrará los resultados. El buscador utilizado puede ser configurado en
EDITAR -> PREFERENCIAS... -> NAVIGATOR -> BÚSQUEDA EN INTERNET.
Mientras que el contenido de la propia barra de herramientas de navegación puede ser
configurado en EDITAR -> PREFERENCIAS... -> NAVIGATOR. Nos ocuparemos de
describir el cuadro de diálogo PREFERENCIAS y las opciones de configuración de
Mozilla más a delante.

Menú del botón de retroceso de la barra de herramientas de navegación

Algunos de los botones de la barra de herramientas de navegación disponen de un


pequeño icono con forma de flecha en la parte inferior-derecha de los mismos. Dicho
icono suele desplegar un menú con opciones adicionales. En el caso particular de los
botones de avance y retroceso dicho menú nos permite elegir a que dirección, de entre
las ya visitadas, queremos avanzar o retroceder. Hay que tener en cuenta que si no
existiera el menú tendríamos que retroceder o avanzar por las páginas visitadas de una
en una.

Durante nuestra visita a la World Wide Web la barra de tareas suele mantenernos

Página 148 de 212 Introducción a Linux


Introducción a Linux

informados de las acciones que realiza el navegador. Por ejemplo, nos informa de si
estamos detenidos y de cuanto se tardó en descarga la página actual, o de si estamos
descargando alguna página.

Además, la barra de tareas dispone de una serie de iconos en la parte derecha con el
objetivo de mantenernos informados del estado de la conexión. Si dejamos unos
segundos el puntero del ratón sobre dichos iconos seremos informados de su
significado, e incluso podremos realizar alguna acción relacionada con dicha
información.

• Trabajar sin conexión: Mientras disponemos de conexión a la red y


navegamos, Mozilla descarga las páginas que vamos visitando y las
almacena en el disco duro en lo que se denomina una caché. La existencia
de está caché es importante puesto que si visitamos varias veces una misma
dirección Mozilla no tiene necesidad de volver a repetir la descarga. En su
lugar nos proporciona directamente la página almacenada en la caché. En
ocasiones no disponemos de conexión a red por lo que sería deseable que
Mozilla no intentará descargarse la páginas desde la red y nos mostrara
directamente la copia en la caché. También es posible que aun habiendo
conexión estemos interesados en que Mozilla no haga uso de ella. Ese
modo de trabajo que andamos buscando es el denominado trabajo sin
conexión. Existe un icono que representa dos enchufes desconectados que
nos indica que estamos en dicho modo. Si los enchufes están conectados
significa que estamos haciendo uso de la conexión de red, es decir trabajo
con conexión. El paso de un modo de trabajo a otro se puede realizar
pulsando con el ratón sobre el icono, o seleccionando el elemento de menú
ARCHIVO -> TRABAJAR SIN CONEXIÓN.

• Cookies: En ocasiones algunos servidores de la World Wide Web requieren


que los navegadores que los acceden almacenen cierta información. En
muchos casos se trata de información sobre nuestras preferencias que
dichos servidores han recopilado, y que desean que guardemos para volver
a reclamarla cuando nos volvamos a conectar a sus páginas. Este tipo de
comportamiento puede ser un agujero de seguridad en potencia (o al menos
un problema de privacidad) por lo que Mozilla dispone de un filtro de cookies
que nos permite decidir en que servidores confiamos y en cuales no. Si
nuestro navegador ha aceptado una cookie para ser almacenada podremos
observar el icono de una galleta. Pulsando sobre la misma podremos
averiguar la información que contiene, asícomo configurar el filtro de cookies
frente a posibles peticiones futuras.

• Seguridad: Es importante recordar que todo lo que recibimos o enviamos


desde o hacia la World Wide Web es fácilmente interceptarle. Cuando
accedemos a páginas donde la seguridad de las comunicaciones es de vital

Plataforma de Teleformación de IFES Página 149 de 212


Introducción a Linux

importancia dicha comunicación se hace cifrando los datos. Si disponemos


de un icono con un candado abierto en nuestro navegador significa que todo
lo que hagamos en Internet puede ser observado por otros. Sin embargo, si
dicho candado está cerrado es porque las comunicaciones son seguras, por
lo que tenemos garantías de que nuestros datos no pueden ser fácilmente
interceptados. Al pulsar sobre dicho icono obtendremos la información de
seguridad para la pagina actual.

Al igual que en muchos otros navegadores Mozilla dispone de un menú de contexto


activable pulsando con el botón derecho del ratón sobre alguno los elementos del área
de visualización. Dicho menú nos permite, por ejemplo, recargar la página actual,
descargar un enlace, o abrir un enlace en una ventana diferente, entre otras muchas
posibles acciones.

Durante la navegación por la World Wide Web resulta habitual disponer de varias
ventanas de Mozilla abiertas en páginas diferentes. Sin embargo, todas esas ventanas
están ligadas a un mismo proceso en ejecución del navegador Mozilla. Es importante
conocer esto puesto que si seleccionamos el elemento de menú ARCHIVO -> SALIR
TODAS las ventanas de Mozilla se cerraran, al terminar el proceso que las gestionaba.
Si por el contrario deseamos cerrar únicamente una de las ventanas en particular,
debemos seleccionar ARCHIVO -> CERRAR o utilizar el botón correspondiente de la
barra de título del marco de la ventana.

Pestañas
Una de las innovaciones tomada de otros navegadores e introducida en Mozilla es el
uso de las pestañas durante la navegación. Tanto si seleccionamos la opción
ARCHIVO -> NUEVO -> PESTAÑA DE NAVIGATOR, como si seleccionamos en
ABRIR EN UNA PESTAÑA NUEVA cuando pulsamos con el botón derecho en un
enlace, se nos abre una nueva área de visualización dentro de la misma ventana de
Mozilla. Podemos disponer de tantas áreas como deseemos y en cada una visualizar
una página diferente.

Página 150 de 212 Introducción a Linux


Introducción a Linux

Navegación con pestañas en Mozilla

En la figura anterior podemos observar cómo cada área está representada por una
pestaña en la parte superior del área de visualización. Seleccionando un pestaña u otra
podremos navegar por una página u otra. Cuando deseemos cerrar la pestaña
seleccionada bastará con que pulsemos en botón a la derecha de todas las pestañas.
También podemos arrastrar un enlace en la pagina web del área de visualización sobre
una de las pestañas. Con ello conseguimos que en dicha pestaña se cargue el recurso
del la World Wide Web al que apunta dicho enlace (por ejemplo, una página web, una
imagen, etc).

Algunos aspectos del comportamiento de las pestañas pueden ser configurados en


EDITAR -> PREFERENCIAS... -> NAVIGATOR -> PESTAÑAS.

Marcadores
Mozilla nos permite almacenar de forma ordenada y clasificada las direcciones de los
recursos de la World Wide Web que más nos interesan. Dicho almacenamiento se hace
en forma de lo que se denominan marcadores.

Plataforma de Teleformación de IFES Página 151 de 212


Introducción a Linux

Añadir la dirección de la página actual como marcador es tan sencillo como seleccionar
MARCADORES -> AÑADIR A MARCADORES. También podemos pulsar con el botón
derecho del ratón sobre un enlace y seleccionar la opción correspondiente para
añadirlo a los marcadores.

En todo caso el marcador se crea siempre al final de la lista. Si deseamos tener un


control más fino para, por ejemplo, añadir el marcador a una carpeta determinada,
podemos utilizar el menú MARCADORES -> ARCHIVAR MARCADOR...Dicha opción
del menú muestra un cuadro de diálogo que nos permite seleccionar el nombre del
nuevo marcador, crear carpetas de marcadores, y elegir en que carpeta deseamos
guardarlo. Los marcadores así creados son accesibles en forma de menús en el menú
MARCADORES de la barra de menús.

En ocasiones es necesario realizar sobre los marcadores tareas de administración


mucho más avanzadas. La opción MARCADORES -> ADMINISTRAR MARCADORES
despliega un cuadro de diálogo (figura siguiente) que nos permite manipular los
marcadores a nuestro antojo. Podemos movernos por el árbol de marcadores y
copiarlos o pegarlos con ayuda de ratón. También podemos alterar sus propiedades
utilizando el menú de contexto que se despliega con el uso del botón derecho de
nuestro ratón.

Página 152 de 212 Introducción a Linux


Introducción a Linux

Cuadro de diálogo ADMINISTRAR MARCADORES

El administrador de marcadores dispone de opciones para ordenar los marcadores


según diversos criterios, para realizar búsquedas, y para exportar o importar hacia o
desde los marcadores de otros navegadores. Además de carpetas, el administrador de
marcadores nos permite crear separadores que se utilizan para separar elementos
dentro de los menús. Al igual que con el resto de las ventanas de Mozilla debemos
evitar utilizar la opción ARCHIVO -> SALIR puesto que ésta cierra todas la ventanas del
programa.

Entre las carpetas de marcadores existe una con un significado especial. La carpeta
PERSONAL TOOLBAR FOLDER representa la barra de herramientas personales, que
está situada debajo de la barra de herramientas de navegación. Todos los marcadores
insertados en dicha carpeta aparecerán automáticamente como botones en la citada
barra de herramientas.

Panel lateral
A la izquierda del área de visualización está el panel lateral o sidebar de Mozilla. Dicho
panel dispone de una serie de pestañas con funciones que ayudan a la navegación.
Utilizando el menú PESTAÑAS del panel lateral podemos decidir que pestañas vemos
de entra la disponibles. También podemos personalizar nuestro panel añadiendo
nuevas pestañas con nuevas funciones descargadas desde Internet.

Para que no interfiera con la navegación podemos modificar el ancho del panel
pulsando con el ratón en la barra que lo separa del área de visualización. Si hacemos
una pulsación sencilla sobre la pequeña marca del centro podremos plegar y desplegar
el panel de forma rápida. También podemos ocultarlo de forma permanente pulsando
en la equis de la parte superior-derecha del panel.

Por defecto, en el reducido espacio del panel lateral podemos consultar el historial y los
marcadores, y realizar búsquedas por palabras o por temas relacionados en Internet.
Sin embargo, como ya hemos comentado, dichas funcionalidades son completamente
ampliables.

Preferencias
Muchas de las características de Mozilla son personalizables. En la figura siguiente
podemos observar el cuadro de diálogo de preferencias de Mozilla. A dicho cuadro
podemos acceder desde la opción EDITAR -> PREFERENCIAS...

Las preferencias de Mozilla están clasificadas en categorías. Al seleccionar una

Plataforma de Teleformación de IFES Página 153 de 212


Introducción a Linux

categoría podemos observar en el lado derecho de la ventana las opciones de


configuración relacionadas. Además, cada categoría puede contener subcategorías
cuya lista se despliega o se pliega con una pulsación simple del ratón sobre dicha
categoría.

Cuadro de diálogo de preferencias de Mozilla

• APARIENCIA: Preferencias tales como los colores, o los tipos de letras


utilizados por el navegador en la visualización de las páginas web son
establecidas en esta categoría. También podemos seleccionar el idioma y el
tema de la aplicación. Seleccionar un nuevo tema cambia el aspecto visual
de los botones, cuadros de diálogo, menú, barras de herramientas y otros
objetos. En Internet resulta sencillo encontrar todo tipo de temas para
personalizar nuestro navegador.

• NAVIGATOR: Las preferencias específicas del navegador son establecidas


en esta categoría. Entre ellas contamos con la dirección de la página de
inicio, el buscador por defecto, o la administración del historial de
direcciones. En ocasiones el contenido de las páginas web está disponible
en varios idiomas. En esta categoría podemos establecer los idiomas en los

Página 154 de 212 Introducción a Linux


Introducción a Linux

que preferimos ver dichas páginas web.

• COMPOSER: En esta categoría podemos encontrar toda una serie de


opciones relacionadas con el editor de páginas web que viene con Mozilla.

• MAIL & NEWS: En caso de haber instalado el lector de noticias y de correo


electrónico de Mozilla, podemos acceder a esta categoría para configurarlo.

• PRIVACIDAD Y SEGURIDAD: Las preferencias de privacidad y seguridad


determinan las características del filtrado de cookies e imágenes. Además,
nos permite configurar el navegador para que guarde contraseñas o datos
de formularios que utilizamos habitualmente. También nos permite gestionar
los protocolos y certificados utilizados durante las conexiones encriptadas.
Debido a que la mayor parte de esta información confidencial es almacenada
en el disco duro, Mozilla permite la encriptación de dichos datos bajo una
contraseña maestra. Con ello se consigue que esa información no pueda ser
accesible a terceros.

• AVANZADAS: En esta categoría se configuran aspectos avanzados como el


soporte de Java y JavaScript, la configuración del caché, o el acceso a la red
a través de proxies. La opciones de esta categoría nos permiten, por
ejemplo, establecer qué permitimos y qué no permitimos hacer a las páginas
web a las que accedemos.

• SIN CONEXIÓN Y ESPACIO EN DISCO DURO: Configuración sobre el


comportamiento del navegador en los modos de trabajo con conexión y sin
conexión. Podemos utilizar la ayuda para obtener información más detallada
de cada una de las opciones.

Programas FTP (gFTP)


Existen multitud de programas clientes de FTP tanto para la consola como para el
entorno gráfico.

gFTP es el cliente FTP del entorno de escritorio GNOME. Se trata, por tanto, de un
cliente en modo gráfico diseñado para facilitar el acceso a los recursos FTP. El uso de
un cliente en modo gráfico nos permite olvidarnos de los comandos del protocolo FTP.
En su lugar todas las operaciones se reducen a sencillas acciones sobre la interfaz
gráfica.

Plataforma de Teleformación de IFES Página 155 de 212


Introducción a Linux

Ventana de gFTP en una conexión a ftp.es.debian.org

En la figura anterior podemos observar la ventana de un gFTP con una conexión a


ftp.es.debian.org. Para iniciar una sesión de FTP con gFTP debemos recurrir a la barra
situada justo debajo de la barra de menús. En ella debemos especificar los datos
requeridos para realizar la conexión.

• SERVIDOR: En este campo debemos escribir el nombre de la máquina


remota a la que nos vamos a conectar. En el de la figura anterior fue
ftp.es.debian.org.

• PUERTO: Cada servicio que se ofrece en Internet tiene un puerto asociado.


El puerto por defecto para el servicio de FTP es el 21, aunque algunas
máquinas dan dicho servicio en otro puerto cualquiera. En este campo se
debe especificar el puerto en el que la máquina remota está esperando las
peticiones de FTP. Si no se indica nada, como es nuestro caso, gFTP
asumirá que queremos utilizar el puerto por defecto, es decir, el 21.

• USUARIO: En este campo debemos indicar el nombre de usuario con el que


queremos acceder a la máquina remota. Si el servidor es público, lo más

Página 156 de 212 Introducción a Linux


Introducción a Linux

probable que utilizando el nombre anonymous podamos acceder a través de


la cuenta de usuario anónima.

• CONTRASEÑA: La contraseña asociada al usuario con el que queremos


acceder. En caso de acceder a través de la cuenta de usuario anónima
debemos indicar nuestra dirección de correo electrónico.

• PROTOCOLO: El último campo nos permite indicar el protocolo que vamos


a utilizar para nuestra conexión. gFTP no sólo puede utilizar el protocolo FTP
para realizar transferencias de archivos. Por ejemplo, podemos utilizar SSH2
para realizar transferencias de archivos encriptadas. Esto garantiza que
tanto nuestro datos (nombre de usuario, contraseña, etc) como los de los
archivos estén seguros frente a intentos de interceptación de las
comunicaciones. Es importante destacar que el protocolo FTP no es un
protocolo seguro, en el sentido de que nuestra contraseña y todos los demás
datos que viajen por la conexión son fácilmente interceptables.

Tras completar los datos podemos pulsar en el botón de la izquierda para iniciar la
sesión. gFTP se encarga de enviar los comandos necesarios para iniciar la conexión,
evitándonos el engorroso problema de tener que conocerlos. El botón de la izquierda
nos permite iniciar una conexión si ésta no ha sido iniciada, o terminarla si ya ha sido
iniciada correctamente. Sin embargo, si queremos detener el intento de conexión en
curso debemos recurrir al botón de la derecha. Dicho botón se utiliza para abortar
cualquier tarea que gFTP esté realizando en el momento actual.

En la parte inferior de la ventana de gFTP podremos observar un registro de la


conexión. En rojo veremos información propia de gFTP, en verde observaremos los
comandos que gFTP envía a la máquina remota, y en azul podremos ver la respuestas
de la máquina remota a dichos comandos. Sea cual sea la tarea que estemos
realizando siempre quedará registrada en esa zona de la ventana. Por eso suele ser
importante estar atento a ella para saber en todo momento lo que está sucediendo.
Utilizando la barra de desplazamiento de la derecha podremos ver los mensajes
antiguos, o que hayan pasado demasiado rápido.

El centro de la ventana de gFTP está dividido en dos áreas que podemos utilizar para
navegar por el árbol de directorios. El área de la izquierda podemos utilizarla para
movernos por el árbol de directorios de la máquina local. Mientras que el área de la
derecha, siempre y cuando gFTP esté conectado, podemos utilizarla para movernos
por el árbol de directorios de la máquina remota. En ambos lados podemos utilizar el
botón derecho del ratón para desplegar un menú de contexto con un amplio conjunto
de opciones. Con ellas podemos crear directorios, renombrar archivos, ver y editar
archivos, modificar sus atributos, borrar, etc.

Plataforma de Teleformación de IFES Página 157 de 212


Introducción a Linux

Mientras que la doble pulsación sobre una directorio nos permite ver su contenido, una
doble pulsación sobre un archivo inicia una transferencia para que el archivo sea
enviado al otro lado de la conexión. El mismo efecto conseguimos si seleccionamos
uno o más archivos (p. ej. pulsando con el botón izquierdo del ratón sobre el archivo
deseado mientras mantenemos pulsada la tecla Ctrl o Shift) y los arrastramos al área
del otro lado. También podemos conseguir el mismo efecto si pulsamos sobre los
botones situados en el centro de las dos áreas. Dichos botones nos permiten iniciar la
transferencia de archivos en el sentido que más nos convenga.

Justo entre el área donde se registran las tareas realizadas por gFTP y la que
utilizamos para explorar los árboles de directorios, tenemos la cola de transferencias.
Todas las transferencias iniciadas o pendientes se muestran en dicha área, así como
información relacionada con ellas. Utilizando el menú de contexto que se despliega con
el botón derecho de nuestro ratón podemos detener o iniciar una transferencia, o
alterar el orden de la cola para decidir qué transferencia se iniciará después de que se
complete la actual. Por defecto, las transferencias desde máquinas remotas diferentes
se realizan en paralelo, mientras que las transferencias desde una misma máquina
remota que se van realizando secuencialmente.

Mensajería instantánea y IRC


Gaim
Entre la surtida gama de clientes de Mensajería Instántanea, destacaremos el
programa Gaim. La característica que nos mueve a destacar este programa en
particular es la gran cantidad de protocolos soportados en un único cliente. Con este
cliente de Mensajería Instántanea podremos conectarnos con los servicios de MSN,
Yahoo, AOL, ICQ, Jabber, Napster o el propio IRC, por citar algunos de los protocolos
soportados.

Página 158 de 212 Introducción a Linux


Introducción a Linux

Ventana de Gaim en una charla con otro usuario a través de Jabber

XChat/KVirc
Otro de los servicios que se suelen utilizar con bastante frecuencia, se encuentran las
“consultas” al IRC. Este protocolo nos permite estar interconectados con otros grupos
de usuarios, de una manera muy dinámica. En Linux, en el apartado de clientes de IRC
gráficos, destacan especialmente dos clientes: XChat y KVirc
XChat es un cliente de IRC muy flexible, que nos permite mantener sesiones no sólo en
varios canales al mismo tiempo, sino que incluso nos permite conectar con varios
servidores de IRC al mismo tiempo, todo ello de una manera muy intuitiva.

Plataforma de Teleformación de IFES Página 159 de 212


Introducción a Linux

Ventana de Xchat en un canal de IRC

De la misma manera, el KVirc es otro cliente gráfico capaz de satisfacer al más


exigente de los usuarios. Entre otras cosas destaca por las ayudas que presta a
aquellos que les gusta disfrutar haciendo “scripts” para los clientes de IRC.

Aplicaciones de correo electrónico


Adaptado de:
, un documento libre del Manual oficial de referencia de Red Hat Linux

El correo electrónico es un modo muy popular de comunicarse con otros a través de


Internet. Puede usarlo con un cliente de correo , una aplicación que entiende las
diversas transmisiones de correo electrónico estándar y le permite enviar, recibir y leer
el correo electrónico. Cualquier distribución Linux contiene varias aplicaciones de
correo electrónico, incluyendo los clientes de correo electrónico gráficos como por
ejemplo Evolution Mozilla Mail y clientes en modo texto tal como mutt . Todas las
aplicaciones de clientes de correo electrónico están diseñados para satisfacer a ciertos
tipos de usuarios; de manera que pueda escoger uno con las características que mejor
satifacen sus necesidades en particular.

Página 160 de 212 Introducción a Linux


Introducción a Linux

Ya que algunos clientes de correo electrónico ejecutan las mismas tareas básicas
(enviar y recibir correo electrónico), escoja la más conveniente y fácil de usar.

Antes de lanzar el cliente de correo electrónico, debería tener alguna información útil
sobre su Internet Service Provider (ISP) de manera que pueda configurar el cliente
adecuadamente. Las siguientes listas muestran algunas cosas que es necesario que
conozca:

Su dirección de correo electrónico


La dirección de correo electrónico que utilizará para enviar y recibir el correo.
Normalmente adopta la forma de yourname@yourisp.net .

Tipo de servidor para recibir correo (POP o IMAP)


Para recibir correo, debe saber el tipo de servidor que utiliza su administrador de
la red o proveedor de servicios de Internet. Esta dirección POP o IMAP
normalmente adopta la forma de mail.someisp.net .
POP , acrónimo de Post Office Protocol , se usa para enviar correo electrónico
desde un servidor de correo a su buzón de correo del cliente de correo
electrónico, el lugar en el que el correo electrónico de entrada está almacenado.
La mayoría de los servidores de correo electrónico ISP usan el protocolo POP,
aunque puedan utilizar el protocolo más reciente IMAP (Internet Message Access
Protocol).
IMAP , acrónimo de Internet Message Access Protocol , es un protocolo para
recuperar los mensajes de correo electrónico desde su servidor de correo
electrónico ISP. IMAP se diferencia de POP en que los correos electrónicos de los
servidores IMAP están almacenados en el servidor y permanece allí incluso si
descarga y lee su correo electrónico, mientras que el correo de POP está
descargado para su cliente de correo electrónico directamente y no está en el
servidor.

Tipo de servidor para enviar correo electrónico (SMTP )


El Simple Mail Transfer Protocol (SMTP)(Protocolo de transferencia de correo
simple), es un protocolo para enviar mensajes de correo electrónico entre
servidores. La mayoría de los sistemas de correo electrónico que envían correo a
través de Internet utilizan el protocolo SMTP para enviar mensajes de un servidor
a otro; los mensajes se pueden recuperar posteriormente con un cliente de correo
electrónico que utilice el protocolo POP o IMAP. SMTP se utiliza normalmente
para enviar mensajes de un cliente de correo a un servidor de correo. Por este
motivo, deberá especificar tanto el servidor POP o IMAP como el servidor SMTP
cuando configure la aplicación de correo electrónico.

Si tiene alguna duda o pregunta sobre la información necesaria, póngase en contacto


con su proveedor de servicios de Internet o administrador de la red. Salvo si ha
configurado correctamente esta información, no podrá hacer un uso completo de los
clientes de correo electrónico que se describen en este capítulo.

Plataforma de Teleformación de IFES Página 161 de 212


Introducción a Linux

Evolution
La aplicación Evolution es más que un simple cliente de correo electrónico.
Proporciona todas las funciones de administración de correo electrónico estándar, que
incluyen una administración eficaz de buzones, filtros definidos por el usuario y
búsquedas rápidas. Admite el uso de un calendario/programa flexible y permite a los
usuarios crear y confirmar reuniones de grupo en línea y eventos especiales. Evolution
es la primera herramienta completa de administración de información personal y de
trabajo en grupo para Linux y sistemas basados en UNIX.

Para lanzar Evolution en el panel del escritorio, seleccione Menú principal =>
Programas =>Internet =>Correo electrónico .

Pantalla de bienvenida de Evolution

La primera vez que inicie Evolution aparecerá la pantalla de bienvenida, que le permite
configurar su conexión de correo electrónico. Siga las instrucciones de la pantalla en la
información que ha recopilado desde su ISP o administrador en las casillas de texto
proporcionadas. Cuando acabe, haga click en Finish y verá la pantalla principal como
se muestra en la figura.

Página 162 de 212 Introducción a Linux


Introducción a Linux

Pantalla principal de Evolution

Para ver el contenido de su buzón o enviar un correo, haga clic en el icono Inbox .

Plataforma de Teleformación de IFES Página 163 de 212


Introducción a Linux

Pantalla de la bandeja de entrada de Evolution

Para componer un correo, seleccione New Message en la barra de herramientas.

Página 164 de 212 Introducción a Linux


Introducción a Linux

Pantalla de nuevo mensaje de correo electrónico de Evolution

Cuando haya compuesto el mensaje y haya introducido la dirección de correo


electrónico a la que enviará el correo, haga clic en Send en la barra de herramientas.

Mientras que Evolution hace mucho más que leer y enviar correo electrónico, este
capítulo se centra exclusivamente en las posibilidades del correo electrónico. Si desea
conocer más sobre el uso de algunas de las características de Evolution , como
calendario/programa y mensajes de grupo, haga click en Help desde la barra de
herramientas principal y escoja el componente que del que desea obtener más
información.

Mozilla Mail
En esta sección se ofrece una breve descripción de los pasos básicos para enviar y

Plataforma de Teleformación de IFES Página 165 de 212


Introducción a Linux

recibir correo con Mozilla .

Para iniciar Mozilla Mail , seleccione Menú principal => Todas las aplicaciones
Internet => Mozilla Mail .

Para abrir Mozilla Mail mientras está en la aplicación Mozilla , haga clic en el icono de
correo situado en la esquina inferior izquierda de la pantalla de Mozilla .

Correo y noticias en Mozilla

Página 166 de 212 Introducción a Linux


Introducción a Linux

Pantalla de nuevo mensaje de correo electrónico de la herramienta de correo de


Mozilla

Para enviar un correo electrónico, haga clic en el botón Send o seleccione File =>
Send Now o Send Later . Si opta por enviar el correo más tarde, puede volver a la
pantalla de correo principal y seleccionar File => Send unsent messages .

Para leer el correo electrónico, haga clic en la carpeta de correo que ha creado para
ver una lista de los mensajes que ha recibido y todavía no ha leído. A continuación,
haga clic en el mensaje que desee leer.

Cuando haya leído un mensaje, puede eliminarlo o guardarlo en otra carpeta, entre
otras muchas opciones.

Mozilla y los grupos de noticias


Los grupos de noticias son grupos de debate en Internet que tratan temas específicos.

Plataforma de Teleformación de IFES Página 167 de 212


Introducción a Linux

Los debates se realizan en formato threaded (lo que significa que todos los temas y
respuestas al tema están organizados de manera que la lectura y suscriptción a un
grupo sea sencilla. No debe enviar mensajes si no lo desea, puede llevar a cabo lurk ,
que es un término de los grupos de noticias para la lectura sin enviar mensajes. Hay
muchos grupos de noticias realmente excelentes en la Web con temas que abarcan
desde la política hasta juegos de ordenador y extrañas filosofías. Puede enviar y
descargar fotografías y archivos a los grupos de noticias (aunque su ISP restrinja los
grupos de noticias a envios de sólo texto).

Para participar en un grupo de noticias, primero deberá configurar una cuenta de grupo
de noticias. Haga clic en el nombre de la cuenta de correo en la barra lateral y
seleccione Create a new account en las opciones que aparecen en el lado derecho de
la pantalla. Aparecerá la pantalla New Account Setup . Seleccione Newsgroup
account y haga click en Next .

Configuración de una cuenta para el grupo de noticias

Página 168 de 212 Introducción a Linux


Introducción a Linux

Introduzca su nombre y la dirección de correo electrónico en la siguiente pantalla y


haga clic en Next . En la siguiente pantalla, escriba el nombre del servidor de noticias
(si no conoce el nombre del servidor de noticias, póngase en contacto con el proveedor
de servicios de Internet para que le proporcione esta información). En las últimas
pantallas, puede determinar o su administrador de redes para esta información). En las
otras pantallas, puede determinar el nombre al que esta cuenta se referirá y revisar la
configuración.

Ahora, aparecerá la cuenta de grupo de noticias que acaba de crear en la barra lateral
de la pantalla de correo de Mozilla . Haga clic con el botón derecho del ratón en este
nombre de cuenta y seleccione Subscribe . Aparecerá un cuadro de diálogo con una
lista de todos los grupos de noticias disponibles. Seleccione los grupos que desee leer
y haga clic en Subscribe . Cuando haya acabado, haga clic en OK .

Ahora, haga clic en la flecha situada junto al nombre de cuenta del grupo de noticias y
la lista de grupos a la que está suscrito aparecerá al lado. Seleccione el grupo de
noticias al que desea acceder y aparecerá un cuadro de diálogo con información sobre
cómo descargar y leer los mensajes existentes. La acción de publicar un mensaje en
un grupo de noticias es similar a escribir un correo electrónico, con la diferencia de que
el nombre del grupo de noticias aparece en el campo To en lugar de la dirección de
correo electrónico. Para anular la suscripción de un grupo de noticias, haga clic con el
botón derecho en el nombre del grupo y seleccione Unsubscribe .

Introducción a MySQL

Trabajar con MySQL


En este capítulo vamos a ver cómo:

• Qué es MySQL y usar el cliente mysql.


• Crear y usar una base de datos.
• Crear una tabla y añadir datos a la tabla.
• Seleccionar, modificar, ordenar y borrar registros de una tabla.
• Utilizar patrones de comparación en las consultas.
• Contar registros de una tablas.
• Usar más de una tabla en una base de datos.
• Usar mysql en modo batch.

¿Qué es MySQL?

MySQL es el servidor de bases de datos relacionales de código abierto más popular y

Plataforma de Teleformación de IFES Página 169 de 212


Introducción a Linux

desarrollado. Una de las razones para el rápido crecimiento de popularidad de MySQL,


es que se trata de un producto de código abierto, y por lo tanto, va de la mano con este
movimiento. Consta de las siguientes características.

• MySQL es un sistema de administración de bases de datos. Una base


de datos es una colección estructurada de datos. Los información que puede
almacenar una base de datos puede ser tan simple como la de una agenda,
un contador, o un libro de visitas, ó tan vasta como la de una tienda en línea,
un sistema de noticias, un portal, o la información generada en una red
corporativa. Para agregar, acceder, y procesar los datos almacenados en
una base de datos, se necesita un sistema de administración de bases de
datos, tal como MySQL.
• MySQL es un sistema de administración de bases de datos
relacionales. Una base de datos relacional almacena los datos en tablas
separadas en lugar de poner todos los datos en un solo lugar. Esto agrega
velocidad y flexibilidad. Las tablas son enlazadas al definir relaciones que
hacen posible combinar datos de varias tablas cuando se necesitan
consultar datos. La parte SQL de "MySQL" significa "Lenguaje Estructurado
de Consulta", y es el lenguaje más usado y estandardizado para acceder a
bases de datos relacionales.
• MySQL es código abierto. Código abierto significa que la persona que
quiera puede usar y modificar MySQL. Cualquiera puede descargar el
software de MySQL de Internet y usarlo sin pagar por ello. Inclusive,
cualquiera que lo necesite puede estudiar el código fuente y cambiarlo de
acuerdo a sus necesidades. MySQL usa la licencia GPL (Licencia Pública
General GNU), para definir qué es lo que se puede y no se puede hacer con
el software para diferentes situaciones. Sin embargo, si uno está incómodo
con la licencia GPL o tiene la necesidad de incorporar código de MySQL en
una aplicación comercial es posible comprar una versión de MySQL con una
licencia comercial.

Usar el cliente mysql

El objetivo de este capítulo es mostrar el uso del programa cliente mysql para crear y
usar una sencilla base de datos. mysql (algunas veces referido como "monitor mysql")
es un programa interactivo que permite conectarnos a un servidor MySQL, ejecutar
algunas consultas, y ver los resultados. mysql puede ser usado también en modo
batch: es decir, se pueden colocar toda una serie de consultas en un archivo, y
posteriormente decirle a mysql que ejecute dichas consultas.
Lo primero es instalar mysql en alguna máquina y disponer de un servidor MySQL al
cuál podemos conectarnos. En nuestro caso, para instalarlo bajo Guadalinex, podemos
abrir un terminal de Root ejecutando el menú Herramientas del sistema>Terminal de
Root. Tecleamos la contraseña del root y, dentro del terminal, nos aparece el shell

Página 170 de 212 Introducción a Linux


Introducción a Linux

(programa que interpreta y ejecuta los comandos que el usuario escribe en un indicador
de línea de comandos. Cuando iniciamos un Terminal, se activa el shell
predeterminado especificado en la cuenta del sistema donde tecleamos las siguientes
órdenes:

shell>apt-get update
shell>apt-get install mysql-server mysql-client
Con apt-get install incluso nos configura el arranque, los derechos de ejecución y las
bases de datos propias de mysql y nos ahorramos tener que redefinir el PATH. Para
probar que todo ha ido bien ejecutamos la consola mysql :

shell>mysql

y nos debería de aparecer el mensaje de bienvenida siguiente y el promt de mysql:

Welcome to the MySQL monitor. Commands end with ; org.Your MySQL connection id
is 3 to server version: 4.0.16-logType 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql>

Conectarse y desconectarse al servidor MySQL

Para conectarse al servidor, usualmente necesitamos de un nombre de usuario (login)


y de una contraseña (password), y si el servidor al que nos deseamos conectar está en
una máquina diferente de la nuestra, también necesitamos indicar el nombre o la
dirección IP de dicho servidor. Una vez que conocemos estos tres valores, podemos
conectarnos de la siguiente manera en un terminal:

shell> mysql -h NombreDelServidor -u NombreDeUsuario -p


Cuando ejecutamos este comando, se nos pedirá que proporcionemos también la
contraseña para el nombre de usuario que estamos usando.
Algunas instalaciones, como la comentada anteriormente, permiten que los usuarios se
conecten de manera anónima al servidor corriendo en la máquina local. Si es el caso
de nuestra máquina, como ya hemos visto, debemos de ser capaces de conectarnos al
servidor invocando a mysql sin ninguna opción en un terminal:

shell> mysql
Este prompt nos indica que mysql está listo para recibir comandos. Para ver la lista de
opciones proporcionadas por mysql , lo invocamos con la opción 'h':

mysql>h

Después de que nos hemos conectado de manera satisfactoria, podemos


desconectarnos en cualquier momento al escribir "quit", "exit", o presionar

Plataforma de Teleformación de IFES Página 171 de 212


Introducción a Linux

CONTROL+D.
La mayoría de los ejemplos siguientes asume que estamos conectados al servidor, lo
cual se indica con el prompt de mysql.

Ejecutar algunas consultas

En este momento debimos de haber podido conectarnos ya al servidor MySQL, aún


cuando no hemos seleccionado alguna base de datos para trabajar. Lo que haremos a
continuación es escribir algunos comandos para irnos familiarizando con el
funcionamiento de mysql

mysql> SELECT VERSION(), CURRENT_DATE;


+------------+--------------+
| VERSION() | CURRENT_DATE |
+------------+--------------+
| 4.0.16-log | 2004-11-03 |
+------------+--------------+
1 row in set (0.16 sec)

mysql>

Este comando ilustra distintas cosas acerca de mysql:

• Un comando normalmente consiste de un sentencia SQL seguida por un


punto y coma.
• Cuando emitimos un comando, mysql lo manda al servidor para que lo
ejecute, nos muestra los resultados y regresa el prompt indicando que está
listo para recibir más consultas.
• mysql muestra los resultados de la consulta como una tabla (filas y
columnas). La primera fila contiene etiquetas para las columnas. Las filas
siguientes muestran los resultados de la consulta. Normalmente las
etiquetas de las columnas son los nombres de los campos de las tablas que
estamos usando en alguna consulta. Si lo que estamos recuperando es el
valor de una expresión (como en el ejemplo anterior) las etiquetas en las
columnas son la expresión en sí.
• mysql muestra cuántas filas fueron regresadas y cuanto tiempo tardó en
ejecutarse la consulta, lo cual puede darnos una idea de la eficiencia del
servidor, aunque estos valores pueden ser un tanto imprecisos ya que no se
muestra la hora del CPU, y porque pueden verse afectados por otros
factores, tales como la carga del servidor y la velocidad de comunicación en
una red.
• Las palabras clave pueden ser escritas usando mayúsculas y minúsculas.

Página 172 de 212 Introducción a Linux


Introducción a Linux

Aquí está otra consulta que demuestra cómo se pueden escribir algunas expresiones
matemáticas y trigonométricas:

mysql> SELECT VERSION(), CURRENT_DATE;


+------------+--------------+
| VERSION() | CURRENT_DATE |
+------------+--------------+
| 4.0.16-log | 2004-11-03 |
+------------+--------------+
1 row in set (0.16 sec)

mysql>

Aunque hasta este momento se han escrito sentencias sencillas de una sola línea, es
posible escribir más de una sentencia por línea, siempre y cuando estén separadas por
punto y coma:

mysql> select now();select version();


+---------------------+
| now() |
+---------------------+
| 2004-11-04 15:49:25 |
+---------------------+
1 row in set (0.00 sec)
+------------+
| version() |
+------------+
| 4.0.16-log |
+------------+
1 row in set (0.02 sec)

Un comando no necesita ser escrito en una sola línea, así que los comandos que
requieran de varias líneas no son un problema. mysql determinará en dónde finaliza la
sentencia cuando encuentre el punto y coma, no cuando encuentre el fin de línea.
Aquí está un ejemplo que muestra un consulta simple escrita en varias líneas:

mysql> select
-> user(),
-> current_date;
+-----------------+--------------+
| user() | current_date |
+-----------------+--------------+
| chema@localhost | 2004-11-04 |
+-----------------+--------------+

Plataforma de Teleformación de IFES Página 173 de 212


Introducción a Linux

1 row in set (0.00 sec)

En este ejemplo notamos como cambia el prompt (de mysql> a ->) cuando se escribe
una consulta en varias líneas. Esta es la manera en cómo mysql indica que está
esperando a que finalice la consulta. Sin embargo si deseamos no terminar de escribir
la consulta, podemos hacerlo al escribir c como se muestra en el siguiente ejemplo:

mysql> select -> user(), -> c mysql>

De nuevo, se nos regresa el comando el prompt mysql> que nos indica que mysql está
listo para una nueva consulta.

En la siguiente tabla se muestran cada uno de los prompts que podemos obtener y una
breve descripción de su significado para mysql:

Prompt Significado

mysql> Listo para una nueva consulta.

-> Esperando la línea siguiente de una consulta


multi-línea.

'> Esperando la siguiente línea para completar


una cadena que comienza con una comilla
sencilla ( ' ).

"> Esperando la siguiente línea para completar


una cadena que comienza con una comilla
doble ( " ).

Tabla 20.1 Promts de mysql.

Los comandos multi-línea comúnmente ocurren por accidente cuando tecleamos


ENTER, pero olvidamos escribir el punto y coma. En este caso mysql se queda
esperando para que finalicemos la consulta:

mysql> SELECT USER() ->

Si esto llega a suceder, muy probablemente mysql estará esperando por un punto y
coma, de manera que si escribimos el punto y coma podremos completar la consulta y

Página 174 de 212 Introducción a Linux


Introducción a Linux

mysql podrá ejecutarla:

mysql> SELECT USER()


-> ;
+-----------------+
| USER() |
+-----------------+
|chema@localhost|
+-----------------+
1 row in set (0.00 sec)

Los prompts '> y "> ocurren durante la escritura de cadenas. En mysql podemos
escribir cadenas utilizando comillas sencillas o comillas dobles (por ejemplo, 'hola' y
"hola"), y mysql nos permite escribir cadenas que ocupen múltiples líneas. De manera
que cuando veamos el prompt '> o "> , mysql nos indica que hemos empezado a
escribir una cadena, pero no la hemos finalizado con la comilla correspondiente.
Aunque esto puede suceder si estamos escribiendo una cadena muy grande, es más
frecuente que obtengamos alguno de estos prompts si inadvertidamente escribimos
alguna de estas comillas.
Por ejemplo:

mysql> SELECT * FROM mi_tabla WHERE nombre = "Lopez AND antiguedad < 10;
">

Si escribimos esta consulta SELECT y entonces presionamos ENTER para ver el


resultado, no sucederá nada. En lugar de preocuparnos porque la consulta ha tomado
mucho tiempo, debemos notar la pista que nos da mysql cambiando el prompt. Esto
nos indica que mysql está esperando que finalicemos la cadena iniciada ("Lopez).
En este caso, ¿qué es lo que debemos hacer? . La cosa más simple es cancelar la
consulta. Sin embargo, no basta con escribir c, ya que mysql interpreta esto como
parte de la cadena que estamos escribiendo. En lugar de esto, debemos escribir antes
la comilla correspondiente y después c :

mysql> SELECT * FROM mi_tabla WHERE apellido = "Lopez AND antiguedad < 10;
"> " c
mysql>

El prompt cambiará de nuevo al ya conocido mysql>, indicándonos que mysql está listo
para una nueva consulta.

Es sumamente importante conocer lo que significan los prompts '> y ">, ya que si en
algún momento nos aparece alguno de ellos, todas la líneas que escribamos a
continuación serán consideradas como parte de la cadena, inclusive cuando escribimos
QUIT. Esto puede ser confuso, especialmente si no sabemos que es necesario escribir

Plataforma de Teleformación de IFES Página 175 de 212


Introducción a Linux

la comilla correspondiente para finalizar la cadena, para que podamos escribir después
algún otro comando, o terminar la consulta que deseamos ejecutar.

Crear y usar una base de datos

Ahora que conocemos como escribir y ejecutar sentencias, podemos ya acceder a una
base de datos.

Para ello, supongamos que tenemos mucha información musical en nuestra casa en
forma de compactos, discos de vinilo y cintas de casete y deseamos tener registros de
los datos acerca de ellas. Podemos hacer esto al crear tablas que guarden esta
información, para que posteriormente la consulta de estos datos sea bastante fácil y de
manera muy práctica. En esta sección vamos a ver como crear una base de datos,
crear una tabla, incorporar datos en una tabla, y recuperar datos de las tablas de
diversas maneras.

La base de datos "música" será deliberadamente muy sencilla, pero no es difícil pensar
de situaciones del mundo real en la cual una base de datos similar puede ser usada.

Primeramente usaremos la sentencia SHOW para ver cuáles son las bases de datos
existentes en el servidor al que estamos conectados:

mysql> SHOW DATABASES;


+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)

Es probable que la lista de bases de datos que veamos sea diferente en nuestro caso,
pero seguramente las bases de datos "mysql" y "test" estarán entre ellas (si hemos
accedido como 'root'). En particular, la base de datos "mysql" es requerida, ya que ésta
tiene la información de los privilegios de los usuarios de MySQL. La base de datos
"test" es creada durante la instalación de MySQL con el propósito de servir como área
de trabajo para los usuarios que inician en el aprendizaje de MySQL.

Tenemos que tener en cuenta también que es posible que no veamos todas las bases
de datos si no tenemos el privilegio SHOW DATABASES.

Si la base de datos "test" existe, se puede acceder a ella:

Página 176 de 212 Introducción a Linux


Introducción a Linux

mysql> USE test


Database changed

Observamos que USE , al igual que QUIT , no requieren el uso del punto y coma,
aunque si se usa éste, no hay ningún problema. El comando USE es especial también
de otra manera: éste debe ser usado en una sola línea.

Podríamos usar la base de datos "test" (si tenemos acceso a ella) para los ejemplos
que vienen a continuación, pero cualquier cosa que hagamos puede ser eliminada por
cualquier otro usuario que tenga acceso a esta base de datos. Por esta razón, es
recomendable que preguntemos al administrador MySQL acerca de la base de datos
que podemos usar. Supongamos que deseamos tener una base de datos llamada
"musica" (nótese que no se está acentuando la palabra) a la cual sólo nosotros
tengamos acceso, para ello el administrador necesita ejecutar un comando como el
siguiente:

mysql> GRANT ALL on musica.* TO MiNombreUsuario@MiComputadora


-> IDENTIFIED BY 'MiContraseña';

en donde MiNombreUsuario es el nombre de usuario asignado dentro del contexto de


MySQL, MiComputadora es el nombre o la dirección IP de la computadora desde la
que nos conectamos al servidor MySQL, y MiContraseña es la contraseña que se nos
ha asignado, igualmente, dentro del ambiente de MySQL exclusivamente. Ambos,
nombre de usuario y contraseña no tienen nada que ver con el nombre de usuario y
contraseña manejados por el sistema operativo.

Si el administrador creó la base de datos al momento de asignar los permisos,


podemos hacer uso de ella. De otro modo, nosotros debemos crearla:

mysql> USE musica


ERROR 1049: Unknown database 'musica'

El mensaje anterior indica que la base de datos no ha sido creada, por lo tanto
necesitamos crearla.

mysql> CREATE DATABASE musica;


Query OK, 1 row affected (0.00 sec)
mysql> USE musica;
Database changed
mysql>

Bajo el sistema operativo Guadalinex, los nombres de las bases de datos son sensibles
al uso de mayúsculas y minúsculas (no como las palabras clave de SQL), por lo tanto
debemos de tener cuidado de escribir correctamente el nombre de la base de datos.
Esto es cierto también para los nombres de las tablas.

Plataforma de Teleformación de IFES Página 177 de 212


Introducción a Linux

Al crear una base de datos no se selecciona ésta de manera automática; debemos


hacerlo de manera explícita, por ello usamos el comando USE en el ejemplo anterior.

La base de datos se crea sólo una vez, pero nosotros debemos seleccionarla cada vez
que iniciamos una sesión con mysql . Por ello es recomendable que se indique la base
de datos sobre la que vamos a trabajar al momento de invocar al monitor de MySQL.
Por ejemplo:

shell>mysql -h localhost -u chema -p musica


Enter password: ******
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 9 to server version: 4.0.16-log
Type 'help;' or 'h' for help. Type 'c' to clear the buffer

Observamos que "musica" no es la contraseña que se está proporcionando desde la


línea de comandos, sino el nombre de la base de datos a la que deseamos acceder. Si
deseamos proporcionar la contraseña en la línea de comandos después de la opción
"-p", debemos de hacerlo sin dejar espacios (por ejemplo, -pholamundo, no como -p
holamundo). Sin embargo, escribir nuestra contraseña desde la línea de comandos no
es recomendado, ya que es bastante inseguro.

Crear una tabla

SHOW TABLES:Crear la base de datos es la parte más fácil, pero en este momento la
base de datos está vacía, como lo indica el comando SHOW TABLES

mysql> SHOW TABLES;


Empty set (0.00 sec)

La parte un tanto complicada es decidir la estructura que debe tener nuestra base de
datos: qué tablas se necesitan y qué columnas estarán en cada tabla.
En principio, necesitamos una tabla que contenga un registro para cada una de
nuestros títulos de música. Ésta puede ser una tabla llamada discos, y debe contener
por lo menos el título de cada uno de nuestros discos. Ya que el nombre en sí no es
muy interesante, la tabla debe contener alguna otra información. Por ejemplo, es
probable que queramos guardar la información acerca de quien es el interprete de cada
disco. Así mismo, también sería interesante contar con alguna información más
descriptiva tal como el género musical de cada disco.
¿Y que sucede con la antigüedad del disco? Esto puede ser también de interés, pero
no es una buena idea almacenar este dato en la base de datos. La antigüedad cambia
conforme pasa el tiempo, lo cual significa que debemos de actualizar los registros
frecuentemente. En vez de esto, es una mejor idea guardar un valor fijo, tal como la
fecha de adquisición. Entonces, cuando necesitemos la antigüedad, la podemos

Página 178 de 212 Introducción a Linux


Introducción a Linux

calcular como la diferencia entre la fecha actual y la fecha de adquisición. MySQL


proporciona funciones para hacer operaciones entre fechas, así que no hay ningún
problema.
Es probable que estemos pensando en otro tipo de información que sería igualmente
útil en la tabla 'discos', pero para nosotros será suficiente por ahora contar con
información de título, autor, género y fecha de adquisición.

Usaremos la sentencia CREATE TABLE para indicar como estarán conformados los
registros de nuestras discos.

mysql> CREATE TABLE discos(


-> titulo VARCHAR(40), autor VARCHAR(20),
-> genero VARCHAR(20), adquisicion DATE);
Query OK, 0 rows affected (0.03 sec)

VARCHAR es una buena elección para los campos título, autor, y género, ya que los
valores que almacenarán son de longitud variable. Se puede especificar cualquier
longitud entre 1 y 255, lo que se considere más adecuado. Si resulta que la elección de
la longitud de los campos que hemos hecho no resultó adecuada, MySQL proporciona
una sentencia ALTER TABLE que nos puede ayudar a solventar este problema. El uso
del tipo de dato DATE para el campo adquisición debe de resultar obvio.

Ahora que hemos creado la tabla, la sentencia SHOW TABLES debe producir algo
como:

mysql> SHOW TABLES;


+------------------+
| Tables_in_musica |
+------------------+
| discos |
+------------------+
1 row in set (0.00 sec)

Para verificar que la tabla fue creada como nosotros esperábamos, usaremos la
sentencia DESCRIBE :

mysql> DESCRIBE discos;


+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| titulo | varchar(40) | YES | | NULL | |
| autor | varchar(20) | YES | | NULL | |
| genero | varchar(20) | YES | | NULL | |
| adquisicion | date | YES | | NULL | |

Plataforma de Teleformación de IFES Página 179 de 212


Introducción a Linux

+-------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)

Podemos hacer uso de la sentencia DESCRIBE en cualquier momento, por ejemplo, si


olvidamos los nombres ó el tipo de las columnas en la tabla.

Añadir datos en una tabla

Después de haber creado la tabla, ahora podemos incorporar algunos datos en ella,
para lo cual haremos uso de las sentencias INSERT y LOAD DATA .

Supongamos que los registros de nuestros discos pueden ser descritos por los datos
mostrados en la siguiente tabla.

Título Autor Género Adquisición

MADE IN JAPAN DEEP PURPLE POP-ROCK 1991-02-04

CLUES ROBERT PALMER POP-ROCK 1998-03-17

CABO DO MUNDO LUAR NA LUBRE FOLK 1999-05-13

EN LA FUSA VINICIUS DE BRASILEÑO 2000-08-27


MORAES

RUMBA ARGELINA RADIO TARIFA ETNICO 1998-08-31

SUPERNATURAL SANTANA POP-ROCK 2001-09-11

A PESAR DE TODO HILARIO CAMACHO FOLK 1991-02-09

LADY SOUL ARETHA FRANKLIN SOUL 1994-04-29

GRATEST HITS BOB DYLAN FOLK 1997-01-22

Tabla 20.2 Datos de la tabla 'discos'

Página 180 de 212 Introducción a Linux


Introducción a Linux

Debemos observar que MySQL espera recibir fechas en el formato YYYY-MM-DD, que
puede ser diferente a lo que nosotros estamos acostumbrados.

Ya que estamos iniciando con una tabla vacía, la manera más fácil de poblarla es crear
un archivo de texto que contenga un registro por línea para cada uno de nuestros
discos para que posteriormente carguemos el contenido del archivo en la tabla
únicamente con una sentencia.

Por tanto, debemos de crear un archivo de texto "discos.txt" que contenga un registro
por línea con valores separados por tabuladores, teniendo en cuenta que el orden de
las columnas sea el mismo que utilizamos en la sentencia CREATE TABLE. Para
valores que no conozcamos podemos usar valores nulos (NULL). Para representar
estos valores en nuestro archivo debemos usar N.

Para cargar el contenido del archivo en la tabla mascotas, usaremos el siguiente


comando:

mysql> LOAD DATA LOCAL INFILE "discos.txt" INTO TABLE discos;

La sentencia LOAD DATA nos permite especificar cuál es el separador de columnas y


el separador de registros. Por defecto, el tabulador es el separador de columnas
(campos), y el salto de línea es el separador de registros, que en este caso son
suficientes para que la sentencia LOAD DATA lea correctamente el archivo
"discos.txt".

Si lo que deseamos es añadir un registro a la vez, entonces debemos hacer uso de la


sentencia INSERT . En la manera más simple, debemos proporcionar un valor para
cada columna en el orden en el cual fueron listados en la sentencia CREATE TABLE .
Podemos usar la sentencia INSERT para agregar un registro en nuestra base de datos.

mysql> INSERT INTO discos


-> VALUES('MOONDANCE','VAN MORRISON','POP-ROCK','2004-06-03');

Notar que los valores de cadenas y fechas deben estar encerrados entre comillas.
También, con la sentencia INSERT podemos insertar el valor NULL directamente para
representar un valor nulo, un valor que no conocemos. En este caso no se usa N como
en el caso de la sentencia LOAD DATA.

De este ejemplo, debemos ser capaces de ver que es un poco más la tarea que se
tiene que realizar si inicialmente cargamos los registros con varias sentencias INSERT
en lugar de una única sentencia LOAD DATA.

Recuperar información de una tabla

Plataforma de Teleformación de IFES Página 181 de 212


Introducción a Linux

La sentencia SELECT es usada para obtener la información guardada en una tabla. La


forma general de esta sentencia es:

SELECT LaInformaciónQueDeseamos FROM DeQueTabla WHERE


CondiciónASatisfacer

Aquí, LaInformaciónQueDeseamos es la información que queremos ver. Esta puede


ser una lista de columnas, o un * para indicar "todas las columnas". DeQueTabla indica
el nombre de la tabla de la cual vamos a obtener los datos. La claúsula WHERE es
opcional. Si está presente, la CondiciónASatisfacer especifica las condiciones que los
registros deben satisfacer para que puedan ser mostrados.

Seleccionar todos los datos

La forma más simple de la sentencia SELECT es cuando se recuperan todos los datos
de una tabla:

mysql> SELECT * FROM discos;


+-----------------+--------------------+-----------+-------------+
| titulo | autor | genero | adquisicion |
+-----------------+--------------------+-----------+-------------+
| MADE IN JAPAN | DEEP PURPLE | POP-ROCK | 1991-02-04 |
| CLUES | ROBERT PALMER | POP-ROCK | 1998-03-17 |
| CABO DO MUNDO | LUAR NA LUBRE | FOLK | 1999-05-13 |
| EN LA FUSA | VINICIUS DE MORAES | BRASILEÑO | 2000-08-27 |
| RUMBA ARGELINA | RADIO TARIFA | ETNICO | 1998-08-31 |
| SUPERNATURAL | SANTANA | POP-ROCK | 2001-09-11 |
| A PESAR DE TODO | HILARIO CAMACHO | FOLK | 1991-02-09 |
| LADY SOUL | ARETHA FRANKLIN | SOUL | 1994-04-29 |
| GRATEST HITS | BOB DYLAN | FOLK | 1997-01-22 |
| MOONDANCE | VAN MORRISON | POP-ROCK | 2004-06-03 |
+-----------------+--------------------+-----------+-------------+
10 rows in set (0.00 sec)

Esta forma del SELECT es útil si deseamos ver los datos completos de la tabla, por
ejemplo, para asegurarnos de que están todos los registros después de la carga de un
archivo.

Por ejemplo, en este caso que estamos tratando, al consultar los registros de la tabla,
nos damos cuenta de que hay un error en el archivo de datos (discos.txt). Al revisar el
disco MADE IN JAPAN encontramos que la fecha correcta de adquisición es el año

Página 182 de 212 Introducción a Linux


Introducción a Linux

1999, no 1991.

Podemos corregir el registro erróneo con una sentencia UPDATE:

mysql> UPDATE discos SET adquisicion="1999-02-04" WHERE titulo="MADE IN


JAPAN";

Como se mostró anteriormente, es muy fácil recuperar los datos de una tabla completa.
Pero típicamente no deseamos hacer esto, particularmente cuando las tablas son
demasiado grandes. En vez de ello, estaremos más interesados en responder
preguntas particulares, en cuyo caso debemos especificar algunas restricciones para la
información que deseamos ver.

Seleccionar registros particulares

Podemos seleccionar sólo registros particulares de una tabla. Por ejemplo, si


deseamos verificar el cambio que hicimos a la fecha de adquisición de MADE IN
JAPAN , seleccionamos sólo este registro de la siguiente manera:

mysql> SELECT * FROM discos WHERE titulo="MADE IN JAPAN";


+---------------+-------------+----------+-------------+
| titulo | autor | genero | adquisición |
+---------------+-------------+----------+-------------+
| MADE IN JAPAN | DEEP PURPLE | POP-ROCK | 1999-02-04 |
+---------------+-------------+----------+-------------+
1 row in set (0.00 sec)

La salida mostrada confirma que el año ha sido corregido de 1991 a 1999.

La comparación de cadenas es normalmente no sensitiva, así que podemos especificar


el nombre como "made in japan", "MADE IN JAPAN", etc. El resultado de la consulta
será el mismo.

Podemos además especificar condiciones sobre cualquier columna, no sólo el "titulo".


Por ejemplo, si deseamos conocer qué discos hemos adquirido después del 2000,
tendríamos que usar la columna "adquisicion":

mysql> SELECT * FROM discos WHERE adquisicion >= "2000-1-1";


+--------------+--------------------+-----------+-------------+

Plataforma de Teleformación de IFES Página 183 de 212


Introducción a Linux

| titulo | autor | genero | adquisicion |


+--------------+--------------------+-----------+-------------+
| EN LA FUSA | VINICIUS DE MORAES | BRASILEÑO | 2000-08-27 |
| SUPERNATURAL | SANTANA | POP-ROCK | 2001-09-11 |
| MOONDANCE | VAN MORRISON | POP-ROCK | 2004-06-03 |
+--------------+--------------------+-----------+-------------+
3 rows in set (0.00 sec)

Podemos también combinar condiciones, por ejemplo, para localizar a los discos de
pop-rock que hemos adquirido antes del 2000:

SELECT * FROM discos WHERE adquisicion <= "2000-1-1"AND genero="POP-ROCK";


+---------------+---------------+----------+-------------+
| titulo | autor | genero | adquisicion |
+---------------+---------------+----------+-------------+
| MADE IN JAPAN | DEEP PURPLE | POP-ROCK | 1999-02-04 |
| CLUES | ROBERT PALMER | POP-ROCK | 1998-03-17 |
+---------------+---------------+----------+-------------+
2 rows in set (0.00 sec)

La consulta anterior usa el operador lógico AND . Hay también un operador lógico OR :

mysql> SELECT * FROM discos WHERE genero="SOUL"OR genero="FOLK";


+-----------------+-----------------+--------+-------------+
| titulo | autor | genero | adquisicion |
+-----------------+-----------------+--------+-------------+
| CABO DO MUNDO | LUAR NA LUBRE | FOLK | 1999-05-13 |
| A PESAR DE TODO | HILARIO CAMACHO | FOLK | 1991-02-09 |
| LADY SOUL | ARETHA FRANKLIN | SOUL | 1994-04-29 |
| GRATEST HITS | BOB DYLAN | FOLK | 1997-01-22 |
+-----------------+-----------------+--------+-------------+
4 rows in set (0.00 sec)

El operador AND y el operador OR pueden ser intercambiados. Si hacemos esto, es


buena idea usar paréntesis para indicar como deben ser agrupadas las condiciones:

mysql>SELECT * FROM discos WHERE(adquisicion >= "2000-1-1"AND


genero="POP-ROCK")
-> OR genero="SOUL";
+--------------+-----------------+----------+-------------+
| titulo | autor | genero | adquisicion |
+--------------+-----------------+----------+-------------+

Página 184 de 212 Introducción a Linux


Introducción a Linux

| SUPERNATURAL | SANTANA | POP-ROCK | 2001-09-11 |


| LADY SOUL | ARETHA FRANKLIN | SOUL | 1994-04-29 |
| MOONDANCE | VAN MORRISON | POP-ROCK | 2004-06-03 |
+--------------+-----------------+----------+-------------+
3 rows in set (0.00 sec)

Si no deseamos ver los registros completos de una tabla, entonces tenemos que usar
los nombres de las columnas en las que estamos interesados separándolas por coma.
Por ejemplo, si deseamos conocer la fecha de adquisición de nuestros discos,
debemos seleccionar la columna "título" y "adquisicion":

mysql> SELECT titulo, adquisicion FROM discos;


+-----------------+-------------+
| titulo | adquisicion |
+-----------------+-------------+
| MADE IN JAPAN | 1999-02-04 |
| CLUES | 1998-03-17 |
| CABO DO MUNDO | 1999-05-13 |
| EN LA FUSA | 2000-08-27 |
| RUMBA ARGELINA | 1998-08-31 |
| SUPERNATURAL | 2001-09-11 |
| A PESAR DE TODO | 1991-02-09 |
| LADY SOUL | 1994-04-29 |
| GRATEST HITS | 1997-01-22 |
| MOONDANCE | 2004-06-03 |
+-----------------+-------------+
10 rows in set (0.00 sec)

Para conocer de que géneros musicales disponemos, usaremos la siguiente consulta:

mysql> SELECT SELECT genero FROM discos;


+-----------+
| genero |
+-----------+
| POP-ROCK |
| POP-ROCK |
| FOLK |
| BRASILEÑO |
| ETNICO |
| POP-ROCK |
| FOLK |
| SOUL |
| FOLK |
| POP-ROCK |
+-----------+
10 rows in set (0.00 sec)

Plataforma de Teleformación de IFES Página 185 de 212


Introducción a Linux

Sin embargo, debemos notar que la consulta recupera el nombre del género de cada
disco, y algunos de ellos aparecen más de una vez. Para minimizar la salida,
agregaremos la palabra clave DISTINCT:

mysql> SELECT DISTINCT genero FROM discos;


+-----------+
| genero |
+-----------+
| POP-ROCK |
| FOLK |
| BRASILEÑO |
| ETNICO |
| SOUL |
+-----------+
5 rows in set (0.02 sec)

Se puede usar también una clausula WHERE para combinar selección de filas con
selección de columnas. Por ejemplo, para obtener el título y interprete de los discos de
folk y pop-rock, usaremos la siguiente consulta:

mysql> SELECT titulo,autor FROM discos WHERE genero="FOLK" OR


genero="POP-ROCK";
+-----------------+-----------------+
| titulo | autor |
+-----------------+-----------------+
| MADE IN JAPAN | DEEP PURPLE |
| CLUES | ROBERT PALMER |
| CABO DO MUNDO | LUAR NA LUBRE |
| SUPERNATURAL | SANTANA |
| A PESAR DE TODO | HILARIO CAMACHO |
| GRATEST HITS | BOB DYLAN |
| MOONDANCE | VAN MORRISON |
+-----------------+-----------------+
7 rows in set (0.00 sec)

Ordenar registros

Tenemos que notar en los ejemplos anteriores que las filas regresadas son mostradas
sin ningún orden en particular. Sin embargo, frecuentemente es más fácil examinar la
salida de una consulta cuando las filas son ordenadas en alguna forma útil. Para
ordenar los resultados, tenemos que usar una clausula ORDER BY.

Página 186 de 212 Introducción a Linux


Introducción a Linux

Aquí aparecen algunos datos ordenados por fecha de adquisición:

mysql> SELECT titulo,autor,adquisicion FROM discos WHERE genero="FOLK"


-> ORDER BY adquisicion;
+-----------------+-----------------+-------------+
| titulo | autor | adquisicion |
+-----------------+-----------------+-------------+
| A PESAR DE TODO | HILARIO CAMACHO | 1991-02-09 |
| GRATEST HITS | BOB DYLAN | 1997-01-22 |
| CABO DO MUNDO | LUAR NA LUBRE | 1999-05-13 |
+-----------------+-----------------+-------------+
3 rows in set (0.04 sec

En las columnas de tipo carácter, el ordenamiento es ejecutado normalmente de forma


no sensitiva, es decir, no hay diferencia entre mayúsculas y minúsculas. Sin embargo,
se puede forzar un ordenamiento sensitivo al usar el operador BINARY.

Para ordenar en orden inverso, debemos agregar la palabra clave DESC al nombre de
la columna que estamos usando en el ordenamiento.

mysql> SELECT titulo,autor,adquisición FROM discos


-> ORDER BY adquisicion DESC;
+-----------------+--------------------+-------------+
| titulo | autor | adquisicion |
+-----------------+--------------------+-------------+
| MOONDANCE | VAN MORRISON | 2004-06-03 |
| SUPERNATURAL | SANTANA | 2001-09-11 |
| EN LA FUSA | VINICIUS DE MORAES | 2000-08-27 |
| CABO DO MUNDO | LUAR NA LUBRE | 1999-05-13 |
| MADE IN JAPAN | DEEP PURPLE | 1999-02-04 |
| RUMBA ARGELINA | RADIO TARIFA | 1998-08-31 |
| CLUES | ROBERT PALMER | 1998-03-17 |
| GRATEST HITS | BOB DYLAN | 1997-01-22 |
| LADY SOUL | ARETHA FRANKLIN | 1994-04-29 |
| A PESAR DE TODO | HILARIO CAMACHO | 1991-02-09 |
+-----------------+--------------------+-------------+

10 rows in set (0.00 sec)

Podemos ordenar por múltiples columnas. Por ejemplo, para ordenar por género
musical y fecha de adquisición, usaremos la siguiente consulta:

mysql> SELECT titulo,genero,adquisición FROM discos


-> ORDER BY genero,adquisición DESC;
+-----------------+-----------+-------------+
| titulo | genero | adquisición |

Plataforma de Teleformación de IFES Página 187 de 212


Introducción a Linux

+-----------------+-----------+-------------+
| EN LA FUSA | BRASILEÑO | 2000-08-27 |
| RUMBA ARGELINA | ETNICO | 1998-08-31 |
| CABO DO MUNDO | FOLK | 1999-05-13 |
| GRATEST HITS | FOLK | 1997-01-22 |
| A PESAR DE TODO | FOLK | 1991-02-09 |
| MOONDANCE | POP-ROCK | 2004-06-03 |
| SUPERNATURAL | POP-ROCK | 2001-09-11 |
| MADE IN JAPAN | POP-ROCK | 1999-02-04 |
| CLUES | POP-ROCK | 1998-03-17 |
| LADY SOUL | SOUL | 1994-04-29 |
+-----------------+-----------+-------------+
10 rows in set (0.00 sec)

En este caso se aprecia la palabra clave DESC se aplica sólo a la columna nombrada
que le predede.

Borrar registros

Si deseamos borrar algún registro de la tabla 'discos' por la razón que sea, podemos
ejecutar el comando DELETE . Por ejemplo, si queremos borrar el disco 'RUMBA
ARGELINA' de nuestra tabla:

mysql> DELETE FROM discos WHERE titulo="RUMBA ARGELINA";


Query OK, 1 row affected (0.00 sec)

A continuación, comprobamos que ya no ésta en la tabla 'discos':

mysql> SELECT * FROM discos;


+-----------------+--------------------+-----------+-------------+
| titulo | autor | genero | adquisición |
+-----------------+--------------------+-----------+-------------+
| MADE IN JAPAN | DEEP PURPLE | POP-ROCK | 1999-02-04 |
| CLUES | ROBERT PALMER | POP-ROCK | 1998-03-17 |
| CABO DO MUNDO | LUAR NA LUBRE | FOLK | 1999-05-13 |
| EN LA FUSA | VINICIUS DE MORAES | BRASILEÑO | 2000-08-27 |
| SUPERNATURAL | SANTANA | POP-ROCK | 2001-09-11 |
| A PESAR DE TODO | HILARIO CAMACHO | FOLK | 1991-02-09 |
| LADY SOUL | ARETHA FRANKLIN | SOUL | 1994-04-29 |
| GRATEST HITS | BOB DYLAN | FOLK | 1997-01-22 |
| MOONDANCE | VAN MORRISON | POP-ROCK | 2004-06-03 |
+-----------------+--------------------+-----------+-------------+
9 rows in set (0.00 sec)

Página 188 de 212 Introducción a Linux


Introducción a Linux

Cálculos con fechas

MySQL proporciona diversas funciones que se pueden usar para efectuar cálculos
sobre fechas, por ejemplo, para calcular antigüedades o extraer partes de una fecha
(día, mes, año, etc).

Por ejemplo, para determinar la antigüedad (en años completos) de cada uno de
nuestros discos, tenemos que calcular la diferencia de años de la fecha actual y la
fecha de adquisición, y entonces retar uno si la fecha actual ocurre antes en el
calendario que la fecha de adquisición. Las siguientes consultas muestran la fecha
actual, la fecha de adquisición y la antigüedad para cada disco.

mysql> SELECT titulo, adquisicion, CURRENT_DATE,


-> (YEAR(CURRENT_DATE) - YEAR(adquisicion))
->-(RIGHT(CURRENT_DATE,5) < RIGHT(adquisicion,5)) AS antiguedad FROM discos;

+-----------------+-------------+--------------+------------+
| titulo | adquisicion | CURRENT_DATE | antiguedad |
+-----------------+-------------+--------------+------------+
| MADE IN JAPAN | 1999-02-04 | 2004-11-08 | 5 |
| CLUES | 1998-03-17 | 2004-11-08 | 6 |
| CABO DO MUNDO | 1999-05-13 | 2004-11-08 | 5 |
| EN LA FUSA | 2000-08-27 | 2004-11-08 | 4 |
| SUPERNATURAL | 2001-09-11 | 2004-11-08 | 3 |
| A PESAR DE TODO | 1991-02-09 | 2004-11-08 | 13 |
| LADY SOUL | 1994-04-29 | 2004-11-08 | 10 |
| GRATEST HITS | 1997-01-22 | 2004-11-08 | 7 |
| MOONDANCE | 2004-06-03 | 2004-11-08 | 0 |
+-----------------+-------------+--------------+------------+
9 rows in set (0.04 sec)

Aquí, YEAR( ) obtiene ú

nicamente el año y RIGHT( ) obtiene los cinco caracteres más a la derecha de cada
una de las fechas, que representan el mes y el día (MM-DD). La parte de la expresión
que compara los valores MM-DD se evalúa a 1 o 0, y permite ajustar el valor de la
antigüedad en el caso de que el valor MM-DD de la fecha actual ocurra antes del valor
MM-DD de la fecha de adquisición.

Dado que la expresión en sí es bastante fea, se ha usado un alias (antiguedad) que es


el que aparece como etiqueta en la columna que muestra el resultado de la consulta.
Esta consulta debe trabajar bien, pero el resultado puede ser de alguna manera más
útil si las filas son presentadas en algún orden. Para ello haremos uso de la cláusula

Plataforma de Teleformación de IFES Página 189 de 212


Introducción a Linux

ORDER BY.

Por ejemplo, para ordenar por título, usaremos la siguiente consulta:

mysql> SELECT titulo, adquisición, CURRENT_DATE,


-> (YEAR(CURRENT_DATE) - YEAR(adquisición))
-> - (RIGHT(CURRENT_DATE,5) < RIGHT(adquisición,5))
-> AS antiguedad FROM discos ORDER BY titulo;
+-----------------+-------------+--------------+------------+
| titulo | adquisición | CURRENT_DATE | antiguedad |
+-----------------+-------------+--------------+------------+
| A PESAR DE TODO | 1991-02-09 | 2004-11-08 | 13 |
| CABO DO MUNDO | 1999-05-13 | 2004-11-08 | 5 |
| CLUES | 1998-03-17 | 2004-11-08 | 6 |
| EN LA FUSA | 2000-08-27 | 2004-11-08 | 4 |
| GRATEST HITS | 1997-01-22 | 2004-11-08 | 7 |
| LADY SOUL | 1994-04-29 | 2004-11-08 | 10 |
| MADE IN JAPAN | 1999-02-04 | 2004-11-08 | 5 |
| MOONDANCE | 2004-06-03 | 2004-11-08 | 0 |
| SUPERNATURAL | 2001-09-11 | 2004-11-08 | 3 |
+-----------------+-------------+--------------+------------+
9 rows in set (0.00 sec)

Para ordenar por antigüedad en lugar de por título, ún

icamente tenemos que usar una cláusula ORDER BY diferente:

mysql> SELECT titulo, adquisición, CURRENT_DATE,


-> (YEAR(CURRENT_DATE) - YEAR(adquisición))
-> - (RIGHT(CURRENT_DATE,5) < RIGHT(adquisición,5))
-> AS antiguedad FROM discos ORDER BY antiguedad;
+-----------------+-------------+--------------+------------+
| titulo | adquisición | CURRENT_DATE | antiguedad |
+-----------------+-------------+--------------+------------+
| MOONDANCE | 2004-06-03 | 2004-11-08 | 0 |
| SUPERNATURAL | 2001-09-11 | 2004-11-08 | 3 |
| EN LA FUSA | 2000-08-27 | 2004-11-08 | 4 |
| MADE IN JAPAN | 1999-02-04 | 2004-11-08 | 5 |
| CABO DO MUNDO | 1999-05-13 | 2004-11-08 | 5 |
| CLUES | 1998-03-17 | 2004-11-08 | 6 |
| GRATEST HITS | 1997-01-22 | 2004-11-08 | 7 |
| LADY SOUL | 1994-04-29 | 2004-11-08 | 10 |
| A PESAR DE TODO | 1991-02-09 | 2004-11-08 | 13 |
+-----------------+-------------+--------------+------------+

Página 190 de 212 Introducción a Linux


Introducción a Linux

9 rows in set (0.00 sec)

¿Qué sucede si deseamos conocer cuáles de nuestros discos hemos comprado en un


mes concreto? Para este tipo de cálculos, el año y el día son irrelevantes; simplemente
tenemos que extraer el valor del mes en la columna nacimiento. Como se mencionó
anteriormente, MySQL proporciona diversas funciones para trabajar y manipular
fechas, en este caso haremos uso de la función MONTH( ). Para ver como trabaja,
vamos a ejecutar una consulta muy simple que muestra tanto el valor de una fecha
como el valor que regresa la función MONTH( ).

mysql> SELECT titulo, adquisición, MONTH(adquisición) FROM discos;


+-----------------+-------------+--------------------+
| titulo | adquisición | MONTH(adquisición) |
+-----------------+-------------+--------------------+
| MADE IN JAPAN | 1999-02-04 | 2 |
| CLUES | 1998-03-17 | 3 |
| CABO DO MUNDO | 1999-05-13 | 5 |
| EN LA FUSA | 2000-08-27 | 8 |
| SUPERNATURAL | 2001-09-11 | 9 |
| A PESAR DE TODO | 1991-02-09 | 2 |
| LADY SOUL | 1994-04-29 | 4 |
| GRATEST HITS | 1997-01-22 | 1 |
| MOONDANCE | 2004-06-03 | 6 |
+-----------------+-------------+--------------------+
9 rows in set (0.00 sec)

Encontrar ahora, por ejemplo, los discos que hemos comprado en el mes de febrero es
muy sencillo.

mysql> SELECT titulo, adquisición, MONTH(adquisición) FROM discos WHERE


MONTH(adquisición)=2;
+-----------------+-------------+--------------------+
| titulo | adquisición | MONTH(adquisición) |
+-----------------+-------------+--------------------+
| MADE IN JAPAN | 1999-02-04 | 2 |
| A PESAR DE TODO | 1991-02-09 | 2 |
+-----------------+-------------+--------------------+
2 rows in set (0.00 sec)

Trabajar con valores nulos

El valor NULL puede sorprendernos mientras no hayamos trabajado con él.


Conceptualmente, NULL significa un valor que hace falta, o un valor desconocido, y es

Plataforma de Teleformación de IFES Página 191 de 212


Introducción a Linux

tratado de una manera diferente a otros valores. Para verificar si un valor es NULL no
podemos usar los operadores de comparación tales como =, > , o < .

Para probar esto ejecutemos la siguiente consulta:

mysql> SELECT 1 = NULL, 1 <> NULL, 1 < NULL, 1 > NULL;


+----------+-----------+----------+----------+
| 1 = NULL | 1 <> NULL | 1 < NULL | 1 > NULL |
+----------+-----------+----------+----------+
| NULL | NULL | NULL | NULL |
+----------+-----------+----------+----------+
1 row in set (0.00 sec)

Claramente observamos que no obtenemos resultados con algún significado con estos
operadores. Es por ello que tenemos que usar los operadores IS NULL e IS NOT
NULL:

mysql> SELECT 1 IS NULL, 1 IS NOT NULL;


+-----------+---------------+
| 1 IS NULL | 1 IS NOT NULL |
+-----------+---------------+
|0|1|
+-----------+---------------+
1 row in set (0.00 sec)

En MySQL, 0 o NULL significan falso y cualquier otro valor significa verdadero. El valor
que se considera verdadero por defecto es 1.

Cuando se usa un ORDER BY , los valores NULL son siempre ordenados primero, aún
cuando se use la cláusula DESC .

Coincidencia de patrones

MySQL proporciona métodos de coincidencia de patrones basados en SQL estándar,


así como también basados en expresiones regulares, de manera similar a las utilidades
de Unix tales como vi, grep y sed.

La coincidencia de patrones basada en SQL nos permite usar _ (guión bajo) para un
solo carácter y % para un arbitrario número de caracteres. En MySQL, los patrones
SQL no son sensibles al uso de mayúsculas y minúsculas.

Es importante notar que no se usan los operadores = o < > cuando se usan los
patrones SQL; en su lugar se usan los operadores LIKE y NOT LIKE . A continuación,

Página 192 de 212 Introducción a Linux


Introducción a Linux

presentamos algunos ejemplos.

Para encontrar los títulos de discos que comienzan con 'c' :

mysql> SELECT * FROM discos WHERE titulo LIKE "c%";


+---------------+---------------+----------+-------------+
| titulo | autor | genero | adquisicion |
+---------------+---------------+----------+-------------+
| CLUES | ROBERT PALMER | POP-ROCK | 1998-03-17 |
| CABO DO MUNDO | LUAR NA LUBRE | FOLK | 1999-05-13 |
+---------------+---------------+----------+-------------+
2 rows in set (0.00 sec)

Para encontrar los títulos de discos que finalizan con 'do' :

mysql> SELECT * FROM discos WHERE titulo LIKE "%do";


+-----------------+-----------------+--------+-------------+
| titulo | autor | genero | adquisicion |
+-----------------+-----------------+--------+-------------+
| CABO DO MUNDO | LUAR NA LUBRE | FOLK | 1999-05-13 |
| A PESAR DE TODO | HILARIO CAMACHO | FOLK | 1991-02-09 |
+-----------------+-----------------+--------+-------------+
2 rows in set (0.00 sec)

Para encontrar los títulos de discos que contienen una s :

mysql> SELECT * FROM discos WHERE titulo LIKE "%s%";


+-----------------+--------------------+-----------+-------------+
| titulo | autor | genero | adquisición |
+-----------------+--------------------+-----------+-------------+
| CLUES | ROBERT PALMER | POP-ROCK | 1998-03-17 |
| EN LA FUSA | VINICIUS DE MORAES | BRASILEÑO | 2000-08-27 |
| SUPERNATURAL | SANTANA | POP-ROCK | 2001-09-11 |
| A PESAR DE TODO | HILARIO CAMACHO | FOLK | 1991-02-09 |
| LADY SOUL | ARETHA FRANKLIN | SOUL | 1994-04-29 |
| GRATEST HITS | BOB DYLAN | FOLK | 1997-01-22 |
+-----------------+--------------------+-----------+-------------+
6 rows in set (0.00 sec)

El otro tipo de coincidencia de patrones proporcionado por MySQL hace uso de


expresiones regulares. Para hacer uso de estos tipos de patrones se tienen que usar
los operadores REGEX P y NOT REGEXP ( o RLIKE y NOT RLIKE , los cuáles son
sinónimos).

Algunas características de las expresiones regulares son:

Plataforma de Teleformación de IFES Página 193 de 212


Introducción a Linux

• El carácter punto ( . ) coincide con cualquier carácter.


• Una clase de caracteres [...] coincide con cualquier carácter dentro de los
paréntesis cuadrados. Por ejemplo, [abc] coincide con a, b o c. Para nombrar
un rango de caracteres, se usa el guión. [a-z] coincide con cualquier letra
minúscula, mientras que [0-9] coincide con cualquier dígito.
• El carácter asterisco ( * ) coincide con cero o más instancias de lo que le
preceda. Por ejemplo, x* coincide con cualquier número de caracteres x,
[0-9]* coincide con cualquier número de dígitos, y .* (punto asterisco)
coincide con cualquier cosa.
• El patrón coincide si éste ocurre en cualquier parte del valor que está siendo
evaluado. (Los patrones SQL coinciden únicamente en los valores
completos.)
• Para indicar el inicio o el final de un valor que está siendo evaluado se usan
los caracteres ^ y $ respectivamente.

Para demostrar como se usan las expresiones regulares, se van a mostrar los ejemplos
presentados anteriormente con el operador LIKE , ahora con el operador REGEXP .

Para encontrar los títulos de discos que comienzan con 'c' :

mysql> SELECT * FROM discos WHERE titulo REGEXP "^c";


+---------------+---------------+----------+-------------+
| titulo | autor | genero | adquisición |
+---------------+---------------+----------+-------------+
| CLUES | ROBERT PALMER | POP-ROCK | 1998-03-17 |
| CABO DO MUNDO | LUAR NA LUBRE | FOLK | 1999-05-13 |
+---------------+---------------+----------+-------------+
2 rows in set (0.00 sec)

Antes de la versión 3.23.4 de MySQL, el operador REGEXP era sensible al uso de


mayúsculas y minúsculas, así que dependiendo de la versión de MySQL con la que se
está trabajando podemos ver que obtenemos o no algún resultado en la consulta
anterior. Se puede usar también la siguiente consulta para buscar los títulos de los
discos que inician con la letra 'c', no importando si es mayúscula o minúscula.

mysql> SELECT * FROM discos WHERE titulo REGEXP "^[cC]";


+---------------+---------------+----------+-------------+
| titulo | autor | genero | adquisición |
+---------------+---------------+----------+-------------+
| CLUES | ROBERT PALMER | POP-ROCK | 1998-03-17 |
| CABO DO MUNDO | LUAR NA LUBRE | FOLK | 1999-05-13 |
+---------------+---------------+----------+-------------+
2 rows in set (0.00 sec)

Desde la versión 3.23.4, para forzar que el operador REGEXP sea sensible al uso de

Página 194 de 212 Introducción a Linux


Introducción a Linux

mayúsculas y minúsculas, se tiene que usar la palabra clave BINARY para hacer de
una de las cadenas, una cadena binaria. Observamos los resultados de la siguientes
consultas.

mysql> SELECT * FROM discos WHERE titulo REGEXP BINARY "^c";


Empty set (0.00 sec)

mysql> SELECT * FROM discos WHERE titulo REGEXP BINARY "^C";


+---------------+---------------+----------+-------------+
| titulo | autor | genero | adquisición |
+---------------+---------------+----------+-------------+
| CLUES | ROBERT PALMER | POP-ROCK | 1998-03-17 |
| CABO DO MUNDO | LUAR NA LUBRE | FOLK | 1999-05-13 |
+---------------+---------------+----------+-------------+
2 rows in set (0.00 sec)

Para encontrar los títulos de los discos que finalizan con la palabra 'do' , haremos uso
del carácter $.

mysql> SELECT * FROM discos WHERE titulo REGEXP "do$";


+-----------------+-----------------+--------+-------------+
| titulo | autor | genero | adquisición |
+-----------------+-----------------+--------+-------------+
| CABO DO MUNDO | LUAR NA LUBRE | FOLK | 1999-05-13 |
| A PESAR DE TODO | HILARIO CAMACHO | FOLK | 1991-02-09 |
+-----------------+-----------------+--------+-------------+
2 rows in set (0.00 sec)

Para encontrar los títulos de los discos que contienen una letra s, la consulta sería:

mysql> SELECT * FROM discos WHERE titulo REGEXP "s";


+-----------------+--------------------+-----------+-------------+
| titulo | autor | genero | adquisición |
+-----------------+--------------------+-----------+-------------+
| CLUES | ROBERT PALMER | POP-ROCK | 1998-03-17 |
| EN LA FUSA | VINICIUS DE MORAES | BRASILEÑO | 2000-08-27 |
| SUPERNATURAL | SANTANA | POP-ROCK | 2001-09-11 |
| A PESAR DE TODO | HILARIO CAMACHO | FOLK | 1991-02-09 |
| LADY SOUL | ARETHA FRANKLIN | SOUL | 1994-04-29 |
| GRATEST HITS | BOB DYLAN | FOLK | 1997-01-22 |
+-----------------+--------------------+-----------+-------------+
6 rows in set (0.00 sec)

Plataforma de Teleformación de IFES Página 195 de 212


Introducción a Linux

Contar filas

Las bases de datos son usadas frecuentemente para responder una pregunta, "¿Con
qué frecuencia ocurre un cierto tipo de dato en una tabla?". Por ejemplo, tal vez
queremos conocer cuántos discos tenemos, o cuántos discos hay de cada género. La
función COUNT( ) es la utilizamos en esta situación.

Si deseamos conocer cuántas discos hay por género musical, la consulta es la


siguiente:

mysql> SELECT COUNT(*) FROM discos;


+----------+
| COUNT(*) |
+----------+
|9|
+----------+
1 row in set (0.00 sec)

Si deseamos conocer cuántas discos hay por género musical, la consulta es la


siguiente:

mysql> SELECT genero,COUNT(*) FROM discos GROUP BY GENERO;


+-----------+----------+
| genero | COUNT(*) |
+-----------+----------+
| BRASILEÑO | 1 |
| FOLK | 3 |
| POP-ROCK | 4 |
| SOUL | 1 |
+-----------+----------+
4 rows in set (0.00 sec)

Se debe notar que hemos usado una cláusula GROUP BY para agrupar todos los
registros de cada género musical. Si no hacemos esto, obtendremos un mensaje de
error:

mysql> SELECT genero,COUNT(*) FROM discos;


ERROR 1140: Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP
columns is illegal if there is no GROUP BY clauseclause

El uso de la función COUNT( ) en conjunto con la cláusula GROUP BY es muy útil en


diversas situaciones como, por ejemplo, si queremos saber el número de discos por
género e intérprete:

Página 196 de 212 Introducción a Linux


Introducción a Linux

mysql> SELECT genero, autor, COUNT(*) FROM discos GROUP BY genero, autor;
+-----------+--------------------+----------+
| genero | autor | COUNT(*) |
+-----------+--------------------+----------+
| BRASILEÑO | VINICIUS DE MORAES | 1 |
| FOLK | BOB DYLAN | 1 |
| FOLK | HILARIO CAMACHO | 1 |
| FOLK | LUAR NA LUBRE | 1 |
| POP-ROCK | DEEP PURPLE | 1 |
| POP-ROCK | ROBERT PALMER | 1 |
| POP-ROCK | SANTANA | 1 |
| POP-ROCK | VAN MORRISON | 1 |
| SOUL | ARETHA FRANKLIN | 1 |
+-----------+--------------------+----------+
9 rows in set (0.01 sec)

No es necesario que se obtengan todos los datos de una tabla cuando se usa la
función COUNT( ). Por ejemplo, en la consulta anterior, para ver únicamente los datos
de folk y soul, la consulta queda de la siguiente manera:

mysql> SELECT genero, autor, COUNT(*) FROM discos


-> WHERE genero="FOLK" OR genero="SOUL"
-> GROUP BY genero,autor;
+--------+-----------------+----------+
| genero | autor | COUNT(*) |
+--------+-----------------+----------+
| FOLK | BOB DYLAN | 1 |
| FOLK | HILARIO CAMACHO | 1 |
| FOLK | LUAR NA LUBRE | 1 |
| SOUL | ARETHA FRANKLIN | 1 |
+--------+-----------------+----------+
4 rows in set (0.00 sec)

Usar más de una tabla

La tabla 'discos' nos ha servido hasta este momento para tener guardados los datos
acerca de los discos que tenemos. Si deseamos guardar algún otro tipo de información
acerca de ellos, tal como los eventos que se producen con los discos -prestamos a
amigos o compañeros, perdidas o deterioro, etc.- necesitaremos de otra tabla. Para
ello, necesitamos:

• El título del disco para saber a cuál de ellos se refiere el evento.


• Una fecha para saber cuando ocurrió el evento.

Plataforma de Teleformación de IFES Página 197 de 212


Introducción a Linux

• Una descripción del evento.


• Un campo que indique el tipo de evento, si deseamos clasificarlos.

Dadas estas condiciones, la sentencia para crear la tabla eventos queda de la siguiente
manera:

mysql> CREATE TABLE eventos(titulo varchar(40),fecha date,


-> tipo varchar(15),descripcion varchar(255));
Query OK, 0 rows affected (0.00 sec)

De manera similar a la tabla 'discos', es más fácil cargar los datos de los registros
iniciales al crear un archivo de texto delimitado por tabuladores 'eventos.txt' en el que
se tenga la siguiente información:

título fecha tipo descripción

MADE IN JAPAN 2003-02-15 deterioro Rayada el tema dos.

CLUES 2004-03-23 perdida Falta portada trasera

CABO DO MUNDO 2004-11-19 copia Dos copias realizadas

EN LA FUSA 2003-04-21 prestamo Prestamo a Ana


Lopez

A PESAR DE TODO 2004-04-27 devolucion Devuelto por Jaime


Meilan del prestamo

LADY SOUL 2003-10-03 prestamo Prestamo a Claudia


Romero

Cargamos los datos desde este archivo con la siguiente sentencia:

mysql> LOAD DATA LOCAL INFILE "eventos.txt" INTO TABLE eventos;


Query OK, 6 rows affected (0.00 sec)
Records: 6 Deleted: 0 Skipped: 0 Warnings: 0

Tomando en cuenta lo que hemos aprendido en la ejecución de consultas sobre la


tabla 'discos', debemos de ser capaces de recuperar algunos datos de la tabla eventos;
los principios son los mismos. Sin embargo puede suceder que la tabla eventos por sí
misma sea insuficiente para darnos las respuestas que necesitamos.
Supongamos que deseamos conocer el interprete de cada disco que hemos prestado.

Página 198 de 212 Introducción a Linux


Introducción a Linux

La tabla 'eventos' indica cuando ocurrió dicho evento, pero el dato interprete está
almacenado en la tabla 'discos', por lo tanto, necesitamos ambas tablas para realizar
esta consulta.

mysql> SELECT discos.titulo, discos.autor,


-> descripcion FROM discos, eventos
-> WHERE discos.titulo=eventos.titulo
-> AND tipo="prestamo";
+------------+--------------------+---------------------------+
| titulo | autor | descripcion |
+------------+--------------------+---------------------------+
| EN LA FUSA | VINICIUS DE MORAES | Prestamo a Ana Lopez |
| LADY SOUL | ARETHA FRANKLIN | Prestamo a Claudia Romero |
+------------+--------------------+---------------------------+
2 rows in set (0.00 sec)

Hay diversas cosas que notar acerca de esta consulta:

• La cláusula FROM lista dos tablas dado que la consulta necesita información
que se encuentra en ambas tablas.
• Cuando se combina (junta) información de múltiples tablas, es necesario
especificar los registros de una tabla que pueden coincidir con los registros
en la otra tabla. En nuestro caso, ambas columnas tienen una columna
"titulo". La consulta usa la cláusula WHERE para obtener los registros cuyo
valor en dicha columna es el mismo en ambas tablas.
• Dado que la columna "titulo" ocurre en ambas tablas, debemos de
especificar a cuál de las columnas nos referimos. Esto se hace al anteponer
el nombre de la tabla al nombre de la columna.

Utilizar mysql en modo batch

En todos los ejemplos mostrados anteriormente, hemos usado mysq l de manera


interactiva para ejecutar algunas consultas y ver los resultados. Sin embargo, es
posible usar mysql en modo batch. Para hacer esto tenemos que poner los comandos
que deseamos ejecutar dentro de un archivo, y entonces decirle a mysql que lea los
comandos de dicho archivo:

shell> mysql < archivo-batch

Si se usa mysql de esta manera, se está creando un pequeño script, y posteriormente


se está ejecutando dicho script.

Al ejecutar las sentencias y comandos que se encuentran en el script, es posible que

Plataforma de Teleformación de IFES Página 199 de 212


Introducción a Linux

suceda algún error. Si se desea que se continuen ejecutando las demás sentencias, a
pesar de que haya ocurrido un error, se tiene que usar la opción –force

shell> mysql --force < archivo-batch

Así mismo, es posible especificar los parámetros de conexión desde la línea de


comandos. Por ejemplo:

s
hell> mysql -h localhost -u chema -p < archivo-batch

Algunas de las ventajas de usar un script son las siguientes:

• Si se ejecutan un cierto número de consultas de modo frecuente, al hacer un


script nos evitamos tener que volver a teclear cada una de las consultas.
• Podemos generar nuevas consultas similares a las existentes copiando y
editando estos scripts.
• Al escribir consultas de varias líneas, los scripts ayudan bastante para que
no se tengan que escribir todas las líneas nuevamente si se comete algún
error.
• Si ejecutamos consultas que producen una gran cantidad de datos, es
posible usar un paginador para examinar los resultados de una mejor
manera.

shell> mysql < archivo-batch | less

Se puede guardar la salida en un archivo para revisarla posteriormente.

shell> mysql < archivo-batch > salida-del-script.txt

Hay que mencionar que el formato de la salida es más simple cuando se ejecuta mysql
en modo batch, que cuando se usa de manera interactiva, como se puede ver en el
siguiente ejemplo:

Queremos obtener un listado de los géneros musicales de la tabla 'discos'.Si se ejecuta


en modo interactivo:

mysql> SELECT DISTINCT genero FROM discos;


+-----------+
| genero |
+-----------+
| POP-ROCK |
| FOLK |
| BRASILEÑO |
| SOUL |

Página 200 de 212 Introducción a Linux


Introducción a Linux

+-----------+
4 rows in set (0.00 sec)

Si se ejecuta en modo batch:

shell> mysql -h localhost -u root < generos.sql


genero
POP-ROCK
FOLK
BRASILEÑO
SOUL

Si se desea obtener la salida que proporciona el modo interactivo, se tiene que usar la
opción -t .

shell> mysql -t -h localhost -u root < generos.sql


+-----------+
| genero |
+-----------+
| POP-ROCK |
| FOLK |
| BRASILEÑO |
| SOUL |
+-----------+

Hemos utilizado el archivo generos.sql, un fichero de texto que contiene dos


instrucciones mysql:

USE musica;
SELECT DISTINCT genero FROM discos;

Grabación de cd´s
Grabar CD-ROM en consola
Existen multitud de programas gráficos para la grabación de CD?s, (k3b, nerolinux...)
pero en este manual, comenzaremos por la base, aprenderemos hacerlo desde
consola. Que necesitamos, y que podemos hacer para diferentes casos.

• Hay que instalar y recompilar el kernel para grabadoras IDE,


• En la sección: ATA/IDE/MFM/RLL -> IDE, ATA, ATAPI
Desactivar IDE/ATAPI CDROM
Activar SCSI emulation support
En la sección: SCSI support

Plataforma de Teleformación de IFES Página 201 de 212


Introducción a Linux

Activar SCSI disk support


Activar SCSI CD-ROM support
Activar SCSI generic support
• Instalamos los paquetes cdrecord, mkisofs y cdparanoia, desde una
distribución Debian, usaremos la siguiente línea.
• apt-get install cdrecord mkisofs cdparanoia
• Para conseguir información sobre si la instalación ha sido correcta y dónde
se encuentran los dispositivos
• cdrecord -scanbus
• Para Copiar CD de DATOS
• Montamos CD
mount -t iso9660 -ro unhide /dev/sr1 /cdrom
/dev/sr1
es el dispositivo donde este nuestro cdrom
-ro
l
o montamos en sólo lectura
unhide
Para que lea también los ficheros ocultos
Creamos la Imagen del CDROM
mkisofs -R -J -T -o /tmp/imagen.iso /cdrom
-R = Genera registros SUSP y RR usando Rock Ridge
-T = Genera un archivo TRANS.TBL en cada directorio del CD-Rom, que
puede ser usado en sistemas incapaces de usar Rock Ridge para ayudar a
establecer los nombres de archivo correctos. Hay también información
presente en el archivo que indica el mayor y menor número para unidades
de bloque y carácter y cada symlink tiene el nombre del archivo enlace dado.
-J = Genera nombres de directorio Joliet junto con los iso9660. Ésto es
principalmente útil cuando los discos van a ser usados en máquinas bajo
WindowsNT y Windows95.
-o = es el nombre del archivo el cual el sistema de archivo iso9660 deberia
escribir. Esto puede ser un archivo de disco, una unidad de cinta, o puede
corresponder directamente a la unidad de la grabadora. Si no se especifica
se usa stdout. Percátese de que la salida puede ser una unidad de bloque
especial para una unidad de disco normal, en cuyo caso la particion del
disco puede ser montada y examinada para asegurar que la preparación se
efectua correctamente.
Otras opciones:
cat /dev/cdrom > imageCD.iso
dd if=/dev/cdrom/ of=imageCD.iso
G rabamos el cd
cdrecord -v dev=0,0,0 fs=10M speed=4 /tmp/imagen.iso
speed=X Donde "x" es la velocidad de grabación. Ejemplo: una regrabadora
24x de lectura 2x de regrabación y 4x de grabación, speed=4
Luego si no queremos conservar la imagen porque no vamos hacer más

Página 202 de 212 Introducción a Linux


Introducción a Linux

copias, haremos lo siguiente.


rm /tmp/imagen.iso
• Un Script que hace todo completo
• #!/bin/bash
/bin/mount -t iso9660 -ro unhide /dev/sr1 /cdrom
/usr/bin/mkisofs -R -J -T -o /tmp/imagen.iso /cdrom
/usr/bin/cdrecord -v dev=0,0,0 fs=10M speed=4
/tmp/imagen.iso
/bin/rm /tmp/imagen.iso
/bin/umount /cdrom
• Para Copiar Música
• Mostrar las canciones que tiene el cd
cdparanoia -Q -d /dev/sr1
Extraer el audio n: numero de canciones
cdparanoia -W -Z -X -B -d /dev/sr1 -v 1-n
-W desactivar corrección de rayado. Detecta y lleva a cabo la sincronización
entre rayaduras, pero no intenta reparar los datos dañados. Si algún archivo
de información esta en uso (-i) guarda la posición de las rayaduras.
-Z desactivar paranoia. Desactiva la verificación de datos y las
características de corrección. Con esta opción, cdparanoia lee los datos
exactamente como cdda2wav. Esta opción implica que -Y esta activado,
pero no es equivalente a -Z -W -X -Y como el -W a través de las opciones -Z
especifica niveles estratificados de verificación. La última opción
especificada sienta precedente.
-X desactivar detección de rayado. Ni busca rayaduras ni hace una
sincronización de tolerancia a rayaduras durante la verificación. Con -X
activado, un disco rayado provocará que cdparanoia cancele la lectura.
-d forzar unidad de cdrom. Fuerza el interfaz a leer del dispositivo algo más
de lo que primeramente encontró legible en el CDROM. Puede ser usado
para especificar unidades de cualquier tipo de interfaz válido (ATAPI, SCSI o
propietaria).
-B - batch. Al estilo del procesamiento de salida etiquetado de cdda2wav,
cdparanoia dividirá la salida en multiples archivos, por pistas. Los nombres
de los archivos resultantes estan nombrados como "track#.".
Grabar
cdrecord -v speed=4 -eject fs=20M dev=0,0 -audio -nopreemp track*
-defpregap=[tiempo en segundos]
• Otro script para copiar un cd de música
• #!/bin/bash
/usr/bin/cdparanoia -Q -d /dev/sr1
cd /tmp/
echo ¿Cuantas canciones hay?
read CANCIONES
/usr/bin/cdparanoia -W -Z -X -B -d /dev/sr1 -v
1-$CANCIONES
/usr/bin/cdrecord -v speed=4 -eject fs=20M dev=0,0 -audio
-nopreemp track* -defpregap=0

Plataforma de Teleformación de IFES Página 203 de 212


Introducción a Linux

rm /tmp/track*
• Para Copiar CD de música en directo (sin espacio y cortes entre canciones)
• Instalamos cdda2wav
apt-get install cdda2wav
Mostrar las canciones que tiene el cd
cdparanoia -Q -d /dev/sr1
Extraer el audio en un sólo fichero. n: numero de canciones
cdda2wav -D /dev/sr1 -s -x -t 1+n
Grabamos los ficheros *.wav a un cd
cdrecord -v speed=X -eject fs=20M dev=0,0 -audio archivo.wav
speed=X Donde "x" es la velocidad de grabación. Ejemplo: una regrabadora
24x de lectura 2x de regrabación y 4x de grabación, speed=4
-audio parámetro que especifica el formato de salida del archivo, con lo cual
para cada pista crea un archivo .wav diferente
archivo.wav corresponde al archivo o seleccion de archivos que acaben en
.wav, por lo general el cdda2wav los extrae como audio_NN.wav donde NN
es el numero de pista..
• Grabar / Clonar VCD
• Hacer una imagen VCD (Mi CDROM está en el 0,1,0)
cdrdao read-cd -v 2 --device 0,1,0 --read-raw --driver generic-mmc --datafile
imagen.bin imagen.toc
Copiar la imagen en el CD
cdrdao write -v 2 --device 0,1,0 --speed 16 --driver generic-mmc --buffers 64
imagen.toc
Borrado del .toc
cdrecord -v blank=fast

• cdrecord.conf

Página 204 de 212 Introducción a Linux


Introducción a Linux

#CDR_FIFOSIZE=16m
#
# The following definitions allow abstract device names.
# They are used if the device name does not contain the
# the characters ',', ':', '/' and '@'
#
# drive name device speed fifosize
#
#teac= 1,3,0 -1 -1
#panasonic= 1,4,0 -1 -1
#yamaha= 1,5,0 -1 -1
#cdrom= 0,6,0 2 1m
hp8100= 0,0,0 2 16m
Programación en Bash
Adaptado de:
, un documento libre de Mike G (mikkey)

Scripts muy sencillos


Este COMO tratará de darle algunos consejos sobre la programación de shell scripts,
basándose profundamente en ejemplos.

En esta sección encontrará varios scripts pequeños que esperanzadamente le


ayudarán a entender algunas técnicas.

Típico script hola mundo


#!/bin/bash echo Hola Mundo

Este script tiene sólo dos líneas. La primera le indica al sistema qué programa usar
para ejecutar el fichero.

La segunda línea es la única acción realizada por este script, que imprime 'Hola
Mundo'en la terminal.

Si le sale algo como ./hello.sh: Comando desconocido. , probablemente la primera


línea, '#!/bin/bash', está mal. Ejecute whereis bash, o vea 'encontrando el bash'para
saber cómo debe escribir esta línea.

Un script de copia de seguridad muy simple


#!/bin/bash tar -cZf /var/my-backup.tgz /home/yo/

Plataforma de Teleformación de IFES Página 205 de 212


Introducción a Linux

En este script, en vez de imprimir un mensaje en la terminal, creamos un tar-ball del


directorio home de un usuario. Esto NO pretende ser un script útil; más tarde se ofrece
un script de copia de seguridad más útil.

Todo sobre redirección


Teoría y referencia rápida
Existen 3 descriptores de ficheros: stdin, stdout y stderr (std=estándar).

Básicamente, usted puede:

1. redirigir stdout a un fichero

2. redirigir stderr a un fichero

3. redirigir stdout a stderr

4. redirigir stderr a stdout

5. redirigir stderr y stdout a un fichero

6. redirigir stderr y stdout a stdout

7. redirigir stderr y stdout a stderr

El número 1 'representa'a stdout, y 2 a stderr.

Una pequeña nota para ver todo esto: con el comando less puede visualizar stdout
(que permanecerá en el búfer) y stderr, que se imprimirá en la pantalla, pero será
borrado si intenta leer el búfer.

Ejemplo: stdout a un fichero


Esto hará que la salida de un programa se escriba en un fichero.

ls -l > ls-l.txt

En este caso, se creará un fichero llamado 'ls-l.txt'que contendrá lo que se vería en la


pantalla si escribiese el comando 'ls -l'y lo ejecutase.

Página 206 de 212 Introducción a Linux


Introducción a Linux

Ejemplo: stderr a un fichero


Esto hará que la salida stderr de un programa se escriba en un fichero.

grep da * 2> errores-de-grep.txt

En este caso, se creará un fichero llamado 'errores-de-grep.txt'que contendrá la parte


stderr de la salida que daría el comando 'grep da *'.

Ejemplo: stdout a stderr


Esto hará que la salida stdout de un programa se escriba en el mismo descriptor de
fichero que stderr.

grep da * 1>&2

En este caso, la parte stdout del comando se envía a stderr ; puede observar eso de
varias maneras.

Ejemplo: stderr a stdout


Esto hará que la salida stderr de un programa se escriba en el mismo descriptor de
fichero que stdout .

grep * 2>&1

En este caso, la parte stderr del comando se envía a stdout . Si hace una tubería con
less, verá que las líneas que normalmente 'desaparecen'(al ser escritas en stderr ),
ahora permanecen (porque están en el stdout ).

Ejemplo: stderr y stdout a un fichero


Esto colocará toda la salida de un programa en un fichero. A veces, esto es
conveniente en las entradas del cron, si quiere que un comando se ejecute en absoluto
silencio.

rm -f $(find / -name core) &> /dev/null

Esto (pensando en la entrada del cron) eliminará todo archivo llamado `core'en
cualquier directorio. Tenga en cuenta que tiene que estar muy seguro de lo que hace

Plataforma de Teleformación de IFES Página 207 de 212


Introducción a Linux

un comando si le va a eliminar la salida.

Tuberías
Esta sección explica de una manera muy sencilla y práctica cómo utilizar tuberías, y por
qué querría utilizarlas.

Qué son y por qué hay que utilizarlas


Las tuberías le permiten utilizar (muy sencillo, insisto) la salida de un programa como la
entrada de otro.

Ejemplo: una tubería sencilla con sed


Ésta es una manera muy sencilla de utilizar tuberías.

ls -l | sed -e " s/[aeio]/u/g"

En este caso, ocurre lo siguiente: primero se ejecuta el comando 'ls -l', y luego su
salida, en vez de imprimirse en la pantalla, se envía (entuba) al programa sed, que
imprime su salida correspondiente.

Ejemplo: una alternativa a ls -l *.txt


Probablemente ésta es una manera más difícil de hacer un 'ls -l *.txt', pero se muestra
para ilustrar el funcionamiento de las tuberías, no para resolver ese dilema.

ls -l | grep ".txt$"
En este caso, la salida del programa ls -l se envía al programa grep , que imprimirá las
líneas que concuerden con la regex".txt$" (expresión regular) .

Variables
Puede usar variables como en cualquier otro lenguaje de programación. No existen
tipos de datos. Una variable de bash puede contener un número, un caracter o una
cadena de caracteres. No necesita declarar una variable. Se creará sólo con asignarle
un valor a su referencia.

Ejemplo: ¡Hola Mundo! utilizando variables


#!/bin/bash CAD="¡Hola Mundo!" echo $CAD

Página 208 de 212 Introducción a Linux


Introducción a Linux

La segunda línea crea una variable llamada STR y le asigna la cadena "¡Hola
Mundo!". Luego se recupera el VALOR de esta variable poniéndole un '$'al principio.
Por favor, tenga en cuenta (¡inténtelo!) que si no usa el signo '$', la salida del
programa será diferente, y probablemente no sea lo que usted quería.

Ejemplo: Un script de copia de seguridad muy simple


(algo mejor)
#!/bin/bash OF=/var/mi-backup-$(date +%Y%m%d).tgz tar -cZf $OF /home/yo/

Este script introduce algo nuevo. Antes que nada, debería familiarizarse con la creación
y asignación de variable de la línea 2. Fíjese en la expresión '$(date +%Y%m%d)'. Si
ejecuta el script se dará cuenta de que ejecuta el comando que hay dentro de los
paréntesis, capturando su salida.

Tenga en cuenta que en este script, el fichero de salida será distinto cada día, debido al
formato pasado al comando date (+%Y%m%d). Puede cambiar esto especificando un
formato diferente.

Algunos ejemplos más:

echo ls echo $(ls)

Variables locales
Las variables locales pueden crearse utilizando la palabra clave local .

#!/bin/bash
HOLA=Hola
function hola {
local HOLA=Mundo
echo $HOLA
}

echo $HOLA
hola
echo $HOLA

Este ejemplo debería bastar para mostrarle el uso de una variable local.

Estructuras Condicionales

Plataforma de Teleformación de IFES Página 209 de 212


Introducción a Linux

Las estructuras condicionales le permiten decidir si se realiza una acción o no; esta
decisión se toma evaluando una expresión.

Pura teoría
Los condicionales tienen muchas formas. La más básica es: if expresión then
sentencia donde 'sentencia'sólo se ejecuta si 'expresión'se evalúa como verdadera.
'2<1'es una expresión que se evalúa falsa, mientras que '2>1'se evalúa verdadera.

Los condicionales tienen otras formas, como: if expresión then sentencia1 else
sentencia2 . Aquí 'sentencia1'se ejecuta si 'expresión'es verdadera. De otra manera
se ejecuta 'sentencia2'.

Otra forma más de condicional es: if expresión1 then sentencia1 else if expresión2
then sentencia2 else sentencia3 . En esta forma sólo se añade "ELSE IF
'expresión2'THEN 'sentencia2'", que hace que sentencia2 se ejecute si expresión2
se evalúa verdadera. El resto es como puede imaginarse (véanse las formas
anteriores).

Unas palabras sobre la sintaxis: La base de las construcciones 'if'es ésta:


if [expresión]; then
# código si 'expresión' es verdadera.
fi
Ejemplo: Ejemplo básico de condicional if .. then

#!/bin/bash
if [ "petete" = "petete" ]; then
echo "expresión evaluada como verdadera"
fi

El código que se ejecutará si la expresión entre corchetes es verdadera se encuentra


entre la palabra 'then'y la palabra 'fi', que indica el final del código ejecutado
condicionalmente.

Ejemplo: Ejemplo básico de condicional if .. then ...


else
#!/bin/bash
if [ "petete" = "petete" ]; then
echo "expresión evaluada como verdadera"
else

Página 210 de 212 Introducción a Linux


Introducción a Linux

echo "expresión evaluada como falsa"


fi

Ejemplo: Condicionales con variables


#!/bin/bash
T1="petete"
T2="peteto"
if [ "$T1" = "$T2" ]; then
echo "expresión evaluada como verdadera"
else
echo "expresión evaluada como falsa"
fi

Ejemplo: comprobando si existe un fichero


#!/bin/bash
FILE=~/.basrc
if [ -f $FILE ]; then
echo "el fichero $FILE existe"
else
echo "fichero no encontrado"
fi

Los bucles for, while y until


En esta sección se encontrará con los bucles for, while y until. El bucle for es distinto a
los de otros lenguajes de programación. Básicamente, le permite iterar sobre una serie
de "palabras"contenidas dentro de una cadena. El bucle while ejecuta un trozo de
código si la expresión de control es verdadera, y sólo se para cuando es falsa (o se
encuentra una interrupción explícita dentro del código en ejecución). El bucle until es
casi idéntico al bucle loop, excepto en que el código se ejecuta mientras la expresión
de control se evalúe como falsa. Si sospecha que while y until son demasiado
parecidos, está en lo cierto.

Por ejemplo
#!/bin/bash
for i in $( ls ); do
echo "item: $i"
done

Plataforma de Teleformación de IFES Página 211 de 212


Introducción a Linux

En la segunda línea declaramos i como la variable que recibirá los diferentes valores
contenidos en $( ls ).

La tercera línea podría ser más larga o podría haber más líneas antes del done .

done indica que el código que ha utilizado el valor de $i ha acabado e $i puede tomar el
nuevo valor.

Este script no tiene mucho sentido, pero una manera más útil de usar el bucle for sería
hacer que concordasen sólo ciertos ficheros en el ejemplo anterior.

for tipo-C
Fiesh sugirió añadir esta forma de bucle. Es un bucle for más parecido al for de C/perl...

#!/bin/bash
for i in `seq 1 10`; do
echo $i
done

Ejemplo de while
#!/bin/bash
CONTADOR=0
while [ $CONTADOR -lt 10 ]; do
echo "El contador es $CONTADOR"
CONTADOR=$(($CONTADOR+1))
done

Este script 'emula'la conocida (C, Pascal, perl, etc) estructura `for'.

Ejemplo de until
#!/bin/bash
CONTADOR=20
until [ $CONTADOR -lt 10 ]; do
echo "El contador es $CONTADOR"
CONTADOR=$(($CONTADOR-1))
done

Página 212 de Introducción a Linux


212

También podría gustarte