You are on page 1of 88

Taller de Linux

Iniciacin al Sistema Operativo LINUX


Actividades para la distribucin microLINUX _VEM_1.0

Autor: Vicente Escudero Martnez

(En blanco)

ndice Recomendacin: Quien participe en este taller de LINUX debe realizar las actividades segn el orden propuesto. Esto ayudar a asimilar sin dificultad los aspectos de ndole terica y prctica tratados. -----------------------------------------------------------------------------Actividad 0: Presentacin de microLINUX. Caractersticas ms relevantes. Pgina 5. Acceso al sistema, ayuda en lnea, cambio de sesin y cierre. Pgina 7. La consola. Intrprete de comandos (shell), comandos internos (built-in), comandos externos y aplicaciones. Pgina 11. Directorios de microLINUX. Creacin, posicin del usuario, cambio de ubicacin, consulta de contenido y borrado de directorios. Pgina 13. Tratamiento de ficheros I. Tipos (cdigo de colores), creacin, consulta, copia y borrado de ficheros. Expansin de nombres de ficheros. Pgina 17. Proceso de arranque. Ficheros de configuracin e inicio en microLINUX. Pgina 19. Tratamiento de ficheros II. Edicin de ficheros de texto con editor vi. Pgina 21. Tratamiento de ficheros III. Enlaces fuerte y dbil. Pgina 23. Tratamiento de ficheros IV. Bsqueda, ordenacin y extraccin selectiva de datos. Pgina 25. Gestin de usuarios. Creaci n, propiedades y borrado de usuarios. Cambio de usuario. Pgina 29. Concepto de grupo. Creacin y borrado de grupos. Agregacin y eliminacin de usuarios a un grupo. Pgina 33. Permisos en un sistema multiusuario. Pgina 37. Procesos en LINUX. Estado de un proceso. Ejecucin en primer y segundo plano. Pgina 41. Scripts I. Ficheros de usuario ejecutados por el intrprete de comandos. Variables de entorno. Pgina 45. Scripts II. Ampliacin de comandos y Funciones. Pgina . Scripts III. Estructuras de control. Pgina 53. Informacin del kernel I. Datos suministrados durante el inicio del sistema. Pgina 61. Informacin del kernel II. Datos del sistema en tiempo de ejecucin. (/proc). Pgina 63. Utilidades I. Comandos de informacin. Pgina 65.

Actividad

1:

Actividad

2:

Actividad

3:

Actividad

4:

Actividad

5:

Actividad

6:

Actividad

7:

Actividad

8:

Actividad

9:

Actividad 10:

Actividad 11: Actividad 12:

Actividad 13:

Actividad 14: Actividad 15: Actividad 16:

Actividad 17:

Actividad 18:

Actividad 19:

Utilidades II. Comandos de compresin y descompresin de ficheros. Pgina 69. Archivos especiales de disp ositivos. Tipos y creacin. Pgina 73. Sistema de ficheros. Montaje, sincronizacin y desmontado. Pgina 77. Introduccin a la programacin estructurada. Lenguaje C. Pgina 81. Aplicaciones de usuario: Compilado res. Tcc (Tiny C Compiler). Pgina 87.

Actividad 20:

Actividad 21:

Actividad 22:

Actividad 23:

Fin de actividades. <->

Actividad

0: Presentacin de microLINUX. Caractersticas ms relevantes.

Qu es microLINUX? ------------------MicroLINUX es una "Distribucin" basada en LINUX, es decir, un sistema operativo (S.O.) formado por un ncleo (kernel) encargado de las tareas a ms bajo nivel (cercanas al hardware): - Servicios de gestin de memoria - Gestin de procesos - Control de las operaciones de E/S, etctera ms un conjunto de aplicaciones: Entorno de trabajo (intrprete de comandos -shell-) Administracin de usuarios Gestin del sistema de ficheros Utilidades orientadas a ficheros Desarrollo: Compilador C

Caractersticas --------------Al tratarse de una distribucin suminist rada en un disquete, su contenido est fuertemente limitado por cuestin de espacio de almacenamiento. Esto ha obligado a prescindir de todo elemento grfico as como de aplicaciones con un tamao elevado. Sin embargo microLINUX sintetiza las cualidades propias de un sistema basado en LINUX: - Es multitarea - Es multiusuario - Es de libre distribucin Requerimientos Hardware ----------------------MicroLINUX puede utilizar casi cualquier PC con microprocesador de la familia 80x86 equivalente. Est comprobado su correcto funcionamiento en un 486 DX a 40MHz y con 8 Mb de memoria RAM. Aunque puede funcionar con un 386 y coprocesador matemtico. Intenciones ----------Probablemente desanime el hecho de que al arrancar microLINUX nos encontremos con un S.O. cuyo aspecto espartano (modo consola) nos recuerde al prehistrico MS-DOS y pensemos que se trata de un clon. Que no cunda el pnico. Esta distribucin est pensada para ser utilizada por aquellas personas que quieren dar sus primeros pasos en LINUX sin temor a romper algo en el ordenador. Por otro lado todo lo que aqu se aprenda podr manejarse en cualquier distribucin basada en LINUX. Aunque algn comando o aplicacin tenga un nombre diferente lo importante es saber qu ofrece LINUX y c mo puede el usuario hacer uso de ello.

<->

(En blanco)

Actividad

1: Acceso al sistema, ayuda en lnea, cambio de sesin y cierre.

Pantalla de inicio -----------------Al arrancar microLINUX el usuario encuentra esta pantalla de inicio: +-------------------------------------------------------------------------- + | Bienvenido a microLINUX_VEM versin 1.0 | +-------------------------------------------------------------------------- + |Para comenzar: [microLINUX] login : root [Intro] | | + -------------------+ | | Ayuda de comandos | | Ms informacin con: ayuda.sh | | | -------| #[comando] --help | | | | |Hay cuatro consolas, usar [Alt]+[Fn] (donde n 1...4) | Acaba microLINUX | |Reinicia el intrprete de comandos con: # exit | # halt | |Reinicia el sistema con: [Ctrl]+[Alt]+[Del] | # poweroff | +------------------------------------------------------ +-------------------+ [microLINUX] login:

Es importante que en la primera sesin el usuario dedique tiempo a leer el contenido de la ventana porque en ella aparece informacin til para su trabajo con microLINUX. Acceso al sistema ----------------La primera accin consiste en identificarse al siste ma introduciendo 2 valores: 1) login 2) contrasea El "login" es el nombre que identifica al usuario en la sesin actual (contexto del S.O.). Para garantizar su autenticidad debe suministrar la contrasea asociada (cadena alfanumrica proporcionada por el administrador root-). En la configuracin por defecto de microLINUX el nico usuario con acceso al sistema es el propio administrador (root) sin contrasea, es decir, que tras escribir la cadena "root" y pulsar intro (< -) pasar directamente al intrprete de comandos (shell) y podr empezar a interactuar con el S.O.. Cuando el acceso ha sido satisfactorio aparece en pantalla: [microLINUX] login: root Sep 14 16:09:14 login [30]: root login on 'tty1'

Busybox v0.60.5 (2004.04.26 -10:10+000) Built-in Shell (ash) Enter 'help' for a list of built -in Commands. # Sealando que el usuario ha sido validado satisfactoriamente y el sistema est a la espera de rdenes. El significado de la informacin suministrada es el siguiente: - Sep 14 16:09:14 hora y fecha de acceso.

- login [30]: root login on 'tty1' usuario root accede al sistema por la consola virtual 1 nota: microLINUX dispone de 4 consolas virtuales, es decir, que con una consola (teclado+pantalla) fsica es posible que el S.O. acte como si en realidad hubiese 4. Dicho de otra forma microLINUX puede tener hasta 4 sesiones abiertas a la vez. - Busybox v0.60.5 (2004.04.26 -10:10+000) versin y fecha de compilacin de la aplicacin que en realidad implementa el intrprete de comandos. - Built-in Shell (ash) Intrprete de comandos -shell- ash nota: a diferencia de Windows en LINUX es posible encontrar varios intrpretes de comandos. El S.O. debe estar convenientemente configurado para usar, al menos, uno de ellos. - Enter 'help' for a list of built-in Commands. mensaje informativo: Al pulsar 'help' aparece la lista de comando internos reconocidos por el intrprete de comandos. Solicitud de ayuda -----------------MicroLINUX dispone de abundante documentacin en lnea. Escribiendo: #ayuda.sh #ayuda Aparecer un men autoexplicativo. cambio de sesin ---------------En cualquier momento el usuario puede pasar de una consola a otra (cambio de sesin) pulsando una combinacin de teclas. Esta accin equivale a entrar en microLINUX desde otro ordenador. Los Sistemas Operativos basados en LINUX representan una versin "libre" de UNIX, utilizado en entornos corporativos donde es normal la interconexin de computadores formando redes y el acceso remoto a equipos. Para el cambio de sesin, pulsar la secuencia de teclas: <Alt>+<Fn> donde n puede ser 1, 2, 3 4. Una sesin finaliza al escribir: #exit Indica a microLINUX que "desactive" la consola actual. En ese momento el S.O. solicitar los datos para una nueva sesin. consolas virtuales -----------------Cuando corre microLINUX en un PC, este simula a una mquina conectada a cuatro terminales manejados por personas diferentes. Para acceder al sistema, simplemente deben solicitarlo por medio de un cambio de sesin y val idndose con su nombre registrado "login" y la contrasea correspondiente. salida del sistema ------------------

Hay dos caminos para salir del sistema: Terminar y apagar el ordenador usando uno de estos dos comandos: # halt # poweroff Reiniciar el computador: - pulsando la secuencia de teclas <Ctrl>+<Alt>+<Del> Al salir del sistema, por ejemplo con #halt, sucede una cadena de acontecimientos que van desde la entrada del comando hasta desconexin total del equipo. El S.O. nos informa p untualmente de cada situacin: #halt #swapoff /etc/fstab file missing the system is going down now !! Sending SIGTERM to all processes Sending SIGKILL to all processes the system is halted. Press Reset or turn off power flushing ide devices: hda hd b hdc system halted kernel panic: Attented to kill init ! --------------------------------------------------T R A D U C C I O N --------------------------------------------------#halt #swapoff /etc/fstab buscando fichero el sistema va a acabar ahora !! Enviando la seal de finalizacin (SIGTERM) a todos los procesos Enviando la seal de destruccin (SIGKILL) de todos los procesos El sistema est detenido. Pulsa el botn de reset o apaga el equipo Cerrando dispositivos ide (unidades de almacenamiento) del sistema hda hdb hdc Sistema detenido. Mensaje de pnico del ncleo: Intentado destruir el proceso init !

Ahora podemos apagar el equipo y sacar microLINUX de la disquetera. P R E C A U C I N ------------------ NUNCA DEBE QUITARSE EL DISQUETE DE LA UNIDAD SIN INFORMAR AL S.O. ADECUADAMENTE, EN CASO CONTRARIO PODRAN DESTRUIRSE LOS DATOS QUE CONTIENE Y QUEDAR INSERVIBLE. !!! Se recomienda encarecidamente seguir los pasos indicados para un correcto funcionamiento del sist ema. T A R E A S ----------1 Salir de la sesin actual e intentar entrar con otro nombre de usuario. 2 Volver a entrar como root. 3 Abrir 3 sesiones diferentes como root. 4 Reiniciar el sistema (<Ctrl>+<Alt>+<Del>).

5 Solicitar ayuda al sis tema. Escribir #ayuda.sh (usar el tabulador para pasar pgina). 6 Terminar la sesin y detener el sistema. #halt

<->

10

Actividad 2: La consola. Intrprete de comandos (shell), comandos internos (buil-in), comandos externos y aplicaciones. El concepto de consola ---------------------Entendemos por consola como la interfaz, en modo texto, entre un usuario y el sistema operativo por donde enviar las rdenes y recibir los resultados de las mismas. En un sistema de ordenadores conectados en red, la consola puede estar formada por un terminal que se encuentra fsicamente separado del ordenador donde corre LINUX. En el caso de microLINUX el mismo computador ejecuta el S.O. y dispone de perifrico de entrada y de salida por donde presentar las consolas de acceso (hasta 4) aunque nicamente es posible utilizar una en un instante determinado. Este efecto se logra por medio de la figura de los terminales virtual (tty1, tty2, tty3 y tty4) definidos en microLINUX y que representan diferentes medios de acceso al sistema aunque en realidad correspondan al mismo teclado y pantalla del computador. Qu es el intrprete de comandos? ---------------------------------Es la utilidad ms importante del sistema. Este es un programa que lee comandos escritos por el usuario y los ejecuta. Tambin proporciona tareas de control de trabajos; Lo que permite al usuario realizar varias tareas a la vez. Redireccionar entradas y salidas (de / hacia la consola) y disponer de un lenguaje de programacin para realizar guion es (scripts). Un guin consiste en un fichero con rdenes escritas en el lenguaje de programacin del intrprete, semejante a los fichero por lotes (.bat) de MS -DOS. En microLINUX el intrprete es una versin adaptada de ash (tambin sh). rdenes Internas ---------------Son comandos incluidos en el propio intrprete y por tanto no existen en el sistema en forma de ficheros, de hay su nombre en microLINUX: "comandos built-in" o comandos empotrados. Puede obtenerse un listado de las rdenes internas vlidas escribiendo: # help rdenes externas ---------------Ficheros del sistema que el intrprete ejecuta por mandato del usuario. Las rdenes externas extienden el poder del intrprete de comandos permitiendo un sistema operativo flexible y fcil mente adaptable a las necesidades de cada usuario. la forma habitual de llamar a una orden (interna o externa) es sencilla. En el indicativo del sistema el usuario escribe el nombre del comando y lo acompaa con los datos que necesite, tambin llamados parmetros. Tras pulsar intro el intrprete primero lo buscar en su lista de comandos internos y si no forma parte de ella consultar unos directorios determinados. Si la bsqueda fue fructfera ejecuta el comando con su parmetros, y en caso contrario entrega al usuario un mensaje de error. Sintaxis: #comando par_1 par_2 ... par_n <Intro>

11

Aplicaciones -----------Programas (compuestos a veces por varios ficheros -ejecutables y de configuracin-) de usuario que le ayudan a sacar el mximo partido d el computador (y el S.O.) en su hogar, entorno profesional, etctera. MicroLINUX dispone de una nica aplicacin de usuario: tcc (tiny c compiler), un compilador de lenguaje C (ANSI) completamente operativo. El usuario puede crear su propios programas es cribindolos en ANSI C y despus compilndolos con esta utilidad (ver ayuda.sh ). Redireccin y concatenacin de rdenes -------------------------------------La ejecucin de un comando sigue esta secuencia fija: desde el teclado (entrada estndar) el usuario escribe el nombre de la orden por ejecutar, despus el intrprete de comandos toma la orden e intenta llevarla a cabo (puede ser un comando interno, externo o aplicacin) tras lo cual presenta los resultados en la pantalla (salida estndar). Es posible modifica el orden de la secuencia redireccionando el proceso de ejecucin. El formato es: - Carcter '>' para redireccionar la salida. Por ejemplo # orden_a_ejecutar > nueva_salida Donde nueva_salida puede ser un fichero. - Carcter '>>': igual que el caso anterior pero sin borrar lo que ya existiera en el destinatario. # orden_a_ejecutar >> acumula_nueva_salida Tambin es posible concatenar dos (o ms) comandos de tal manera que el resultado obtenido en la ejecucin del primero sea l a entrada automtica para el siguiente y as sucesivamente. El smbolo de concatenacin es '|'. # comando_A | comando_B ... T A R E A S ----------1 Consultar los comandos internos del intrprete. Usar # help 2 Ejecutar algn comando interno ( sin parmetros). Por ejemplo # kill nota: algunos comandos necesitan ser acompaados por datos suministrados por el usuario. En la ayuda del intrprete la informacin viene expresada en un lenguaje propio. La sintaxis es: [dato] : Aquello que est en tre corchetes es opcional. A | B : Equivale a decir A B (elegir una opcin). -letra : El parmetro que acompaa al comando se escribe " -letra" 3 Usando la orden # ayuda.sh buscar informacin sobre los comandos del sistema y la aplicacin tcc. 4 Por medio del smbolo '|' concatena los comandos 'ls' y 'more'. <->

12

Actividad 3: Directorios de microLINUX. Creacin, posicin del usuario, cambio de ubicacin, consulta de contenido y borrado de directorios. Ficheros y Directorios ---------------------Una de las primeras cosas que debe conocer el usuario de un PC es la diferencia entre el trmino fichero y directorio. Por un lado "fichero" representa el elemento mnimo de informacin presente en un ordenador accesible a partir de su nombre. Por otro "directorio" corresponde a un espacio con referencia nica, dentro de las unidades de almacenamiento, donde alojar un conjunto de ficheros (de 0, 1 ms elementos). rbol de directorios en microLINUX ---------------------------------A diferencia de otros Sistemas Operativos las distribuciones basadas en LINUX (entre ellas microLINUX) disponen de una estructura bien definida de directorios que comnmente denominaremos rbol de directorios. El nombre, posicin y la misin que cumplen en las dif erentes implementaciones suelen ser los mismos. La jerarqua de directorios en microLINUX es: / | +-| +-| | +-| | | +-| | | +-| | | | | | | | | +-| +-| | +-| +-| +-| | /: Directorio raz (root). bin dev bin: Directorio de binarios (ejecutables) del S.O.. dev: Lugar donde se encuentran los archivos descriptores de dispositivos. etc: Contiene archivos de configuracin del sistema. init.d lib: Almacena libreras (ficheros con cdigo ejecutable) compartidas por los binarios. teclado mnt: Espacio reservado para referenciar (montar y dar accesibilidad) a las unidades de almacenamiento. disquete | +-- boot | +-- dev | +-- var home: A partir de aqu comienzan los dir ectorios personales de cada usuario. proc: Directorio especial cuyo contenido se crea en tiempo de ejecucin por el kernel donde el usuario puede visualizar los datos manejados por el ncleo. sbin: Almacena los ficher os binarios especiales del sistema. tmp: Encargado de contener los archivos temporales. usr: Reservado para aplicaciones de usuario (todos).

etc | +-lib | +-mnt | +--

home proc

sbin tmp usr | +-- bin

13

| | | | | | | | | | | | | | | | | +--

| +-| +-| +-| +--

