Práctica 2-Grado Online PDF

Title Práctica 2-Grado Online
Author Gustavo Gutierrez
Course Sistemas Operativos
Institution Universidad de Burgos
Pages 21
File Size 870.3 KB
File Type PDF
Total Downloads 37
Total Views 151

Summary

trabajo...


Description

Universidad de Burgos

SISTEMAS OPERATIVOS

1º Curso – GRADO DE INGENIERÍA EN INFORMÁTICA

Práctica 2 Filtros, Tuberías, Multitarea y Procesos Índice de contenido SINTAXIS DE COMANDOS .................................................................................................. 3 REDIRECCIONAMIENTO ..................................................................................................... 4 TUBERÍAS O PIPES. ............................................................................................................... 5 COMANDOS DE VISUALIZACIÓN ..................................................................................... 5 MANEJO DE FICHEROS. ....................................................................................................... 6 MISCELÁNEA. ........................................................................................................................ 7 PROCESOS ............................................................................................................................... 8 Estructura de un proceso ....................................................................................................... 8 Sistemas Operativos 1º Grado de Ingeniería en Informática LSI – UBU

Universidad de Burgos

Creación y ejecución de un proceso ...................................................................................... 9 Terminación de procesos....................................................................................................... 9 SEÑALES ................................................................................................................................ 10 MONITORIZAR PROCESOS .................................................................................................. 10 PRIORIDADES ....................................................................................................................... 13 EJECUCIÓN EN 2º PLANO.................................................................................................... 13 DEMONIOS............................................................................................................................. 14 Los niveles de ejecución - ''Runlevel'' ................................................................................. 15 Cambio del Runlevel ........................................................................................................... 16 PROGRAMACIÓN DE TAREAS ............................................................................................. 18 at .......................................................................................................................................... 18 cron ...................................................................................................................................... 19 EJERCICIOS ........................................................................................................................... 20

Sistemas Operativos 1º Grado de Ingeniería en Informática LSI – UBU

Universidad de Burgos

SINTAXIS DE COMANDOS La sintaxis para ejecutar un comando en UNIX es: Comando [opciones ...] Existen una serie de operadores que nos van a permitir unir la ejecución de dos o mas comandos en una sola línea, de diversas formas. Veamos cuales: El símbolo ; permite que ejecutemos de forma secuencial 2 o mas comandos. Es decir, se ejecuta el primero, y después el segundo y así sucesivamente, independientemente de si alguno de ellos devuelve algún error. Comando 1 ; Comando 2 El símbolo && Permite ejecutar el segundo comando solo si el primero ha tenido éxito. El éxito o fracaso de un co 1 mando se decide en función de un valor numérico devuelto al SO por el propio comando . Comando 1 && Comando 2 mount /floppy && echo “Hay un disco en la disquetera” && umount /floppy El símbolo || Permite ejecutar el segundo comando solo si el primero ha fallado. Comando 1 || Comando 2 mount /floppy || echo “Error, no hay disquete metido” Si lo que nos interesa es conocer el valor exacto devuelto por la ejecución de un comando podemos usar echo $?. La interpretación que se hace sobre este valor en cuanto a verdadero o falso es: =0 es verdadero o ejecución con éxito 0 es ejecución fallida. Puede ser un 1 o cualquier otro valor. Ese valor tiene su significado, y suele indicar el porque de su no éxito. Un ejemplo de esto:

En el ultimo caso hemos pulsado CTRL+C.

Sistemas Operativos 1º Grado de Ingeniería en Informática LSI – UBU

Universidad de Burgos

