PRA´ CTICA Introducci´on a...

12
PRA ´ CTICA Intro ducci´ on a Linux Arquitectura de Computadores, 4 o GI. Teleco Objetivos El alumno: 1. Tomara ´ contacto real - desde el punto de vista de un usuario - con el sistema operativo Linux. 2. Se familiarizara ´ y hara ´ uso de los comandos del sistema operativo Linux mas comunes. 3. Manejar´ a comandos b´ asicos de Linux. 4. Comprender´ a y pondr´ a en practica el proceso de elaboraci´ on de un programa en lenguaje C, haciendo uso de un editor para la generacio ´n de c´ odigo fuente y del compilador gcc para la obtencio ´n del ejecutable. Requisitos 1. Leer alguno de los manuales de C que hay disponibles en la web de la asignatura en el apartado Prácticas. 2. Conocer la cuenta y la clave para poder acceder a la maquina Linux en la que se desarrollaran las pr´ acticas. Tareas a realizar Durante esta sesi´ on, el alumno utilizar´ a sus datos para conectarse a la maquina labatc.umh.es y se familiarizara ´ con el compilador gcc. Duraci´ on 1 sesi´ on Memoria: NO

Transcript of PRA´ CTICA Introducci´on a...

Page 1: PRA´ CTICA Introducci´on a Linuxumh2269.edu.umh.es/wp-content/uploads/sites/1051/2013/02/Practica3.pdfArquitectura de Computadores, 4o GI. Teleco Objetivos El alumno: 1. Tomara´

PRA CTICA Introduccion a Linux

Arquitectura de Computadores, 4o GI. Teleco

Objetivos El alumno:

1. Tomara contacto real - desde el punto de vista de un usuario - con el sistema operativo Linux.

2. Se familiarizara y hara uso de los comandos del sistema operativo Linux mas comunes.

3. Manejara comandos basicos de Linux.

4. Comprendera y pondra en practica el proceso de elaboracion de un programa en lenguaje C, haciendo uso de un editor para la generacion de codigo fuente y del compilador gcc para la obtencion del ejecutable.

Requisitos

1. Leer alguno de los manuales de C que hay disponibles en la web de la asignatura en el apartado Prácticas.

2. Conocer la cuenta y la clave para poder acceder a la maquina Linux en la que se desarrollaran las practicas.

Tareas a realizar Durante esta sesion, el alumno utilizara sus datos para conectarse a la maquina labatc.umh.es y se familiarizara con el compilador gcc.

Duracion 1 sesion Memoria: NO

Page 2: PRA´ CTICA Introducci´on a Linuxumh2269.edu.umh.es/wp-content/uploads/sites/1051/2013/02/Practica3.pdfArquitectura de Computadores, 4o GI. Teleco Objetivos El alumno: 1. Tomara´

1. Conexion al servidor

En primer lugar, el alumno se conectara al servidor de las practicas mediante Escritorio remoto. Para el acceso a una maquina remota Linux, seran necesarios varios datos:

Login: Cuenta de usuario que proporciona el administrador del sistema

Password : Contrasena de usuario que proporciona el administrador

Host : matrix.umh.es:8016.

2. Cambio de Password A todos los alumnos se les ha dotado de un login y password. El primero no se

puede cambiar, pero el segundo sı, y ademas, es conveniente cambiarlo periodicamente. Para ello se utiliza el comando ’passwd’. Para conocer su funcionamiento vease la ayuda del comando mediante $man passwd

Nota : Si os aparece algun mensaje indicando que hay algun problema, volver a insistir mas tarde, es debido a que solo puede estar un usuario cambiando el password a la vez.

Una vez realizado el cambio de password, sera el que debeis utilizar en proximos accesos al sistema.

3. Comandos Linux

Probar el funcionamiento y opciones de algunos comandos utiles. Para obtener informacion sobre un comando utilizar el comando man comando. Ejecuta los siguientes comandos e indica cual es su funcion. Escribe sus opciones mas importantes.

ls

————————————————————————————————

—————————————————————————————————

who

—————————————————————————————————

—————————————————————————————————

nano Ejecutar, hacer un fichero de ejemplo y guardar con Ctrl-X.

—————————————————————————————————

—————————————————————————————————

Page 3: PRA´ CTICA Introducci´on a Linuxumh2269.edu.umh.es/wp-content/uploads/sites/1051/2013/02/Practica3.pdfArquitectura de Computadores, 4o GI. Teleco Objetivos El alumno: 1. Tomara´

top

—————————————————————————————————

—————————————————————————————————

rm

—————————————————————————————————

—————————————————————————————————

mv

—————————————————————————————————

—————————————————————————————————

cp

—————————————————————————————————

—————————————————————————————————

cat fichero

—————————————————————————————————

—————————————————————————————————

sort

—————————————————————————————————

