Tema 3 (prácticas) - Departamento de Ingeniería y Tecnología de

Transcripción

Tema 3 (prácticas) - Departamento de Ingeniería y Tecnología de
Universidad de Murcia
Facultad de Informática
T ÍTULO DE G RADO EN
I NGENIERÍA I NFORMÁTICA
Fundamentos de Computadores
Tema 3: Introducción a los Sistemas Operativos
Boletines de prácticas y ejercicios
C URSO  / 
Departamento de Ingeniería y Tecnología de Computadores
Área de Arquitectura y Tecnología de Computadores
Tema 3: Introducción a los Sistemas Operativos
Fundamentos de Computadores
Índice general
I. Boletines de prácticas
B3.1. Boletín 1 . . . . . . . . . . . . . . . . . . . .
B3.1.1. Objetivos . . . . . . . . . . . . . . .
B3.1.2. Plan de trabajo . . . . . . . . . . . .
B3.1.3. Ejercicios a realizar durante la sesión
B3.2. Boletín 2 . . . . . . . . . . . . . . . . . . . .
B3.2.1. Objetivos . . . . . . . . . . . . . . .
B3.2.2. Plan de trabajo . . . . . . . . . . . .
B3.2.3. Ejercicios a realizar durante la sesión
II. Ejercicios
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2
2
2
2
2
5
5
5
5
8
1
Tema 3: Introducción a los Sistemas Operativos
Fundamentos de Computadores
Boletines de prácticas
B3.1. Boletín 1
B3.1.1.
Objetivos
El objetivo de este primer boletín de prácticas del tema 3 es familiarizar a los alumnos con el uso
básico del SO Linux, haciendo especial hincapié en el manejo de éste desde el intérprete de comandos
bash. También se introducirán una serie de comandos básicos para dar los primeros pasos en este SO.
Más concretamente, se tratarán los siguientes temas:
Acceso al sistema.
Interfaz gráfico (KDE/GNOME). Lanzamiento de programas. Utilidades varias (editores, navegadores, etc.).
Intérprete de comandos bash. Formato general de una orden, uso del tabulador, historial de comandos.
Documentación y búsqueda de información. Páginas del manual.
Movimiento por la jerarquía de directorios. Listados. Creación y borrado de directorios.
Metainformación sobre ficheros: dueño, permisos, fechas, tamaño, etc.
B3.1.2.
Plan de trabajo
El plan de trabajo de esta sesión será el siguiente:
1. Lectura del boletín por parte del alumno.
2. Seguimiento de ejemplos presentados por el profesor.
3. Realización, en grupos de dos personas, de los ejercicios propuestos en el boletín (con supervisión
del profesor, y completándolos en su caso como trabajo autónomo).
B3.1.3.
Ejercicios a realizar durante la sesión
1. Terminales de texto. Antes de acceder al modo gráfico, probaremos primero el interfaz puramente
textual del sistema. Para ello, cambiar a un terminal de texto con Ctrl-Alt-Fn (con n=1-6 tenemos acceso a distintos terminales). Introducir nuestro login y password (alumno/alumno, en los
laboratorios de prácticas). Probar distintos comandos desde el terminal: date, pwd, w, ls -l /,
. . . . Para terminar, acabar la sesión con exit, y volver al terminal gráfico con Ctrl-Alt-F7.
2. Interfaz gráfico. Entrar en la sesión gráfica usando de nuevo nuestro login y password. Dependiendo de la instalación, habitualmente se entrará en uno de los dos entornos gráficos más conocidos,
KDE o GNOME (éste último es el configurado por defecto en los laboratorios de prácticas, pero
todo lo que veremos vale igualmente para KDE). Una vez allí, lanzar un terminal buscando el programa “Terminal” en el menú adecuado. Incluso podemos generar un acceso directo a la aplicación
en el escritorio, arrastrando desde el menú el icono correspondiente. Una vez lanzado, desde esta
ventana de terminal gráfico iremos ejecutando el resto de comandos de la práctica.
2
Tema 3: Introducción a los Sistemas Operativos
Fundamentos de Computadores
3. Lanzamiento de programas. Existen varias formas de lanzar comandos en Linux: a través del
menú o icono correspondiente (al estilo clásico de Windows), llamando al comando correspondiente
desde el terminal, o usando el menú de lanzamiento rápido (Alt-F2). Como ejercicio, lanzar la
calculadora de KDE (comando kcalc) y/o GNOME (gnome-calculator) usando estos tres
métodos. Observar que las aplicaciones gráficas de KDE pueden ejecutarse perfectamente desde
GNOME, y viceversa, puesto que en realidad ambos sistemas gráficos corren sobre una base común,
llamada X-Windows. También podemos lanzar el famoso programa firefox para navegar por la
web, o el visor de ficheros PDF acroread, por ejemplo.
4. Movimiento básico por el sistema. Ya desde el terminal, nos moveremos al subdirectorio bin bajo
el directorio /usr que está en la raíz, usando el comando cd con una ruta absoluta. Ejecutar allí el
comando ls -l para ver todos los ficheros ejecutables (comandos) allí almacenados. Comparar los
contenidos de dicha carpeta con los contenidos mostrados por un navegador de archivos tradicional
(en una ventana gráfica), konqueror (KDE) o nautilus (GNOME).
Volver al directorio de inicio de sesión (directorio home) usando el comando cd sin parámetros.
Comprobar en todo momento nuestra situación en la jerarquía de directorios usando pwd. Movernos
con un sólo comando cd [ruta] al directorio /etc/X11, pero usando esta vez una ruta relativa
(que NO comience con una /). Experimentar con la compleción de rutas con el tabulador (tecleando,
por ejemplo, cd /us[tab]/bi[tab]/X[tab], etc.)
5. Consulta y modificación de ficheros. Permisos. Una vez allí, mostrar en pantalla el contenido
del fichero xorg.conf usando el comando cat xorg.conf. Volver a nuestro directorio home
(/home/alumno) y, desde allí, llamar al editor kate (KDE) o gedit (GNOME) para ver el
fichero xorg.conf. Para ello, al llamar al editor pasarle como parámetro la ruta absoluta hasta el
fichero (usar el tabulador para ir completándola sin necesidad de teclearla completamente). Dicho
fichero es propiedad del superusuario, y como usuarios normales no tenemos permiso de escritura
sobre él, así que no se podrán modificar sus contenidos desde el editor; sólo podremos consultarlos
en lectura.
Comprobar con ls -l el dueño y los permisos de dicho fichero. Compararlos con los del fichero
/bin/ls, y con los de un tercer fichero (vacío) que generaremos en nuestro directorio home con
el comando touch. Finalmente, consultar los códigos ASCII en hexadecimal de los caracteres
contenidos en el fichero xorg.conf con el comando hexdump -C.
6. Selección y copia de texto. Mediante el ratón, seleccionar con el botón izquierdo la salida de los
tres comandos anteriores (ls -l sobre los tres ficheros mencionados), y pegarla en la ventana de
un editor de texto (gedit o kate) inicialmente vacío usando el botón central. Guardar el fichero
generado en un fichero llamado salida.txt en el directorio home.
7. Metadatos de un fichero. Comprobar, usando de nuevo el comando ls -l, el tamaño lógico del
fichero salida.txt, y compararlo con el que realmente ocupa en disco con el comando du -h.
Observar también los distintos metadatos de los tres ficheros (fecha, dueño, grupo, permisos, etc.).
8. Historial de comandos. Ahora que hemos tecleado unos cuantos comandos, juguemos un poco
con la historia de comandos. Ejecutar el comando history. Comprobar los comandos tecleados.
Repetir el comando que listaba el fichero xorg.conf de tres formas distintas: a) utilizando las
flechas del cursor para volver sobre los comandos anteriores b) con Ctrl-R y tecleando parte del
comando (p.e., el nombre del fichero, xorg.conf), y c) usando !num, donde num es el número
de orden del comando en el historial. Salir de la sesión con el comando exit, y volver a entrar
abriendo otra ventana de terminal. Listar todos los ficheros (incluyendo los ocultos) con el comando
ls -a. Comprobar la existencia de un fichero oculto llamado .bash_history. Consultar su
3
Tema 3: Introducción a los Sistemas Operativos
Fundamentos de Computadores
contenido con cat, y observar cómo bash guarda ahí el historial de comandos para recordarlo en
sesiones posteriores.
9. Ayuda y documentación. Trabajaremos ahora con el sistema de ayuda. El comando man se puede
usar para consultar la página del manual de un determinado comando. Por ejemplo, usar man ls
para ver todas las posibles opciones del comando ls. Nos podemos mover por la página con las
flechas y el avance o retroceso de página. Podemos incluso buscar palabras concretas dentro de
páginas del manual muy largas, pulsando /palabra (intro). Pulsando de nuevo / (intro)
se busca la siguiente aparición.
10. Permisos sobre directorios. Renombrar un fichero cualquiera de la jerarquía para que tenga el mismo nombre, pero todo con mayúsculas, usando el comando mv. Moviéndonos entonces al directorio
padre, cambiar los permisos del directorio en el que se encuentra el fichero para que no tenga permiso x (permisos octales 600), e intentar hacer de nuevo un cd al directorio. Volver a cambiar los
permisos del directorio ahora a 500 (r y x, pero no w). Comprobar si se pueden al menos listar los
contenidos del directorio, e intentar volver a renombrar el fichero a minúsculas con mv. Finalmente,
eliminar todos los permisos (octal 000) e intentar listar los contenidos del directorio.
4
Tema 3: Introducción a los Sistemas Operativos
Fundamentos de Computadores
B3.2. Boletín 2
B3.2.1.
Objetivos
En este segundo boletín continuaremos profundizando en el uso de la línea de comandos de Linux con
unos cuantos comandos y funcionalidades adicionales de utilidad. Más concretamente:
Comandos adicionales de manejo del sistema de ficheros (búsqueda, compresión/descompresión,
acceso a contenidos).
Comodines.
Control y monitorización de procesos.
Redireccionamiento de la E/S. Comunicación entre procesos mediante tuberías.
B3.2.2.
Plan de trabajo
El plan de trabajo de esta sesión será el siguiente:
1. Lectura del boletín por parte del alumno.
2. Seguimiento de ejemplos presentados por el profesor.
3. Realización, en grupos de dos personas, de los ejercicios propuestos en el boletín (con supervisión
del profesor, y completándolos en su caso como trabajo autónomo).
B3.2.3.
Ejercicios a realizar durante la sesión
1. Búsquedas en el sistema de ficheros. Comodines. Crear un subdirectorio prueba que cuelgue del
directorio de inicio del usuario, y dentro de él, crear un árbol de directorios con un mínimo de dos
niveles de profundidad, y de dos subdirectorios hijos por cada directorio, con nombres cualesquiera.
Crear también un mínimo de seis ficheros (aunque estén vacíos) en cada uno de los directorios generados, incluyendo los subdirectorios intermedios, dos de ellos con un nombre cualquiera y extensión
.cpp, otros dos con los mismos nombres pero usando la extensión .h, y otros dos con la extensión
.txt1 . Al menos un fichero de cada subdirectorio debe llamarse con un nombre que empiece por
’a’. Usar para todo ello los comandos mkdir y touch. Volver finalmente al directorio de inicio y,
desde allí, usar el comando find para mostrar toda la jerarquía construida. Usando convenientemente los comodines y las opciones -name, -type f y -type d, mostrar sólamente: a) todos
los directorios, b) todos los ficheros, c) todos los ficheros con extensión .h, d) todos los ficheros
con extensión de exactamente tres caracteres, e) todos los ficheros cuyo nombre empiece por ’a’, f)
todos los ficheros cuyo nombre no empiece por ’a’, g) todos los ficheros cuyo nombre empiece por
una letra entre la ’a’ y la ’g’.
2. Copias de seguridad. Compresión y descompresión. Generar una copia de todo el árbol de directorios prueba llamada copiaprueba, usando la orden cp -Rp. Consulta en el manual de cp
qué significan exactamente estas dos opciones. Copiar también dentro de alguno de los subdirectorios algunos comandos del directorio /usr/bin (para que ocupen algún espacio). Genera ahora,
usando la orden tar con las opciones czvf, un fichero comprimido llamado prueba.tgz, que
contenga todo el directorio prueba. Comprobar el tamaño del directorio en disco (con du -hs,
y compararlo con el tamaño del fichero comprimido generado (con ls -l). Listar los contenidos
1
Puede haber ficheros con nombres completamente iguales si están en distintos subdirectorios.
5
Tema 3: Introducción a los Sistemas Operativos
Fundamentos de Computadores
del mismo con tar tzvf, y una vez comprobada la corrección del mismo, intentar borrar íntegramente el directorio con rmdir. Al no estar vacío, no se puede borrar, así que tendremos que borrarlo
usando las opciones -rf del comando rm (consultar en el manual su significado). Finalmente, y
una vez comprobado con ls que el directorio ha sido convenientemente borrado, restaurarlo con
tar xzvf2 .
3. Guiones de shell. El comando which es un comando realmente útil, que nos sirve para localizar el
sitio en el que se almacena el fichero ejecutable de un determinado comando. Probar, por ejemplo,
which firefox, which ls, o which con cualquiera de los programas que hemos utilizado
hasta ahora (incluido, por ejemplo, which which). Se trata en realidad de un comando que está
escrito en bash (es decir, es un guión de shell, más que un ejecutable en sí mismo). Comprobarlo usando el comando file, y mostrar sus contenidos usando el comando less (para poder
visualizarlo cómodamente, usando las flechas y el avance y retroceso de página). Salir de less
pulsando la letra q.
4. Más sobre permisos en ficheros. Concepto de PATH. Generar una copia (usando el comando cp)
del fichero /bin/which en nuestro directorio de inicio, con el nombre mywhich. Comprobar que
el comando sigue funcionando tecleando ./mywhich ls, por ejemplo3 . A continuación, usar el
comando chmod sobre éste último fichero para eliminar su permiso de ejecución, y volver a intentar
la ejecución del comando. Mostrar los contenidos del fichero con la orden cat. Editarlo y añadir
una segunda línea con el contenido “# Esto es un comentario.”. Cambiar entonces los permisos del
fichero para que nadie tenga acceso a él en escritura, y volver a intentar editarlo para modificarlo.
Finalmente, eliminar también nuestro permiso de lectura y volver a intentar mostrarlo en pantalla
con cat.
5. Control de procesos en primer y segundo plano. Lanzar los programas kcalc (calculadora) y
kate (editor) desde el terminal, con la única línea de comandos kcalc ; kate ;. Observar
cómo, al lanzarse en primer plano, hasta que no termine el primer proceso (cuando cerramos la
calculadora) no se lanza el siguiente. Cerrar ambos programas consecutivamente, y volver a lanzarlos, pero esta vez en segundo plano, tecleando kcalc & kate &. Comprobar que ambos se
lanzan y funcionan simultáneamente, y podrían terminarse ahora en cualquier orden. Con el comando fg, pasar a primer plano el último programa que se lanzó (el editor kate), y, desde el
terminal, matarlo pulsando Ctrl-C. Repetir el comando fg para hacer lo propio con el comando
anterior (kcalc), pero esta vez, en lugar de matarlo, pararlo pulsando Ctrl-Z desde el terminal.
Observar que el programa kcalc temporalmente no responde al ratón ni al teclado (puesto que
está durmiendo temporalmente, lo acabamos de parar). Volver entonces a despertarlo, pasándolo a
segundo plano, con bg, y comprobar que su ventana ya responde perfectamente. Finalmente, matar
al proceso desde el terminal esta vez usando el comando kill -9 [PID], usando el PID que
nos indicó el terminal al lanzar el proceso inicialmente.
6. Listado de procesos. Usar el comando ps -Af para mostrar todos los procesos que se están ejecutando actualmente en el sistema. Localizar tres procesos cuyo dueño sea nuestro usuario, y otros
tres cuyo dueño sea el superusuario (root). Localizar el proceso que ha consumido más tiempo
de CPU. Localizar también el último que se lanzó, mirando las horas de inicio (lógicamente, será
normalmente nuestro propio ps). Para dicho proceso, y mirando sucesivamente su PID y el de su
padre, ascender en la jerarquía de procesos hasta llegar al proceso init (cuyo PID es uno), tomando nota de todos los PIDs sucesivos. Echar también un vistazo a los subdirectorios numéricos que
2
Todas las órdenes de éste apartado deberán obviamente ejecutarse estando situados en el directorio de inicio.
Observar la necesidad de proporcionar la ruta hasta el comando, por no estar nuestro directorio de inicio en la lista de
caminos por defecto para buscar los comandos ejecutables, más conocida como PATH; podéis consultar esta última lista de
caminos mediante el comando echo $PATH.
3
6
Tema 3: Introducción a los Sistemas Operativos
Fundamentos de Computadores
cuelgan de /proc, y comprobar que se corresponden con los mismos PIDs listados con el comando
ps -Af.
7. Monitorización de procesos en tiempo real. En un terminal, arrancar el proceso top , y observar
en el mismo la evolución del consumo de CPU de los distintos procesos presentes en el sistema.
En particular, arrancar simultáneamente (desde los menús correspondientes en el entorno gráfico)
una o dos aplicaciones (por ejemplo el procesador de textos de OpenOffice, y el navegador
firefox), y trabajar con ellos (por ejemplo navegando por distintas páginas con el firefox,
mejor cuanto más recargadas), para observar la evolución dinámica del consumo de memoria y
CPU de los procesos involucrados.
8. Redireccionamiento de la E/S: Listar todos los ficheros contenidos en /bin/, con el comando ls
/bin. A continuación, repetir el comando redireccionando la salida a un fichero llamado f1.txt,
usando el símbolo > . Comprobar el contenido de dicho fichero con cat f1.txt. Añadir ahora
a dicho fichero la fecha actual y los ficheros del directorio /etc, con los comandos date y ls,
usando esta vez el símbolo >>. Comprobar de nuevo el contenido del fichero, esta vez con un editor
de textos (p.e. el kate). Finalmente, generar otro fichero f2.txt a partir del anterior f1.txt,
con las líneas ordenadas alfabéticamente (usar para ello el comando sort, redireccionando la entrada desde f1.txt con <, y la salida a f2.txt con > (consultar el uso de los símbolos de
redireccionamiento necesarios para este ejercicio en la transparencia 43 de teoría).
9. Tuberías: Combinando los comandos cat y wc -l mediante una tubería |, contar el número de
líneas del fichero f2.txt generado anteriormente. Añadir entonces un comando grep a la tubería
anterior para que sólo se cuenten líneas que contengan la letra “z”. Combinar mediante tuberías los
comandos cat y cut -c para mostrar por pantalla los contenidos del fichero f2.txt donde se
ha eliminado el primer carácter de cada línea. Añadir a la tubería así generada el comando sort
-r para ordenar el resultado en orden alfabético inverso. Añadiendo ahora a la tubería los comandos
head -[n] y tail -[n], conseguir que se muestren en pantalla sólo las líneas que van de las
filas 5 a la 15. Finalmente, y añadiendo el comando tr adecuado, pasar toda la salida de minúsculas
a mayúsculas (consultar comandos para este ejercicio en la transparencia 45 de teoría).
7
Tema 3: Introducción a los Sistemas Operativos
Fundamentos de Computadores
Ejercicios
1. Archiva y comprime con la orden tar todos los ficheros de tu directorio de trabajo y de sus subdirectorios en un fichero llamado trabajo.tgz.
2. Experimentar con todas las posibilidades de los comodines para referirse a conjuntos de ficheros
comentadas en la transparencia 32 de la teoría (asterisco, interrogación, llaves, corchetes, etc.).
Para ello, crear un subdirectorio nuevo, meterse en él, y generar una buena cantidad de ficheros
con nombres distintos, pero que compartan ciertas características comunes en su nombre, para ir
probando mediante comandos ls [expresion con comodines] las distintas posibilidades.
3. Utiliza la orden tar para crear un fichero llamado bin.tgz con los contenidos que cuelgan
del directorio /bin. A continuación, utiliza el comando split (consultar en el manual su funcionamiento) para dividir dicho fichero en fragmentos con un tamaño no superior a 700 KB cada
uno (por ejemplo, para que cupiesen sin problema en disquetes de 720 KB cada uno). Finalmente,
usar el comando cat con la salida redireccionada al fichero bin2.tgz para reconstruir el fichero
original.
4. Establece los permisos adecuados para que el fichero ∼/temp/solucion.txt (que deberás
haber creado con anterioridad) sólo pueda ser borrado por el propietario, leído y modificado por el
propietario y el grupo, y leído por el resto de usuarios.
5. Un directorio que pertenece al usuario juan y al grupo users, tiene los permisos rwxr-x--.
Dentro de ese directorio existen únicamente dos ficheros, fich1 y fich2, también pertenecientes
al usuario juan y al grupo users, y con permisos rw-rw-r- y r-xr-xr-x, respectivamente.
Supongamos también que existe otro usuario pedro que también pertenece al grupo users. Determina si las siguientes afirmaciones son verdaderas o falsas:
juan puede modificar fich1.
pedro puede borrar fich1.
Cualquier usuario puede ejecutar fich2.
juan puede cambiar los permisos de fich2.
El superusuario puede modificar fich1.
6. Genera en un fichero llamado salida.txt el contenido del directorio /usr/lib mostrando,
para cada fichero, su nombre y su número de nodo-i (un número identificador único para cada
fichero del sistema). Los ficheros deben estar ordenados por número de nodo-i, y las líneas deben
aparecer numeradas, desde 1 hasta el número total de ficheros. Nota: usa sort y nl, y la opción
-i del comando ls.
7. Experimentar con las opciones -size y -printf sobre una jerarquía de ficheros similar a la
generada en la sesión de prácticas (puede incluso usarse la misma). Para ello, abrir con el editor
de textos varios de los ficheros vacíos generados, y llenarlos con caracteres aleatorios para obtener
ficheros de diferentes tamaños. Realizar entonces diferentes búsquedas de ficheros con un tamaño
menor o mayor que un valor especificado, imprimiendo para cada fichero encontrado no sólo su
ruta y nombre, sino también el tamaño y la profundidad (consultar el manual de find y usar la
búsqueda con el carácter / en la misma para buscar palabras de interés).
Ejemplo:
8
Tema 3: Introducción a los Sistemas Operativos
Fundamentos de Computadores
find prueba -size -80c -printf "El fichero %p tiene %s bytes (<80)
y es del usuario %u \n"
8. Busca todos los ficheros del propietario root, a partir del directorio /usr/bin, que se hayan
modificado hace más de una semana y que tengan un tamaño inferior a 5 KB.
9. Calcula la profundidad máxima de tu subárbol personal (a partir del directorio home). Nota: usa
find con la opción -printf "%d \n" (consultar manual) junto con sort y tail.
10. Muestra una lista ordenada alfabéticamente de todos los usuarios que estén ejecutando el programa
bash (cada usuario debe aparecer una única vez). Nota: usa cut, grep, sort, tr y uniq;
la opción -v del grep puede resultarte útil si deseas eliminar alguna línea que contenga alguna
cadena de caracteres (en lugar de cogerla, como hace el grep por defecto).
9

Documentos relacionados