sbin doc lib local | +-- bin | +-- include | +-- lib | +-- tcc var: Sitio donde estn los ficheros del sistema que pueden cambiar de tamao,(p.e. los manejados por el kernel, que guardan eventos o acontecimientos producidos durante una sesin -.log-).

var

En qu directorio me encuentro? -------------------------------Para conocer en todo momento la posicin actual del usuario en el rbol de directorios debe utilizar el comando: pwd Cambio de ubicacin y lectura de contenidos ------------------------------------------Cambio de directorio: cd chdir Ejemplos #cd /etc cambiar al directorio /etc #chdir /usr/local cambiar al directorio /usr/local Volcado en pantalla del lista do de ficheros de un directorio: ls Ejemplo #ls /proc visualizacin del directorio /proc

nota: Utilizar "ls --help" para conocer los modificadores admitidos por el comando. Creacin y borrado de directorios (en el hogar del usuario) ----------------------------------------------------------Comando para crear directorios: mkdir Ejemplo #mkdir /home/varios ^ | comando ^ | directorio (con su localizacin absoluta)

Sin parmetros presenta informacin de ayuda (ingls). Comando para borrar directorios: rmdir Ejemplo #rmdir /home/varios Sin parmetros presenta informacin de ayuda (ingls).

14

T A R E A S ----------1 Comprobar si el rbol de directorio dibujado arriba corresponde al disponible en microLINUX. Duran te la exploracin el usuario se situar en diferentes parte de la estructura y verificar su localizacin con "pwd". 2 Ver el contenido de los directorios con ficheros ejecutables: /bin y /sbin. 3 Crear y verificar el siguiente subrbol: /home/varios/pc / | +-- Hardware/ | | | +-- Placa_madre / | | | | | + -| +-- Disco_duro | | | +-- Lector_DVD | | | +-- RAM | | | +-- fuente_al | | | +-- Conectores | | | +-- Perifricos / | | | + -| | | + -| | | + -| +-- Software / | +-- Sis_op | +-- Aplicaciones

Chipset

Pantalla Teclado Ratn

4 Hacer uso de la utilidad de borrado de directorios creados por el usuario. Nota: trabajar siempre dentro del directorio /home !! <->

15

(En blanco)

16