—————————————————————————————————

exit

—————————————————————————————————

—————————————————————————————————

logout

Page 4: PRA´ CTICA Introducci´on a Linuxumh2269.edu.umh.es/wp-content/uploads/sites/1051/2013/02/Practica3.pdfArquitectura de Computadores, 4o GI. Teleco Objetivos El alumno: 1. Tomara´

—————————————————————————————————

—————————————————————————————————

wc

—————————————————————————————————

—————————————————————————————————

pwd

—————————————————————————————————

—————————————————————————————————

Nota : Si alguna de estas aplicaciones no se pueden ejecutar, comunicarselo al profesor de practicas.

Page 5: PRA´ CTICA Introducci´on a Linuxumh2269.edu.umh.es/wp-content/uploads/sites/1051/2013/02/Practica3.pdfArquitectura de Computadores, 4o GI. Teleco Objetivos El alumno: 1. Tomara´

4. Creacion de directorios

Para mantener ordenado el directorio HOME del alumno y favorecer al profesor las tutorıas de practicas, el alumno debera de crear un directorio para cada practica.

Para crear los directorios ejecute:

arco0# cd

arco0# mkdir arco

arco0# cd arco

arco0# mkdir practica0

arco0# mkdir practica1

arco0# mkdir practica2

y ası sucesivamente para todas las practicas. Es conveniente crear, dentro de cada directorio de practicas, un directorio de pruebas llamado tmp, en donde crear y guardar los ficheros de prueba que se vayan generando. Una vez que la practica este realizada completamente, hay que mover los ficheros al directorio superior mediante (cd ..).

5. Preguntas

Contesta a las siguientes preguntas:

1. ¿Has tenido algun problema con el cambio de password?. Explica brevemente tu experiencia.

2. ¿Por que crees que hay que cambiar periodicamente el password?.

3. ¿Por que crees que el password no puede ser demasiado simple?.

4. En relacion a nano, ¿donde crees tu que se ha guardado el fichero de ejemplo que has creado?.

Page 6: PRA´ CTICA Introducci´on a Linuxumh2269.edu.umh.es/wp-content/uploads/sites/1051/2013/02/Practica3.pdfArquitectura de Computadores, 4o GI. Teleco Objetivos El alumno: 1. Tomara´

6. Desarrollo de programas en lenguaje C en un

entorno Linux La generacion de un ejecutable requiere la intervencion de dos programas,

el compilador y el montador. En los sistemas Linux, estos programas son lla- mados usando un unico comando llamado gcc (gnu C compiler). Este comando va llamando mediante fork() y exec() a otros comandos que el usuario nor- malmente nunca usa directamente y que realizan las fases de preprocesador de directivas con el prefijo #, compilacion y montado del ejecutable con las libr- erıas. Con las opciones del comando gcc controlamos cuales de estas fases van a tener lugar. Por defecto, si no ponemos opciones, el comando gcc va a realizar todas las fases sobre los ficheros pasados como argumentos. El fichero resultante que contiene el programa ejecutable tendra el nombre a.out.

$ gcc modulo1.c modulo2.c

Este comando compila separadamente el codigo fuente contenido en los ficheros modulo1.c y modulo2.c produciendo los ficheros modulo1.o y modulo2.o, genera el ejecutable a.out montando ambos modulos mas la librerıa del lenguaje C libc.a. Finalmente borra los ficheros objeto que ha generado en la fase anterior, por lo que no podremos ver mas que el fichero a.out como resultado del comando. Podemos alterar el comportamiento de este comando mediante numerosas opciones. Algunas muy practicas son:

-c Solo se realiza la compilacion. Suprime la fase de montaje, por lo que no se intenta generar ningun ejecutable. No se borran los ficheros objeto producido. Se usa para compilar uno o varios modulos sin tener todavıa todos los modulos de codigo del programa completo, o para compilar cada modu- lo por separado.

-o nombre Usa el nombre indicado para el fichero ejecutable en lugar de a.out. Es recomendable usar esta opcion cuando se estan generando varios programas en el mismo directorio para darles nombres distintos. El nombre no tiene que tener ninguna extension predeterminada. Es mas, en Unix, los ejecutables no suelen tener ninguna extension.

-g Incluye informacion sobre el programa para el depurador o debugger. Si queremos ejecutar el programa paso a paso examinando el contenido de las variables es necesaria esta opcion.

-O, -O2, -O3 Optimiza el codigo del programa para conseguir una ejecucion mas rapida. Las optimizaciones dependen del nivel indicado y se refieren a cosas tales como reordenacion de instrucciones para adaptarlas a la arquitectura del procesador evitando dependencias entre instrucciones adyacentes o incrementando el numero de aciertos en la cache del procesador. Su efecto solo suele notarse en programas con una gran cantidad de calculos. Estas opciones son incompatibles con -g.

