introduccion a linux´ filecomo la distribucio´n de cualquier programa no es nada dif´ıcil, unix...

31
Cap´ ıtulo 1 Introducci´ on a Linux Las computadoras de la actualidad han sido dise ˜ nadas de forma que pueden realizar diversas tareas. Para su correcto funcionamiento deben ser capaces de acceder a los recursos que disponen, por ejemplo, escribir o leer datos en un disco duro, mostrar una gr´ afica en la pantalla, etc. Es evidente, que si cada programa actuase de una forma independiente, cada programa tendr´ ıa la libertad de escribir sus datos sobre los de otros. Para solucionar este tipo de problemas se desarrollaron los Sistemas Operativos, los cuales aportan reglas b´ asicas para el funcionamiento de tal manera que los programas puedan acceder a la memoria de una manera ordenada. Un sistema operativo deber´ ıa ser un conjunto de herramientas y conceptos b´ asicos que le permitan al usuario construir r´ apida y f´ acilmente sus propias herramientas para automatizar procesos, por lo que es conveniente que el usuario identifique el tipo de trabajo que desarrollar´ a para escoger el tipo de sistema operativo que necesita. En la actualidad existen una gran cantidad de sistemas operativos. En el que nos enfocaremos ser´ a en Linux, ya que es uno de los sistemas operativos m´ as poderosos, r´ apidos y con muchas versiones disponibles. El sistema operativo Linux es un sistema derivado de Unix. Unix es un sistema multitarea, multiusuario, creado en 1969 por Thompson y Ritchie de los laboratorios Bell. Inicialmente fue distribuido gratuitamente en las universidades, donde tuvo mucha aceptaci´ on. Como la distribuci´ on de cualquier programa no es nada dif´ ıcil, Unix ha sido desarrollado en colaboraci ´ on de muchas personas. Seg´ un las palabras del mismo Ritchie 1 “Lo que quer´ ıamos preservar no era s´ olo un buen ambiente en el cual programar, sino tambi´ en un sistema alrededor del cual se formara fraternidad”, con est´ a mentalidad se ha creado una gran comunidad que ha desarrollado uno de los mejores sistemas operativos. Por otro lado, en 1984, Richard Stallman fund ´ o el Proyecto GNU con el objetivo de conseguir un sistema operativo libre y abierto, esto es, un sistema operativo tal que los usuarios puedan usarlo, leer el c´ odigo fuente, modificarlo y redistribuirlo. Para llevarlo a cabo se han promovido est´ andares abiertos, por lo cual existen comunidades para mantener estos est´ andares que definen lo que es hoy el proyecto GNU. La filosof´ ıa GNU apoya el crecimiento de la sociedad como un conjunto, haciendo especial ´ enfasis en la 1 Art´ ıculo escrito por Dennis Ritchie sobre la historia de Unix http://cm.bell-labs.com/cm/cs/who/dmr/hist.html 13

Upload: ngodiep

Post on 17-Mar-2019

215 views

Category:

Documents


0 download

TRANSCRIPT

Capıtulo 1

Introducci on a Linux

Las computadoras de la actualidad han sido disenadas de forma que pueden realizar diversas tareas. Parasu correcto funcionamiento deben ser capaces de acceder a los recursos que disponen, por ejemplo, escribiro leer datos en un disco duro, mostrar una grafica en la pantalla, etc. Es evidente, que si cada programaactuase de una forma independiente, cada programa tendrıala libertad de escribir sus datos sobre los deotros. Para solucionar este tipo de problemas se desarrollaron los Sistemas Operativos, los cuales aportanreglas basicas para el funcionamiento de tal manera que losprogramas puedan acceder a la memoria de unamanera ordenada.

Un sistema operativo deberıa ser un conjunto de herramientas y conceptos basicos que le permitan alusuario construir rapida y facilmente sus propias herramientas para automatizar procesos, por lo que esconveniente que el usuario identifique el tipo de trabajo quedesarrollara para escoger el tipo de sistemaoperativo que necesita.

En la actualidad existen una gran cantidad de sistemas operativos. En el que nos enfocaremos sera enLinux , ya que es uno de los sistemas operativos mas poderosos, rapidos y con muchas versiones disponibles.

El sistema operativo Linux es un sistema derivado de Unix. Unix es un sistema multitarea, multiusuario,creado en 1969 por Thompson y Ritchie de los laboratorios Bell. Inicialmente fue distribuido gratuitamenteen las universidades, donde tuvo mucha aceptacion.

Como la distribucion de cualquier programa no es nada difıcil, Unix ha sido desarrollado en colaboracionde muchas personas. Segun las palabras del mismo Ritchie1 “Lo que querıamos preservar no era solo unbuen ambiente en el cual programar, sino tambien un sistemaalrededor del cual se formara fraternidad”,con esta mentalidad se ha creado una gran comunidad que ha desarrollado uno de los mejores sistemasoperativos.

Por otro lado, en 1984, Richard Stallman fundo el Proyecto GNU con el objetivo de conseguir un sistemaoperativo libre y abierto, esto es, un sistema operativo talque los usuarios puedan usarlo, leer el codigofuente, modificarlo y redistribuirlo. Para llevarlo a cabo se han promovido estandares abiertos, por lo cualexisten comunidades para mantener estos estandares que definen lo que es hoy el proyecto GNU.

La filosofıa GNU apoya el crecimiento de la sociedad como un conjunto, haciendo especial enfasis en la

1Artıculo escrito por Dennis Ritchie sobre la historia de Unix http://cm.bell-labs.com/cm/cs/who/dmr/hist.html

13

14 CAPITULO 1. INTRODUCCION A LINUX

valoracion de las libertades personales, aun cuando estopuede estar en conflicto con intereses empresariales.

En 1991, Linus Torvalds completo el sistema con su kernel (que es la aplicacion encargada de comunicarlos procesos con el hardware de la computadora). A este kernel lo bautizo Linux. Ası se formo el sistemaGNU/Linux.

Los sistemas tipo Unix, en especıfico Linux, han sido empleados tradicionalmente por programadores,por esto cuenta con compiladores, editores y herramientas para facilitar la programacion (especialmente enlenguaje C). En el caso de Linux tales herramientas han sido desarrolladas por la Free Software Foundation2.Ası mismo la FSF aporto la licencia que cubre al kernel (llamada GPL) y muchos componentes de un sistemaLinux.

Al igual que otros sistemas operativos Unix/Linux cuenta con un sistema de ventanas que, a diferenciade otros sistemas operativos, es independiente de Unix/Linux —es decir puede ponerse, quitarse o cambiar-se—. Tal sistema de ventanas se llama X-Window y la version particular que se emplea en Linux se llamaXFree863.

1.1. Software libre

La mayorıa de las veces el software libre es obtenido gratuitamente, sin embargo, se debe entender elhecho de que el software libre esta relacionado con la libertad que se otorga a los usuarios de utilizarlo,modificarlo y distribuirlo. Al hablar de software libre se suelen clasificar los distintos grados de libertad alos que se puede tener acceso los usuarios:

Libertad Grado 0El software se puedeusar. Es la libertad que otorga casi cualquier software.

Libertad Grado 1El software se puedemodificar. Es decir, se puede personalizar, mejorar o adaptar para lasnecesida-des particulares de un determinado usuario.

Libertad Grado 2El software se puededistribuir . Es decir, se puede copiar, vender, prestar o compartir a laspersonasque el usuario desee, sin tener que pedir permiso al autor delsoftware.

Libertad Grado 3El software se puededistribuir modificado . Se trata de la suma de 1 y 2. Permite que las mejoras queun usuario hiciera a un determinado software puedan compartirse con otros usuarios.

En general las ideas del software libre buscan promover la generacion de mejor software, por medio dela suma de los pequenos aportes de cada persona, y colaborarpara que toda la sociedad se vea beneficiadacon los avances del software. Logrando mejorar la sociedad al tener disponibles mas y mejores herramientas.