Actividad 4: Tratamiento de ficheros I. Tipos (cdigo de colores), creacin, consulta, copia y borrado de ficheros. Expansin de nombres de ficheros. Tipos de ficheros, color asociado en la consola ----------------------------------------------Al listar los ficheros de un directorio con el comando "ls" (por ejemplo #ls /) estos aparecen po r pantalla ordenados y con un color determinado. Los colores identifican el tipo de fichero: Color ----verde blanco fucsia azul claro azul oscuro Tipo ---Script (Archivo con rdenes orientadas al intrprete) Archivo de texto Archivo especial asociado a dispositivo Enlaces a directorios o archivos Directorio

Formas de crear un fichero -------------------------Un fichero puede ser creado siguiendo tres mtodos. 1 Crear un fichero vaco: touch Ejemplo #touch mi_fichero.txt Nota: para conocer el tamao de un fichero es necesario que el comando "ls" venga acompaado de los parmetros " -s" "-s -h". Por ejemplo: #ls -s -h mi_fichero.txt . 2 Usar el editor de microLINUX: vi Ejemplo #vi mi_fichero2.txt Nota: consultar la ayud a del editor "vi" en "#ayuda.sh" 3 Redireccionar la salida estndar de la consola: echo Ejemplo #echo Saludos desde microLINUX > hola.txt Nota: El nmero mximo de caracteres admitidos para el nombre de un fichero al ser creado es 254. Visualizar el contenido de un fichero ------------------------------------Para observar el interior de un fichero utilizar el comando: cat Ejemplo #cat hola.txt (requiere el fichero hola.txt anterior) Copiar y borrar ficheros -----------------------Copiar un fichero con: cp Ejemplo #cp hola.txt copia_hola.txt Eliminar un fichero con: rm Ejemplo #rm copia_hola.txt

17

Mover un fichero ---------------Es posible cambiar la ubicacin de un fichero en el rbol de directorios usando: mv Ejemplo #mv /home/agenda.txt /home/usuario1 En el ejemplo anterior agenda.txt pasa del directorio "/home" (fuente -source-) al directorio "/home/usuario1" (destino). Expansin de ficheros --------------------En microLINUX es posible seleccionar un conjunto de fich eros por medio de un reducido juego de caracteres y expresiones de sustitucin: Comodines: '?' sustituye a cualquier carcter '*' sustituye a cualquier conjunto de caracteres Expresiones: - [AB] sustituye a expresiones con 'A' y con 'B'. Ejem plo: cad_a_[AB]_cad_b equivale a cad_a_A_cad_b cad_a_B_cad_b

- [A-Z] sustituye a expresiones con el rango de valores que van desde 'A' hasta 'Z' c_a_[A-C]_c_b sustituye a c_a_A_c_b c_a_B_c_b c_a_C_c_b - [^Z] sustituye a expresiones que NO T ENGAN 'Z'. Tambin estn permitidas las combinaciones de comodines y expresiones. T A R E A S ----------1 Buscar y sacar por pantalla algn fichero de tipo script. 2 Personalizar la distribucin de microLINUX creando un fichero llamado /home/propietario.txt con tu nombre y apellidos. 3 Crear el directorio /home/prueba e incluir 2 ficheros vacos. Posteriormente prueba a borrar el directorio. Ayuda: Tener clara la opcin "-R" (recursivamente) del comando rm. 4 Hacer una copia de segurid ad (en /home/backups) de los ficheros de configuracin alojados en /etc. 5 Haciendo uso de la expansin de ficheros, listar (comando 'ls') los ficheros de /bin que cumplan estas condiciones: Comiencen con la letra l. Comiencen con las let ras a, b, c, d. Contengan una h. Que no tenga ninguna letra m. Que Est formado por 2 caracteres.

6 Mueve los ficheros del directorio "/home/prueba" al directorio "/home/backup". <->

18

Actividad 5: Proceso de arranque. Ficheros de configu racin e inicio en microLINUX. Proceso de arranque. Qu sucede durante la carga del Sistema Operativo? -----------------------------------------------------------------------El proceso de arranque consiste en la sucesin de eventos que acontecen en el computador donde est instalado microLINUX desde el encendido del equipo hasta que el sistema solicita el nombre de usuario y su contrasea para comenzar una sesin. Es importante conocer estos sucesos porque en caso de un mal funcionamiento del sistem a es posible utilizar la informacin presentada para diagnosticar el origen del problema y facilitar as su correccin. Los pasos que microLINUX da en su inicio son: 1 El usuario inserta el disquete con el sistema operativo microLINUX y pulsa el botn de encendido. La BIOS del computador hace un chequeo del hardware. Si est todo OK buscar una secuencia de arranque en las unidades de almacenamiento que tenga configuradas para tal fin. 2 Suponiendo que la BIOS busque en primer lugar en la disquetera (ya que si lo hace en el disco duro iniciara el S.O. all instalado), leer y ejecutar la secuencia de arranque que el gestor LILO (programa de entorno LINUX para crear y configurar el arranque de uno o varios sistemas operativos presentes en el PC) tien e all depositado. 3 La secuencia de arranque carga en RAM el ncleo -KERNEL- y se ejecuta. Este kernel tiene como misin fundamental ser el intermediario entre los diferentes componentes hardware (unidades de almacenamiento, puertos, chipset, memoria RA M, etc.) y los comandos y aplicaciones de microLINUX. 4 Una vez situado el kernel en memoria principal, el siguiente paso es cargar el sistema de ficheros comprimido micro_sf.gz, tambin denominado sistema raz (root system) donde est guardada toda la estructura de ficheros y directorios. 5 Se libera parte del espacio de memoria que ocup inicialmente el fichero KERNEL de microLINUX (ayuda a optimizar este valioso, y en mquinas antiguas escaso, recurso). 6 El sistema de fichero se 'monta' descompr imido y queda operativo para microLINUX y los usuarios. A partir de ahora el S.O. hace uso de sus propios ficheros de configuracin. 7 Ejecuta 'arranque.sh' (ver lilo.conf) encargado de preparar el disquete para que el usuario pueda utilizarlo y llamar a l proceso ms importante (padre de todos los procesos): el proceso init. 8 Init tiene su propio fichero de configuracin, 'inittab' el cual determina la ltima etapa del arranque. Desde aqu ordena a microLINUX presentar la pantalla de inicio y validar a l usuario 'root'. Configuracin de inicio en microLINUX ------------------------------------El contenido de los ficheros implicados en el inicio del S.O. son, segn el orden de uso: 1 ---> /mnt/disquete/lilo.conf #Configuracin de arranque para micr oLINUX_VEM_1.0 - 2 Noviembre 2004 -

19

#Sistema de ficheros ext2 + puerto serie + puerto paralelo #Busybox + Tinylogin + Tcc + Ejercicios + Taller de LINUX boot =/dev/df0 install =/boot/bootsect map =/boot/map read-write backup =/dev/null image =/boot/KERNEL label =microLINUX root =/dev/fd0 initrd =/micro_sf.gz append ="root=/dev/ram0 prompt_ramdisk=1 init=arranque.sh" 2 ---> /arranque.sh #!/bin/sh /bin/mount -t ext2 /dev/fd0 /mnt/disquete exec /sbin/init 3 ---> /mnt/disquete/var/etc/init tab # ver informacin en busybox/scripts/inittab ::sysinit:/etc/init.d/rcS # cosas por hacer cuando reinicia el proceso init ::restart:/sbin/init # Carga texto de inicio ::wait:/etc/intro.sh # Inicia generando login sobre /dev/tty1 -4 tty1::respawn:/sbin/getty 38400 tty1 tty2::respawn:/sbin/getty 38400 tty2 tty3::respawn:/sbin/getty 38400 tty3 tty4::respawn:/sbin/getty 38400 tty4 # cosas por hacer antes de reiniciar ::ctrlaltdel:/sbin/reboot ::shutdown:/bin/umount -a -r ::shutdown:/sbin/swapof f -a 4 ---> /mnt/disquete/var/etc/intro.sh #!/bin/sh clear echo "+--------------------------------------------------------------------- +" echo "| Bienvenido a microLINUX_VEM versin 1.0 |" echo "+------------------------------ --------------------------------------- +" echo "|Para comenzar: [microLINUX] login: root [Intro] |" echo "| + -------------------+" echo "| | Ayuda de comandos |" echo "| Ms informacin con: ayuda.sh | |" echo "| -------| #[comando] --help |" echo "| | |" echo "|Hay cuatro consolas,usa [Alt]+[Fn] (donde n 1..4)| Acaba microLINUX |" echo "|Reinicia el intrprete de comandos con: # exit | # halt |" echo "|Reinicia el sistema con: [Ctrl]+[Alt]+[Del] | # poweroff |" echo "+------------------------------------------------- +-------------------+" T A R E A S ----------1 Visualiza el contenido de los ficheros de configuracin indicados. <->

20

Actividad 6: Tratamiento de ficheros II. Edicin de ficheros de texto con editor vi. El editor vi -----------Cuando sea necesario crear, visualizar y/o cambiar el contenido de un fichero debe utilizar el editor vi (VIsual editor). Programa editor clsico de Unix y LINUX. En realidad el editor vi presente en microLINUX es una versi n reducida, adaptada para su uso en sistemas donde el tamao es una cuestin crtica. El usuario notar que se encuentra frente a una herramienta muy sencilla pero limitada en prestaciones. Sin embargo es suficiente para las tareas expuestas en este tall er de LINUX. Entrar al editor ---------------Para abrir un archivo nuevo o ya existente utilizar: #vi nombre_archivo Dentro de vi -----------Una de las cosas ms llamativa para los nuevos usuarios de vi es el hecho de no poder empezar a escr ibir el contenido del fichero inmediatamente despus de entrar en l. Esto es as porque vi presenta 3 modos de trabajo: - Modo comando (por defecto al inicio del editor) - Modo insercin - Modo de ltima lnea (pulsando ':') En el modo comando vi realiza acciones con el texto ya escrito segn el comando (secuencia de uno o dos caracteres) indicado: Comando x dd ... i Accin Borra el carcter bajo el cursor Borra la lnea en la que se encuentra el cursor (todos los comandos en 'ayuda.sh') Entra en el modo insercin (insertar texto en pantalla)

El modo insercin permite al usuario introducir el texto del fichero. Pulsando la tecla <Escape> vuelve al modo comando. El usuario conoce el modo en el que se encuentra porque aparece en la p arte inferior de la pantalla el mensaje '-- Insert --'. Nota: Si en alguna ocasin el usuario pulsa una tecla cuya funcin no es vlida (por ejemplo la tecla <Inicio>) en vi, el editor responde con un mensaje de texto inverso (fondo blanco y letras en negro). En este caso simplemente debe pulsar <Escape> para salir del modo Insercin y despus entrar de nuevo. Una vez terminada la sesin con el editor es preceptivo salir del sistema indicando la accin a realizar sobre el fichero. Para ello debe en trar en el modo ltima lnea: Guardar el fichero Abandonar sin cambios -> 1 pulsa ':' y 2 'w' 'nombre_nuevo_fichero'. -> 1 pulsa ':' y 2 'q''!'.

21

Abandonar con cambios Busca patrn T A R E A S -----------

-> 1 pulsa ':' y 2 'x' 'w''q' -> 1 pulsa ':' y 2 '/''pa trn_a_buscar'

1 Abrir el fichero /home/propietario.txt y aadir los siguientes datos: - Estudios que est cursando en la actualidad. - Direccin de correo electrnico. 2 Crear un nuevo fichero denominado /home/prueba.t xt donde el usuario debe comprobar y utilizar, hasta que queden suficientemente claros, los diversos comandos y modos de vi. Recomendacin: Con la segunda consola virtual, establecer una sesin en modo root y abrir la ayuda de vi -> #ayuda.sh vi. De esta forma, pasando de una consola a otra, es posible consultar los comandos de forma inmediata. 3 Por ltimo crear el fichero /home/resumen_comandos.txt en cuyo interior deben aparecer listados los comandos usados hasta ahora acompaados de una breve descripcin. <->

22

Actividad

7: Tratamiento de ficheros III. Enlaces duro y dbil.

Concepto de enlace -----------------Los enlaces (links) permiten dar a un nico fichero mltiples nombres. Los ficheros son identificados por el sistema con un nmero (n de inodo), el cual es el nico identificador del fichero para el sistema de ficheros. La orden: #ls -i Mostrar los nmeros de "inodo". Enlace duro (hard link) enlace normal --------------------------------------La orden ln es usada para crear mltiples enlaces a un fichero. Por ejemplo, suponer que tenemos un fichero llamado "agenda_tlfns" en el directorio actual. Usando 'ls -i' aparece en pantalla el nmero inodo para dicho fichero. #ln -i agenda_tlfns 43 agenda_tlfns Aqu, el fichero "agenda_tlfns" est asociado al nmero de inodo 43. Es posible crear un enlace a "agenda_tlfns", llamado tlfns: #ln agenda_tlfns tlfns Con 'ls -i' aparecen asociados los dos nombre al mismo nmero de inodo. Ahora, es posible acceder al contenido del fichero con los dos nombres. A todos los efectos, agenda_tlfns y tlfns son el mismo fichero. Solo es posible crear enlaces duros entre ficheros del mismo sistema de ficheros. Con el comando 'rm' usado sobre un enlace nicamente se elimina dicho enlace pero el fichero sigue existiendo; Para borrarlo definitivamente no deben existir otros enlaces en el sistema. La orden 'ln -l' sirve para conocer el nmero de enlaces a un fichero. Enlace dbil o enlace simblico ------------------------------Corresponde a otro tipo de enlace. Permite dar a un fichero otro nombre, pero no apunta al mismo nmero inodo. La orden: #ln -s fichero enlace_fichero Crea un enlace simblico denominado "enlace_fichero" que apunta a "fichero". Utilizando 'ls -i' puede apreciarse como los dos ficheros tienen un nmero identificativo diferente. #ls -i fichero enlace_fichero 44 fichero 45 enlace_fichero Adems aparece en color diferente "enlace_fichero" cuando se muestra el contenido del directorio con el comando 'ls'. Funcionalmente, los enlaces duros y simblicos son similares, pero hay algunas diferencias. Por una parte, un usuario puede crear un enlace simblico

23

a un fichero que no existe. Tambin es posible enlazar simblicamente con un archivo o directorio present e en otro sistema de ficheros. Por otro lado con la orden 'ls -l' puede verse el fichero apuntado. Cuando desaparece el fichero origen, todos los enlaces que apunta a l tambin son eliminados. Los enlaces simblicos son los ms flexibles y populares . Funcionan de forma parecida a los accesos directos de Windows 95/98 pero son mucho ms potentes. T A R E A S ----------1 Crea el fichero "/home/usuario1/datos personales/agenda.txt" y en su interior almacena una lista de telfonos (Nombre -- Direccin -Telfono). 2 Enlazar (enlace simblico) la agenda anterior con el fichero "/home/agenda_usuario1". 3 Utilizando el editor vi modificar el contenido de agenda_usuario1. 4 Ver el contenido de "/home/usuario1/datos personales/agenda.txt". 5 Responder a esta pregunta tras crear los enlaces duros y simblicos que considere oportunos: Cul es tamao de los ficheros enlace (tanto duro como simblico) cuando apuntan a otro con una capacidad de 1024 bytes?. Razona tu respuesta. <->

24

Actividad 8: Tratamiento de ficheros IV. Bsqueda, ordenacin y extraccin selectiva de datos. Bsqueda DE ficheros -------------------En microLINUX la utilidad 'find' es la encargada de realizar la bsqueda de ficheros y directorios dentro del sistema. Cuando el usuario desea localizar la ubicacin de uno o ms ficheros debe hacer uso del comando 'find' acompaado del correspondiente modificador. Algunas de las opciones son: - Listado de todos los ficheros (incluido su path) desde la posicin actual en el rbol de directorios: #find - Listado de todos los directorios del sistema: # find / -type d - Listado de todos los enlaces: # find -type l - Bsqueda del fichero "fichero_perdido" desde el directorio raz: # find / -name fichero_perdido Bsqueda EN ficheros -------------------Tambin es posible la bsqueda de patrones (cadenas de caracteres) en el interior de un fichero. Esta labor la lleva a cabo el comando 'grep'. - Bsqueda de la fila del fichero agenda.txt que contiene la cadena "cadena_a_buscar": #grep cadena_a_buscar agenda.txt Ordenacin DE ficheros ---------------------Para presentar por pantalla el listado de fichero de un directorio, segn un criterio concreto, ordenado en modo ascendente o descendente, deben aplicarse los modificadores oportunos al comando 'ls'. Algunos ejemplos son: - Ordenar en orden inverso los ficheros del directorio actual: # ls -r - Ordenar los ficheros ordenados por extensin: # ls -X - Ordena los ficheros de todo el sistema de ficheros s egn su tamao: # ls -S -R Ordenacin EN ficheros ----------------------

25

El comando 'sort' imprime lneas de texto en orden alfabtico u ordenadas por alguna otras regla que el usuario especifique. Todos los ficheros que acompaan al comando en la ord en son concatenados, y el resultado es ordenado y presentado por pantalla. Por ejemplo: - Ordenar el contenido de un fichero en orden descendente: #sort -r fichero_de_usuario - Ordenar numricamente (primeros las lneas que empiezan por 0, luego las que comienzan con 1 y as sucesivamente): #sort -n fichero_de_usuario Extraccin selectiva de datos en ficheros ----------------------------------------MicroLINUX ofrece la posibilidad de obtener parcialmente el contenido de un fichero en vez de mo strar el conjunto de la informacin. Existen tres posibilidades: 1 Tomar las primeras (10 por defecto) lneas: Comando 'head'. 2 Tomar las ltimas (10 por defecto) lneas: Comando 'tail'. 3 Extraer Columnas de texto de un fichero: Comando 'cut'. Una "columna" est definida por un conjunto de bytes, caracteres campos (por ejemplo el carcter que ocupa la posicin 19 de cada lnea). A continuacin se muestran ejemplos de los comandos 'head', 'tail' y 'cut'. - Presenta las primeras 4 lneas de un f ichero: #head -n 4 fichero_de_usuario - Presenta las 4 ltimas lneas de un fichero: #tail -n 4 fichero_de_usuario - Muestra el carcter dcimo noveno de cada columna: #cut -c19 fichero_de_usuario - Muestra el byte n 19 de cada columna: #cut -b19 fichero_de_usuario - En un fichero de texto donde cada lnea tiene este formato: /----------+----------+---------------+-----=> Campos (fields) | | | | v v v v L1campo1 , L1campo2 , L1campo3 , .. , L1campoj L2campo1 , L2campo2 , L2campo3 , .. , L2campoj .. .. .. .. Lncampo1 , Lncampo2 , Lncampo3 , .. , Lncampoj ^ ^ ^ ^ | | | | \----------+----------+----+---------=> Delimitadores

26

Obtener el valor del campo 3 utilizando la coma como delimitador en vez de <Tab> (por defecto): #cut -d, -f3 fichero_con_campos - Obtener los primeros 6 caracteres de cada lnea: #cut -c1-6 fichero_de_usuario - Obtener los caracteres que ocupan la posicin 2, 4, 8 y 10 de cada lnea: #cut -c2,4,8,10 fichero_de_usuario T A R E A S ----------1 Buscar la ubicacin del comando 'find' en el rbol de directorios, haciendo uso de s mismo. 2 Presentar en pantalla en orden inverso el contenido del directorio localizado en el punto anterior. 3 Crear un fichero que ser utilizado como base de datos para almacenar una agenda de clientes. El formato y los campos debe tener esta forma: 1:Nombre:Apellido:Direccin:Telfono:E -mail:Comentarios .. 9 ... E incluir 9 clientes. (nota: El fichero se llamar bd_clientes.txt, y debe existir un cliente con tu nombre) 4 Buscar las lneas que contengan tu nombre usando el comando 'grep'. 5 Listar los datos de los 3 primeros clientes en bd_clientes.txt. 6 Listar los datos de los 2 ltimos clientes. 7 Listar el nombre de todos los clientes. 8 Listar ordenados de forma inversa todos los registros. 9 Presentar en pantalla las primeras 20 columnas de bd_clientes.txt. <->

27

(En blanco)

28

Actividad 9: Gestin de usuarios. Creacin, propiedades y borrado de usuarios. Cambio de usuario. Gestin de usuarios ------------------Adems de multitarea, todo los sistemas basados en LINUX incluido microLINUX deben tener capacidad para trabajar con varios usuarios. Un "usuario" identifica a una persona con derecho al acceso (total o restringido) y gestin en el sistema. Para ello es obligatorio que el administrador, conocido como 'root', le d de alta y p roporcione una contrasea de acceso. Cuando un usuario est registrado en el sistema, puede acceder a l indicando dos datos: - Nombre de usuario: referencia del usuario definido por el administrador. - Contrasea: cadena de caracteres protegida asoc iada al nombre de usuario. El sistema operativo proporciona un espacio en el sistema de ficheros reservado a cada usuario llamado directorio de usuario donde puede desarrollar todas sus actividades libremente como crear ficheros, directorios, aadir aplicaciones, etctera. Fuera de este entorno es posible que sus acciones estn limitadas segn los permisos definidos por el administrador. El directorio desde donde "cuelgan" todos los usuarios es el directorio '/home'. Para que el administrador permita e l acceso a un usuario simplemente debe escribir: #login Posteriormente incluir su nombre y clave de acceso. Incorporacin de un usuario al sistema (creacin) ------------------------------------------------El usuario "root" puede crear nuevos us uarios haciendo uso del comando 'adduser'. El nico dato necesario es el nombre de usuario cuyo valor ser utilizado para denominar su directorio "hogar". Tambin es posible indicar otros valores durante el proceso de alta con el fin de personalizar el p erfil del nuevo usuario. Las opciones permitidas son: Nombre de directorio, Intrprete de comandos e identificador. Para crear un usuario nuevo llamado "cliente1" con los valores que el sistema asigna por defecto, el administrador usar la orden: #adduser cliente1 El sistema entregar el siguiente mensaje: Changing passwsord for cliente1 Enter the new password (minimum of 5, maximum of 8 characters) please use a combination of upper an lower case letters an numbers. Enter news password: _ - Traduccin Cambiando contrasea para cliente1 Introduce la nueva contrasea (mnimo 5, mximo 8 caracteres) por favor utiliza una combinacin de letras minsculas y maysculas y nmeros.

29

Introduce nueva contrasea: _ En este punto el administrado inco rpora la secuencia de caracteres que el sistema utilizar para validar al usuario durante el inicio de sesin. Como medida de precaucin las letras y nmeros escritos no aparecern en pantalla para evitar que una persona ajena pueda aprovechar estos datos en beneficio propio. Despus se comprueba la correccin de la contrasea escribindose de nuevo. De esta forma el sistema evita la entrada de valores no deseados por el usuario. Si todo el proceso termin bien el sistema lo indica con el mensaje: Password changed (contrasea cambiada). Ahora el usuario con nombre de acceso "cliente1" tiene admitida su entrada al sistema y puede comprobarlo abriendo el terminal virtual 2 con <Ctrl> + <Alt> + <F2> y entregando los datos de acceso. Su situacin en el sistema se confirma porque ahora el smbolo del intrprete de comandos a cambiado a: $ _ Puede "ver" su ubicacin en el rbol de directorios escribiendo 'pwd'. Propiedades de usuario ---------------------A la hora de agregar un usuario con un per fil completo usar el comando 'adduser' as: #adduser -h /home/casa_cliente2 -s /bin/sh -g "usuario sin privilegios" cliente2 Los parmetro representan: -h : Nombre del directorio elegido para el cliente2, -s : Nombre del intrprete de comand os definido para el cliente2 -g : Datos de cliente2 Toda esta informacin quedar almacenada en el fichero de configuracin "/etc/passwd" en donde por cada usuario, incluido el usuario "root", existe una lnea con sus datos: campo1:campo2:campo3:campo 4:campo5:camp6:campo7 campo1: Nombre de usuario. campo2: Contrasea encriptada (si no tiene este campo aparece en blanco). campo3: identificador de usuario (uid) campo4: identificador de grupo (gid) campo5: Informacin de usuario campo6: Directorio de usuario campo7: Intrprete de comandos para este usuario Borrado de un usuario --------------------Cuando el administrado desea bloquear el acceso al sistema de un usuario llama al comando deluser:

30

#deluser nombre_de_usuario Entonces desaparece del fichero "/etc/passwd" su referencia y a partir de entonces queda imposibilitado para acceder al sistema. Cambio de contrasea -------------------Es posible que pasado un tiempo el administrador determine la necesidad de cambiar la contrase a de algn usuario. El comando encargado de esta tarea es passwd: #passwd usuario_de_sistema (nota: sin parmetro cambia la contrasea del administrador) En este momento el sistema solicitar la nueva contrasea dos veces (la segunda como confirmac in). A partir de ahora el usuario est obligado a manejar la nueva contrasea si desea entrar en microLINUX. Cambio de usuario ----------------Tambin est permitido cambiar de usuario en cualquier momento llamando a 'su' (switch user); En caso de no acompaar al comando con el nombre de un usuario, el sistema supondr que es el usuario "root" quien pretende incorporarse. A continuacin se entregar la contrasea de acceso del usuario entrante. El usuario nico ---------------En los sistemas LINUX existe la figura del usuario nico, encargado de realizar labores asociadas al mantenimiento del sistema. Cuando accede este usuario, el sistema queda inhabilitado para admitir simultneamente otros usuarios. Esta prdida (provisional) de la caracters tica de multiusuario tiene como objetivo permitir al administrador disponer de TODO el sistema con el fin de realizar labores administrativa que de otra forma no sera posible. El usuario nico se justifica sobre todo en aquellos entornos donde el sistema operativo corre en una mquina a la que acceden los usuarios desde diversos terminales. La activacin del usuario nico implica la imposibilidad de entrada a cualquier otra persona y garantiza que en ese instante el administrador tenga el uso y control d el sistema. El comando sulogin valida el acceso en calidad de usuario nico al sistema. MicroLINUX trata el usuario nico (monousuario) como al usuario 'root'. En otras distribuciones es recomendable consultar: "El nivel de ejecucin 1, modo monosuario". nota: El nivel de ejecucin es cada uno de los diferentes estados en que se puede encontrar el sistema. Se identifican con un nmero o letra. Quin soy yo? -------------En ocasiones cuando el administrador entra en el sistema repetidas veces registrndose como un usuario diferente en cada sesin, puede necesitar recordar su identidad, es decir, saber en un instante determinado el nombre de usuario activo en el sistema.

31

Esto se consigue con el comando 'whoami'. Tras ser ejecutado el S.O. devuelve el "login" actual. $whoami usuario1 $ El usuario como propietario de recursos (ficheros y directorios) ---------------------------------------------------------------Es posible proteger los ficheros de usuarios particulares de la manipulacin por parte de otros. Todos los sistemas basados en LINUX proporcionan un mecanismo conocido como permisos de ficheros. Este mtodo permite que ficheros y directorios "pertenezcan" a un usuario determinado. El comando encargado de cambiar el dueo de un recurso es 'chown'. Por ejemplo si el administrador desea asignar como propietario del fichero "/home/datos_usuario1" al usuario 'usuario1' escribir: #chown usuario1 /home/datos_usuario T A R E A S ----------1 Crear un usuario con los parmetros p or defecto con nombre usuario_normal. 2 Crear un usuario con estas caractersticas: - Directorio /home/dir_usuario - Identificacin "usuario personalizado 1" - Intrprete "/bin/sh" 3 Crear un usuario normal con nombre usuario_provisional. 4 Abrir las consolas virtuales 2, 3 y 4 para acceder como los usuarios creados en 1, 2 y 3. 5 Ahora el usuario_provisional debe abandonar su sesin. (Utiliza el comando exit). 6 Consultar el fichero donde estn los datos de usuario "/etc/passwd". 7 Eliminar el usuario usuario_provisional. 8 Intentar acceder como usuario_provisional en la consola virtual 4. 9 Consultar de nuevo el fichero de configuracin de usuarios. 10 Usar en la consola virtual 1 el comando 'su' para cambiar de usuario. 11 Ahora, intentar suprimir el acceso a usuario_normal. Es posible?, razona tu respuesta. 12 Consultar el nombre del usuario actualmente registrado. 13 Como administrador, crear el fichero "/home/dir_usuario/datos_usuario_normal.txt" y cambiar el propietario a usuario_normal. <->

32

Actividad 10: Concepto de grupo. Creacin y borrado de grupos. Agregacin y eliminacin de usuarios a un grupo.

Concepto de grupo ----------------La idea de grupo es la de establecer equipos de trabajo que nec esitan acceso a recursos comunes. As un programador (perteneciente al grupo de programadores) puede reservarse el permiso de escritura slo para l pero permitir a sus compaeros de equipo que lean sus ficheros fuente y no permitir a nadie ms (otros) que hagan nada. Trabajo con grupos -----------------Cada usuario es miembro de un grupo. Pueden darse distintas posibilidades o privilegios a distintos tipos de usuarios. Por ejemplo parece ms lgico dar acceso a diferentes tipos de archivos a un grupo que utiliza el sistema para analizar las ventas de la compaa, que a otro cuya tarea principal es la investigacin de nuevos productos. El archivo de contraseas, tal y como se indic en el apartado anterior, "/etc/passwd" guarda informacin de cada us uario. Los datos sobre los grupos se almacenan en el archivo "/etc/group". Ejemplo de registro de un grupo en ese archivo: #cat /etc/group root:x:0: usuario:x:508: cli:x:509:cliente1,cliente2 pro:x:510:provee1,provee2,provee3 Cuando el administrado r da de alta un usuario, el sistema tambin aade una nueva lnea al fichero "/etc/group" sealando que hay un grupo especfico para el nuevo registro. Por ejemplo: #adduser nuevo_usuario ... >>> contrasea de validacin ... #cat /etc/group root:x:0: usuario:x:508: cli:x:509:cliente1,cliente2 pro:x:510:provee1,provee2,provee3 511:x:511:nuevo_usuario

<-- Nuevo grupo

El significado de los campos que componen el fichero "/etc/group" es el siguiente: campo1:campo2:campo3:campo4 campo1: Nombre del grupo. campo2: Contrasea encriptada de grupo. En blanco indica que no hay contrasea y una 'x' seala que la contrasea es accesible SOLO al administrador 'root' en el fichero "/etc/gshadow" (este fichero no existente en microLINUX aunque s en otras distribuciones).

33

campo3: Nmero de identificacin -GID- del grupo. campo4: Lista de usuarios pertenecientes al grupo. La configuracin de grupos en microLINUX puede llevarse a cabo por dos caminos distintos. Uno es editar el fichero usado por el S.O. para la gestin de grupos "/etc/group" y realizar sobre l las modificaciones oportunas. Por otra parte pueden emplearse los comandos que a tal efecto dispone microLINUX y se muestran a continuacin. Creacin de grupos -----------------La utilidad 'addgroup' incluye un nuevo grupo. Si el identificador de grupo (GID) no est indicado, 'addgroup' intentar encontrar el siguiente GID vlido en "/etc/group" dentro del rango [100..6400]. Ejemplo: Dar de alta el grupo 'lectores'. #addgroup -g lectores Ejemplo: Dar de alta el grupo 800 (con GID 800) e indicar que el usuario 'lector1' pertenece a l. #addgroup -g 800 lector1 Ejemplo: Dar de alta el grupo escritores al que pertenece escritor1. #addgroup -g escritores escritor1 Borrado de grupos ----------------Para borrar un grupo simplemente debe llamarse al comando 'delgroup' y acompaarlo del nombre del grupo que se quiere eliminar. Ejemplo: Borrar el grupo 800. #delgroup 800 Cambio de grupo --------------Cuando sea necesario cambiar el grupo al que pertenece un recurso (fichero directorio) debe aplicarse el comando 'chgrp'. Adems del recurso, hay que acompaar como parmetro el nuevo grupo propietario. La forma de llamada es la siguiente: #chgrp Nuevo_grupo Nombre_recu rso nota: aadiendo el parmetro -R cambia el grupo recursivamente a los recursos (ficheros y directorios) contenidos en Nombre_recurso. Modificacin de usuarios pertenecientes a un grupo -------------------------------------------------Si el administrador del sistema desea cambiar la lista de usuarios relacionados con un grupo, necesita editar el fichero "/etc/group" y modificar su contenido. T A R E A S -----------

34

1 Como administrador hay que crear tres nuevos grupos en el sistema: clien (clientes), prove (proveedores) y usuarios. 2 Verificar la existencia de los nuevos grupos consultando el fichero "/etc/group". 3 Generar los directorios "/home/usuarios", "/home/usuarios/dir_cli" y "/home/usuarios/dir_pro". 4 Cambiar la pertenencia a grupo de los anteriores directorios segn este criterio: /home/usuarios /home/usuarios/dir_cli /home/usuarios/dir_pro --> grupo usuarios --> grupo clien --> grupo prove

5 Aadir los siguientes usuarios: 'cliente1', 'cliente2', 'proveedor1', 'proveedor2' y 'proveedor3'. 6 Configurar el sistema para que 'cliente1' y 'cliente2' pertenezcan a 'clien' as como que los usuarios 'proveedor1', 'proveedor2' y 'proveedor3' correspondan al grupo 'prove'. Los directorios asociados 'cuelgan' de "/home/usu arios". 7 Por ltimo comprobar la correcta estructura jerrquica de los nuevos directorios: /home/usuarios/cliente1 cliente2 proveedor1 proveedor2 proveedor3 dir_clien/ dir_prove/ nota: No borrar los datos creados en este apartado porque son necesarios en la actividad siguiente. <->

35

(En blanco)

36

Actividad 11: Permisos en un sistema multiusuario. Introduccin -----------La seguridad de un sistema derivado de LINUX se basa en el sistema de permisos y propiedades de los ficheros. Es importante mantener una buena poltica de seguridad an cuando slo hay un nico usuario. Un usuario normal encontrar pocos problemas de permisos con sus ficheros de uso diario. Pero para un administrador las cosas son ms complicadas. Asignando un permiso errneo se ver inmerso en una serie de frustrantes experiencias como, por ejemplo, la imposibilidad de leer ficheros "propios". El mensaje: Permission denied Es decir, permiso denegado, indica que algui en ha asignado un permiso que nos restringe el acceso ms de lo que quisiramos. Qu son los permisos? ---------------------Los permisos hablan de lo que un usuario puede hacer con un recurso (fichero directorio). Hay tres tipos de permisos: - r Lectura: El permiso indica que el usuario puede ver el contenido del archivo (r read, leer). - w Escritura: El usuario puede escribir en el archivo o bien borrarlo (w write, escribir). - x Ejecucin: Cuando el fichero es un programa el usuario puede ejecutarlo (x execute, ejecutar). Con un archivo nuevo, el sistema asigna automticamente unos permisos. Por ejemplo le permite al autor del archivo leer y escribir en l, pero al resto de los usuarios solamente leerlo. Los programas que crean archivos asig nan a estos los permisos correspondientes. As, cuando el compilador crea un programa ejecutable, automticamente le asigna el permiso de ejecucin. Con los directorios, los permisos tienen un significado algo distinto: - El permiso de lectura indica q ue se puede listar el contenido del directorio. - El permiso de escritura significa que se puede aadir o borrar ficheros al directorio. - El permiso de ejecucin quiere decir que se puede consultar informacin de los archivos del directorio. Tambin hay otro tipo de recursos (ficheros especiales) como los especiales de dispositivos, los enlaces simblicos, etc. cada uno tiene sus propias reglas de interpretacin de los permisos. A quines se les dan los permisos? ---------------------------------- En un sistema LINUX estn presentes tres categoras de permisos: propietario (owner), grupo (group) y otros (others). Por tanto los elementos bsicos en cuanto a seguridad se refiere son: tres permisos (lectura, escritura y ejecucin) y tres niveles (p ropietario, grupo y terceros). Lectura de los propiedades de un recurso ----------------------------------------

37

Utilizar 'ls -l' para conocer los permisos y pertenencia asociados a un recurso. Por ejemplo, que permisos tiene el fichero"/etc/passwd"?: #ls -l /etc/passwd -rwxr-xr-x 1 root root 553 Oct 14 16:49 /etc/passwd ^ ^ ^ ^ ^ ^ ^ | | | | | | | | | | | | | + --- Recurso | | | | | | | | | | | + --- Fecha y hora del | | | | | ltimo cambio | | | | + --- Tamao en bytes | | | | | | | + --- Grupo al que pertenece el recurso | | | | | + --- Propietario | | | + --- n de nombres del fichero (ver enlace simblico | -actividad 7-) +--- Permisos Permisos: Representacin -----------------------Al listar los permisos de un r ecurso estos aparecen codificados segn el siguiente formato: - rwx rwx rwx ^ ^ ^ ^ | | | | | | | | | | | +--| | | | | +------| | | +----------| +-------------Con 'letra' tiene el permiso correspondiente, con ' -' no.

Permisos a otros usuarios Permisos al grupo que pertenece Permisos que tiene el propietario Tipo de recurso: d l c b Directorio Enlace Fichero normal Fichero especial (tipo carcter) Fichero especial (tipo bloque)

Ejemplos: drw-r--r-- --> Directorio cuyo propietario puede leer y escribir, mientras que los miembros del grupo al que pertenece solo leer, como el resto de usuarios. -rw-r----- --> Fichero normal que puede ser ledo por su propietario y el grupo asociado. El dueo tambin tiene permiso de modificacin y borrado. Cambio de pertenencia y permisos de un recurso ---------------------------------------------Pertenencia: La mayora de las veces podemos confiar en los ajustes predeterminados del sistema. No obstante hay ciertas excepciones.

38

Como se ha visto en las actividades anteriores, las modificaciones de propiedad se hacen con: - chown -> Cambio de propietario (slo 'root' puede utilizar este comando). - chgrp -> Cambio de grupo (un usuario norm al puede aplicarlo a recursos que le pertenezcan). Pueden hacerse estas dos cosas en un solo paso empleando el punto '.': #chown cliente1.cli agenda_cliente1 Permisos: La forma de cambiar los permisos es algo ms complicada. A los permisos se les suele llamar el 'modo' de un archivo. Para cambiar se emplea el comando 'chmod' (change mode -cambio de modo-). El comando 'chmod' reconoce varios caracteres y signos utilizados a modo de parmetros combinados para determinar el nuevo estado de los permi sos del recurso. Estos caracteres son: | mbito| | | u g o a --> --> --> --> user (usuario) group (grupo) others (otros) all (todos)

| + --> Aade un permiso Accin| - --> Elimina el permiso | = --> Activa permisos absolutos ignorando los exi stentes | | | | | r w x s t --> --> --> --> --> Permiso Permiso Permiso Permiso Permiso de lectura de escritura/modificacin de ejecucin (en directorios indica el acceso) condicionado -nota 1condicionado -nota 2-

Tipo

nota 1: Modo Setuid : La identidad efectiva de usuario con la que se ejecuta el programa es la del propietario del mismo (usar con ejecutables). Modo Setgid : el comportamiento es igual que el anterior pero afectando al grupo. nota 2: Sticky -pegajoso- bit (aplicado a directori os) [chmod +t directorio] til para aquellos programas que se ejecutan a menudo y por diferentes usuarios. Permite que slo el propietario del fichero, el propietario del directorio el administrador puedan renombrar o borrar los ficheros contenidos en l. El formato del comando 'chmod' sera: #chmod mbito (nico o mltiple) AccinTipo (admite ms un tipo). Por ejemplo: --> Permiso de lectura escritura y ejecucin para usuario y grupo #chmod g-x fichero_principal --> Elimina el permiso de ejecucin al grupo (deja el resto como est) #chmod =r fichero_lectura --> nicamente permite la lectura de todos los usuarios Tambin es posible presentar la codificacin de los permisos usando notacin octal segn el siguiente formato: #chmod ug+rwx fich_principal

39

+--- Propietario | | +--- Grupo | | | | +--- Otros | | | v v v rwx rwx rwx 111 111 111 <-- Equivalente Binario ('1' permiso activo, '0' denegado) 7 7 7 <-- Equivalente Octal

En este formato se encuentran implcitos tanto el mbito como el tipo. Tomando los ejemplos anteriores su representacin sera: #chmod 770 fichero_principal (equivale a #chmod ug+rwx ) #chmod 670 fichero_principal #chmod 444 fichero_lectura Si el deseo es configurar un directorio donde cada usuario pueda borrar los archivos que le pertenecen o bien el dueo del directorio as como el administrador, utilizar: #chmod +t directorio_especial Como ltimo ejemplo se habilitarn permisos a un fichero ejecutable de tal modo que un usuario normal pueda llamarle y corra como si hubiese sido activado por el administrador. #chmod u+s ejecutable_usuario1 T A R E A S ----------1 A partir del subdirectorio "/home/usuarios" creado en la actividad anterior establecer la jer arqua de permisos y propiedad siguiente: Propietario ----------usuario cliente1 cliente2 proveedor1 proveedor2 proveedor3 usuario usuario Grupo ----usuario cli cli pro pro pro cli pro Permisos -------drwxr-sr-x drwxr-x--drwxr-x--drwxr-x--drwxr-x--drwxr-x--drwxrwxr-t drwxrwxr-t

/home/usuarios/ cliente1 cliente2 proveedor1 proveedor2 proveedor3 dir_clien/ dir_prove/

--> --> --> --> --> --> --> -->

2 Comprobar la correcta asignacin con el comando "#ls -l". 3 Tomando la identidad de los usuarios que tienen cuenta en el sistema acceder y crear tanto ficheros como directorios donde despus se comprobar el correcto tratamiento de los permisos por parte del S.O.. <->

40

Actividad 12: Procesos en linux. Estado de un proceso. Ejecucin en primer y segundo plano. Procesos en LINUX ----------------El intrprete de comandos tiene como misin atender las rdenes lanzadas por el usuario sobre la consol a, aunque tambin se encarga del CONTROL DE TAREAS; Trabajo consistente en gestionar la correcta ejecucin de todos los comandos y programas que acontecen en cada instante. Cuando un usuario ejecuta un programa, lanza lo que se conoce como proceso, que es simplemente el nombre que se da a un programa que se est ejecutando. El comando 'ps' visualiza la lista de procesos activos actualmente. Por ejemplo: #ps PID 1 2 3 4 5 6 30 31 32 22 33 # El significado de cada columna es: - Columna "PID" representa el identificador del proceso. - Columna "Uid" seala el usuario (uid -identificador de usuario -) que lanz el proceso. - Columna "Size" tama o del proceso. - Columna "State" informa del estado de un proceso. Los valores posibles son: - R (Runnable): En ejecucin. - S (Sleeping): Durmiendo. Espera un suceso del sistema. - T (Traced Stopped): Detenido. Est parado por una seal indicada por el proceso que lo llam (proceso padre) generalmente el intrprete de comandos por orden del usuario. - Columna "Command" contiene el nombre del proceso que se est ejecutando. Estados de un proceso --------------------Durante la ejecucin de un proceso este puede pasar por diferentes estados. El estado de un proceso define cual es su actividad en un momento determinado. A continuacin se muestran tres posibles situaciones: A) Ejecucin normal de un proceso. llamada al proceso --> Ejemplo: Ejecucin --> Fin (R) TTY Uid root root root root root root root root root root root Size 620 0 0 0 0 0 620 496 496 612 608 State S S S S S S S S S T R Command init [keventd] [ksoftirqd_CPU0] [kswapd] [bdflush] [kupdated] -sh /sbin/getty 38400 tty2 /sbin/getty 38400 tty3 vi ps

tty1 tty2 tty3 tty1 tty1

41

#date Sun Oct 24 18:16:27 UTC 2004 #_

<-- Llamada al proceso <-- Ejecucin <-- Fin del proceso, el sistema espera nueva orden

B) Detencin de un proceso. llamada --> Run --> [Seal de stop] ... ... --> Run --> Fin (R) | ^ (R) | | v | Parada ...[activar] --+ (T) Ejemplo: #vi fichero_usuario ... pantalla del editor ... <Ctrl>+<Z> %1 Stopped # ... #bg ... pantalla del editor ... # <-- Llamada al proceso <-- Ejecucin <-- Parada del proceso