Page 7: PRA´ CTICA Introducci´on a Linuxumh2269.edu.umh.es/wp-content/uploads/sites/1051/2013/02/Practica3.pdfArquitectura de Computadores, 4o GI. Teleco Objetivos El alumno: 1. Tomara´

-Idirectorio Indica que tambien se busque en el directorio indicado para localizar los ficheros .h incluidos en el codigo C mediante las directivas #include "fichero.h"

Mediante estas opciones podremos compilar todas las partes del programa generando los ficheros objetos correspondientes sin realizar el montado. Por ejemplo:

$ gcc -c prog.c f1.c f2.c f3.c

Este comando genera los ficheros prog.o, fl.o, f2.o y f3.o. Para realizar el montaje generando el fichero ejecutable se usa el mismo comando sobre los ficheros objeto. El comando gcc reconoce los ficheros .o y sabe que no les hace falta la fase de compilacion sino la de montaje:

$ gcc -o prog prog.o fl.o f2.o f3.o

Incluso se pueden mezclar en un solo comando ficheros objeto ya compilados con ficheros de codigo fuente cuyo modulo objeto no ha sido compilado. En el siguiente ejemplo, el primer comando genera tres ficheros objeto y el segundo comando compila el fichero prog.c y lo monta con los ficheros .o que genero el primer comando, generando

el fichero ejecutable: $ gcc -c f1.c f2.c f3.c $ gcc -o prog prog.c fl.o f2.o f3.o

7. Ejemplo de uso del compilador gcc

Realiza este ejemplo en tu ordenador. Vamos a desarrollar un programa que imprima los parametros que se le pasan en la lınea de comando. Cuando se ejecuta un programa en Linux, puede recibir del proceso que lo crea, una serie de datos como parametros. La forma de introducir parametros en un programa escrito en C sobre el sistema operativo Linux es a traves de los parametros que se aceptan en la definicion de la funcion main.

int main(numero, argumentos) int numero; char *argumentos[];

En la mayor parte de la bibliografıa se adopta argc como nombre estandar para el parametro numero y argv, para el parametro argumentos, con to que la definicion anterior queda como:

int main(argc, argv) int argc; char *argv[];

en donde argc es un entero que indica el numero de parametros que se le han pasado al programa, y argv es un vector de punteros a cadenas de caracteres, en el que cada cadena de caracteres se corresponde con una de las palabras introducidas en la lınea de comandos para invocar la ejecucion de dicho programa.

Page 8: PRA´ CTICA Introducci´on a Linuxumh2269.edu.umh.es/wp-content/uploads/sites/1051/2013/02/Practica3.pdfArquitectura de Computadores, 4o GI. Teleco Objetivos El alumno: 1. Tomara´

La cantidad de elementos que tiene argv esta contenida en argc. Por ejemplo, si se introduce la siguiente lınea de comandos para invocar la ejecucion de un determinado programa:

$ programa primero segundo tercero

el parametro argc toma el valor 4 mientras que el parametro argv contendra los siguientes datos:

argv[0] "programa" argv[1] "primero" argv[2] "segundo" argv[3] "tercero"

Como verificacion del funcionamiento descrito se puede ejecutar el siguiente programa:

argum.c

Page 9: PRA´ CTICA Introducci´on a Linuxumh2269.edu.umh.es/wp-content/uploads/sites/1051/2013/02/Practica3.pdfArquitectura de Computadores, 4o GI. Teleco Objetivos El alumno: 1. Tomara´

Podrıamos pensar en desarrollar una funcion que dado un elemento de argv compruebe si es una opcion (comenzara por un guion) y nos devuelva el nombre de la opcion. El procedimiento param.h implementa esta funcion, comprobando si un parametro es o no una opcion, y devolviendo la opcion sin guion. Tambien vemos en la pagina siguiente las modificaciones pertinentes a realizar en el programa principal prog.c.

param.h

A continuacion podemos compilar, montar y ejecutar.

Page 10: PRA´ CTICA Introducci´on a Linuxumh2269.edu.umh.es/wp-content/uploads/sites/1051/2013/02/Practica3.pdfArquitectura de Computadores, 4o GI. Teleco Objetivos El alumno: 1. Tomara´

$ gcc prog.c param.h -o prog $ ./prog pl -opc p2 programa: prog argumento: pl opcion: opc argumento: p2

8. Utilizacion del comando make

make es una utilidad (existente tambien para otros sistemas) que permite la compilacion rapida de los diversos modulos que componen un programa.

Para comprobar el funcionamiento de make, realizar este ejemplo paso a paso. Para ello, podeis utilizar el fichero prueba.c que se encuentra en la web. Supongamos que tenemos un programa fuente llamado prueba.c, los pasos basicos de compilacion son los siguientes