Para mas informacion sobre el software libre puede visitar el sitio de internet del Proyecto GNU (http://www.gnu.org)que tiene una gran cantidad de documentos relacionados con la filosofıa del software libre.

2 http://www.fsf.org3 http://www.xfree86.org

1.2. ESTRUCTURA DEL SISTEMA DE ARCHIVOS LINUX 15

1.2. Estructura del sistema de archivos Linux

En cualquier sistema operativo moderno la estructura de archivos es jerarquica y depende de los directo-rios. En general la estructura del sistema de archivos se asemeja a una estructura de arbol, estando compuestocada nudo por un directorio o carpeta, que contiene otros directorios o archivos. En Windows cada unidadde disco se identifica como una carpeta basica que sirve de raız a otras, y cuyo nombre es especial:c:, d:,etc. En los sistemas Linux, existe una unica raız llamada/ de la que cuelgan todos los ficheros y directorios,y que es independiente de en que dispositivo esten conectados a la computadora.

El camino o path de un fichero o directorio es la secuencia de directorios que se debe recorrer paraacceder a un determinado fichero separado por/. Existen dos formas para acceder al mismo camino:

El camino absoluto que muestra toda la ruta a un fichero:

/home/roxana/Carta.txt

El camino relativo a un determinado directorio, que muestrala ruta a partir de un directorio dado. Porejemplo, si estamos en el directorio/homeel path relativo al ficheroCarta.txt del ejemplo anteriores:

roxana/Carta.txt

El sistema de archivos de Linux tiene una estructura determinada, compatible y homogenea con el restode los sistemas Unix.

Todo el sistema de archivos de Unix tiene origen unico en la raız oroot por /. Bajo este directorio seencuentran los ficheros a los que puede acceder el sistema operativo. Estos ficheros se organizan en distintosdirectorios cuya mision y nombre son estandar para todos los sistemas Unix:

/: Raız del sistema de archivos

/dev: Contiene ficheros del sistema representando los dispositivos que esten fısicamente instalados enel ordenador (Hardware).

/etc: Reservado para los ficheros de configuracion del sistema. En este directorio no debe aparecerningun fichero binario (programas). Bajo este, deben aparecer otros dos subdirectorios:

• /etc/X11: Ficheros de configuracion de X-Window

• /etc/skel: Ficheros de configuracion basica que son copiados al directorio del usuario cuando secrea uno nuevo.

/lib : Contiene las librerıas necesarias para que se ejecuten los programas que residen en/bin. Nocontiene las librerıas de los programas de los usuarios.

/proc: Contiene ficheros especiales que pueden recibir o enviar informacion alkernel del sistema. Esrecomendable no modificar el contenido de este directorio y sus ficheros.

/sbin: Contiene programas que son unicamente accesibles al superusuarioroot.

/usr: Este es uno de los directorios mas importantes del sistema, puesto que contiene los programasde uso comun para todos los usuarios. Su estructura suele ser:

16 CAPITULO 1. INTRODUCCION A LINUX

• /usr/X11R6: Contiene los programas para ejecutar X Window.

• /usr/bin: Programas de uso general del sistema.

• /usr/doc: Documentacion general del sistema.

• /usr/etc: Ficheros de configuracion general.

• /usr/include: Ficheros de cabecera de C/C++ (.h)

• /usr/info: Ficheros de informacion de GNU

• /usr/lib : Librerıas generales de los programas.

• /usr/man: Manuales accesibles con el comandoman

• /usr/sbin: Programas de administracion del sistema

• /usr/src: Codigo fuente de programas.

1.2.1. Comandos Basicos de Linux

El sistema operativo Unix nos ofrece una gran cantidad de instrucciones orientadas al trabajo con todotipo de ficheros. Esto no es casual, se suele decir (sin exagerar) que en un sistema Unix habitual todo sonarchivos, desde la memoria fısica del ordenador hasta la configuracion de la impresora, pasando por discosduros, terminales, ratones, etc.

La mayorıa de las instrucciones que estudiaremos tienen una instruccion equivalente en el sistema MS-DOS. Trataremos de estudiarlas mediante un orden logico, ası abarcaremos los comandos basicos.

Comandos de creacion y gestion de archivos y directorios

ls

Lista el contenido de directorios y archivos del sistema a partir del directorio en que se esta trabajando.Existen muchas opciones para la ordenls (-a,-l,-d,-r,..), que a su vez se pueden combinar de muchasformas. Sin embargo, de todas estas, las que podrıamos considerar mas comunes son:

• -l (long): Formato de salida largo, con mas informacion que utilizando un listado normal.

• -a (all): Se muestran tambien archivos y directorios ocultos.

• -r (recursive): Lista recursivamente los subdirectorios

cd

La orden ‘cd’ en Unix hace lo mismo que en MS-DOS: nos permite cambiar de directorio de trabajomediante una sintaxis basica:cd directorio. Si en Unix tecleamos cd sin argumentos iremos a nuestrodirectorio$HOME.

pwd

Imprime en pantalla la ruta completa del directorio de trabajo donde nos encontramos actualmente. Notiene opciones y es una orden util para saber en todo momentoen que punto del sistema de archivosde Unix nos encontramos.

1.2. ESTRUCTURA DEL SISTEMA DE ARCHIVOS LINUX 17

mkdir

Crea un directorio. No veremos las dos opciones de modo y directorios intermedios de la instruccion,por lo que la sintaxis sera simplementemkdir directorio. Para crear un directorio hemos de tener encuenta los permisos del directorio en que nos encontremos trabajando.

touch

Actualiza la fecha de ultima modificacion de un archivo, o crea un archivo vacıo si el fichero pasadocomo parametro no existe. Con la opcion -c no crea este archivo vacıo. Su sintaxis estouch -c

archivo.

cp

La orden ‘cp’ equivalente al ‘copy’ en MS-DOS, se ejecuta de la formacp origen destino, y evidente-mente copia el archivo indicado en el parametro ‘origen’ enotro lugar del disco, indicado en ‘destino’,en Unix es siempre obligatorio especificar el destino de la copia. Si este destino es un directorio pode-mos indicar varios orıgenes (tanto archivos como directorios) que seran copiados en su interior; estosmultiples orıgenes se pueden definir uno a uno, por su nombre, o bien mediante comodines, que sonlos sımbolos especiales ‘*’(sustituibles por uno o mas caracteres) y ‘?’ (sustituidos por uno solo).

De esta manera, la primera de las dos ordenes siguientes copiara los ficherosfichero1y fichero2enel directoriodirec1, y la segunda hara lo mismo con todos los archivos que finalicen en.h. En amboscasos el directorio destino ha de existir previamente:

roxana:~$ cp fichero1 fichero2 direc1

roxana:~$ cp *.h direc1

Para copiar de forma recursiva se utilizara la opcion-r, que copiara tanto ficheros como directorioscompletos en un determinado destino. Por ejemplo, si queremos copiar todo el directorio/etc/ en eldirectorio actual:

roxana:~$ cp -r /etc

La orden anterior no es igual a esta otra

roxana:~$ cp -r /etc/*

La diferencia entre ambas radica en el orden indicado: en el primer caso le decimos al sistema ope-rativo que copie el directorio y todo lo que cuelga de el, porlo que en el destino se creara un nuevosubdirectorio denominadoetc, que contendra todo lo que habıa en el origen; en cambio, enel segundocaso estamos diciendo que se copie todo lo que cuelga del directorio, pero no el propio directorio,por lo que en el destino se copiaran todos los ficheros y subdirectorios del origen, pero sin crear elsubdirectorioetc.

mv

Renombra un archivo o directorio, o mueve un archivo de un directorio a otro. Dependiendo del uso,su sintaxis varıa:mv archivo directoriomueve los archivos especificados a un directorio, ymv archivo1archivo2renombra el primer fichero asignandole el nombre indicado en archivo2. Ejemplo:

roxana:~$ mv hola.c prueba.c

18 CAPITULO 1. INTRODUCCION A LINUX

Aquı renombramos el archivohola.ccomoprueba.c

roxana:~$ mv *.c direc1

Mueve todos los archivos finalizados en.c al directoriodirec1

ln

Asigna (link) un nombre adicional a un archivo. Para nosotros, la opcion mas interesante sera-s,que nos permitira crear enlaces simbolicos entre archivos del sistema. Analizaremos los dos tipos deenlaces de Unix (enlaces duros y enlaces simbolicos) mas adelante. La sintaxis basica del comandoesln -s fuente destino.

rm

Elimina archivos o directorios. Sus tres opciones son-r (borrado recursivo, de subdirectorios),-f (noformula preguntas acerca de los modos de los archivos), y-i (interactivo, solicita confirmacion antesde borrar cada archivo). Su sintaxis es muy sencilla:rm -rfi archivo

rmdir

Borra directorios si estan vacıos. La sintaxis de este mandato serarmdir directorio. Si se borrandirectorios que no esten vacıos, hemos de utilizarrm -r directorio.

Tratamiento Basico de archivos

file

La ordenfile nos proporciona informacion sobre el tipo del archivo (o archivos) especificado(s)como argumento(s). Es necesario recordar que en Unix no existe el concepto de extension, por lo queel hecho de que el nombre de fichero acabe en ‘.txt’ o en ‘.c’ no dice nada a priori acerca del mismo.Podemos tener un archivo ejecutable que se llame ‘carta.txt’ o un directorio que se llame ‘prueba.doc’.

cat

La ordencat es equivalente al ‘type’ de MS-DOS, es decir, su funcion es mostrar en pantalla elcontenido de un archivo:

roxana:~$ cat area_circulo.f

programa area del circulo

real r,a

write(*,*)’Escribe el radio de la circunferencia’

read(*,*)r

a=(3.14151692)*r*r

write(*,*)’Area=’,a

end

more

Visualiza un archivo pantalla a pantalla, no de forma continua. Es una especie decat con pausas,que permite una comoda lectura de un archivo. Al final de cadapantalla nos aparecera un mensajeindicando--More--. Si en ese momento pulsamosEnter, veremos una o mas lıneas del archivo; sipulsamosSpace, veremos la siguiente pantalla, si pulsamosb la anterior, y si pulsamosq saldremosde more. Su sintaxis esmore archivo.

1.2. ESTRUCTURA DEL SISTEMA DE ARCHIVOS LINUX 19

1.2.2. Herramientas mas potentes del sistema

head

La ordenhead muestra las primeras lıneas (10 por defecto) de un archivo que recibe como parametro.La principal opcion de este mandato es la que especıfica el numero de lıneas a visualizar (‘n’), y susintaxis eshead -n archivo. Ejemplo:

roxana:~$ head -3 area_circulo.f

programa area del circulo

real r,a

frite(*,*)’Escribe el radio de la circunferencia’

tail

Visualiza el final de un archivo (es la instruccion contraria ahead). La unica opcion que nos interesaes (‘n’). Si no se especifica este parametro,tail mostrara por defecto las diez ultimas lıneas delarchivo. Su sintaxis estail -n archivo.

cmp

Esta orden compara el contenido de dos archivos, imprimiendo en pantalla la primera diferencia en-contrada (si existe). Recibe como parametros los dos nombres de los ficheros a comparar. Ejemplo:

roxana:~$ cmp epsilon.f epsilon2.f

epsilon.f epsilon2.f son distintos: byte 28, lınea 2

diff

Esta orden compara dos archivos, indicandonos las lıneasque difieren uno con respecto al otro (siambos son iguales, la ejecucion no producira ninguna salida en pantalla). Su sintaxis esdiff fichero1fichero2.

Aunque a primera vista no encontremos ninguna diferencia entre diff y cmp, ambas instruccionesson muy diferentes; sin ir mas lejos,diff recorre ambos ficheros por completo, mientras quecmp selimita a encontrar una diferencia.

grep

Esta es quiza una de las ordenes mas utilizadas e importantes en cualquier sistema Unix; grep buscaun patron (que recibe el nombre de parametro) en un archivo. Su sintaxis es sencilla;grep [opcion]

patron fichero. Al tratarse de una potente herramienta de Unix muchas de susopciones son de interespara nosotros, en particular-v (imprime las lıneas que no coinciden con el patron),-i (no distinguemayusculas, minusculas) y-c (imprime la cuenta de coincidencias).

La orden grep se suele utilizar tanto como instruccion directa para buscar una cadena en un fichero,como unido a otras ordenes para filtrar su salida mediante ‘|’. Por ejemplo, las ordenes siguientes sonequivalentes.

roxana:~$ grep -i programa epsilon.f

programa epsilon de la maquina

roxana:~$ cat epsilon3.f|grep -i programa

programa epsilon de la maquina

20 CAPITULO 1. INTRODUCCION A LINUX

sort

Extrae, compara o mezcla lıneas de archivo de texto. Clasifica, segun un patron de clasificacion espe-cificado, todas las lıneas de archivos que recibe como parametro. Por defecto, este patron es la lıneacompleta. Las otras opciones de clasificacion que nos pueden resultar utiles son:

• -d: Ordenado segun el diccionario

• -f : Interpreta las letras minusculas como mayusculas.

La sintaxis que utilizaremos para sort es:sort -opciones clasificaciones archivos

wc

Es un contador de lıneas palabras y caracteres. Es posible utilizarlo como mandato directo, como filtroy tambien es una potente herramienta enshellscripts. Su sintaxis eswc [-opcion] archivo, siendoopcion una de las siguientes:

• -l: cuenta lıneas

• -c: cuenta caracteres

• -w: cuenta palabras

Se pueden usar combinaciones de las tres opciones. Por defecto, wc asumira todas:-wlc. Si no seindica un nombre de archivo, la orden espera datos de la entrada estandar (el teclado).

1.2.3. Otros comandos

echo

Esta orden imprime sus argumentos en la salida estandar. Por una parte, imprime el mensaje especi-ficado como argumentos (esta opcion se usa generalmente enshellscripts, ya que en otros casos notiene mucha utilidad visualizar el mensaje en pantalla), y por otra consultar el valor de variables deentorno:

roxana:~$ echo Hola

Hola

roxana:~$ echo $HOME

/home/roxana

nohup

Mantiene la ejecucion de ordenes aunque se desconecte el sistema, ignorando senales de salida y/operdida de terminal. Su sintaxis esnohup orden. Nos permite dejar trabajos realizandose aunqueno estemos fısicamente conectados a la computadora, como compilacion de grandes programas demodulos, etc.

man

En el sistema operativo Unix, se incorporan manuales no-linea en los que se describe la sintaxis,opciones y utilidad de las diferentes ordenes del sistema.Este manual es, por supuesto,man, quelocaliza e imprime en pantalla la informacion solicitada por el usuario.

En Linux, las paginas del manual se organizan en diferentescategorıas, atendiendo a la clasificacionde la llamada sobre la que se intenta buscar ayuda. Cada una deestas categorıas se almacena en un

1.2. ESTRUCTURA DEL SISTEMA DE ARCHIVOS LINUX 21

directorio diferente del disco. Si queremos saber la localizacion de estos directorios, habremos devisualizar la variable de usuario$MANPATH. La sintaxis de man esman orden. Sin embargo, hay unaserie de opciones basicas.

• -a (all): Forza aman a mostrarnos, una a una, todas las diferentes paginas para una mismainstruccion o funcion.

• -w (whereis): No imprime las paginas de ayuda en pantalla, sino que nos indica los archivos,con su ruta absoluta, donde se encuentran tales paginas (que seran ficheros finalizados con laextension .GHz). En combinacion con ‘-a’, nos dara la ruta de todas las paginas que queremosconsultar.

• -h (help): Imprime en pantalla de ayuda sobre las opciones basicas de la ordenman.

man tambien es una orden en Unix con su propia pagina de manual.Por lo tanto, la ordenman mannos dara informacion sobre la sintaxis completa y todas las opciones deman.

1.2.4. Permisos en Linux

Ya se ha mencionado que Linux es un sistema multiusuario, porlo que muchas personas pueden utilizarel mismo equipo. Los permisos son un mecanismo que sirve paradiferenciar los archivos de un usuario delos demas archivos.

Los permisos de cualquier archivo (inclusive los directorios) se agrupan en 3 grupos de 3 bits cada uno.Es decir,

rwx rwx rwx

| | |

| | otros

| grupo

usuario

El bit r (read) indica que es un archivo de lectura, el bitw (write) es de escritura y el bitx (execute)indica ejecucion.

Con las diferentes combinaciones, se puede configurar un archivo para que pueda ser leıdo y modificadopor su dueno, y solo leıdo por el grupo y los demas. Por ejemplo,

/etc/pasad:

-rw-r--r-- 1 root root 1509 Par 4 12:44 /etc/pasad

Este archivo es del usuario root, y del grupo del mismo nombre. Solamente se puede modificar por suusuario dueno, y leer por el grupo y los demas.

A diferencia de sistemas operativos como DOS y Windows, el hecho de que un archivo tenga una exten-sion .exeno significa que sera un programa ejecutable. Al necesitar restringir los derechos de ejecucion decualquier archivo, la accion de ejecutar cualquier programa estara destinada al permiso correspondiente (bitx de ejecucion). Por lo que es importante considerar cuandose escriben programas que seran interpretados,

22 CAPITULO 1. INTRODUCCION A LINUX

ya que al final de cuentas los archivos seran de texto, y para que se ejecuten se le debera activar el permisode ejecucion.

1.2.5. Cambio de permisos: el comando chmod

Para cambiar los permisos de los archivos se usa el comando chmod. Su sintaxis es la siguiente eschmod

-R modo archivo. La opcion-R permite cambiar recursivamente los permisos de todos los archivos dentrode un directorio.

El argumento modo esta compuesto por alguna combinacion de las letrasu (usuario dueno),g (grupodueno) yo (otros), seguido de un sımbolo+ o -, dependiendo si se quiere activar o desactivar un permiso, yuna combinacion de las letras correspondientes a los distintos permisos:r, w y x. Si se necesita dar permisosde ejecucion al usuario y al grupo de un archivo, el comando debera ejecutarse de la siguiente manera:chmod ug+x archivo

1.2.6. Extension de archivos

En general, depende del programa que utilicemos, sera la extension del archivo. Esto se debe a queel sistema operativo debe tener una forma de identificar que tipo de archivo es con el que trabaja. Paraesto es muy util que se guarden los archivos con extension.A continuacion se mostraran algunas de estasextensiones.

.txt: Archivos de texto.

.jpg, .psp, .gif, .png: Graficas en diversos formatos, o imagenes.

.gz, .zip, .zoo: Informacion comprimida, pueden descomprimirse congzip -d, archivo destinoy ar-chivo original respectivamente. Para comprimir en estos formatos se usagzip, compressy zip.

Ejemplo: Supongamos que existe un archivo muy largo que deseemos comprimir. Para esto usare-mos el comandogzip archivo.txtque producira un archivo de salida llamadoarchivo.txt.gz yacomprimido.

.html: Hipertextos HTML que pueden verse con un navegador y editarse con un editor de texto.Tambien hay herramientas especializadas para editar HTML.

.tar .tgz .tar.gz: Directorio con varios archivos empaquetados. Pueden desempaquetarse con el co-mandotar.

Ejemplo: Para crear un empaquetadoprogramas.tara partir del contenido del directorio/home/roxana/computacion/prpuede usarse:tar cvf programas.tar /home/roxana/computacion. Para desempacar el archivopro-gramas.taren el directorio de computacion se usa:tar xvf programas.tar.

Para desempaquetar y descomprimir algo que tiene la extension .tgzo .tar.gzpuede descomprimireprimero congzip y el resultado desempaquetarlo contar o puede emplear la opcion-z detar: tarxvfz archivo.tgz. De forma analoga para empaquetar el directorio y comprimir el empaquetado puedeempleartar cvfz archivo.tgz archivo.

.sh: Script para el interprete de comandos. Le dice al sistema operativo Unix como gestionar sustareas. Puede ejecutarse tecleando el nombre desde la terminal.

1.3. ENTORNOS DE ESCRITORIO 23

1.3. Entornos de escritorio

Se puede decir que un entorno de escritorio es un conjunto de software para ofrecer al usuario una inter-accion amigable y comoda con la computadora. Este tipo de software es una solucion completa de interfazgrafica de usuario que ofrece iconos, barras de herramientas, programas e integracion entre aplicaciones.

En general, cada entorno de escritorio se distingue por su aspecto y comportamiento particulares. Elprimer entorno moderno de escritorio que se comercializo fue desarrollado por Xerox en los anos 80’s.

Para facilitar la adopcion de Unix por parte de usuarios sinexperiencia, hay varios proyectos en marcha.Los dos mas conocidos son GNOME (http://www.gnome.org) y KDE (http://www.kde.org), que funcionansobre Linux y X-Window. Cada uno brinda un entorno de escritorio grafico y aplicaciones de oficina como alas que estan acostumbrados los usuarios de otros sistemasoperativos (procesador de texto, hoja de calculo,etc).

1.3.1. GNOME

El Proyecto GNOME, segun sus creadores, provee un gestor deventanas “intuitivo y atractivo”. Sebasa de una plataforma de desarrollo de aplicaciones que se integran con el escritorio. El Proyecto pone ungran enfasis en la simplicidad, amabilidad y en hacer que las cosas funcionen. Los objetivos principales delproyecto son:

1. Libertad para crear un entorno de escritorio con el codigo fuente disponible bajo la licencia de soft-ware libre.

2. Aseguramiento de accesibilidad, cualquier persona puede utilizarlo sin importar sus conocimientostecnicos y discapacidades fısicas.

3. Disponibilidad en muchos idiomas. Hasta el momento ha sido traducido en 100 idiomas.

La historia de GNOME (GNU Network Object Model Environment)es sumamente interesante.Estesurgio en agosto de 1997 como un proyecto liderado por los mexicanos Miguel de Icaza y Federico Menapara crear un entorno de escritorio completamente libre para sistemas operativos libres, en especial paraGNU/Linux. En esos momentos existıa otro proyecto anterior con los mismos objetivos, pero con diferen-tes medios: KDE. Los primeros desarrolladores de GNOME criticaban a dicho proyecto por basarse en labiblioteca de controles graficos, cuyas licencias no eran compatibles con GNU.

El escritorio GNOME es bastante configurable: puede configurar los menus, los iconos, las tipografıas, elfondo, el protector de pantalla, el tema, el administrador de ventanas, sonido, la interaccion con las ventanasy muchos otros detalles de acuerdo a su gusto.

1.3.2. KDE

Entorno de escritorio e infraestructura de desarrollo parasistemas Unix/ Linux. De acuerdo con supagina web “KDE es un entorno de Escritorio contemporaneopara estaciones de trabajo en Unix. KDEllena las necesidades de un escritorio amigable para estaciones de trabajo Unix.”

24 CAPITULO 1. INTRODUCCION A LINUX

KDE se basa en el principio de la personalizacion. Todos loscomponentes de KDE pueden ser configu-rados en mayor o menor medida por el usuario. Las opciones mas comunes son accesibles en su mayorıadesde menus y dialogos de configuracion. Los usuarios avanzados pueden optar por editar los archivos deconfiguracion manualmente, obteniendo en algunos casos unmayor control sobre el comportamiento delsistema.

La intencion del proyecto KDE es la de crear un entorno de escritorio que no se comporte de un modopredefinido, sino que permita al usuario adecuar el sistema asu gusto y comodidad. Esto no impide queKDE resulte facil de usar para nuevos usuarios.

El proyecto fue iniciado en octubre de 1996 por el programador aleman Matthias Ettrich, quien buscabacrear una interfaz grafica unificada para sistemas Unix.

1.4. Editores de texto

Un editor de texto es un programa que permite crear y modificararchivos digitales compuestos unica-mente por texto sin formato, conocidos comunmente como archivos de texto. El programa lee el archivo einterpreta los bytes leıdos segun el codigo de caracteres que usa el editor.

Los editores de texto son incluidos en el sistema operativo oen algun paquete de software instalado y seusan cuando se deben crear o modificar archivos de texto como archivos de configuracion o codigo fuentede algun programa.

El archivo creado por un editor de texto incluye por convencion en MS-DOS y Microsoft Windows laextension.txt o .doc, aunque pueda ser cambiada a cualquier otra con posterioridad.

En Unix como GNU/Linux dan al usuario total libertad en la denominacion de sus archivos. Hay unagran variedad de editores de texto. Algunos son de uso general, mientras que otros estan disenados paraescribir o programar en un lenguaje.

1.4.1. Vi

Vi es un simple editor de texto, que no lo formatea en absoluto, pues no centra ni justifica parrafos, peropermite mover, copiar, eliminar o insertar caracteres por medio del bufer, permaneciendo la informacionahı hasta que los cambios en el archivo se hayan guardado o bien hasta que se termina la ejecucion de laaplicacion sin haber guardado las modificaciones.

Hay una version mejorada que se llamaVIM , perovi es un editor de texto que se encuentra en casitodo sistema de tipo Unix, de forma que conocer rudimentos deVi es una salvaguarda ante operaciones deemergencia en diversos sistemas operativos.

Vi es un editor de dos modos: edicion y comandos. En el modo de edicion, el texto que ingrese sera agre-gado al texto. En modo de comandos las teclas que oprima pueden representar algun comando devi. Cuandocomience a editar un texto estara en modo para dar comandos.

Comandos

1.4. EDITORES DE TEXTO 25

:q Es el comando que debemos utilizar para salir.

:q! Salir ignorando cambios.

:dd Borra una lınea entera.

:i Puede insertar texto (pasar a modo de edicion) con varias teclas.

:a Insertar texto antes del caracter sobre el que esta el cursor.

:I Inserta texto despues del caracter sobre el que esta el cursor.

:A Inserta texto al comienzo de la lınea en la que esta el cursor.

:o Inserta texto al final de la lınea en la que esta el cursor.

:O Abre espacio para una nueva lınea despues de la lınea en laque esta el cursor y permite insertartexto en la nueva lınea.

Para pasar de modo edicion a modo comandos se emplea la teclaESC, para desplazarse sobre el archivose emplean las teclasj (abajo),k (arriba),h (izquierda) ei (derecha), tambien puede emplear las flechas sisu terminal lo permite. Las combinacionesCtrl+U y Ctrl+D equivalen aPgUpy PgDnrespectivamente.

Una de las utilidades mas comunes es el uso de:wq que corresponde a la union de las opciones guardar(w) y salir (q), o bien el modo forzado es:q! que sale devi sin guardar cambios.

1.4.2. gedit

Gedit es un completo editor de textos libre que se distribuyejunto al gestor de escritorio GNOME parasistemas tipo Unix. Este editor se caracteriza principalmente por su facilidad de uso, conseguida en granparte gracias a un interfaz grafico claro y limpio, mostrando unicamente las funcionalidades principales quesuelen requerir la mayorıa de usuarios.

1.4.3. Kate

Kate es un editor de textos para KDE. Kate significaKDE AdvancedText Editor , es decir, Editor detextos avanzados para KDE. Algunas caracterısticas de Kate son:

Destacado de sintaxis.

Busqueda y reemplazo de texto usando expresiones regulares (comodines).

Seguimiento de codigo para C++, C, Python, FORTRAN, PHP y otros.

Mantener multiples documentos abiertos en una ventana.

Emulador de terminal basado en Konsole.

26 CAPITULO 1. INTRODUCCION A LINUX

1.4.4. Emacs

Emacs es un editor de texto con una gran cantidad de funciones. muy popular entre programadores yusuarios tecnicos. Este editor forma parte del proyecto GNU. En el manual de GNU Emacs lo describe como“un editor extensible, personalizable, auto-documentadoy de tiempo real.”

Emacs significa, Editor MACroS para el TECO. Fue escrito en 1975 por Richard Stallman junto con GuySteele. Fue inspirado por las ideas de TECMAC y TMACS, un par de editores TECO-macro escritos porGuy Steele, Dave Moon, Richard Greenblatt, Charles Frankston, y otros. Se han lanzado muchas versionesde EMACS hasta el momento, pero actualmente hay dos que son usadas comunmente: GNU Emacs, iniciadopor Richard Stallman en 1984, y XEmacs, un fork de GNU Emacs, que fue iniciado en 1991. Ambos usanuna extension de lenguaje muy poderosa, Emacs Lisp, que permite manejar tareas distintas, desde escribir ycompilar programas hasta navegar en Internet.

Si tenemos implementado un ambiente X-Window, al teclear EMACS en la terminal aparecera unaventana ventana nueva. Una vez en EMACS podra desplazarse sobre el texto con las flechas. Para insertartexto se tiene que escribir justo donde se quiera poner. Los comandos en EMACS se indican con secuenciasde teclas con Control (abreviada con C en la documentacion de EMACS). Algunas secuencias de teclasutiles son:

C-x C-c Para salir de EMACS. (Note que son dos secuencias de teclas, primero Control simultanea-mente con x y despues Control simultaneamente con c).

C-x C-s Para salvar el archivo que se esta editando.

C-f Avanzar a la derecha o a la siguiente lınea si se esta al finalde una. Equivalente a flecha a laderecha.

C-b Avanzar a la izquierda o al final de la lınea anterior si estaal comienzo de una. Equivale a flechaa la izquierda.

C-n Avanzar a la lınea siguiente, equivalente a flecha hacia abajo.

C-p Pasar a la lınea anterior, equivale a flecha hacia arriba.

M-x Para dar un comando especial a EMACS, entre los comandos especiales estan:info para consultardentro de EMACS paginas del manual info,manpara consultar paginas del manual,shellpara abriruna terminal dentro de EMACS.

En la parte inferior de este editor vera una lınea de modo (tiene varios guiones) y debajo esta el minibuf-fer o area de eco en la que EMACS recibe y envıa informaciondel usuario. La lınea de modo puede aparecercon dos asteriscos al comienzo para indicar que el texto editado se ha modificado y no se ha salvado.

1.5. Compiladores

Un compilador es un programa informatico que traduce un programa en codigo fuente en lenguaje de altonivel a otro lenguaje de programacion, por lo general de nivel inferior, generando un programa equivalenteque la maquina sera capaz de interpretar. Por lo general, el segundo lenguaje es codigo maquina, pero puede

1.5. COMPILADORES 27

llegar a ser puro texto. Es ası como un programador puede disenar un programa en un lenguaje muchomas cercano a como piensa un ser humano, para luego compilarlo a un programa mas manejable por unacomputadora.

En 1946 se desarrollo la primera computadora digital. En unprincipio, estas maquinas ejecutaban ins-trucciones consistentes en codigos numericos que senalaban a los circuitos de la maquina los estados co-rrespondientes a cada operacion, lo que se denomino lenguaje maquina.

Pronto los primeros usuarios de estas computadoras descubrieron la ventaja de escribir sus programasmediante claves mas faciles de recordar que esos codigos; al final, todas esas claves juntas se traducıanmanualmente a lenguaje maquina. Estas claves constituyenlos llamados lenguajes ensambladores.

Pese a todo, el lenguaje ensamblador seguıa siendo el de unamaquina, pero mas facil de manejar. Lostrabajos de investigacion se orientaron hacia la creacion de un lenguaje que expresara las distintas acciones arealizar de una manera lo mas sencilla posible para una persona. El primer compilador fue escrito por GraceHopper, en 1952 para el lenguaje de programacion A-0, En 1950 John Backus dirigio una investigacionen IBM sobre un lenguaje algebraico. En 1954 se empezo a desarrollar un lenguaje que permitıa escri-bir formulas matematicas de manera traducible por una computadora, le llamaron FORTRAN (FORmulaeTRANslator). Fue el primer lenguaje de alto nivel y se introdujo en 1957 para el uso de la computadora IBMmodelo 704.

Actualmente existen herramientas que facilitan la tarea deescribir compiladores o interpretes informati-cos. Estas herramientas permiten generar el esqueleto del analizador sintactico a partir de una definicionformal del lenguaje de partida, especificada normalmente mediante una gramatica formal y barata, dejandounicamente al programador del compilador la tarea de programar las acciones semanticas asociadas.

28 CAPITULO 1. INTRODUCCION A LINUX

Capıtulo 2

Introducci on a Python

Una de las grandes ventajas de usar Python es el de ser un lenguaje de programacion de alto nivelmuy compacto. Hacer un programa en Python es mas corto que hacer un programa en otro lenguaje deprogramacion. Por esta razon hay muchas personas que lo consideran como un lenguaje de programacion de“muy alto nivel”. Otra de las grandes ventajas es su legibilidad, ademas que la sintaxis de la programaciones extremadamente elegante, lo que permite que alguien que no sepa programar lo haga en Python en muypoco tiempo.

Python ofrece un entorno interactivo, en el cual se pueden disenar pequenos programas, ejecutandolosen el mismo instante en el que se termina el codigo, sin tenerque compilar. Por lo tanto es relativamentefacil traducir metodos numericos a programas Python.

Al programar, necesitamos un conjunto de herramientas que llamamos entorno de programacion. Esteconjunto de herramientas puede estar formado por editores de texto, compiladores, etc. Por otro lado, existenlos lenguajes interpretados, como, por ejemplo, C o Fortran. En estos, no es necesario escribir el codigo enun editor de texto, compilar y ejecutar. En los lenguajes interpretados se pueden tener resultados antes deacabar el programa. Esto se hace como si dialogaramos con elinterprete: se escribe una orden en la lınea decomandos y en seguida nos responde con el resultado.

2.1. Python

La mayorıa de los sistemas Unix modernos incluyen los compiladores y paquetes basicos de Python. Unaforma de comenzar con el interpretador es abrir una terminaly en la lınea de comandos escribirpython paraentrar al interpretador de Python.

Para Windows es necesario entrar al sitio principal de Python, cuya direccion electronica es www.python.orgy buscar un interpretador compatible con el Windows en cuestion. El interpretador mas famoso esidle, quees compatible para varias plataformas (Windows, Mac, Linux). Sin embargo nosotros recomendamos otro,que se llama ‘ipython’ (acronimo de python interactivo). Para poder abrirlo hay que instalarlo y usar el co-mandoipython. Si queremos mandar un comando al shell podemos hacerlo desde la interfaz deipythonantecediendo al comando con el signo!.

29

30 CAPITULO 2. INTRODUCCION A PYTHON

2.2. Operaciones basicas

Una utilidad muy basica de Python es el de usar el interpretador de Python como una calculadora muyavanzada, por lo que podemos utilizar las operaciones basicas, suma, resta, multiplicacion, etc. Algunosejemplos son:

>>> 1+2+3

6

>>> 1-(2+3)

-4

>>> 1-(2-(3-4)+1)

-3

>>> -(1+2)

-3

>>> --3

3

>>> 2*3

6

>>> 4/2

2

>>> 3*4/2

6

>>> 12/3*2

8

Donde>>> representa la linea de comandos en Python y la falta de estos signos representa la respuesta delinterpretador.

Cabe destacar que python respeta la jerarquıa de operaciones por lo que2*5+3 es equivalente a(2×5)+3 y no a 2× (5+3) ası que hay que usar los parentesis adecuadamente segun la operacion que se quierarealizar.

En Python, existen mas operadores de los que tiene una calculadora normal. Un ejemplo es el operadormodulo, que denotaremos con el sımbolo de porcentaje, %. Este operador devuelve el residuo de la divisionentera entre dos numeros.

>>> 27%5

2

>>> 25%5

0

Otro operador es el de potencias, que se denota por∗∗. La notacion convencional matematica seraxn,mientras que en Python utilizaremosx∗∗n. Hay que considerar que el exponente es asociativo a la derecha,por lo que 2∗∗3∗∗2 equivale a 23

2= 29 = 512 y no(23)2 = 82 = 64.

2.2. OPERACIONES BASICAS 31

2.2.1. Tipos de datos

Numeros

Sabemos que existen distintos tipos de numeros. No es lo mismo referirnos a 0.5 que a 2 o al numeroπ,hacemos una distincion entre reales, enteros, o irracionales.

En la computacion pasa lo mismo -tenemos que identificar explıcitamente que tipo de numero estamosutilizando. Esto es, una operacion entre enteros me devuelve un entero. Por ejemplo, consideremos lassiguientes operaciones entre 3 y 2:

>>> 3/2

1

>>> 3.0/2.0

1.5

>>> 3./2.

1.5

En este ejemplo, es notorio lo que hace Python con la division. En la primera lınea realizamos unadivision entre enteros y el resultado solo fue un entero, en la tercera lınea hicimos la division entre numerosreales por lo que nos dio como resultado un real. Es importante decirle al interprete con que tipo de numerotrabajara. Una de las utilidades para distinguir los tipos de numeros es que los enteros suelen ocupar menosmemoria y las operaciones entre enteros son mas rapidas que otro tipo de operaciones.

En computacion se llama a los numeros enteros como numeros en formato de coma flotante o simple-mente flotantes. Un numero flotante debe especificarse siguiendo ciertas reglas. Por lo general, consta dedos partes: mantisa y exponente. El exponente se separa de lamantisa usando la letra “e”. Por ejemplo, 2e3tiene mantisa 2 y exponente 3 y representa al numero 2× 103, otro ejemplo serıa 3.2e-3, es decir 0.0032.Esto se explicara con mayor precision mas adelante.

Cadenas

Python tambien puede analizar los tipos de datos denominados cadena. Una cadena es una secuenciade caracteres (numeros, marcas de puntuacion, letras, etc.) y se distinguen por ir encerradas en comillas.Las cadenas pueden usarse para representar informacion textual. Las cadenas se pueden manipular como sifueran listas, por ejemplo:

>>> nombre=’David’

>>> nombre

’David’

>>> nombre[0]

’D’

>>> nombre[1]

’a’

>>> nombre[:2]

32 CAPITULO 2. INTRODUCCION A PYTHON

’Da’

>>> nombre[2:4]

’vi’

>>> nombre[2:]

’vid’

Listas

Un elemento usado muy frecuentemente en Python son las listas. Las listas reemplazan a los arreglos enC -en Python son mas versatiles, ya que pueden almacenar cualquier tipo de datos dentro de ellas y no esnecesario fijar su tamano previamente (al igual que no se requiere declarar el tipo de datos que se usaran).Por ejemplo:

>>> l=[1,3.0,’hola’,’fin’]

>>> l[0]

1

>>> l[1]

3.0

>>> l[2]

’hola’

>>> len(l)

4

len(l) es una funcion que nos regresa el tamano de la lista (delengthen ingles). Notamos que las listasasignan lugares desde el 0 como los arreglos en C. Los dos puntos (:) representan unhasta. Por ejemplohasta el lugar dos o hasta el ultimo lugar (en caso de que no se ponga nada).

Diccionarios

Existen otro tipo de listas denominados diccionarios, tambien denominados “arreglos asociativos” perolas entradas se pueden nombrar con cualquier cosa.

>>> peso={}

>>> peso[’H’]=1

>>> peso[’He’]=2

>>> peso[’Cl’]=35.5

>>> peso

{’H’: 1, ’Cl’: 35.5, ’He’: 2}

>>> peso.keys()

[’H’, ’Cl’, ’He’]

2.2. OPERACIONES BASICAS 33

2.2.2. Variables

Las variables se utilizan para guardar distintos tipos de datos y volverlos a usar posteriormente. Enmuchas ocasiones hace falta crear algunas variables con cantidades especıficas, ya que estas variables sepueden utilizar mucho en una sesion. El acto de dar valor a una variable se denomina asignacion. Porejemplo:

>>> pi=3.141516

>>> e=2.71828

Se debe considerar que las asignaciones son “mudas”, es decir, no daran una respuesta de salida enpantalla. Una asignacion no es una ecuacion matematica,sino una accion, por lo que es importante el ordende la asignacion, es decir,expresion=variable no es equivalente a decirvariable=expresion. La maneraadecuada es la segunda. Se puede asignar un nuevo valor a una misma variable cuantas veces se requiera.La variable solo recordara el ultimo valor asignado, hasta que se le asigne otro.

Las cadenas tambien se pueden almacenar en variables, por ejemplo:

>>> nombre=’Roxana’

>>> nombre

’Roxana’

Se pueden realizar operaciones tambien con las cadenas. Unejemplo importante es la operacion de con-catenacion1. El sımbolo usado para la concatenacion es +, el mismo que usamos cuando sumamos enterosy/o flotantes. Sin embargo, aunque el sımbolo sea igual, debemos considerar que no es la misma operacion:

>>> ’a’+’b’

’ab’

>>> nombre+’del Castillo’

’Roxanadel Castillo’

>>> nombre+’ ’+’del Castillo’

’Roxana del Castillo’

A veces, se definen operaciones adicionales que uno no esperarıa, por ejemplo:

>>> ’Hola’*10

’HolaHolaHolaHolaHolaHolaHolaHolaHolaHola’

>>> (’Hola’+’ ’)*10

’Hola Hola Hola Hola Hola Hola Hola Hola Hola Hola ’

>>> ’-’*50

’--------------------------------------------------’

Sin embargo,’Hola’*’Hola’ no tiene sentido y da un error.

1Es la operacion por la cual dos caracteres se unen para formar una cadena de caracteres. Tambien se pueden concatenar doscadenas de caracteres o un caracter con una cadena para formar una cadena de mayor tamano.

34 CAPITULO 2. INTRODUCCION A PYTHON

Se pueden asignar valores a muchas variables en una sola lınea de comandos de manera que en lugar deescribir,

>>> a=2

>>> b=3

>>> c=4

>>> a, b, c

(2, 3, 4)

Se puede escribir,

>>> a,b,c=2,3,4

>>> a,b,c

(2, 3, 4)

2.2.3. Operadores logicos y de comparacion

En matematicas existen los operadores logicos o booleanos, los cuales reciben su nombre por el ma-tematico del siglo XIX, George Boole, que desarrollo un sistema algebraico basado en dos valores (cierto,falso) y tres operaciones (conjuncion, disyuncion y negacion).

En Python, la operacion de conjuncion se denota porand, la operacion de disyuncion esor y la denegacion esnot. Por ejemplo:

>>> True and False

False

>>> (True and False) or True

True

>>> not True

False

Tambien hay operadores de comparacion, los cuales en Python tienen una sintaxis partıcular, que sepresenta en la siguiente tabla:

operador comparacion== es igual que! = es distinto de< es menor que

<= es menor o igual que> es mayor que

>= es mayor o igual que

Por ejemplo,

2.2. OPERACIONES BASICAS 35

>>> 5>1

True

>>> 5>=1

True

>>> 5>5

False

>>> 5>=5

True

>>> 1!=0

True

>>> 1!=1

False

>>> -2<=2

True

2.2.4. Funciones predefinidas

Como en otros lenguajes de programacion, en Python hay varias funciones predefinidas, para ahorrartiempo al usuario. Un ejemplo de alguna de estas funciones esla funcionabs, la cual calcula el valor absolutode un numero.

>>> abs(-3)

3

>>> abs(3)

3

Esta funcion es muy conocida, pero existen otras funcionesque no lo son. Algunas de estas son:

1. float: Esta funcion convierte numeros enteros a numeros de tipo flotante. Esta funcion tambien aceptaargumentos de tipo cadena, con la condicion de que la cadenarepresente un flotante:

>>> float(6)

6.0

>>> float(’3.2’)

3.2000000000000002

>>> float(’una cadena’)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

ValueError: invalid literal for float(): una cadena

2. int : Convierte un numero de tipo flotante a entero y devuelve el entero que se obtenga eliminando laparte fraccionaria. Tambien esta funcion acepta como argumento una cadena:

>>> int(2.5)

2

36 CAPITULO 2. INTRODUCCION A PYTHON

>>> int(-2.5)

-2

>>> int(’2’)

2

3. str: Convierte a cadenas. Recibe un numero y devuelve una representacion de este como cadena:

>>> str(4.8)

’4.8’

>>> str(243E47)

’2.43e+49’

4. round: Esta funcion redondea un numero flotante:

>>> round(4.9)

5.0

>>> round(4.1)

4.0

>>> round(-4.1)

-4.0

>>> round(4)

4.0

Notese que el resultado es de tipo flotante.

Cabe mencionar que el uso de parentesis despues del nombrede la funcion es obligatorio aun cuando setienen argumentos que dar. En caso de que no se sepa exactamente cual es la sintaxis de una funcion oque parametros se necesitan para usarla, existe un implemento de ayuda en Python. Para usarlo se escribehelp(funcion), o funcion? en ipython, dondefuncion es la funcion de la cual se tienen dudas.

2.2.5. Asignacion con operador

Al realizar calculos numericos es frecuente utilizar la operacioni = i +1, no matematicamente hablandosino como se ve en computacion, es decir, se incrementa el valor de la variable en una cantidad cualquiera.En este caso incrementamos la variablei en 1. En Python se puede escribir comoi+ = 1. Por ejemplo:

>>> a=2

>>> b=3

>>> a+=6*b

>>> a

20

Todos los operadores aritmeticos tienen una abreviaciondel mismo tipo asociada. Por ejemplo:

>>> z=1

2.2. OPERACIONES BASICAS 37

>>> z+=2

>>> z*=2

>>> z/=2

>>> z-=2

>>> z%=2

>>> z**=2

La ventaja de estas operaciones es que deja en explıcito el hecho de que estamos modificando una variablebasado en su valor anterior.

2.2.6. Funciones definidas en modulos

En Python tambien se pueden utilizar las funciones comunmente conocidas, como las fnciones trigo-nometricas, logaritmo,etc. Estas funciones no estan disponibles directamente cuando iniciamos la sesion enel modo interactivo. Para ella, importamos cada funcion deuna libreria.

La librer ıa math

Esta es la libreria que habra que importar si queremos utilizar la funcion seno, coseno, etc.

>>> sin(0)

Traceback (most recent call last):

File "<stdin>", line 1, in <module>

NameError: name ’sin’ is not defined

>>> from math import *

>>> sin(0)

0.0

Por otro lado, si queremos utilizar la funcion coseno tenemos que importarla de la librerıa, para no tenerque repetir este proceso muchas veces, al inicial la sesionpodemos decirle a Python que importe todo, estolo hacemos colocando en la lınea de comando

>>> from math import *

Otra forma de importar funciones, la cual es muy recomendable cuando se empieza a programar enPython es la siguiente:

>>> import math

>>> print math.sin(0)

0.0

>>> print math.cos(0)

1.0

38 CAPITULO 2. INTRODUCCION A PYTHON

De esta manera importamos toda la libreria pero no dejamos deidentificar de que librerıa proviene quecosa.

Mas adelante seguiremos viendo algunas otras librerıas importantes. Si la version de Linux no contienetodas las librerıas, sera necesario bajarlas de Internet.

2.3. Algunos programas sencillos

Es mas laborioso teclear cada vez todo lo que queramos programar. Es mas facil guardar todos loscomandos de un programa en un archivo de texto. El archivo de texto tiene que tener la terminacion ‘.py’.Un editor de texto recomendado es ‘kate’ ya que resalta la sintaxis de Python automaticamente una vezque se haya guardado el archivo con la extension adecuada. Una vez que se ha escrito un programa esposible ejecutarlo directamente. Si se invoca al interprete python, seguido del nombre de un archivo desdela lınea de comandos, no se iniciara una sesion con el int´erprete interactivo, sino que se ejecutara el programacontenido en el archivo en cuestion y luego el control se regresa al shell. Por ejemplo, para correr el programavolumen.py ponemos:

python volumen.py

Si estamos en el terminal o:

run volumen.py

Si estamos en la interfaz interactiva.

Los programas que se han visto en la seccion anterior padecen de un serio inconveniente: cada vez quese quiera obtener resultados para unos datos diferentes debera, editarse el archivo de texto que contiene elprograma.

Por ejemplo, el siguiente programa calcula el volumen de unaesfera a partir de su radio en cualquiertipo de unidad:

from math import pi

radio=1

volumen=4.0/3.0*pi*radio**3

print volumen

Si se desea calcular ahora el volumen de una esfera de 3 unidades de radio, se debe editar el archivo quecontiene el programa, corrigiendo la lınea donde se declara el radio.

from math import pi

radio=3

volumen=4.0/3.0*pi*radio**3

print volumen

2.3. ALGUNOS PROGRAMAS SENCILLOS 39

Para no tener que modificar el programa cada vez que se quiera calcular el volumen de una esferadiferente, se requiere poder pedirle al usuario esta informacion por medio de una funcion.Esta funcion esraw input (en ingles significaentrada en bruto), que hace lo siguiente: detiene la ejecucion del programay espera a que el usuario escribra un valor del radio y pulse latecla de retorno. En ese momento prosigue laejecucion y la funcion devuelve una cadena con el texto quetecleo el usuario.

Si deseas que el radio sea un valor flotante, debes transformar la cadena devuelta porraw input en undato de tipo flotante, usando la funcionfloat. La funcionfloat recibe como argumento la cadena quedevuelveraw input y proporciona un numero flotante. Recuerdese que existe otra funcion de conversion,int, que devuelve un entero en lugar de un flotante. Por otra parte, raw input es una funcion y por lo tanto,el uso de los parentesis que siguen a su nombre es obligatorio, incluso cuando no tenga argumentos. Por loque el programa anterior queda:

from math import pi

radio=float(raw_input())

volumen=4.0/3.0*pi*radio**3

print volumen

Al ejecutar el programa desde la lınea de comandos, la computadora parece quedar bloqueada. No loesta, esta en espera de que se introduzca el radio. Pero el programa no es muy especıfico, ya que deja lacomputadora bloqueada hasta que el usuario teclee una cantidad, y no informa que es esa cantidad. Vamos ahacer que el programa indique, mediante un mensaje, que dato desea que se teclee. La funcionraw input

acepta tambien un argumento, una cadena con el mensaje que se debe mostrar. Ası que el programa sera

from math import pi

radio=float(raw_input(’Da el radio: ’))

volumen=4.0/3.0*pi*radio**3

print volumen

Ahora, cada vez que se ejecute el programa se mostrara en pantalla el mensaje. El usuario debe teclearel valor del radio, que va apareciendo en la misma consola.

Las cadenas pueden usarse tambien para mostrar textos en pantalla en cualquier momento a traves desentenciasprint. Modificando el programa anterior, da:

from math import pi

print ’Programa para calcular el volumen de esfera’

radio=float(raw_input(’Dame el radio: ’))

volumen=4.0\3.0*pi*radio**3

print volumen

Cuando se ejecute este programa, fıjate en que las cadenas que se muestran conprint no aparecenentre comillas. El usuario del programa no esta interesadoen saber que le estamos mostrando datos del tipocadena: solo le interesa el texto de dichas cadenas.

40 CAPITULO 2. INTRODUCCION A PYTHON

Cada numero ocupa tantas casillas de la pantalla como caracteres tiene. Por ejemplo, el numero 2 ocupauna casilla y el numero 2000 cuatro.

Una sentenciaprint puede mostrar mas de un resultado en una misma lınea: bastacon separar con co-mas todos los valores que se deseen mostrar. Cada una de las comas se traduce en un espacio de separacion:

from math import pi

print ’Programa para calcular el volumen de esfera’

radio=float(raw_input(’Dame el radio en metros: ’))

volumen=4.0/3.0*pi*radio**3

print ’Volumen de la esfera:’, volumen, ’m^3’

Con la sentenciaprint se puede controlar hasta cierto punto la apariencia de la salida. Pero no se tieneun control de todo. Sin embargo, Python permite controlar con absoluta precision la salida a la pantalla. Paraello se hace uso del operador % como sigue:

numero=int(raw_input(’Dame un numero’))

print ’%d elevado a %d es %d’ % (numero, 2, numero**2)

print ’%d elevado a %d es %d’ % (numero, 3, numero**3)

print ’%d elevado a %d es %d’ % (numero, 4, numero**4)

print ’%d elevado a %d es %d’ % (numero, 5, numero**5)

Cada una de las cuatro ultimas lıneas presenta este aspecto:

print cadena % (valor, valor, valor)

La cadena aquı es especial, pues tiene unas marcas de la forma%d. Despues de la cadena, aparece el opera-dor %, que aquı combina una cadena (a su izquierda) con una serie de valores (a su derecha). Para entenderclaramente que es lo que hacen las cuatro ultimas lıneas,ejecutemos el programa:

Dame un numero:3

3 elevado a 2 es 9

3 elevado a 3 es 27

3 elevado a 4 es 81

3 elevado a 5 es 243

Cada marca de formato%d en la cadena’ %d elevado a %d es %d’ ha sido sustituida por un numeroentero. El fragmento%d significaaquı va un numero entero. ¿Que numero? El que resulta de evaluar cadauna de las tres expresiones que aparecen separadas por comasy entre parentesis a la derecha del operador %.

No solo se puede usar el operador % en cadenas que se van a imprimir con print -el resultado es unacadena, y se puede manipular como cualquier otra:

2.3. ALGUNOS PROGRAMAS SENCILLOS 41

>>> x=2

>>> print ’El numero %d y numero %d’ % (1,x)

El numero 1 y numero 2

>>> a=’numero %d y numero %d’ % (1,x)

>>> a

’numero 1 y numero 2’

>>> print(’el numero %d y numero %d’ % (1,x)).upper()

El numero 1 y numero 2

El operador % especifica el formato de la cadena que se va a presentar en pantalla en ese punto. Alescribir%d se especifical tipo de cadena que se presentara pantalla y elformato que va a tomar. En este caso,la letrad representa a un numero entero, pero tambien se puede dar formato a cadenas de numeros flotantes:

from math import pi

r = float(raw_input(’Dame el radio: ’))

a = pi*radio**2

print ’El area del circulo de radio %f es %f’ % (r, a)

print ’El area del circulo de radio %6.3f es %6.3f’ % (r, a)

Ejecutando el programa se tiene:

Dame el radio: 2

El area del circulo de radio 2.00000 es 12.566371

El area del circulo de radio 2.000 es 12.566

La marca%f indica que ahı aparecera un flotante. Se puede meter un numero con decimales entre el % yla f. ¿Que significa? Indica cuantas casillas se desea que ocupeel flotante y de ellas, cuantas se quiere queocupe los numeros decimales. Se ha visto que hay marca de formato para enteros y flotantes. Tambien hayuna marca para cadenas:%s. El siguiente programa lee el nombre de una persona y la saluda:

nombre = raw_input(’Tu nombre: ’)

print ’Hola, %s ’% (nombre)

Da como resultado

Tu nombre: Roxana

Hola, Roxana

Los parentesis en el argumento de la derecha del operador deformato son opcionales si solo se le pasa unvalor. Esta nueva version del programa es equivalente:

nombre = raw_input(’Tu nombre: ’)

print ’Hola, %s’ % nombre

42 CAPITULO 2. INTRODUCCION A PYTHON

Mas adelante se haran programas mas complicados, ası que es muy importante aumentar la legibilidad de unprograma intercalando comentarios que expliquen su finalidad o que aclaren sus pasajes mas oscuros. Comoesos comentarios solo tienen por objeto facilitar la legibilidad de los programas para los programadores,pueden escribirse en el idioma que se quiera. Sin embargo, serecomienda que no se utilicen los acentos alescribir al espanol, ya que pueden causar problemas al momento de transferir el programa entre distintasmaquinas.

Cuando el interprete Python ve un comentario no hace nada con el, lo omite. Los comentarios Python seinician con el sımbolo #. Por ejemplo:

nombre = raw_input(’Tu nombre: ’) #Esta linea pide tu nombre

Si se cuenta con un editor adecuado, el texto comentado cambia de color.

2.4. Ejercicios

1. Evalua el polinomiox4 + x3 + 2x2− x enx = 1,1. Utiliza variables para evitar teclear varias veces el

valor de x.

2. Da con el mayor detalle posible el resultado de evaluar lassiguientes expresiones:

(2+3)*1+2

(2+3)*(1+2)

1/2/4.0

4**.5

4.0**(1.0/2)+1/2.0

3e3/10

10/5e-3 +1

True==True!= False .

1 < 2 < 3 < 4 < 5

1 < 2 < 4 < 3 < 5

palindromo=’abcba’.

(4∗′ <′ +palindromo+′ >′∗4)∗2

’abalorio’<’abecedario’.

124< 13′124′ <′ 13′

’a’< ’a’.

str(2.1)+str(1.2)

str(2+3)

str(int(2.1)+float(3))

3. Evalua las siguientes expresiones, primero en papel y luego en el interprete de Python.

2.4. EJERCICIOS 43

a) int(exp(2*log(3)))

b) round(4*sin(3*pi/2))

c) abs(log10(0.01)*sqrt(25))

4. Disena un programa que pida el valor de los tres lados de untriangulo y calcule el valor de su area yperımetro. Recuerda que el area A de un triangulo puede calcularse a partir de sus tres ladosa,b y casıA =

s(s−a)(s−b)(s−c) dondes= (a+b+c)/2

5. Haz un programa que pida el nombre de una persona y lo muestre en pantalla repetido 1000 veces,pero dejando un espacio de separacion entre cada copia del nombre.