<-<-<-<--

Otros proceso Activacin del proceso detenido Ejecucin Fin del proceso, el si stema espera nueva orden

C) Proceso durmiente. llamada --> Ejecucin --> Espera ... [ ] --> Ejecucin --> Fin (R) (S) ^ (R) | | Evento Ejemplo: En el caso de proceso en estado durmiente el eve nto esperado es una seal entregada por el Sistema Operativo. Ver con el comando 'ps' como las consolas virtuales tty2 y tty3 son procesos en esta situacin a la espera de ser activadas. El usuario puede forzar el estado de un proceso manejando los coman dos y opciones del intrprete de comandos siguientes: - Ver el estado de las tareas en segundo plano y detenidas por el usuario con el comando 'jobs'. Por ejemplo: #jobs [1] 52 yes > /dev/null [2] 53 Stopped vi fichero_2 ^ ^ ^ ^ | | | | | | | +--- Tarea | | | | | +--- Estado de la tarea | | | +--- Nmero de identificacin del proceso (PID) cuando se | lanz +--- Nmero de tarea en situacin de parad a o ejecucin en segundo plano - Detener un proceso, pulsado la combinacin de teclas <Ctrl>+<Z>. Por ejemplo:

42

#vi fichero_2 ... pantalla editor ... <Ctrl>+<Z> %1 Stopped ... #fg (el editor vi retorna a estado de ejecucin) nota: Mientras un proceso est "durmiendo" no se ejecuta y por tanto no consume CPU. - Forzar la finalizacin de un proceso, usando la combinacin de teclas <Ctrl>+<C>: #yes > /dev/null _ <Ctrl>+<C> # <-el programa "yes" lanza el mensaje por consola "y" en un bucle in finito (la salida est redireccionada al dispositivo nulo -equivale a la papelera en windows -)

Nota: La combinacin <Ctrl>+<C> es efectiva sobre procesos en primer plano. - Eliminar un proceso por medio del comando 'kil l'. Admite como parmetros: El n de tarea (segn 'jobs') precedido por "%" Ejemplo: #kill %1 El n identificador de proceso (PID) Ejemplo: #kill 40 Ejecucin en primer y segundo plano ----------------------------------Ya se ha comentado la capa cidad multitarea (varias acciones realizadas a la vez) de todo sistema LINUX. Pero cmo conseguir esto si nicamente es posible interactuar con una tarea en un instante determinado?. Los conceptos primer y segundo plano describen esta situacin. Decimos que un proceso est en primer plano cuando es accesible desde la consola mientras que el resto de procesos activos estn ejecutndose fuera de ella, es decir, en segundo plano. El Sistema Operativo proporciona herramientas con las que trasladar manualmente un proceso en ejecucin de primer a segundo plano y viceversa, es decir, el usuario puede elegir de entre los procesos activos aquel con el que desea interactuar. El comando 'fg' (ForeGround) pasa a primer plano una tarea suspendida o en segundo plano. Sin argumentos, selecciona la tarea suspendida ms recientemente. La seleccin de una tarea particular, suspendida o en segundo plano, (ver las tareas con el comando 'jobs') se hace con el nmero de tarea precedido del signo de tanto por ciento "%". Ejemplos: #fg #fg %2 <-- Pasa la tarea suspendida a primer plano. <-- Lleva a primer plano la tarea 2 (segn 'jobs').

Una tarea suspendida es puesta en ejecucin en segundo plano utilizando el comando 'bg' (BackGround). Sin argumentos, 'bg' opera c on la tarea que fue suspendida ms recientemente. Puede especificarse una tarea determinada (ver las tareas con el comando 'jobs'), aportando el nmero de tarea precedido del signo de tanto por ciento "%".

43

Ejemplos: #bg <-- Pone en ejecucin en segundo plano la ltima tarea suspendida. #bg %2<-- Pasa la tarea 2 a ejecucin en segundo plano (segn 'jobs'). En LINUX tambin es posible iniciar un programa directamente en segundo plano, escribiendo el signo "&" (en ingls "ampersand") al final de la lne a de rdenes durante la llamada a la tarea. Por ejemplo: #vi mi_fichero & T A R E A S ----------1 Ejecutar las tres rdenes siguientes en primer plano y psalas a estado suspendido: #yes <Ctrl>+<Z> #yes bucle infinito 2 <Ctrl>+<Z> #yes bucle infinito 3 <Ctrl>+<Z> 2 Estudiar el estado de las tareas con el comando 'jobs'. 3 Eliminar el proceso que fue lanzado con la orden "#yes". 4 Qu sucede si ahora deseo pasar a primer plano el proces o eliminado en el punto anterior?. Intntalo con "#kill %1". 5 Revisa el estado de las tareas ('jobs'). 6 Puesto que los bucles infinitos 2 y 3 se ejecutan en segundo plano intenta terminarlos (<Ctrl>+<C>). 7 Visto que es imposible, pasar el bucle i nfinito 2 a primer plano y repetir el punto anterior. 8 Lanza un bucle infinito (4) directamente a segundo plano redireccionando los mensajes de salida a nulo: #yes bucle infinito 4 > /dev/null & 9 Comprueba el estado de los procesos. 10 Elimina todas las tareas suspendidas o ejecutadas en segundo plano: kill %a %b ... %x (a,b,..,x segn 'jobs'). <-> <-- Lanza el editor "vi" en segundo plano.

44

Actividad 13: Scripts I. Ficheros de usuario ejecutados por el intrprete de comandos. Variables de entorno. Introduccin -----------El intrprete de comandos no es slo un programa encargado de tomar las rdenes escritas por el usuario y llamar al comando o aplicacin correspondiente trasladndole los parmetros deseados. Tambin dispone de mecanismos para la automatizacin y administracin de tareas en el sistema donde la eficiencia es menos importante que la fcil configuracin, mantenimiento y portabilidad. Todo esto se traduce en la definicin de un lenguaje de programacin propio donde el intrprete ejecuta ordenadamente las acciones recogidas en un guin ("script") escrito por el usuario siguiendo la sintaxis presentada en los siguientes apartados. Qu es un Script? -----------------Un Script es un fichero de texto escrito por un usuario con rdenes para el intrprete de comando s. Cuando se llama al fichero todas las acciones se ejecutan automticamente siguiendo el patrn definido en l. En MS -DOS equivaldra a un fichero por lotes .BAT. En su interior, el fichero contendr obligatoriamente en la primera lnea esta secuencia: #! /bin/sh

Donde - "#!" identifica al fichero como guin ejecutable por el intrprete de comandos. - "/bin/sh" especifica el intrprete del guin. (En un S.O. LINUX pueden convivir varios intrpretes). Un Ejemplo sera: #! /bin/sh echo hola mundo.

# presenta por pantalla la cadena "hola mundo." ^ | +-- Marca el comienzo de un comentario (no lo tiene en cuenta el intrprete) hasta el final de la lnea.

El nombre del fichero puede ser cualquiera (usar .sh) y tras su creaci n es necesario convertirlo en ejecutable cambiando sus propiedades: #chmod +x fichero_script.sh La llamada al script necesita estar precedida de la cadena "./": #./fichero_script.sh El Sistema Operativo identifica un script usando el color verde a l listar los ficheros del directorio que lo almacena. Elementos de un Script ----------------------

45

En un guin puede aparecer cualquier orden vlida para el indicativo del sistema: Comandos con sus parmetros llamada a una aplicacin Redirecciones de salida y/o entrada Concatenacin de rdenes Uso de caracteres de sustitucin (comodines), etc.

Adems incluye otras capacidades: - Manejo de variables - Ampliacin de comandos - Tratamiento de argumentos del script - Comandos de sustitucin - Expansin aritmtica - Estructuras de control - Estructura condicional (si ... no) - Estructura iterativa (repetir ...) - Seleccin de opciones (En caso de ...) - Funciones Aunque existe abundante bibliografa sobre el "arte" de la c reacin de scripts aqu slo se mostrarn algunas pinceladas de las diversas opciones apuntadas. Manejo de variables ------------------Una variable es la referencia a una zona de la memoria cuyo contenido es manejado dentro del guin . Al iniciar la ejecucin de un Script tambin son accesibles todas las variables del intrprete de comandos (llamadas variables de entorno). Las variables de entorno se muestran en pantalla gracias al comando env, por ejemplo: # env USER=root OLDPWD=/ HOME=/ LOGNAME=root TERM=linux PATH=/usr/sbin:/bin:/usr/sbin/:/sbin SHELL=/bin/sh PWD=/home Donde la palabra en maysculas es el nombre de la variable y la cadena de caracteres a la derecha del signo "=" representa la informacin que almacena. Cuando sea necesario operar con el contenido de cualquier variable dentro de un Script hay situar el smbolo dolar "$" delante de su nombre. Ejemplo, contenido del fichero "scrpt1.sh": #! /bin/sh echo Estoy en el directorio $HOME