$ls -l total 2 -rw-r-----1 mayo inf 344 Jul 11 11:28 prueba.c $gcc -c prueba.c $ls -l total 18 -rw-r-----1 mayo inf 1144 Jul 11 11:31 prueba.o

Con este primer paso se ha realizado la fase de compilacion, produciendose un

fichero objeto que se puede enlazar con las librerıas externas que sea necesario.La segunda fase que debe realizarse es el enlazado (linkado). Normalmente se realiza con el mismo comando gcc, que a su vez hace use del comando ld. Es por ello que en muchas ocasiones, cuando se realiza en un solo paso la compilacion y el linkado, el error lo produzca el comando ld y no el comando gcc.

$gcc -o prueba prueba.o $ls -lt total 48 -rwxr-x--x 1 mayo inf 20529 Jul 11 11:32 prueba -rw-r-----1 mayo inf 1144 Jul 11 11:31 prueba.o

Con esto ya se ha generado el fichero con el codigo ejecutable.

$ls -l total 2 -rw-r-----1 mayo inf 344 Jul 11 11:28 prueba.c $gcc -o prueba prueba.c $ls -lt total 24

La opcion -t del comando ls muestra los ficheros ordenados por fecha de ultima

modificacion. Como se puede comprobar, prueba es mas nuevo que prueba.o y este a su vez es mas nuevo que prueba.c.

Page 11: PRA´ CTICA Introducci´on a Linuxumh2269.edu.umh.es/wp-content/uploads/sites/1051/2013/02/Practica3.pdfArquitectura de Computadores, 4o GI. Teleco Objetivos El alumno: 1. Tomara´

El comando make hace uso de esta informacion para verificar si se necesita o no la compilacion de un determinado fichero. En el ejemplo que estamos utilizando, la compilacion sera necesaria unicamente si la fecha de ultima modificacion del fichero prueba.c es posterior a la del fichero prueba. Utilizando la facilidad que proporciona el tener disponible la fecha de ultima modificacion de un fichero, el comando make necesita que el usuario le proporcione los dos siguientes datos:

1. La dependencia que existe entre los ficheros. En el ejemplo se tiene que el fichero prueba depende del fichero prueba.c (es decir, prueba se obtiene a partir de un determinado tratamiento del fichero prueba.c).

2. Tratamiento que se necesita realizar para obtener los resultados deseados. Para el ejemplo anterior el tratamiento necesario es la compilacion del fichero prueba.c, es decir, ejecutar el comando gcc -o prueba prueba.c La especificacion de estos datos al comando make se realiza a traves de un fichero,que normalmente se denomina makefile (o tambien Makefile). En caso de que en un mismo directorio exista un fichero de nombre Makefile y otro de nombre makefile, el comando make eligira el fichero makefile.

8.1. Sintaxis basica del fichero makefile

El fichero makefile debe de seguir una determinada sintaxis para que pueda ser interpretado por el comando make. En el fichero makefile deben existir especificados una serie de objetivos a conseguir, junto con los ficheros de los que depende y las instrucciones para conseguirlos.

objetivo :lista de ficheros de los que depende tabulador orden para conseguir el objetivo. En el caso del ejemplo del fichero prueba

el fichero makefile que se necesitara es:

prueba:prueba.o gcc -o prueba prueba.o

prueba.o :prueba.c

De esta forma, al invocar el comando make, automaticamente leera el fichero makefile, y considerara que el objetivo deseado es obtener el fichero prueba.

Dentro del makefile se pueden expresar otras acciones diferentes a la compilacion,como por ejemplo.

prueba:prueba.o gcc -o prueba prueba.o

prueba.o :prueba.c

En este makefile se define el objetivo limpiar, que no tiene ninguna dependencia y que cuando se solicite producira el borrado de los ficheros *.o y del fichero prueba.

Estos pasos se realizan normalmente con una unica llamada al compilador.

Page 12: PRA´ CTICA Introducci´on a Linuxumh2269.edu.umh.es/wp-content/uploads/sites/1051/2013/02/Practica3.pdfArquitectura de Computadores, 4o GI. Teleco Objetivos El alumno: 1. Tomara´

9. Ejercicios gcc Accede a la ayuda en linea de gcc. Toma nota de los aspectos mas destacables.

—————————————————————————————————

—————————————————————————————————

—————————————————————————————————

—————————————————————————————————

—————————————————————————————————

Creacion de ejecutables El alumno debera de escribir, compilar y probar el programa micat.c, cuyo fuente se encuentra mas abajo, utilizando la orden gcc -o micat micat.c

micat.c // Muestra de fichero por pantalla. #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> main(argc,argv) int argc; char *argv[]; { int fichero; char cadena;

if((fichero=open(argv[1],O_RDONLY))!=-1) { printf("· Fichero: %s\n",argv[1]);

while(read(fichero,&cadena,1)) putchar(cadena); close(fichero); }

}