Dentro de los parámetros que podemos pasar a los comandos, existe lo que se denominan comodines, los cuales nos permiten elegir un grupo de valores para tratar por igual a varios ficheros ó directorios. Estos son: * Vale cualquier texto y de cualquier longitud ? Vale cualquier símbolo, pero solo de un carácter [] Sustituye un carácter por cualquiera de los dados entre corchetes. Permite dar rangos o valores concretos. Para ello se basa en la tabla ASCII. Ejemplos. ฀ Lista todos los archivos del directorio que comienzan por op operacion1 opcion.txt oposicion.d oc ... ฀ Lista todos los archivos del directorio que finalizan en txt ls *txt datos.txt gestiontxt .... ls backup??092002 ฀ Lista todos los archivos que coincidan con el texto dado y en los interrogantes puede ir cualquier valor backup01092002 backup08092002 backupal092002 ... ls [a-z]* ฀ Lista todos los archivos que comienzen por una letra minúscula. algo datos.txt ... En UNIX/LINUX cualquier archivo que comience por punto se considerará oculto y no aparecerá en el listado de directorio salvo que se le indique lo contrario (ls -a). ls op*

REDIRECCIONAMIENTO Los shell, poseen la capacidad de redireccionar la entrada y salida estándar. Esto nos va a permitir poder guardar, por ejemplo, el resultado en pantalla de un comando en un fichero de texto, o bien que un comando en vez de recibir la información desde teclado la reciba desde un fichero de texto. Los símbolos utilizados son: > Desvía la salida estándar a un fichero. Si existe el fichero le sobre escribe. >> Como el anterior pero si el fichero existe, añade la información al final. < Entrada estándar. ls -a > listado.txt Además de estos existen unos especiales que nos van a permitir redireccionar la salida Sistemas Operativos 1º Grado de Ingeniería en Informática LSI – UBU

Universidad de Burgos

pero de un dispositivo estándar concreto. Esto se hace por ejemplo para evitar que aparezcan en pantalla múltiples mensajes de error,... find / -name "*.h" 2> /dev/null Desvía todas las salidas destinadas al dispositivo estándar nº 2 (errores), al pozo negro. Para probar la entrada estándar hemos de echarle algo de imaginación. cat b.txt

TUBERÍAS O PIPES. El símbolo | nos permite enlazar comandos sin necesidad de usar ficheros intermedios, es decir, puedo enlazar la salida de un comando con la entrada de otro. ls -a | sort +2 | tail –1

COMANDOS DE VISUALIZACIÓN at fichero1 [fichero2]... Comando para visualizar el contenido de un fichero de texto en pantalla. Se creó en un principio para concatenar archivos en uno solo. $ cat archivo1 $ cat > miArchivo.txt .... CTLD + D $ cat < miArchivo.txt wc [-clw] [fichero1 fichero2 . . . ficheroN] El comando wc simplemente cuenta el número de palabras, líneas y caracteres en los ficheros pasados como parámetros. Si no se especifica ningún fichero, operará sobre la stdin. Los tres parámetros, -clw, indican el elemento a contar: -c bytes, -m caracteres, -l líneas y -w para palabras. Por ejemplo, wc -cw contará el número de caracteres y palabras, pero no el número de líneas. Si no se indica ningún parámetro wc cuenta todo: palabras, líneas y caracteres. Se puede utilizar wc para saber el número de ficheros de un directorio: ls | wc -w. Si se desea saber el número de ficheros que acaban en c, entonces ejecute ls *.c | wc -w. cmp fichero1 [fichero2] cmp compara dos ficheros. El primero debe ser obligatoriamente pasado como parámetro, mientras que el segundo puede ser pasado como un segundo parámetro o leído desde la entrada estándar. cmp es muy sencillo, y simplemente dice donde se diferencian los dos ficheros. diff fichero1 fichero2 Uno de los comandos estándar más complejos de UNIX/LINUX es el diff. La versión GNU de diff tiene hasta veinte opciones en la línea de comandos. Es una versión Sistemas Operativos 1º Grado de Ingeniería en Informática LSI – UBU

Universidad de Burgos