# mensaje de texto por pantalla.

Al ejecutar el script (recordar, 1 pasar a ejecutable -# chmod +x scrpt1.sh- y 2 llamar con ./script.sh) el resultado en pantalla es:

46

#./script1.sh estoy en el directorio /home # Tambin un guin puede definir sus propias variables: ... dentro de un guin ... nombre_variable=contenido <-- No dejar espacios en extremos de "=".

Si la cadena de caracteres almacenada en la variable tiene espacios en blanco es necesario expresarla entre los smbolos de doble comilla. Ejemplo, contenido y ejecucin del fichero "scrpt2.sh": #! /bin/sh variable1=cadena_sin_espacios variable2="cadena con espacios" echo $variable1 echo $variable2 sleep 3 #./scrpt2.sh cadena_sin_espacios cadena con espacios # _ Las variables creadas (y su valor) en un guin desaparecen al finalizar la ejecucin del mismo. Otro ejemplo. Contenido del fichero "scrpt3.sh": #! /bin/sh mensaje1=uno mensaje2="$mensaje1 dos" # Es posible anida r variables dentro de otras mensaje3="$mensaje2 tres"# :var_x="...$var_y..." echo $mensaje3 sleep 3 #espera 3 segundos y contina Al ser ejecutado aparece en pantalla: #./scrpt3.sh uno dos tres # _ Una ltima consideracin. Es despus de una variable sin que el posible recurriendo al aislamiento de llave {nombre_variable}. Ver el scrpt4.sh: posible escrib ir caracteres inmediatamente intrprete los asocie a ella. Esto es del nombre de la variable con los smbolos contenido y ejecucin del fichero

#usar dobles comillas cuando hay espacios #espera 3 segundos y contina

#! /bin/sh frecuencia=4.0 echo El PIC 16F84 trabaja a una velocidad de ${frecuencia}MHz #./scrpt4.sh El PIC 16F84 trabaja a una velocidad de 4.0MHz # _ T A R E A S ----------1 Crear y ejecutar todos los scripts de esta actividad.

47

2 Preparar un script llamado "mi_script.sh" que realice estas acciones: - Liste por pginas el contenido del directorio marcado por (/bin). - Cree una copia de s mismo en el fichero copia_mi_script.bkp usando el elemento de redireccin ">". Y presente por pantalla los siguientes datos: - Nombre del intrprete de comandos (SHELL). - Directorio actual (PWD). - Usuario (USER). <->

48

Actividad 14: Scripts II. Ampliacin de comandos y Funciones. Ampliacin de comandos ---------------------Tal y como se apunt en la actividad anterior los scripts permiten aumentar las capacidades vistas hasta ahora del intrprete de comandos. Dentro de la ampliacin de comandos existen tres apartados diferentes: - Tratamiento de argumentos del script - Comandos del sustitucin - Expansin aritmtica Tratamiento de argumentos del script -----------------------------------Los argumentos en la llamada al script sobre el indicativo del sistema, son considerados como variables especiales en el interior del guin. Los argumentos se referencian as: - $0: Nombre del script - $1, $2, ..., $8 y $9: Primer, segundo, ... , octavo y noveno argumento Escribir el nmero encerrado entre llaves: ${nn} para los argumentos siguientes. Por ejemplo, contenido y ejec ucin del fichero scrpt5_arg: #! /bin/sh #script para el manejo de argumentos echo $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 ${10}

#./scrpt5_arg 1 2 3 4 5 6 7 8 9 0 ./scrpt5_arg 1 2 3 4 5 6 7 8 9 0 # _ El comando 'shift' desplaza argumentos, es decir, si inicialmente el argumento 1 corresponde a $1, el 2 a $2 y el 3 a $3, despus de llamar a shift el contenido de las variables valdra: $1 nulo, $2= argumento 1 y $2 =argumento 2. Por ejemplo, contenido y ejecucin del fichero scrpt6_arg2: #! /bin/sh #script para el manejo del comando shift con argumentos echo $1 $2 $3 shift echo $1 $2 $3 #./scrpt6_arg2 a b c a b c b c # _ Esta utilidad facilita el procesado de todos los argumentos en un bucle, usando una nica variable encargada de r eferenciar desde el primer argumento hasta el ltimo. Existen tres variables especiales asociadas al script y sus argumentos: - $#: Guarda el nmero de argumentos - $@: Lista todos los argumentos separados por espacios - $$: Almacena el PID (identifi cador de proceso durante su ejecucin)

49

Por ejemplo, contenido y ejecucin del fichero scrpt7_arg3: #! /bin/sh ps echo $# echo $@ echo $$ #script para presenta el valor de $#, $@ y $$

#./scrpt7_arg3 a b c ... 89 tty1 root 624 ... 3 a b c 89 # _ Comandos de sustitucin -----------------------

/bin/sh ./scrpt7_arg3 a b c

Un comando de sustitucin genera la respuesta de un mandato en el sitio ocupado por su nombre dentro del script, es decir, primero el comando se llama en el script y posteriormente el resultado obtenido sustituye al comando en tiempo de ejecucin. Hay dos formas de expresar un comando de sustitucin: A) $(nombre_comando) B) `nombre_comando`

(el signo "`" es el acento reflejado derecha de la letra "p" -)

-a la

Por ejemplo el contenido y ejecucin del fichero scrpt8 sera: #! /bin/sh echo La fecha y hora del sistema es: $(date) echo La fecha y hora del sistema es: `date` #./scrpt8 La fecha y hora del sistema es: Fri Oct 29 18:40:17 UTC 2004 La fecha y hora del sistema es: Fri Oct 29 18:40:17 UTC 2004 # _ Expansin Aritmtica -------------------El resultado de una expresin aritmtica sustituir a esta durante el procesado de un script. Su sintaxis es: $((expresin)) Los operadores son: + * / suma resta multiplicacin divisin

Slo puede trabajar con valores enteros. Por ejemplo, contenido y ejecucin del fichero scrpt9: #! /bin/sh

50

echo $((3 * 4 / 6 + 1 - 3))

#./scrpt9 0 # _ Funciones --------Una funcin de script, i gual que en otros lenguajes de programacin, representa un mtodo donde agrupar un conjunto de sentencias bajo un nombre, el nombre de la funcin. Cuando aparece este nombre en el guin, el intrprete ejecuta automticamente las rdenes asociadas. Equivaldra a un pequeo guin (admite incluso parmetros) dentro de un guin principal. La forma de escribir una funcin es: ...dentro del script... nombre_de_funcin() { Sentencia1; Sentencia2; ... SentenciaN; } Un script con funciones (y sus resultado en pantalla) sera: Ejemplo1: script10_fun1 #! /bin/sh datos() { echo "usuario actual:" $(whoami) ; echo "fecha y hora:" $(date) ; } linea() { echo "--------------------------- " ; } doble_linea() { echo"================== ==========" ; } texto() { echo $@ ; } datos linea texto saludos desde microLINUX texto texto fin del mensaje. doble_linea #--- fin del script --#./script10_fun1 usuario actual: root

51

fecha y hora: Sat Oct 30 18:09:17 UTC 2004 ------------------------------saludos desde microLINUX fin del mensaje. =============================== # _ T A R E A S ----------1 Editar y ejecutar todos los scripts mostrados como ejemplo en la actividad. 2 Crear un script llamado encuentra.s h que busque en el rbol de directorios el fichero cuyo nombre es pasado como parmetro. 3 Realizar un script que convierta a segundos una cantidad cualquier expresada en horas. 4 Hacer un guin encargado de calcular la media aritmtica de cinco valores enteros cualesquiera y posteriormente presente por pantalla dichos valores y el resultado de la media. Nota: variar la prioridad de las operaciones usando parntesis. 5 Crear un script con funciones para ver tanto la pertenencia a usuario y a grupo de los ficheros de un directorio sealado por el usuario, como la fecha y hora del sistema y tambin el contenido del propio fichero. <->

52

Actividad 15: Scripts III. Estructuras de control. Introduccin -----------Como cualquier lenguaje de progra macin, un script es capaz de decidir las acciones a tomar segn el resultado de operaciones anteriores. Tambin ofrece la posibilidad de repetir rdenes, ya sea un nmero fijo de veces, o hasta el cumplimiento de alguna condicin. Estados de salida ----------------Puesto que la funcin principal del intrprete de comandos es llamar a otros programas, resulta natural desear controlar la secuencia de ejecucin dentro de un script conforme al estado de salida de procesos anteriores. Para lograr esto, cada programa al finalizar devuelve un cdigo al sistema sealando si acab de forma exitosa (cero) o si existi algn error (nmero distinto de 0). Siempre que el shell necesita tomar una decisin basada en el resultado de otros programas, considera como 'c ierto' a un valor 0 y como 'falso' a cualquier otro. El valor del estado de salida de una orden se obtiene con $?: #comando_a_ejecutar_y_sus_parmetros #echo $? --- ('0' verdadero y '1' falso) --Operadores ---------los operadores son los enca rgado de determinar si llevar a cabo una sentencia o conjunto de sentencias asociadas. Tal decisin acaba expresndose como un valor binario, es decir, 'cierto' o 'falso'. Pueden agruparse segn el tipo de operador: Operadores Booleanos && || ! <-- Equivale a una "AND" lgica. Accin1 Y Accin2 <-- Equivale a una "OR" lgica. Accin1 O Accin 2 <-- Equivale a una "NOT" lgica. Cambiar Resultado Accin

Operadores de test ( "[") + Test de ficheros -d nombre_de_directorio <- verdadero si es dire ctorio -f nombre_de_fichero <- verdadero si es fichero -L nombre_de_enlace_simblico <- verdadero si es enlace simblico -x nombre_de_fich_ejecutable <- verdadero si es ejecutable -s nombre_de_fichero <- verdadero si existe y con datos fich1 -nt fich2 <- verdadero si fich1 es ms reciente que fich2 fich1 -ot fich2 <- verdadero si fich1 es ms antiguo que fich2 + Test de cadenas cadena1 = cadena2 cadena1 != cadena2 -z cadena + Test numrico n1 -eq n2 <- verdadero si cadena1 es igual a cadena2 <- verdadero si cadena2 es distinta a cadena2 <- verdadero si cadena tiene longitud cero

<- verdadero si n1 y n2 son iguales

53

n1 n1 n1 n1 n1

-ne -gt -ge -lt -le

n2 n2 n2 n2 n2

<<<<<-

verdadero verdadero verdadero verdadero verdadero

si si si si si

n1 n1 n1 n1 n1

y n2 son es mayor es mayor es menor es menor

distintos que n2 o igual que n2 que n2 o igual que n2

+ Combinando o negando test test1 -a test2 test1 -o test2 !test <- verdadero si el test1 y el test2 son ciertos <- verdadero si el test1 o el test2 son ciertos <- valor negado del test

Es posible ver el resultado de la aplicacin de los operadores, igual que en el apartado anterior con "echo $?". Los operadores booleanos pueden combinar los resultados de vari as pruebas. En particular, '&&' y '||' evalan sus argumentos de izquierda a derecha, detenindose cuando se sabe el resultado total. Esto ayuda a efectuar combinaciones de control sencillas. El operador '!' invierte el sentido del valor de retorno de un p rograma. Estos operadores encadenan comandos, en particular aquellos en los que interesa conocer el estado de retorno de un programa. Por ejemplo: #com_A && com_B #com_B || com_B #!comando Ejecutar el com_B si el com_A termin correctamente. Concatena la ejecucin de com_A y com_B siempre. Si comando entrega tras su ejecucin verdadero con esta orden dicho valor es el contrario.

El comando interno 'test' evala un expresin booleana simple formada por cadenas y nmeros, entregando como valo r de retorno el resultado de la aplicacin del operador correspondiente. '0' verdadero y '1' falso. Por ejemplo: #test 10 -lt 5 #echo $? 1 # _ #test -z "" #echo $? 0 # _ <-- 10 es menor que 5? <-- presenta resultado <-- falso

<-- Es una cadena de 0 carac teres? <-- presenta resultado <-- verdadero

El comando 'test' tiene una representacin alternativa con "[" til en sentencias condicionales y bucles. Con este atajo debe incluirse "]" al final del argumento para sealar el lmite de la expresin booleana. Estas consultas equivalen a las anteriores: #[ 10 -lt 5 ] #echo $? 1 # _ #[ -z "" ] #echo $? 0 # _ <-- Recuerda: hay que respetar los espacios en blanco para considerar la sintaxis correcta.

54

Tambin existen los comandos internos 'true' y 'false' cuya funcin consiste simplemente en entregar al sistema el cdigo de terminacin '0' en el primer caso y '1' en el segundo: #true #echo #? 0 # _ #false #echo #? 1 # _ Estructuras de control ---------------------Hasta ahora es lgico pensar que un script ejecuta siempre el conjunto de sus tareas de forma secuencial puesto que son lanzadas una detrs de otra todas las acciones que almacena. Sin embargo existen herramientas cuyo propsito es romper esta linealidad y definen un orden diferente de ejecucin. Estas herramientas pueden encontrarse en cualquier lenguaje de programacin de alto nivel y son denominadas genricamente "estructuras de control" porque representan un patrn de ejecucin para un subconjunto de acciones. Las estructuras de control en un script son: - Estructura secuencial : Ya conocida, basada en el lanzamiento de una tarea tras otra. - Estructura condicional : Un grupo acciones se ejecutar si se cumple una condicin. - Estructura iterativa: Permite repetir una o varias rdenes segn un determinado criterio. Estructuras condicionales ------------------------Las estructuras condicionales son las encargadas de decidir si se realiza una accin o no; esta decisin se toma evaluando una e xpresin. Hay 4 variantes de estructura condicional: - condicional simple: si (expresin) entonces (rdenes) - condicional doble: si (expr) entonces (rds_si) sino ( rds_no) - condicional mltiple : si (Ex_A) entonces (Or_A) sino si (Ex_B) entonces (Or_B)... sino si Ex_x) entonces (Or_x) - seleccin de tarea segn condicin: segn (expresin) en caso A (rdenesA) en caso B (rdenesB)... en caso X (rdenesX) Donde "rdenes" son acciones que el intrprete de comandos efectuar siempre que "Expresin" entregue como resultado un valor "verdadero". Una variante de la condicional mltiple es la seleccin de tareas segn condicin, donde se apuntan las tareas a ejecutar en funcin del valor de una expresin no booleana.

55

A continuacin se muestr a la sintaxis aceptada por el intrprete acompaada de un ejemplo: Condicional simple: if [ expresin ]; then cdigo_si_expresin_verdad fi Ejemplo "sc_if1.sh", necesita dos parmetros en la llamada: #! /bin/sh if [ $1 -eq $2 ]; then echo los parAmetros son iguales fi echo fin Condicional doble: if [ expresin ]; then cdigo_si_expresin_verdad else cdigo_si_expresin_falso fi Ejemplo "sc_if2.sh", necesita dos parmetros en la llamada: #! /bin/sh if [ $1 -eq $2 ]; then echo los parAmetros son iguales echo valor $1 else echo los parAmetros son distintos echo primer parAmetro: $1 echo segundo parAmetro: $2 fi Condicional mltiple: if [ expresin1 ]; then cdigo_si_expresin1_verdad elif [expresin2 ]; then cdigo_si_expresin2_verdad ... elif [expresinN ] ; then cdigo_si_expresinN_verdad else # cdigo_si_expresiones1..N_falso # opcional fi Ejemplo "sc_if3.sh", necesita dos parmetros en la llamada: #! /bin/sh if[ $1 -eq $2 ]; then

56

echo los parAmetros son iguales echo valor: $1 elif[ $1 -gt $2]; then echo el primer parAmetro es mayor que el segundo echo valor: $1 elif[ $1 -lt $2 ]; then echo el segundo parAmetro es mayor que el primero echo valor: $2 fi Seleccin segn condicin: case _cadena_ in expresin1) cdigo_si_cadena_igual_a_expresin1 ;; expresin2) cdigo_si_cadena_igual_a_expresin2 ;; ... expresinN) cdigo_si_cadena_igual_a_expresinN ;; *) cdigo_cuando_cadena_tiene_otros_valores esac Ejemplo "sc_if4.sh" sin parmetros: #! /bin/sh echo pulsa una tecla por favor... read tecla # Pide al usuario un valor que guardar en "tecla" case $tecla in # toma el contenido de la varible "tecla" [aeiou]) echo ha pulsado una vocal ;; [bcdfghjklmnpqrtvwxyz]) # vale cualquiera de estos caracteres echo ha pulsado una consonante ;; [A-Z]) # rango de caracteres desde 'A' hasta 'Z'. echo ha pulsado una letra mayUscula ;; [0-9]) echo ha pulsado un nUmero ;; *) echo ha pulsado algo distinto a letra O nUmero ;; esac Estructuras iterativas ---------------------Adems de poder elegir entre varias opciones, el shell nos permite repetir una secuencia de mandatos un cierto nmero de veces, ya sea fijo o determinado por el cumplimiento de una condicin en base a una expresin booleana. Hay 3 frmulas de repeticin distintas: - Bucle repetir_ HASTA_cumplir_condicin ("until"): repetir (rdenes)

57

hasta (expresin) - Bucle repetir_ MIENTRAS _se_cumpla_condicin ("whi le"): mientras (expresin) repetir - Bucle repetir_ PARA_un_rango_de_valores ("for"): para (expresin segn rango) hacer (rdenes) A continuacin se muestra la sintaxis aceptada por el intrprete acompaada de un ejemplo: Bucle hasta: until [ expresin ]; do cdigo_a_iterar modificar_miembro_de_expresin done Ejemplo "sc_until.sh" sin parmetros: #! /bin/sh CONTADOR = 20 until [ $CONTADOR -lt 10 ]; do echo CONTADOR $CONTADOR let CONTADOR=$CONTADOR -1 # let es comando interno del intr prete. done Bucle mientras: while [ expresin ]; do cdigo_a_iterar modificar_miembro_de_expresin done Ejemplo "sc_while.sh" sin parmetros: #! /bin/sh CONTADOR=0 while [ $CONTADOR -lt 10 ]; do echo el contador vale $CONTADOR let CONTADOR=CONTADOR+1 done Bucle para: for VARIABLE in [orden_shell lista de elementos]; do cdigo_a_iterar done Ejemplo 1 "sc_for1.sh" sin parmetros: #! /bin/sh for i in $( ls ) ; do echo item: $i done Ejemplo 2 "sc_for2.sh" sin parmetr os:

