Centro de Informática
Sistemas Operativos II

Examen Agosto 2001.

A. Sin consulta de material (30 puntos).

Responder brevemente las siguientes preguntas.
 
1.  ¿Para qué sirve el comando apropos? Dar un ejemplo de uso.
 
2. ¿Qué significa el permiso "s" para el dueño de un archivo?
 
3. ¿Qué contiene la variable PATH?
 
Escribir comandos para realizar las tareas indicadas:
 
4. Enviar un correo al usuario carletto del dominio nsk.com.uy, con título "Desayuno de trabajo". El texto del mensaje está en el archivo invitacion.txt.
 
5. Pedir al sistema información sobre el usuario carletto. Si conoce más de un comando, indicarlos todos.
 
6. Mostrar los archivos del directorio /usr/doc/HOWTO a) en listado breve; b) en listado largo; c) incluyendo archivos ocultos; d) en listado largo e incluyendo archivos ocultos.
 
7. Listar, del directorio /usr/share, sólo los subdirectorios (no los archivos), en formato largo.
 
8.  Listar las características del directorio /var/spool/mail (no su contenido) y agregar esta línea al final del archivo logdirs.txt.
 
9. Desplegar en forma sucesiva y paginada, las primeras 3 lineas de los archivos de nombre empezado con "aba" y terminado con ".log" del directorio /var/log/otros.
 
10. Ejecutar el comando nsk del directorio /usr/local/bin de modo que tome su entrada del archivo datos del directorio del usuario jperez en /home, grabe su salida en el archivo jperez.dts del directorio actual y los errores en jperez.errs del directorio actual.
 

B. Con libre consulta de material.

1.  El archivo /var/log/access.log registra los accesos desde la red interna hacia páginas web en líneas similares a éstas:
  May 09 17:42:56 [2104]: now accepting connections.
  May 09 18:12:48 [2104]: Connect: tisanuro.nsk.com.uy [192.168.1.1]
  May 09 18:12:48 [2104]: Request: GET http://www.intercanal.com/ HTTP/1.0
  May 09 18:12:52 [2104]: Connect: nautilus.nsk.com.uy [192.168.1.2]
  May 09 18:12:52 [2104]: Request: GET http://iie.fing.edu.uy/ HTTP/1.0
Si el dominio propio es nsk.com.uy, escribir un script que cuente las solicitudes (líneas conteniendo "Connect:") para cada máquina del dominio. La salida será similar a
  124    nautilus.nsk.com.uy
  2156   tisanuro.nsk.com.uy
(10 puntos)
 
#!/bin/bash
# cuenta solicitudes páginas web para cada máquina
#   del dominio nsk.com.uy
cat /var/log/tinyproxy.log | grep "nsk.com.uy" | \
  grep "Connect:" | cut -d " " -f6 | sort | uniq -c
 
2. El programa gráfico dia dispone de una opción -e que transforma un archivo en formato propio (extensión .dia) en PostScript (extensión .ps). Ejemplo:
  dia -e ejemplo.dia ejemplo.ps
El programa convert transforma archivos de distintos formatos unos en otros, en particular de PostScript a imgen JPG, opcionalmente con cambio de tamaño. Ejemplo:
  convert -geometry 640x480 ejemplo.ps ejemplo.jpg
Buscar en el directorio y todos sus subdirectorios todos los archivos de extensión .día y crear archivos transformados a PostScript e imagen JPG, siguiendo los ejemplos dados. Los nuevos archivos deben quedar en el mismo directorio o subdirectorio donde están sus originales .dia.
Sugerencia: para probar en máquina crear subdirectorios y archivos vacíos .dia y sustituir las conversiones (dia y convert) por comandos de copia apropiados. (20 puntos)
 
#!/bin/bash
# busca en subdirectorios archivos .dia y los convierte
#   primero a .ps y luego a .jpg generando nuevos archivos en
#   los mismos subdirectorios
 
clear
echo
echo "DIA - Conversión de archivos a JPG"
LISTA=`find . -name "*.dia" -print`
echo $LISTA
if [ -z "$LISTA" ]
then
  echo "No hay archivos a convertir."
  echo
  exit
fi
 
echo "Convirtiendo..."
for ARCH in $LISTA
do
  NOMBRE=`echo $ARCH | cut -d "." -f1-2`
  NOMBREPS=$NOMBRE.eps
  NOMBREJPG=$NOMBRE.jpg
  echo -n "$ARCH a PostScript... "
  #/usr/bin/X11/dia -e $NOMBREPS $ARCH
  cp $ARCH $NOMBREPS
  echo -n " a JPG... "
  #/usr/bin/X11/convert -geometry 600 $NOMBREPS $NOMBREJPG
  cp $NOMBREPS $NOMBREJPG
  echo "hecho."
done
 
3. Escribir un script para determinar el tipo de archivo: recibe como parámetro una ruta hacia un nombre de archivo y determina si es un archivo regular, un directorio, un enlace simbólico, un dispositivo de caracter o un dispositivo de bloque; para otros tipos de archivo dirá "archivo de tipo desconocido". Si el archivo no existe, emite un mensaje "archivo inexistente" y devuelve un código de error 1. Si no se ingresa nombre de archivo, emite un mensaje "parámetros insuficientes" y devuelve código de error 2.
Sugerencia: para determinar existencia del archivo usar opción -e de test. (20 puntos)
 
#!/bin/bash
# recibe como parámetro un nombre de archivo
# determina el tipo de archivo 
# devuelve 0 si el archivo existe
# devuelve 1 si el archivo no existe
# devuelve 2 si no se indica el archivo como parámetro
 
ARCH=$1
 
if [ "$#" -lt 1 ]
then
  echo "Número insuficiente de parámetros;"
  echo "  debe indicar una ruta a un archivo."
  exit 2
elif [ ! -e "$1" ]
then
  echo "ERROR: $ARCH no existe."
  exit 1
fi
 
echo -n "$ARCH es un "
PRIMERLETRA=`ls -dl $ARCH | cut -c1`
 
case $PRIMERLETRA in
l) echo "enlace simbólico";;
d) echo "directorio";;
-) echo "archivo regular";;
b) echo "dispositivo de bloque";;
c) echo "dispositivo de caracter";;
*) echo "archivo de tipo desconocido";;
esac