Introduccionalinux PDF
Introduccionalinux PDF
Introduccionalinux PDF
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
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
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.
Módulo I. Introducción
Introducción
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.
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.
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 .
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.
En casi todas las revistas de Linux viene incluido un CD-ROM con una distribución de
Linux .
Descargarla de Internet
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.
Instalación completa
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.
Este programa se maneja con las teclas de las flechas, la tecla enter para hacer
cambios.
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
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.
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
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.
Entornos gráficos
• WindowMaker
• Blackbox
• IceWM
• XFCE
• Gnome
• KDE
WindowMaker
BlackBox
Gnome
KDE
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
XfCE
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
Estas empresas tienen como objetivos vender las distribuciones o los servicios de
mantenimiento y personalización a organizaciones o a usuarios finales.
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
• JuegaLinex : juegos.
Distribuciones live
Las distribuciones live son recopilaciones de programas que están listas para funcionar
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 .
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).
$ date
$ 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
encomiende.
Errores de escritura
$ dates
$ dates
sh: dates: command not found
$
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.
Auto completado
• 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.
$ rmd(tab)/e(tab)X(tab)xin(tab)
$ rmdir /etc/X11/xinit/
¿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:
$ 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
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.
Ó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
Opciones
Las opciones son letras o textos que se ponen detrás de la orden,normalmente con
espacios y guiones.
$ date
Thu Nov 24 14:36:18 2005
$ date -u
Thu Nov 24 13:36:18 UTC 2005
$ date --iso-8601
2005-11-24
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
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
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.
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 ).
Acuérdate de utilizar los tabuladores para acabar las órdenes y los nombres de los
directorios y archivos.
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.
• El asterisco ( * )
• El cierre de paréntesis ( ? )
• Cualquier símbolo entre corchetes cuadrados ( [ ] ).
$ ls /bin/a*
/bin/a2p
/bin/addftinfo
/bin/afmtodit
/bin/animate
/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:
El símbolo cierre de interrogación (?) sirve para indicar cualquier letra, pero sólo una
vez.
$ ls /bin/?sh
/bin/ash
/bin/ssh
$ ls /bin/??sh
/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
$ man uname
UNAME(1) UNAME(1)
NOMBRE
uname - imprime información del sistema
SINOPSIS
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.
Sistema de ficheros
Ficheros y directorios
Estructura jerárquica
En Unix no existen los equivalentes a las unidades de MS-DOS (c: o a: ), sino que
$ 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
man7
$ ls /mnt/cd(tab)
$ ls /cd(tab)
$ ls /media/cd(tab)
Todos los archivos y directorios de un sistema Unix tienen, entre otras, estas
características:
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
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.
• Direcciones absolutas
• Direcciones relativas
Direcciones absolutas
Direcciones relativas
Normalmente las direcciones relativas son más cortas de escribir que las direcciones
largas.
$ # ¿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
linux
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.
• Ver
• Crear
• Modificar
• Borrar
Inspeccionar
Ver
pwd
$ 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
Makefile
RCS
admin
literal
out
src
tmp
$ pwd
/home/ifes/cursos/linux
$ ls /usr
X11R6
bin
doc
etc
include
info
lib
local
man
sbin
share
src
ssl
tmp
$ ls /bin/*sh
/bin/ash
/bin/bash
/bin/ppmflash
/bin/sh
/bin/ssh
• -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
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.
cat
Varios ejemplos, para practicar puedes probar con los archivos que se encuentran en el
directorio /etc.
less
$ 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:
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
wc
$ # 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
11 25 219 tmp/carta2.txt
23 50 425 total
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
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
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
$ #
$ 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
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
Borrar
rm
Para borrar archivos utilizamos la orden rm seguida del nombre del archivo o archivos
que queremos borrar.
rmdir
rmdir sirve para borrar directorios vacíos. Si contienen algún archivo o directorio, da un
error y no los borra.
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
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
Se utiliza mucho para ver archivos que van aumentando de tamaño, añadiendo lo que
va pasando al final (logs).
sort
echo
argumento.
$ 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
para seleccionar las líneas que queremos mostrar, nos sirve para buscar dentro de
archivos sin tener que verlos por completo.
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.
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
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.
$ ##############################
$ #
sed
$ ############################################################
$ #
$ # 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
seq
Cuando necesitamos una lista de números utilizaremos la orden seq.
$ ############################################################
$ #
$ # 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
entorno Linux.
find sirve para buscar, pero también sirve para buscar y hacer algo con lo encontrado.
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
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
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
$ ############################################################
$ #
$ # 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
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 .
Entre estas opciones tiene que estar obligatoriamente una de las siguientes:
Además hay otras opciones que suelen acompañar a las opciones anteriores:
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
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
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
-- Nuevo clasificador --
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.
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
$
La entrada estándar es mucho menos importante que la salida estándar, en casi todas
las órdenes se puede poner como argumento el nombre de un fichero que es lo que
hace la redirección de la entrada.
Para redireccionar la entrada se pone el símbolo < seguido del archivo con el que
queremos alimentar el archivo.
16
17
18
19
2
20
3
4
5
6
7
8
9
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>
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.
Uso de tuberías
Es muy común que el resultado de una orden lo queramos volver a tratar mediante otra
orden por ejemplo:
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.
/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
/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
Concatenar órdenes
Órdenes seguidas
$ # 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.
continuación lo borramos.
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.
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
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.
$ 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.
$ a=32
$ read b
hola
Para utilizar el valor de una variable tenemos que añadirle el símbolo del dolar ($ )
antes del nombre.
$ 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.
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.
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.
$
$ 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.
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.
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.
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.
Editor vim.
Editor Kate.
Editor gedit.
En modo texto hay varios editores sencillos como joe, pico o nano.
F.A.Q.
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).
¿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.
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).
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.
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 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
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.
Por seguridad
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.
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.
[Nota de La Espiral: El autor, que firma con seudónimo, es usuario de Debian GNU y
Licenciado en Derecho.]
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).
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.
Adelantemos que hay diferencias, y muy notables. Probablemente a causa de que los
programas no son en absoluto equivalentes a las obras literarias.
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.
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.
Tipos de programas
Los programas pueden clasificarse según varios criterios con arreglo a la LPI:
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.
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.
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
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.
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:
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.
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.
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:
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.
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.
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
apartado 4.7.
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.
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
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á).
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.
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.
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).
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.
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:
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:
Las siguientes son facultades del usuario legítimo, pero son renunciables mediante
pacto contrario entre el usuario y el autor:
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.
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.
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.
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.
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.
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.
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).
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.
1. Cláusulas generales
Cláusulas generales
Definiciones, ámbito de aplicación de una licencia y avisos de copyright
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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
¿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.
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.
Unión de programas
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
Todo esto sólo vale si quien mezcla, adjunta o especifica actúa de buena fe.
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
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
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.
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.
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.
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.
rápidamente. Etc.
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.
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.
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
casos. Todo ello sin tocar la licencia libre, incluso manteniendo la cláusula copyleft.
Confiamos en versiones ulteriores de estas notas para desarrollar todo esto como
merece.
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
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.
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.
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.
Adviértase que otra idea surgida en el seno de Debian, Open Hardware, no tiene
Software no libre
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.
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.
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.
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.
Conclusión
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
Convenios internacionales:
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
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
Artículos
• Lista por temas
• Lista por autor
• Licencia GFDL
• Licencia GPL
La Espiral
• Objectivo/ Noticias
• Recetas
• Contribuir
• Historia
• Repositorio CVS
• Contacto
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.
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).
1. Barra de menús
4. Panel lateral
6. Barra de tareas
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.
Durante nuestra visita a la World Wide Web la barra de tareas suele mantenernos
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.
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.
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).
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.
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.
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...
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.
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.
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.
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.
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.
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:
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 .
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.
Para ver el contenido de su buzón o enviar un correo, haga clic en el icono Inbox .
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
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 .
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.
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 .
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
¿Qué es 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
(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
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>
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
CONTROL+D.
La mayoría de los ejemplos siguientes asume que estamos conectados al servidor, lo
cual se indica con el prompt de mysql.
mysql>
Aquí está otra consulta que demuestra cómo se pueden escribir algunas expresiones
matemáticas y trigonométricas:
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:
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 |
+-----------------+--------------+
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:
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
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
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;
">
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
la comilla correspondiente para finalizar la cadena, para que podamos escribir después
algún otro comando, o terminar la consulta que deseamos ejecutar.
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:
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.
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:
El mensaje anterior indica que la base de datos no ha sido creada, por lo tanto
necesitamos crearla.
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.
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:
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
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
Usaremos la sentencia CREATE TABLE para indicar como estarán conformados los
registros de nuestras discos.
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:
Para verificar que la tabla fue creada como nosotros esperábamos, usaremos la
sentencia DESCRIBE :
+-------------+-------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
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.
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.
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.
La forma más simple de la sentencia SELECT es cuando se recuperan todos los datos
de una tabla:
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
1999, no 1991.
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.
Podemos también combinar condiciones, por ejemplo, para localizar a los discos de
pop-rock que hemos adquirido antes del 2000:
La consulta anterior usa el operador lógico AND . Hay también un operador lógico OR :
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":
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:
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:
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.
Para ordenar en orden inverso, debemos agregar la palabra clave DESC al nombre de
la columna que estamos usando en el ordenamiento.
Podemos ordenar por múltiples columnas. Por ejemplo, para ordenar por género
musical y fecha de adquisición, usaremos la siguiente consulta:
+-----------------+-----------+-------------+
| 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 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.
+-----------------+-------------+--------------+------------+
| 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)
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.
ORDER BY.
Encontrar ahora, por ejemplo, los discos que hemos comprado en el mes de febrero es
muy sencillo.
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 < .
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:
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
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,
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 .
Desde la versión 3.23.4, para forzar que el operador REGEXP sea sensible al uso de
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.
Para encontrar los títulos de los discos que finalizan con la palabra 'do' , haremos uso
del carácter $.
Para encontrar los títulos de los discos que contienen una letra s, la consulta sería:
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.
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, 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:
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:
Dadas estas condiciones, la sentencia para crear la tabla eventos queda de la siguiente
manera:
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:
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.
• 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.
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
s
hell> mysql -h localhost -u chema -p < archivo-batch
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:
+-----------+
4 rows in set (0.00 sec)
Si se desea obtener la salida que proporciona el modo interactivo, se tiene que usar la
opción -t .
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.
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
#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)
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.
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.
ls -l > ls-l.txt
grep da * 1>&2
En este caso, la parte stdout del comando se envía a stderr ; puede observar eso de
varias maneras.
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 ).
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
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.
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.
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.
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.
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.
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
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).
#!/bin/bash
if [ "petete" = "petete" ]; then
echo "expresión evaluada como verdadera"
fi
Por ejemplo
#!/bin/bash
for i in $( ls ); do
echo "item: $i"
done
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