58

#! /bin/sh for i in 1 2 3 4 5; do echo $i done T A R E A S ----------1 Editar los scripts de ejemplo y ejecutarlos para ver el resultado por pantalla. 2 Crear un script que tomando 2 parmetros numricos determine el parmetro de mayor valor y lo presente por pantalla. 3 Mejorar el script de la actividad anterior para que calcule la media aritmtica del valor numrico de un nmero indeterminado de parmetros. (Ayuda: utiliza el comando 'shift') 4 Generar la tabla de multiplicar del 2, 3, 4 y 5 con un script. (Ayuda: utiliza un for dentro de otro -for anidado-). <->

59

(En blanco)

60

Actividad 16: Informacin del kernel I. Datos suministrados durante el inicio del sistema. El KERNEL --------Tal y como se apunt en la actividad 5 , durante el proceso de carga del sistema operativo, uno de los primeros eventos es la ejecucin y carga en la memoria RAM del KERNEL del sistema. El ncleo (KERNEL) forma el centro del S.O., es el programa que controla la comunicacin entre el usuario y la mquina, planifica las tareas a realizar, gestiona la memoria de todos los programas y procesos y muchos otros aspectos de funcionamiento de un ordenador. El ncleo no es un proceso separado del resto del sistema. Hay que imaginarlo como un conjunt o de rutinas (fragmentos de cdigo ejecutable), constantemente en memoria al que accede cada proceso. El ncleo de microLINUX se conoce como un ncleo monoltico. Los controladores de dispositivos forman parte del mismo. Aunque se pueden cargar controladores de dispositivo (mdulos) en memoria mediante la aplicacin de comandos. Para aumentar la cantidad de memoria RAM disponible, el KERNEL puede emplear paginacin de disco. Esto significa que cierta cantidad de memoria reside en disco (la llamada memor ia de intercambio o swap). Los ejecutables emplean bibliotecas compartidas de enlace dinmico, es decir, que los programas comparten el cdigo de una nica biblioteca localizada en un fichero del disco, permitiendo que los programas ocupen menos espacio, especialmente aquellos programas que emplean numerosas funciones de biblioteca. Esto supone, adems, que slo existe una copia de la biblioteca en memoria. Lo que reduce drsticamente la cantidad de memoria en uso. Datos del KERNEL ---------------Cuando el kernel se carga en memoria RAM una de sus tareas consiste en reconocer el hardware e iniciar los controladores de dispositivo que posee (definidos durante su compilacin) informando al usuario de ello. En el caso de los controladores de dispositiv o muestra dos datos: [nombre del dispositivo empleado por el kernel]: [descripcin] Por ejemplo: hdc: attached ide-cdrom driver Floppy driver(s): fd0 is 1.44 M Vemos que los controladores son identificados como fd0 ('f'lopy 'd'isk 0) y hdc ('h'ard 'd'isk C) respectivamente. Lectura de los datos del KERNEL ------------------------------Siempre que el usuario desee conocer esta informacin, puede manejar el comando 'dmesg'; Cada vez que sea llamado, presentar en pantalla toda la informacin generada durante el inicio del sistema. #dmesg Linux versin 2.4.25 (root@sobremesa1) (gcc versin 3.3.1 (SuSE linux))

61

# ... ... Puesto que la informacin es muy abundante, se recomienda presentarla por pginas: #dmesg | more (utilizar el tabulador para pasar de una pgina a otra)

O bien seleccionar aquellas lneas cuyo contenido nos puede interesar con el comando 'grep': #dmesg | grep cadena_a_encontrar Por ejemplo, si el usuario desea localizar la informacin del kernel relacionada con la uni dad de disquetes (fd0) escribira en la consola: #dmesg | grep fd0 Floppy driver(s): fd0 is 1.44 M # _ Otros datos de inters ---------------------Otra fuente de informacin es el comando 'uname' encargado de aportar datos referentes a la versin y tipo de sistema operativo as como de la familia del procesador. Con "uname -a" obtendremos todos los datos posibles. #uname -a Linux (none) 2.4.25 # 9 sb abr 24 11:38:08 CEST 2004 : 686 unknown # _ T A R E A S ----------1 Volcar por pantalla los datos del ncleo con 'dmesg'. 2 Filtrar la informacin anterior y extraer slo la asociada a las unidades de almacenamiento masivo (hda, hdb, hdc, hdd ...). 3 Obtener la versin del kernel. 4 Visualizar las libreras compartidas de microLINU X almacenadas en "/lib" y su tamao. <->

62

Actividad 17: Informacin del kernel II. Datos del sistema en tiempo de ejecucin. (/proc). El directorio "/proc" --------------------El directorio "/proc" aparenta ser un directorio ms. Cualquier usuario accede a l con el comando 'cd', vuelca el contenido con 'ls' o visualiza el interior del los ficheros con 'cat'. Sin embargo, ninguno de los ficheros de este directorio ocupa realmente espacio en disco. El ncleo captura todas las acciones hechas sobre "/p roc" y genera una respuesta al vuelo. En otras palabras, cuando es solicitado un listado de archivos con 'ls', el ncleo lo genera dinmicamente entregando el contenido deseado. Esto queda ms claro usando algunos ejemplos. A continuacin se muestra la lista de archivos y subdirectorios situados en "/proc". #ls /proc 1 2 3 30 31 32 363 4 # _

5 6 bus cmd cpuinfo devices dma drivers

execdomains filesystems fs ide interrupts iomem ioports irq

kcore kmesg ksyms loadarg locks meminfo misc modules

mounts net partitions pci self slabinfo stat swap

sys sysvipc tty uptime version

Los nmeros representan directorios de cada proceso en ejecucin del sistema. Por ejemplo la informacin sobre el proceso ID 363 es: #ls /proc/363 cmd environ cwd exe # _

fd maps

mem mounts

root stat

Estos archivos contienen diversos datos sobre el proceso. Por ejemplo, el fichero "cmdline" muestra la lnea de comandos con la que el proceso se lanz. El fichero "status" da informacin sobre el estado del proceso y "cwd" enlaza con el directorio de trabajo de ese proceso. Todos los datos relacionados con la memoria del sistema estn guardados en el fichero "/proc/meminfo". Llamando al comando 'free' se ver que la informacin es la misma, slo que los nmeros se han reordenado. Este comando lo nico que hace es leer en "/proc/meminfo" y colocar un poco la escritura en pantalla. La mayor parte de las herramientas con funciones de consulta asociada a los dispositivos conectados funcionan de esta manera. La informacin presente en "/proc" es til a la hora de aadir un nuevo dispositivo. Por ejemplo, generalmente los elementos conectados al computador necesitan una serie de direcciones de entrada salida (E/S) para poder comunicarse con el pr ocesador central o con el sistema. Si dos dispositivos se encuentran configurados para utilizar las mismas direcciones de E/S nunca podr conocerse en realidad quin llama o a quin se estn pasando los datos, un autntico desastre. Puede evitarse comproba ndo siempre cules son las direcciones en uso mirando en "/proc/ioports". El ncleo slo nos presenta las direcciones de dispositivos que ha detectado y reconocido. En un sistema correctamente configurado, se deben presentar todos los dispositivos. Es posible an conocer ms informacin de "/proc" necesaria para nuevas configuraciones. Por ejemplo, "/proc/interrupts" lista los nmeros de

63

interrupciones ocupadas (IRQ) y "/proc/dma" los canales de acceso directo a memoria (DMA) en uso. T A R E A S ----------1 Presentar el contenido del directorio "/proc". 2 Ejecutar una tarea en segundo plano, por ejemplo "#vi prueba &" y volver a listar el contenido de "/proc". 3 Buscar en el directorio del nuevo proceso en ejecucin (corresponde a 'vi') los ficheros "cmdline" y "status" y volcar por pantalla su contenido. 4 Mostrar tambin en pantalla los puertos de E/S, las interrupciones y canales de DMA en uso. 5 Obtener la versin del kernel tomada de "/proc/version". <->

64

Actividad 18: Utilidades I. Comandos de informacin. Dentro de esta actividad aparece una recopilacin de los comandos de uso ms frecuente que pueden encontrarse en cualquier entorno LINUX. Estn agrupados en los siguientes tipos: - Comandos de pantalla - Informacin de disco - Comandos estadsticos Comandos de pantalla -------------------MicroLINUX admite dos rdenes para refrescar los datos presentados en la consola: - 'clear' : Limpia la pantalla - 'reset' : Reinicia la pantalla A efectos prcticos ambos comandos tienen el mismo resultado, tras su ejecucin el indicativo del sistema se sita en la primera lnea de la pantalla. No requieren parmetros en su llamada. Comandos de informacin de disco -------------------------------Ofrecen informacin relacionada con ficheros, directorios, usuarios y procesos: -'df' : Indica el % de utilizacin de la unidad de almacenamiento. -'du' : Lista el tamao en KBytes de cada directorio. -'basename' : Extrae el nombre de fichero de un "path" completo indicado como parmetro. -'dirname' : Igual que el anterior pero en lugar del nombre muestra el directorio. -'env' : Muestra las variables de entorno del intrprete de comandos y su contenido. -'pidof' : Permite obtener el identificador de un proceso del sistema. -'uniq' : Presenta por pantalla el contenido de un fichero excepto las lneas duplicadas. -'which' : Cuando es llamado con el nombre de un comando externo devuelve su localizacin en el sistema. Busca en los directorios sealados por la variable PATH. -xargs : Permite ejecutar un comando sobre cada uno de los items entregados en la entrada estndar. Ejemplos en el uso de estos comandos: #df Filesystem rootfs /dev/ram0 /dev/fd0 # _

1k-blocks 1793 1793 1412

Used 1352 1352 1271

Available 441 441 69

Use% 75% 75% 95%

Mounted on / / /mnt/disquete

Donde aparecen datos de cada sistema de ficheros: la capacidad total, su porcentaje de uso y el punto de montaje. #du /usr/local 109 /usr/local/bin 10 /usr/local/lib/tcc/include 21 /usr/local/lib/tcc

65

324 4 438 # _

/usr/local/lib /usr/local/include /usr/local

La columna de la izquierda representa el tamao del directorio de su derecha. # basename /usr/local/lib/tcc/libtcc1.a libtcc1.a # _ # dirname /usr/local/lib/tcc/libtcc1.a /usr/local/lib/tcc # _ Manejados juntos 'basename' y 'dirname' ayudan a obtener respectivamente el nombre y directorio de un path (fichero y camino relativo o absoluto) entregado por el usuario. #env USER=root OLDPWD=/usr/local HOME=/ LOGNAME=root TERM=linux PATH=/usr/sbin:/bin:/usr/bin:/sbin SHELL=/bin/sh PWD=/home # _ Las variables listadas estn disponibles desde el indicativo del sistema y tambin en el interior de cualquier script. Por ejemplo, al pedir el camino reconocido por el intrprete aparece en pantalla: #echo $PATH /usr/sbin:/bin:/usr/bin:/sbin # _ Comando pidof: #yes > /dev/null & <-Lanza en 2 plano a yes. Sin mensajes de pantalla #ps ... 55 tty1 root 592 R yes <-- 'ps' presenta 'yes' corriendo en ... segundo plano con el PID 55. #pidof yes <-- solicito el PID del proceso yes. 55 # _ #kill 55 #ps ... [2] 55 Terminated yes > /dev/null ... #_ La secuencia de acciones refleja un ejemplo tpico en el uso del comando 'pidof', primero el usuario lanza una tarea en segundo plano, posteriormente solicita al sistema el identificador de proceso (#pidof nombre_de_proceso_en_ejecucin) y con ese dato lo termina. #uniq nombre_fichero_texto

66

... muestra lneas contenidas en "nom bre_fichero_texto" eliminando aquellas que estn duplicadas ... # _ #which nombre_comando_interno_o_aplicacin /camino/al/nombre/de/comando_interno_o_aplicacin # _ #find / -name libtcc.a | xargs dirname /usr/local/lib # _ En este caso el parmetro que necesita el comando 'dirname' es redireccionado por 'xargs' para que lo tome del lugar donde deposit 'find' el resultado de su bsqueda. Comandos estadsticos --------------------Bajo este epgrafe se agrupan los comandos de microLINUX enca rgados de presentan resultados estadsticos de diferente naturaleza: - 'free' - 'time' - 'uptime' - 'wc' : Informacin de la cantidad de la memoria RAM y Swap (intercambio) del sistema. : Indica el tiempo de ejecucin de un comando. : Informa del tiempo transc urrido desde el ltimo arranque. : Programa que cuenta el nmero de lneas, palabras y bytes del fichero pasado como parmetro.

Ejemplos en el uso de estos comandos: #free Mem: Swap: Total: # _ total 6320 0 6320 used 3772 0 3772 free 2548 0 2548 shared 0 buffers 64

# time vi fichero_prueba ... Edicin de fichero_prueba ... <Salida de vi> real 2M 15.56s user 0M 0.00s sys 0M 0.11s # _ Donde: - Real: representa el tiempo to tal de ejecucin. - user: indica el tiempo que el procesador atiende un proceso de usuario. - sys: el tiempo de ejecucin de una tarea propia del sistema. Por tanto el tiempo total es la suma de: T. modo usuario + T. modo sistema + T. Espera (tiempo de espera: tiempo durante el cual el procesador est ocioso o realiza otra tarea) # uptime 8:28pm

up 4 min, load average: 0.00,

0.00,

0,00

67

# _ Significado de esta informacin: - 8:28 pm : Hora actual. - up 4 min : Tiempo que microLINUX l leva activado desde el ltimo arranque. - load average : Media de carga del sistema para tres perodos de tiempo: - 1 minuto - 5 minutos - 15 minutos La media de carga es la media aritmtica de procesos preparados para correr en ese intervalo de tiempo (1 equivale a 100 % de carga). (nota: probar este comando con alguna tarea corriendo en 2 plano) # wc /etc/fstab 1 # _

30 /etc/fstab

El fichero "/etc/fstab" tiene 1 lnea, 6 palabras delimitadas por espacios y un tamao de 30 bytes. T A R E A S ----------1 Ejecutar los comandos vistos en la actividad y estudiar los resultado obtenidos. <->

68

Actividad 19: Utilidades II. Comandos de compresin y descompresin de ficheros. Introduccin -----------Para poder instalar y actualizar programas en un sistema Unix y derivados, hay que familiarizarse con las herramientas de compresin y agrupacin de archivos. Algunas, como 'tar' proceden de los primeros das. Mientras que otras, como 'gzip', son relati vamente modernas. El propsito de estas herramientas es empaquetar una serie de ficheros en un nico archivo y comprimir este. Al comprimir el archivo, el tamao del mismo se reduce, ganando espacio de disco. Lo normal es distribuir los programas en un s olo archivo de formato 'tar' y comprimido con 'gzip'. Para poder recuperar los datos originales debe conocerse las herramientas con que se hizo el empaquetado. Adems de la distribucin, estas utilidades sirven para crear copias de seguridad de datos. Compresor gzip y descompresor gunzip -----------------------------------Los programas 'gzip' y 'gunzip' son el compresor y descompresor desarrollados en el proyecto GNU. La funcin de 'gzip' consiste en tomar un fichero, comprimir sus datos, grabarlos en formato .gz y luego sustituir el fichero original con el comprimido. Esta sustitucin se lleva a cabo si el archivo .gz se crea sin problemas. As evita perder los datos si la compresin no tiene xito. Es posible modificar bastante el comportamiento del programa con las opciones de lnea de comandos. Suponer que hay un fichero llamado documento1.txt: #ls -l documento1.txt -rw-r--r-- 1 root # _

root

842 Oct 31 21:25 documento1.txt

Para comprimirlo con gzip escribir: #gzip documentos1.txt Esto sustituye el fichero documento1.txt con el archivo documento1.txt.gz: #ls -l documento1* -rw-r--r-- 1 root # _

root

37 Oct 31 21:27 documento1.txt.gz

Si se le pasa al compresor una lista de nombres, este los comprime creando un archivo para cada u no de ellos, cuyo nombre es el original ms .gz. Observar que cada fichero original se comprime dando lugar a un archivo comprimido. Otros programas de tipo 'zip', especialmente para MS -DOS y algunos Unix, comprimen varios ficheros en un solo archivo. Es posible "ver" el contenido de un fichero de texto comprimido con 'gzip' utilizando una versin adaptada del comando 'cat' orientada a ficheros .gz, esta utilidad se llama 'zcat'. Por ejemplo: #echo hola > hola.txt #cat hola.txt hola #ls -l hola.txt

69

-rw-r--r-#

root

root

5 Oct 31 23:08 hola.txt

Si ahora es comprimido el fichero hola.txt se obtendr hola.txt.gz: #gzip hola.txt Y para visualizar la informacin original se usar 'zcat': #zcat hola.txt.gz hola # _ El grado de compresin del fichero depende de su formato y contenido. Por ejemplo, muchos ficheros grficos ya estn comprimidos (como los GIF y JPEG), de manera que 'gzip' tiene muy poco efecto sobre ellos. Los ficheros con mayor tasa de compresin son los de texto plano y l os binarios ejecutables y de biblioteca. Para recuperar el fichero original a partir del comprimido usar 'gunzip' o tambin 'gzip -d'. #gunzip documento1.txt.gz #ls -l dococumento1* -rw-r--r-- 1 root root # _ Empaquetado de archivos ----------------------El programa 'tar' sirve para agrupar varios ficheros en unos solo, que ser denominado genricamente archivo (por archivar ficheros). El nombre significa archivo de cinta (Tape ARchive) ya que su uso original era hacer copias de respaldo de los ficheros sobre cintas magnticas. Hoy en da el empleo de 'tar' no est restringido a las unidades de cinta. El formato del comando es: #tar funcin_y_opciones_de_tar ficheros Donde: - funcin: Es una nica letr a que indica la operacin a realizar. En microLINUX son: - c: crear. - x: extraer. - t: listar. - opciones: Es una lista de letras que indican diversos modificadores de funcin. en microLINUX son: - f: Nombre del fichero .tar (por defecto utiliza la entrada estndar). - O: Extrae a la salida estndar. - exclude: Fichero a excluir. - X: Fichero con nombre de archivo a excluir. - C: Cambia al directorio indicado antes de operar. - v: Muestra la lista de ficheros procesados. Para empaquetar todos los ficheros que comienzan con "sc_" puede llamarse al comando 'tar' de la siguiente forma: #tar cvf todos_sc.tar sc_*