mucho más potente que cmp y muestra cuales son las diferencias en lugar de decir simplemente donde está la primera. Se usa para generar los parches del kernel y otras fuentes. sort +n -u Comando que nos ordena un fichero de texto por la columna que le indiquemos. En caso de no indicar columna ordena por la primera. Supone nueva columna al encontrarse con separadores de espacio o de tabulación. Con la opción –u elimina los duplicados. grep patrón ruta Comando que me permite analizar el contenido de un fichero de texto y quedarme solo con las líneas que cumplan un determinado patrón. Por defecto muestra todas las líneas coincidentes y si no las hay, no muestra nada. Entre las opciones interesantes, tenemos: -v: invierte la búsqueda, de forma que muestra las líneas que no coinciden con el patrón. -c: Nos muestra solo el nº de líneas coincidentes. -l: Solo muestra el nombre del archivo donde lo encuentra. Útil cuando le decimos que busque en varios archivos. split Comando que parte un fichero de texto en partes iguales. csplit Como el anterior pero corta al encontrarse un patrón indicado. find opciones Para buscar archivos que cumplan un determinado patrón, permite además búsquedas por fecha de última modificación.... Algunas de las opciones son: ฀ Para buscar por el nombre del archivo -name ฀ Indicamos cuantos sub directorios debe descender. -maxdepth -user ฀pertenece a ese usuario (nombre o UID) ฀ pertenece a ese grupo (nombre o GID) -group 3 ฀Accedido en ese periodo (minutos) -amin ฀Accedido en ese periodo (dias) -atime ฀Modificado en ese periodo (minutos) -mmin -mtime ฀Modificado en ese periodo (horas) 1 -size [bkcw] ฀ Con el tamaño indicado: b, en bloques de 512 bytes; k, en kilobytes; c, en bytes; w, en palabras de 2 bytes.

MANEJO DE FICHEROS. cut opciones fichero Comando que me permite eliminar campos (columnas) de un fichero. Trabaja tanto a nivelde bits como de texto, por lo que es bastante versátil. Los parámetros típicos de uso son: -f para indicar los campos que queremos seleccionar. Se indican separados por coma o mediante guión para indicar rangos. Si se indica mas de un campo aparecen los separadores. -d para indicar que símbolo es el delimitador. Por defecto es TAB. Sistemas Operativos 1º Grado de Ingeniería en Informática LSI – UBU

Universidad de Burgos

-s para ignorar líneas que no tienen separador cut –f 3 –d “:” /etc/passwd Muestra solo los UID del archivo. grep “manuel:” /etc/passwd | cut –f 3 –d " :" Muestra el UID del usuario manuel. Es equivalente al comando id manuel -u

MISCELÁNEA. expr expr1 operador expr2 Comando que nos permite realizar una operación matemática ó lógica. Los operadores disponibles son: + - / \* \> < >= expr 5 + 6 11 $> expr 5 > 6 0 $> expr 5 \* 6 30 $> expr 6 < 12 1 $> alias pseudonimo=orden Esta orden permite crear un alias, seudónimo, para alguna orden. Para que esta orden quede permanente hay que incluirla en el archivo " .bashr" o en el local. Unalias nombre Esta orden elimina un alias (si fue incluido en .bashr no lo elimina), para eso vas a tener que borrarlo de ahí. gzip Comprime o descomprime archivos. Posee varios grados de compresión, siendo –9 el máximo. Con –d descomprime. gzip –9 fichero.txt -> Comprime al máximo. gzip –d fichero.txt.gz -> Descomprime tar opciones archivo.tar Es el empaquetador estándar en sistemas unix. Con el podemos unir varios archivos en uno solo con la posibilidad de comprimirlos o no. Entre sus usos están los backups o la distribución de software con fuentes (descargas de internet). Por convenio, se suele poner .tar para archivos solo empaquetados y tar.gz para los empaquetados y comprimidos. Entre las opciones tenemos: ฀ x Para extraer los archivos de un tar Para crear un tar c ฀ Sistemas Operativos 1º Grado de Ingeniería en Informática LSI – UBU

Universidad de Burgos

฀ r Añade archivos al final del paquete ฀ muestra el contenido de un archivo t ฀ u añade solo archivos con fecha posterior a la del paquete. Y solo sirve si no está comprimido ฀ z Indica que se debe tener en cuenta la compresión zip ฀ Mostrar información de las tareas realizadas según se ejecuta. v ฀ f Indica que el siguiente parámetro es el archivo tar Ejemplos: Esto crea una copia comprimida de todo el directorio home, en el directorio en que se esta ejecutando. tar czvf copia_home.tar.gz /home Si lo queremos descomprimir en el directorio actual. tar xzvf copia_home.tar.gz

PROCESOS Para entender bien el tema de procesos hemos de conocer que pasa cuando se arranca la máquina. En el arranque se carga el kernel, y este crea a su vez el proceso init, que vigila el estado de ejecución del sistema e inmediatamente accede al inittab describe qué procesos se inician en la carga arranacando los demonios y supervisores de consola (tty_) así como cambiar los niveles de ejecución del sistema (se verá más adelante). El proceso init es el abuelo de todos los procesos, puesto que es el primero que se genera y lanza todos los demás procesos desde inittab.

Estructura de un proceso Un proceso, a vista de usuario, no es más que un programa en ejecución, ya sea un script, un programa en Java,... Internamente, un proceso son una serie de estructuras de datos que tiene el kernel y una serie de direcciones de memoria al código que tiene que ejecutar, al área de datos que maneja, pila,... La estructura de datos nos va a permitir manejar el proceso a nivel administrativo, ofreciéndonos información como su estado actual, prioridad del proceso, propietario del proceso,... Algunos de los parámetros asociados a los procesos, afectan de forma directa a su ejecución. Algunos de ellos son: •PID: Process Identification. Este es asignado por el kernel de forma secuencial. • PPID: Parent Process Identification. Identificador del proceso que le ha lanzado. Sistemas Operativos 1º Grado de Ingeniería en Informática LSI – UBU

Universidad de Burgos

•UID: User Identification. Identificación del usuario que ha lanzado el proceso. • GID: Group Identification. Identificación del grupo que ha lanzado el proceso. •EUID, EGID: Usuario efectivo y grupo efectivo. Estos dos se usan para saber a que puede y no puede acceder el usuario que ha lanzado el proceso. •Prioridad: Indica quien tiene preferencia a la hora de disfrutar de tiempo de procesador. En un sistema multitarea, se tienen muchos procesos ejecutándose "a la vez". Para dar esa sensación de que todo se hace a la vez, se realiza una asignación de quantums (porciones de tiempo) de tiempo a cada proceso, de forma que cuando se les acaba ese tiempo, salen del procesador y entra otro proceso, así hasta que acaban su ejecución y salen de la lista. La prioridad establece que un proceso tenga un quantum de tiempo + grande que otros procesos de menos prioridad. •Estado. Un proceso, una vez lanzado puede pasar por varios estados. Estos son: •Running: El proceso está ejecutándose en estos momentos. •Sleeping: El proceso está en espera de algo, ya sea la liberación de un recurso de sistema,... En este estado no consumen tiempo de procesador. •Swapped: El proceso no está ni siquiera en memora, está en la SWAP. •Stopped: un proceso está parado. (Con Ctrl. + Z) o por otro proceso. •Zombie: Es un proceso no muerto que ocupa espacio en la tabla de procesos del kernel. Es el proceso padre el que debe eliminar estos procesos. •Sleeping Ininterrumpible.