842 Oct 31 21:36 documento1.txt

70

sc_for1 sc_for2 sc_for3 sc_if1 ... # _ Una vez creado el archivo .tar ya es posible distribuirlo. Para ex traer los ficheros, el comando es: #tar xvf todos_sc.tar sc_for1 sc_for2 sc_for3 sc_if1 ... # _ Si el que desempaqueta el archivo es el superusuario (root) entonces el propietario de los ficheros ser el original. El comando 'tar' mantiene la r uta de cada fichero empaquetado relativa a la posicin del archivo.tar cuando se cre. La extraccin se hace relativa al directorio de trabajo actual. Antes de desempaquetar un archivo es recomendable echar un vistazo al contenido, para saber si se ha n incluido los directorios, o por el contrario hay que crearlos primero para evitar problemas en el desempaquetado. Visualizar el contenido del archivo .tar con: #tar tvf archivo.tar ... # _ En este momento no se ha realizado ninguna extraccin, solo muestra el contenido. En el proceso de extraccin, si el usuario no especifica ningn fichero son desempaquetados todos. Aunque es posible seleccionar el/los fichero/os a extraer individualmente. Para ello escribir el nombre completo incluida la ruta de acceso. Por ejemplo desempaquetar el fichero "sc_for2" almacenado en todos_sc.tar: #tar xvf todos_sc.tar sc_for2 sc_for2 # _ Uso conjunto de tar y gzip -------------------------Los archivos .tar no estn comprimidos, son una manera de agrupar diversos ficheros en uno solo, pero sin comprimirlos. Lo habitual es combinar 'tar' y 'gzip' para obtener, de varios ficheros, uno solo comprimido. Una manera de hacer eficiente el manejo de los comandos de empaquetado y compresin consiste en utilizar la capacidad de concatenacin del intrprete de comandos, de esta forma la compresin de un grupo de ficheros en un nico archivo sera: #tar cvf - ficheros | gzip - > nombre_de_archivo.tar.gz

71

fich1 fich2 ... fichn # _ nota: el guin indica a las aplicaciones que la salida de cada comando es la salida estndar. Y para extraer los ficheros hay que hacer lo propio: #gunzip -c nombre_de_archivo.tar.gz | tar xvf fich1 fich2 ... fichn # _ T A R E A S ----------1 Crea el siguiente subrb ol de directorios y ficheros desde tu directorio hogar (como usuario normal): ../Agenda/lunes/programa_L.txt /martes/programa_M.txt /mircoles/programa_X.txt /jueves/programa_J.txt /viernes/programa_V.txt /fin_de_semana/programa_S.txt /programa_D.txt Donde en cada fichero programa_?.txt debe aparecer el siguiente texto: Programacin da de la semana: El_da_que_corresponda hora 08:00 - 10:00 hora 10:00 - 15:00 hora 15:00 - 20:00 hora 20:00 - 23:00 Recordar:

2 Comprobar las utilidades de compresin (gzip), visualizacin (zcat) y descompresin (gunzip) con el fichero "../Agenda/lunes/programa_L.txt". Hacer una copia del fichero .gz llamada "copia_agenda.txt.gz". 3 Como usuario root descomprime el fichero "copia_agenda.txt.gz" y comprueba si se mantienen tanto el propietario como el grupo originales. 4 Empaquetar todo el subrbol en el fichero "agenda_semana.tar". 5 copiar el fichero anterior a un directorio difere nte. 6 Listar el contenido del fichero .tar. 7 Extraer el fichero "/Agenda/jueves/programa_J.txt". 8 Extraer todo el contenido del fichero .tar manejado en el apartado 6 y verificar si la estructura del subrbol sigue intacta. 9 Agrupar y comprimir todo el subrbol en un solo paso. 10 Realizar el proceso inverso al punto anterior tambin en un solo paso. <->

72