Creación y ejecución de un proceso Para ver como se crea un nuevo proceso hemos de hablar de la función fork() (también está la familia exec) . Este comando crea una copia exacta del proceso que la llama y lo ejecuta independientemente. Esta copia tiene personalidad propia pero con ciertas cosas en común con su padre (proceso que lo crea). •PID. Distinto al de su padre. • PPID. PID del proceso padre (que lo crea y lanza). •Crea una copia de los descriptores (ficheros) pero comparte el cursor de los descriptores, de forma que si el padre tiene un archivo abierto, el hijo hereda ese mismo cursor y ambos lo comparten. Luego de crearse el clon, mediante condicionales, el padre ejecuta un bloque y el hijo otras. Es aquí donde entran en juego otras funciones de C, pertenecientes a la familia exec, que suplantan un proceso por uno nuevo.

Terminación de procesos Cuando un proceso ha terminado, se llama a la función exit(), que libera los recursos que está usando, como memoria y entradas de tablas de kernel y libera a sus descendientes. A continuación se convierte en Zombie y permanece en el sistema hasta que su proceso Sistemas Operativos 1º Grado de Ingeniería en Informática LSI – UBU

Universidad de Burgos

padre le elimina. Si un proceso padre no limpia sus procesos zombie, cuando este muere, el proceso init (El padre de todos los procesos), “les acoge en su seno y les mata”. Cuando termina una sesión shell, todos los procesos descendientes de esa sesión reciben una señal de HUP, que les indica que terminen. Si no nos interesa que eso ocurra, podemos lanzar el proceso con el comando nohup, de esta forma ese proceso ignorará esa señal y continuará con la ejecución aún cuando la shell haya terminado. Esto no es necesario con una shell csh.

SEÑALES Las señales son herramientas que se utilizan para actuar sobre los procesos y comunicarles cosas. Son como los eventos en entornos gráficos. Para que un proceso pueda responder a una señal debe disponer de un manejador o handle, sino se ignorará la señal o se usará el de por defecto. (Salvo los de matar un proceso y pararle). Aparte de mandar señales entre procesos, podemos mandar señales a un proceso desde la consola, con el comando kill. Este es muy utilizado cuando tenemos un proceso del que hemos perdido el control y hay que echarlo del sistema. La sintaxis de este comando es muy sencilla: kill señal PID Para ver la lista de señales podemos ejecutar kill –l, aunque las típicas son: •9 (SIGKILL): Muerte. El sistema mata directamente el proceso. Esta señal es inevitable por parte de cualquier proceso. •15 (SIGTERM): Señal de terminación, pero de forma correcta. •18 (SIGCONT): Señal de continuación. Cuando un proceso ha sido parado (estado de STOP). •19 (SIGSTOP): Paras un proceso. Hay en total 64 señales. Un comando que viene bien de vez en cuando es killall, el cual permite matar procesos, no por su ID, sino por el nombre. Esto es útil cuando manejamos determinados servidores (como el proxy squid) que al ser lanzados generan varios procesos con igual nombre y están todos corriendo. Si intentamos matarlos con kill, el servicio puede detectar que uno de los procesos ha muerto y relanzarle, por lo que tendríamos que ser muy rápidos en matar todos.

MONITORIZAR PROCESOS En cualquier momento nos puede resultar útil, tanto como usuarios normales como administradores, el visualizar que procesos están activos en la máquina en ese momento. Para esto tenemos varios comandos, cada uno con sus peculiaridades. El comando ps, nos da una visión instantánea de los procesos que se encuentran activos en el momento de ejecutar ese comando. Nos permite mostrar todos los procesos de la Sistemas Operativos 1º Grado de Ingeniería en Informática LSI – UBU

Universidad de Burgos

máquina, solo los de un usuario, con más o menos información,... Por defecto lo ordena por el PID, es decir, del más antiguo proceso al más nuevo. Veamos algunas formas de mostrar la información.

Con sólo ps, nos muestra los procesos asociados a nuestra consola, en el ejemplo, la consola 1. En ese caso esta solo el shell y el ps que estamos ejecutando. Con ps a, muestra todos los procesos asociados a todas las consolas, aunque sean de otros usuarios. Con ps au, nos muestra un l...


Similar Free PDFs