Actividad 20: Archivos especiales de dispositivos. Tipos y creacin. Archivos de dispositivos -----------------------los archivos de dispositivos son un mecanismo de comunicacin entre los elementos que forman parte del computador ("hardware perifrico) y el sistema operativo. No son ficheros en sentido estricto, pero aparecen como ficheros desde el punto de vista de los programas. Es posible leer de ellos, escribir en ellos, etctera. Cuando se accede a uno de estos ficheros, el ncleo reconoce la peticin de entrada salida y la pasa a un controlador (driver) que realiza alguna operacin, como leer datos del puerto serie o enviar da tos al dispositivo nulo. Los archivos de dispositivos suponen una va de comunicacin con los recursos del sistema, sin obligar a los programas a conocer cada detalle de funcionamiento de un aparato en concreto. En microLINUX los controladores se alojan en el mismo ncleo. Los ficheros de dispositivos aparecen en "/dev". Para cada dispositivo debe haber una entrada en "/dev". Por ejemplo, "/dev/ttyS0" corresponde al primer puerto serie, conocido como COM1 en MS -DOS. Pueden existir falsos dispositivos en "/dev" que no corresponden realmente a ningn elemento real. Por ejemplo "/del/null" acta como un sumidero de octetos. Cualquier solicitud de escritura sobre "/dev/null" tendr como consecuencia que los datos sean ignorados y no se genere ninguna seal de error. Al listar el contenido de "/dev" la pantalla presenta algo como esto: #ls -l /dev brw------- 1 root root 2, 0 Jun 2 11:00 fd0 ... crw-r----- 1 root root 4, 65 Jun 2 11:00 ttyS1 --------- ---------------- ------ -------------- ----^ ^ ^ ^ ^ ^ | | | | | | | | | | | + -- Nombre | | | | | | | | | + -- Fecha/hora de creacin | | | | | | | + -- N mayor y menor del dispositivo | | | | | +-- n de referencias al fichero y pertenencia a | | usuario y grupo | +-- Permisos del fichero | +-- tipo de dispositivo: b -> bloque (lee y escribe bloques de datos) y c -> carcter (lee y escribe bytes) Los permisos son importan tes en los dispositivos porque ayudan a limitar y controlar quin puede usar un cierto dispositivo y cmo. Por lo general hay ciertos dispositivos a los que es costumbre restringir el acceso. Especialmente en lo tocante a unidades de disco y particiones. Hay que asegurarse de establecer los permisos adecuados para los nuevos dispositivos creados.

73

Es posible tener enlaces simblicos a ficheros de "/dev" para facilitar el acceso a ciertos dispositivos empleando ms de un nombre. Al borrar un fichero e special no se retira el mdulo controlador del ncleo. As mismo, por aadir un archivo especial de dispositivo a "/dev" no se carga el mdulo controlador del ncleo. Nmero mayor y menor de un dispositivo -------------------------------------Estos nmeros identifican al dispositivo ante el Sistema Operativo cuando se realiza una peticin de entrada / salida. El nmero mayor suele representar a un controlador del ncleo mientras que el menor especifica uno de los posibles dispositivos que maneja el con trolador. Cuando se realiza una peticin de escritura o bien de lectura, el ncleo identifica el mdulo que debe atenderle mediante el nmero mayor y con el nmero menor se elige el dispositivo concreto al que va dirigida la peticin. Algunas veces el nmero menor se emplea para acceder a funciones concretas de un dispositivo. Aadir nuevos ficheros de dispositivos -------------------------------------Cuando en un sistema LINUX se actualiza el ncleo o se aaden nuevos controladores puede ser necesar io incluir un nuevo archivo especial de dispositivo mediante el comando 'mknod': # mknod -m permisos nombre tipo n_mayor n_menor Donde: -m permisos: Es un argumento opcional (por defecto rw) que establece los permisos del nuevo archivo. nombre: Es el nombre completo del fichero especial a crear, como "/dev/cdrom". tipo : Es 'c' para un dispositivo de caracteres o 'b' para uno por bloques. mayor: Es el nmero mayor del dispositivo. menor: Es el nmero menor de dispositivo. Para conocer los parmetros adecuados de los dispositivos a instalar, es conveniente saber los valores que admite el kernel. En la mayora de distribuciones de LINUX la informacin se guarda en "/usr/src/linux/Documentation/devices.txt". Este fichero slo existe si f ueron instalados los "fuentes" del kernel. Un ejemplo de dispositivos accesibles en microLINUX son los relacionados con las unidades de almacenamiento masivo: Nombre de dispositivo Tipo Mayor Menor ---------------------------------------------- ------ ------ ----- ----Unidades Enteras /dev/hda /dev/hdb /dev/hdc /dev/hdd (hda: (hdb: (hdc: (hdd: Hard Hard Hard Hard Disc Disc Disc Disc A) B) C) D) maestro esclavo maestro esclavo IDE0 IDE0 IDE1 IDE1 (o (o (o (o CD -ROM) CD -ROM) CD -ROM) CD -ROM) Bloque Bloque Bloque Bloque 3 3 22 22 0 64 0 64

74

Y cada una de sus particiones /dev/hda1 /dev/hda2 /dev/hda3 /dev/hda4 /dev/hdb1 /dev/hdb2 /dev/hdb3 /dev/hdb4 /dev/hdc1 /dev/hdc2 /dev/hdc3 /dev/hdc4 /dev/hdd1 /dev/hdd2 /dev/hdd3 /dev/hdd4 Particin1 Particin2 Particin3 Particin4 Particin1 Particin2 Particin3 Particin4 Particin1 Particin2 Particin3 Particin4 Particin1 Particin2 Particin3 Particin4 primaria primaria primaria primaria primaria primaria primaria primaria primaria primaria primaria primaria primaria pri maria primaria primaria de de de de de de de de de de de de de de de de la la la la la la la la la la la la la la la la unidad unidad unidad unidad unidad unidad unidad unidad unidad unida d unidad unidad unidad unidad unidad unidad hda hda hda hda hdb hdb hdb hdb hdc hdc hdc hdc hdd hdd hdd hdd Bloque Bloque Bloque Bloque Bloque Bloque Bloque Bloque Bloque Bloque Bloque Bloque Bloque Bloque Bloque Bloque 3 3 3 3 3 3 3 3 22 22 22 22 22 22 22 22 1 2 3 4 65 66 67 68 1 2 3 4 65 66 67 68

Si el usuario de microLINUX desea crea un fichero de dispositivo que "conecte" con el controlador del kernel, primero debe conocer cmo denomin al dispositivo cuando fue detectado durante el arranque. Por ejemplo con estas consultas: #dmesg #dmesg #dmesg #dmesg | | | | grep grep grep grep hda hdb hdc hdd

Si en la respuesta obtenida aparece algo como: hda: 6346368 sectors (3249 MB) w/256KiB Cache, CHS=787/128/63 hda: hda1 hda2 <----------------------------- Particiones reconocidas. Segn este mensaje el kernel reconoce 2 particiones primarias en el disco duro maestro de IDE0 (las lgicas son mostradas entre parntesis). Por lo tanto es posible crear los ficheros de dispositivos "/dev/hda1" y "/dev/hda2" para que microLINUX tenga capacidad de acceso a las particiones: #mknod /dev/hda1 b 3 1 #mknod /dev/hda2 b 3 2 Otra forma de obtener esta informacin es consultando el fichero "/proc/partitions" donde el kernel almacena una relacin de las particiones del sistema, su tamao y nmeros mayor y menor: #cat /proc/partitions major minor #blocks 3 3 3 # _ T A R E A S ----------1 Ver las caractersticas de los ficheros de dispositivos instalados en 0 1 2

name

3173184 hda 253984 hda1 2919168 hda2

75

microLINUX con "ls -l /dev". 2 Localizar segn los procedimientos explicad os en la actividad las particiones del disco duro que puede manejar el kernel. 3 Con los valores anteriores crear los ficheros de dispositivos asociados. <->

76

Actividad 21: Sistema de ficheros. Montaje, sincronizacin y desmontado. Introduccin -----------Los sistemas de ficheros son la base de todos los datos en un sistema LINUX. Todos los programas, libreras, archivos del sistema y los archivos de usuario, residen en los sistemas de ficheros. Es fundamental administrar correctamente estos archi vos porque todos los datos y programas se encuentran en ellos. Los sistemas de ficheros se pueden localizar en discos duros, flexibles, CD-ROM y otros medios de almacenamiento con acceso aleatorio. La forma y disposicin concreta en que el archivo se a lmacena en el medio no es importante por s misma. El sistema proporciona una interfaz comn para todos los tipos de sistemas reconocidos por el kernel. Cada sistema de ficheros tiene su propia forma de almacenar los datos, no obstante, LINUX nos los va a presentar en forma de rbol jerrquico de directorios. Junto con los ya conocidos mecanismos de permisos, propietarios, grupos, etctera. De hecho la informacin de tipo de propietarios o permisos slo la suministra los sistemas preparados para trabaja r con LINUX. En los dems, es el mismo LINUX quien finge esos datos. Por ejemplo, el sistema operativo MS DOS no tiene el concepto de propietario, por tanto, todos los archivos aparecen como propiedad de root. De esta manera todos los sistemas de ficheros presentan una apariencia similar y mantienen una serie de atributos comunes, independientemente de que en el sistema de ficheros fsico que hay por debajo de estos atributos no tengan ningn significado. Tipos de sistemas de ficheros vlidos para microLIN UX ----------------------------------------------------El kernel de microLINUX fue compilado para admitir los siguientes sistemas de ficheros: Sistema de ficheros Tipo Descripcin -------------------------------------------------------------------- --------Sistema de ficheros extendido n2 ext2 Sistema normal de LINUX Minix minix Sistema original del SO minix ROM romfs Pequeo sistema de slo lectura empleado en discos RAM. VFAT vfat Acceso a los archivos pertenecientes a W95/ 98 /proc proc Proporciona informacin para su procesado por el comando ps. Aspecto de un sistema de archivos --------------------------------Bajo LINUX, el espacio de archivos que resulta visible para los usuarios se basa en una estructura en rbol, con la raz en la parte superior. Los distintos directorios y archivos se ramifican hacia abajo desde la raz. El directorio superior "/" se conoce como directorio raz. El primer nivel de jerarqua en el rbol de directorios de microLINUX es el siguiente: / bin/ dev/ <-- Directorio raz. <-- Tiene programas ejecutables, conocidos como binarios. <-- Guarda los archivos de dispositivos.

77

etc/ home/ lib/ mnt/ proc/

Almacena los archivos de configuracin. Desde aqu cuelgan los directorios personales de l os usuarios. Contiene libreras compartidas para la ejecucin de programas. Lugar donde montar los sistemas de ficheros. Sistema de archivos virtual para leer informacin de los procesos en memoria. sbin/ <-- Encargado de los ejecutables del sistema. tmp/ <-- Almacena los archivos temporales. usr/ <-- contiene programas y datos de usuario.

<-<-<-<-<--

Montar desmontar y sincronizar un sistema de ficheros ----------------------------------------------------MONTAR Antes de acceder a un sistema de ficheros hay que montarlo en algn directorio. Esto hace que el contenido del sistema montado, aparezca por debajo del directorio en que se monta. Para montar un sistema hay que emplear, como root, el comando 'mount'. Los usuarios normales tienen permitido el manejo de 'mount' con ciertas limitaciones: solo pueden montar los dispositivos que estn listados en: /etc/fstab. La sintaxis del comando 'mount' es: #mount [-t tipo] dispositivo punto_de_montaje Donde: -t tipo: Tipo de sistema de ficheros (ver tabla anterior). dispositivo: Archivo especial que le corresponde (Ej. /dev/hda1). punto_de_montaje: Directorio bajo el cual debe aparecer. Por ejemplo, Si hay una particin "/dev/hda2" en formato segundo sistema extendido (ext2) y el usuario la quiere montar bajo el directorio "/mnt" utilizar: #mount -t ext2 /dev/hda2 /mnt En caso de no especificar el sistema de ficheros, el S.O. prueba los diferentes tipos aceptados por el ncleo (ver "/proc/filesystems"). Entrega ndo un mensaje de error si la orden no se complet satisfactoriamente. Pueden consultarse los dispositivos montados con 'mount' sin argumentos: #mount rootfs on / type rootfs(rw) /dev/ram0 on /type ext2 (rw) /dev/fd0 on /mnt/disquete type ext2 (rw) /proc on /proc # _ DESMONTAR Para desmontar emplear el comando 'umount' acompaado del punto de montaje a desinstalar o el dispositivo instalado: #umount /mnt <-- Desmonta el sistema de fichero que 'cuelga' de "/mnt" type proc (rw)

78

#umount /dev/fd0 PRECAUCIN !!!

<-- Desmonta el disquete

NUNCA RETIRE UN DISQUETE DE SU UNIDAD SIN HABERLO DESMONTADO ANTES Para poder desmontar una unidad es obligatorio que el indicativo del sistema est situado fuera de cualquier directorio que pertenezc a al mismo, en caso contrario el sistema entrega un mensaje de error. SINCRONIZACIN Las lecturas y escrituras sobre discos flexibles se hacen, en realidad, sobre una zona de memoria llamada memoria intermedia (buffer). De esta manera el acceso al disco se optimiza. As el Sistema Operativo realiza las operaciones de lectura y escritura de forma desincronizada con el trasvase de datos entre unidad y memoria. El comando 'sync' (sincronizar) obliga la escritura fsica en las unidades de almacenamiento. A l desmontar un disco, como es natural, se produce un vaciado de la memoria intermedia actualizando el sistema de ficheros. #sync <- sincroniza el disquete volcando el contenido del buffer a disco Montaje de sistemas de archivos durante el arranque --------------------------------------------------En la mayora de los casos, los sistemas de archivos que utiliza un sistema LINUX no cambian. Por esta razn, es fcil especificar una lista de archivos que LINUX monta al arrancar y que desmonta cuando se a paga. Esos archivos aparecen en un archivo especial de configuracin llamado "/etc/fstab", que significa 'tabla del sistema de archivos'. El archivo "/etc/fstab" enumera los sistemas de archivos que van a montarse, incluyendo un sistema de archivos por l nea. Los campos de cada lnea estn separados por espacios o tabuladores. Un ejemplo de archivo "/etc/fstab" podra ser: #cat /etc/fstab proc /proc /var/hdc2 /home/windows98 T A R E A S ----------1 Consultar los sistemas de ficheros manejados por el S.O. con el comando mount. 2 Visualizar el fichero "/etc/fstab". 3 Con ayuda de los ficheros creados en la actividad anterior busca, si la tienes, la particin FAT de Windows 95 o Windows 98 que existe en tu disco duro. nota: Es recomendable usar el directorio "/var" para guardar en l los archivos de dispositivos que cree el usuario con el fin de no perder estos ficheros al reiniciar. 4 Crear el directorio "/mnt/windows" y montar sobre l la particin de Windows del disco duro. 5 Verificar el correcto montaje con 'mount'.

proc vfat

default default

79

6 Acceder al directorio "/mnt/windows" y comprobar la capacidad de microLINUX para desplazarse por el rbol montado, as como editar y crear ficheros. 7 Modificar el ficher o "/etc/fstab" con el fin de permitir arrancar microLINUX con capacidad de acceso a la particin Windows en el directorio "/home/windows" de forma (crear primero el directorio) inmediata. <->

80

Actividad 22: Introduccin a la programacin estructurada. Lenguaje C. Introduccin -----------Un PROGRAMA es un conjunto de mandatos que puede someterse, como una unidad, a un ordenador y utilizarse para dirigir su comportamiento. Cada uno de los mandatos recibe el nombre de SENTENCIA o INSTRUCCIN. Todo programa est constituido por uno o varios algoritmos. Un ALGORITMO es sencillamente un conjunto de reglas para efectuar algn clculo. La construccin de un algoritmo debe ser lo ms independiente posible de los lenguajes de programacin. Para llegar a la solucin (algoritmo) que resuelve un problema, se debe pasar por varios niveles de abstraccin. El nivel mximo ha de ser totalmente independiente de los lenguajes de programacin; en cambio, el nivel menos abstracto ha de estar orientado al lenguaje de programacin que se utilice. Programacin estructurada ------------------------La programacin estructurada es una tcnica para disear programas basada en los siguientes principios: - Modularidad: Un programa puede construirse a partir de unidades lgicas, razonablemente pequeas, que se denominan mdulos (en lenguaje C, funciones). - Diseo Descendente: El diseo se hace de los general a lo particular, considerando que una determinada funcin est resuelta y dejando su construccin para un paso post erior. - Teora de la estructura: Cualquier programa puede ser diseado empleando slo tres tipos de estructuras de control. - Secuencial.- conjunto de acciones ejecutadas una a continuacin de otra una sola vez. - Condicional.- Permite ejecutar un grup o de acciones u otro, dependiendo de que se cumpla o no una condicin. - Repetitiva.- Ejecuta una o varias acciones un nmero controlado de veces. Los programas as diseados sern fciles de verificar, depurar y mantener. Ciclo de vida de un programa o aplicacin ----------------------------------------Disear un programa no se reduce slo a escribir un determinado algoritmo en algn lenguaje de programacin; esto slo se corresponde dentro del ciclo de vida de un programa con la fase de codificac in. La vida de un programa abarca desde el momento que se establece la definicin del problema hasta que dicha aplicacin es desechada. Las etapas en la vida de un programa son: Definicin y enunciado. Diseo y anlisis. Codificacin. Comprobacin y depuracin.

81

- Documentacin y mantenimiento. A continuacin se describe cada una de ellas. DEFINICIN Y ENUNCIADO En esta fase debe definirse con claridad todo lo que atae al problema que se quiere resolver. Esta definicin incluir una lista completa de todos los requisitos que se deben cumplir y se especificar la solucin esperada tanto para los datos de entrada correctos como para los incorrectos. El programa ha de responder en todos los casos sin que se origine una finalizacin anormal del mismo. DISEO O ANLISIS Puede dividirse en alto y bajo nivel. El primero consiste en realizar el planteamiento de la solucin. Un problema no se suele componer de una sola tarea, sino de varias relacionadas. Por ello, una solucin debe especifi car las tareas que a llevar a cabo, las responsabilidades de cada una y la forma de relacionarse e intercalarse las distintas tareas. El diseo a bajo nivel consistir en la seleccin de los algoritmos ms apropiados y su representacin en algn pseudoc digo (lenguaje prximo al materno), as como en la seleccin de las estructuras de datos ms adecuadas. CODIFICACIN Hay que elegir el lenguaje de programacin ms adecuado al tipo de problema o a los algoritmos y estructuras de datos seleccionados en l a etapa de diseo. Independientemente del lenguaje escogido es conveniente utilizar un estilo de programacin que sea fcilmente legible y pueda ser seguido por cualquier persona. El estilo ms extendido se basa en la utilizacin de los sangrados de lneas (endentacin). La codificacin de los algoritmos debe presentar el mayor grado de eficiencia en cuanto a: Ejecucin, cdigo, memoria y Entrada/Salida. COMPROBACIN Y DEPURACIN No basta con escribir y ejecutar un programa correctamente segn las especificaciones realizadas por los usuarios. Es necesario comprobar que los resultados son los adecuados en todos los casos, incluso en aquellos que no hayan sido comprobados explcitamente. Un modo de garantizar el buen funcionamiento del programa es la valida cin con respecto a sus especificaciones. La depuracin de un programa consiste en detectar los casos ms desfavorables que puede encontrar la aplicacin, por ejemplo situaciones que abortaran la ejecucin o bloquearan el ordenador (pulsacin de un tec la indebida). La depuracin tambin contempla la eliminacin del cdigo fuente redundante. DOCUMENTACIN Y MANTENIMIENTO La documentacin de un programa es un proceso continuo a lo largo de todo el ciclo de vida. Cada etapa produce una documentacin esp ecfica. Despus de haber comprobado que el programa funciona correctamente, habr que recopilar toda esta informacin producida a lo largo del proceso, completarla y organizarla para elaborar una documentacin del programa que sea til para sus usuarios y para los programadores encargados de su mantenimiento. Los programadores deben documentar el cdigo producido por ellos. Esta ltima documentacin consiste en colocar los comentarios que sean precisos entre las lneas de cdigo.

82

Los programas no son e ntes estticos, sino que deben ser revisados y actualizados constantemente porque se descubren nuevos errores, se modifica alguna especificacin, se cambia de ordenador, etc. La fase en la cual se efectan estas modificaciones posteriores se denomina mante nimiento. Una buena documentacin facilita el mantenimiento de los programas de forma clara, sistemtica y legible, la etapa de mantenimiento puede ser muy difcil, incluso imposible. Si se descubren errores en las fases anteriores, se tendr que empezar de nuevo desde la etapa correspondiente. La fase de mantenimiento implicar, en muchos casos, repetir varias de las etapas anteriores, segn se trate de cambios en la especificacin, sustitucin de un algoritmo por otro considerado mejor, etc. Lenguajes de programacin ------------------------A la hora de describir al ordenador como resolver un problema, es necesario formalizarlo adecuadamente para que pueda entenderlo. Esta formalizacin se realiza a travs de un lenguaje de programacin. Se entiende por LENGUAJE DE PROGRAMACIN la notacin para la descripcin precisa de algoritmos o programas informticos. Los lenguajes de programacin definen de forma estricta la sintaxis y la semntica. Existen cinco generaciones de lenguajes de programacin: PRIMERA GENERACIN Est formada por los siguientes lenguajes: binario, mquina, ensamblador y macroensamblador. El alfabeto del lenguaje binario es el 0 y el 1, es decir, cada instruccin se corresponde con una determinada configuracin de ceros y unos. A partir del lenguaje mquina, las instrucciones (mandatos) se representan mediante identificadores que estn compuestos de caracteres alfanumricos; estos lenguajes necesitan de un traductor para transformar los programas al lenguaje binario. A estos leng uajes tambin se les llama lenguajes de bajo nivel. SEGUNDA GENERACIN La componen los siguientes lenguajes: FORTRAN, COBOL, ALGOL y BASIC. Tambin llamados lenguajes de alto nivel y de programacin clsica. Los lenguajes de esta generacin se pueden di vidir en dos amplias categoras: cientficos y de gestin. TERCERA GENERACIN Estos lenguajes (tambin denominados lenguajes de programacin moderna o estructurada) estn caracterizados por sus potentes posibilidades procedimentales y de estructuracin de datos. Se pueden dividir en dos grupos: lenguajes de alto orden de propsito general y lenguajes especializados. El primer grupo est constituido por los lenguajes PL/1, PASCAL, MODULA 2, C y ADA. Todos ellos descendientes del ALGOL. Estos lenguajes se utilizan en la construccin de gran espectro de aplicaciones (ciencia e ingeniera, comerciales, programacin de sistemas y otros). Los lenguajes especializados estn caracterizados por su usual formulacin sintctica, que ha sido especialmente disea da para una aplicacin particular. Se suelen utilizar en el mundo de la ingeniera de software. Ejemplos de ellos pueden ser LISP, PROLOG, APL, FORTH, etc.

83

CUARTA GENERACIN El nivel de abstraccin va creciendo desde la primera a la tercera generacin. Los lenguajes de cuarta generacin incrementan, an ms el nivel de abstraccin. El control y las estructuras de datos poseen una sintaxis distinta a la de anteriores generaciones con el fin de elevar el nivel de abstraccin. Se pueden clasificar en dos grandes categoras: lenguajes de peticin y generacin de programas. Los primeros se han desarrollado para ser utilizados conjuntamente con aplicaciones de bases de datos. Los segundos, permiten al usuario crear programas en un lenguaje de tercera generaci n usando notablemente menos sentencias.

QUINTA GENERACIN Varios procesadores modernos no soportan el ensamblador. Es decir son programados directamente en un lenguajes especializado de alto nivel como LISP cdigo-P. Los lenguajes de quinta generacin soportan el diseo orientado al objeto, el procesamiento paralelo y vectorial. Suelen ser de propsito particular. Son empleados en aplicaciones de investigacin y de construccin de prototipos. Con la aparicin del los sistemas operativos OS/2 y la serie Windows se han desarrollado programas que permiten la programacin visual. Traductores y compiladores -------------------------Un programa codificado en lenguaje de alto nivel se pasa al lenguaje de la mquina a travs del traductor correspondiente a ese lenguaje. Por lo tanto, un traductor es un programa que toma, como entrada, un programa escrito en un lenguaje (lenguaje fuente) y produce, como salida, un programa escrito en otro lenguaje (lenguaje objeto). Si el lenguaje fuente es de alto nivel ( como FORTRAN, BASIC o Pascal) y el lenguaje objeto es un lenguaje de bajo nivel (como ensamblador o lenguaje mquina), el traductor correspondiente se llama compilador. El compilador toma como entrada las instrucciones del lenguaje fuente y genera como sal ida instrucciones del lenguaje objeto; ste puede ser binario o mquina. El intrprete, a medida que traduce cada instruccin, la ejecuta sobre los datos que le corresponden (cero o ms de un dato). Cuando ha terminado de ejecutar esa instruccin de alto nivel, repite el mismo proceso con la siguiente instruccin. De esa manera va avanzando hasta que se haya ejecutado todo el programa de alto nivel segn los datos de partida. El intrprete es, en general, ms pequeo que un compilador; pero el tiempo que tarda en traducir y ejecutar un programa fuente es ms grande que el empleado por el compilador. Cuando se interpreta un bucle de instrucciones, stas se traducen y ejecutan tantas veces como se repite el bucle. Si el lenguaje fuente es ensamblador y el lenguaje objeto es cdigo de mquina, entonces el traductor se llama ensamblador. Si, por ejemplo, un compilador puede ejecutarse en un procesador (INTEL 80486) y producir cdigo para otro procesador (MOTOROLA 68040), entonces se trata de un compilador cruzado. El lenguaje de programacin C ----------------------------C es un lenguaje de programacin de propsito general que ofrece como ventajas economa de expresin, control de flujo y un rico conjunto de operadores. Ha sido estrechamente asociado con el Sistema Operativo UNIX

84

puesto que tanto el propio S.O. como los programas que corren en l estn escritos en C. Sin embargo, este lenguaje no est ligado a ningn S.O. ni a ninguna mquina. C a demostrado ser un lenguaje agradable, expresivo y ver stil para una amplia variedad de programas. Es fcil de aprender y se obtienen mejores resultado a medida que aumenta la experiencia con l. Obtencin de un programa en lenguaje C -------------------------------------Para la creacin de un programa i nformtico que pueda ejecutarse en el ordenador (binario), deben suceder varias etapas: - Generacin del programa en cdigo fuente (.c). - Compilacin, obtencin del mdulo objeto (.o). - Linkado. Una vez concluido este proceso, el fichero generado p uede ser ejecutado por el PC de forma autnoma generalmente. GENERACIN DEL PROGRAMA EN CDIGO FUENTE El apartado A consiste en el diseo de un fichero de texto (obtenido a partir de un editor "ASCII", es decir, que no incorpore caracteres de control, por ejemplo el editor 'vi') que contendr un nmero determinado de sentencias (instrucciones propias del lenguaje C): estructuras de control, rdenes de entrada y salida, etc. En un formato legible por el programador y que deben cumplir las reglas marcadas por el compilador (sintaxis, etc.). Una vez finalizado el fichero con extensin .c (regla no obligatoria pero si establecida convencionalmente por los programadores para sealar un fichero fuente escrito en lenguaje C) hay que proceder a su compilacin. COMPILACIN Esto es, convertir el fichero para que sea comprensible al ordenador (mdulo objeto). Generalmente el compilador realiza dos "pasadas" sobre el fichero de texto. En la primera buscar aquellas instrucciones dirigidas al propio compilador y que no pertenecen al lenguaje de programacin en s. La misin de estas pseudoinstrucciones (denominadas directivas o instrucciones del preprocesador) es la de realizar un tratamiento determinado sobre el contenido del fichero, por ejemplo la directiva: # include <------.h> Manda al preprocesador que la informacin del archivo que la acompaa (.h inicial de "header" representa un fichero cabecera que guarda informacin sobre las funciones contenidas en la biblioteca de C) sea incluida en el propio fichero fuente. LINKADO Durante la fase de reubicado o linkado el enlazador ("linker") recorre el mdulo objeto y encuentra que falta las funciones de la biblioteca que se han declarado al compilador con la directiva correspondiente, y las aade, ya compiladas, adecuadamente en el lugar donde han sido llamadas. El enlazador es una herramienta que combina el programa de usuario con las funciones requeridas de la biblioteca. Dichas funciones son de formato reubicable. Esto significa que las funciones no defi nen las direcciones

85

absolutas de la memoria para las diversas instrucciones en cdigo mquina, sino que mantienen la informacin de los desplazamientos relativos. Cuando se enlaza el programa con las funciones de la biblioteca estndar, el compilador usa los desplazamientos de la memoria para crear las direcciones reales usadas. <->

86

Actividad 23: Aplicaciones de usuario: Compiladores. Tcc (Tiny C Compiler). Introduccin -----------TinyCC (tambin TCC) es un pequeo pero muy rpido compilador de C. T cc no solo soporta ANSI c, sino tambin el nuevo estndar ISO C99 y las extensiones GNUC incluyendo el ensamblador en lnea. TCC puede ser usado para hacer scripts en C. Aunque TCC permite trabajar con las libreras estndar (stdio.h, stdlib.h, etctera) la versin disponible en microLINUX requiere el uso de un nico fichero de cabecera: <tcclib.h> que rene las funciones estndar ms comunes. En la distribucin estn incluidos un extenso grupo de programas escritos en C para demostrar la versatilidad de este compilador, adems se acompaan, en forma de comentario de texto, los ficheros de cabecera .h necesarios para compilar estos fuentes en otros compiladores que admitan ANSI C. Invocacin desde la lnea de comandos --------------------------------- ---Para la llamada al compilador usar: # tcc [opciones] [fich_c_1 fich_c_2 ...] [ -run fich_c argumentos ...]

Donde las opciones ms generales son: -v : Muestra la versin actual de TCC. -c : Genera un fichero objeto (tambin debe indicarse la o pcin -o). -o nombre_fichero: Convierte el fichero objeto .o en ejecutable (binario) llamado "nombre_fichero". -r : Genera un fichero objeto combinando todos los ficheros de entrada. Ejemplos en el uso de Tcc: #tcc -c fich1.c <-- Compila fich1.c y ge nera el fichero objeto fich1.o

#tcc -o binario fich1.c <-- Compila fich1.c y genera el fichero ejecutable 'binario' #tcc -run fich.c #tcc -run fich.c arg1 <-- Compila fich.c y lo ejecuta directamente <-- Compila fich.c y lo ejecuta directa mente arg1 entrega el primer argumento a la funcin principal main() de fich.c

#tcc -o binario fic1.c fic2.c <-- Compila fic1.c y fic2.c, los enlaza y genera el ejecutable 'binario' #tcc -o binario fic1.o fic2.o <-- Enlaza juntos fic1.o y fic2.o y genera el ejecutable 'binario' #tcc -r -o fi.o fi1.c fi2.c <-- Compila fi1.c y fi2.c, los enlaza juntos y genera el fichero objeto fi.o

Recordar que para ejecutar cualquier binario deben cumplirse dos condiciones:

87

A) Poseer permisos de ejecucin (si fuera necesario usar "chmod +x binario"). B) Llamar al fichero con la expresin "./nombre_del_ejecutable". Scripts en C -----------TCC puede ser invocado desde un script, de igual forma que un script de shell. Solo es necesario a adir la cadena "#! /usr/local/bin/tcc -run" para iniciar la ejecucin del cdigo C: Ver el siguiente ejemplo: #! /usr/local/bin/tcc -run #include <tcclib.h> int main() { printf("Hola desde microLINUX \n") ; return 0 ; } Tal y como se indica en el apartado anterior es necesario dar permisos de ejecucin (chmod +x) y ser llamado usando el prefijo "./". T A R E A S ----------1 Editar y ejecutar el scritp C mostrado al final de la actividad. Nota: el fichero no "funcionar" si tiene extensi n .sh. 2 Dirigirse al directorio "/usr/src" y desde all buscar algn fichero fuente para compilar y ejecutarlo posteriormente. 3 Leer la informacin del compilador TCC ejecutando "#ayuda.sh tcc". <->

88

You might also like