Centro de Informática
Sistemas Operativos II

Examen Agosto 2000.

Solución de scripts.


Parte A. Sin consulta de material (40 puntos).

Responder brevemente las siguientes preguntas (4 puntos cada una).
1. Explicar el uso del comando exit en programación. ¿Para qué sirven los valores de retorno? ¿Cómo se interrogan?
2. ¿Qué diferencia hay entre programa, archivo y proceso? ¿Qué relación hay entre ellos?
3. ¿Qué es el UID? ¿Qué es el GID?
4. ¿Qué función cumple el archivo /etc/passwd? ¿Qué contiene cada línea?
Escribir comandos para realizar las tareas indicadas:
1. Fijar, en modo simbólico y absoluto, los permisos del archivo /usr/local/bin/conectar de modo que todos lo puedan ejecutar, el usuario lo pueda leer y escribir, y el grupo lo pueda leer.
2. Crear, en el subdirectorio bin del directorio propio, un enlace simbólico al script /usr/local/bin/conectar con nombre conec.
3. Crear en el subdirectorio bin del directorio propio, un enlace hard hacia el script may2min ubicado bajo utils en el directorio propio.
Sea la siguiente salida de ls -l:
-rw-r--r--   1 root     root        33280 jun 12 19:40 Carta.doc
drwxrwxrwx   5 victor   staff        1024 dic  4  1999 step
drwxrwxr-x  22 victor   staff        1024 nov 20  1999 Office51
drwxr-x---   6 victor   staff        1024 may  7 16:43 argos
drwxrwxr--  21 victor   staff        1024 jul 11 18:22 bajados
-rw-rw----   3 root     root          542 jul 13 11:26 boor.exe
drwxrwxrwt   3 victor   staff        1024 may 25 10:02 borrador
-rwsrwsr-x   1 root     root         9218 jun 12 19:41 pph3
drwxrwx--x   2 victor   victor       1024 may  7 16:47 cdir
-rw-rw-r--   3 root     root          542 jul 13 11:26 mysql-doc
-rw-r-xr--   3 victor   staff        1084 ago  1 10:01 ver.exe
-rwxr-xr-x   3 victor   staff        1084 ago  1 10:01 ver
drwxr-xr-x   7 victor   victor       1024 jul 25 11:48 lit
4. Indicar, si los hay,
  a) directorios públicos;
  c) archivos ejecutables;
  d) directorios recorribles por todo el mundo;
5. Indicar, si los hay,
  e) directorios donde el grupo puede borrar archivos;
  g) archivos que son enlaces simbólicos.
6. Indicar, si los hay,
  f) archivos ejecutables con permisos de root;
  b) archivos que tienen enlaces hard;

Parte B. Con libre consulta de material (76 puntos).

1. Para definir un nuevo alias de correo, es preciso insertar en el archivo /etc/aliases una lína de la forma
  tecnicos:jperez,hvila,pgarcia
donde el primer nombre es el alias, luego el separador de campo ":" y finalmente la lista de usuarios a incluir en el alias, separada por comas y sin espacios. Escribir un script para crear un alias de correo. El script deberá:
(20 puntos)
#!/bin/bash
# prob1: da un alta de alias para correo.
#
clear
echo "Crear Alias de Correo:"
echo
echo -n "Nombre alias: "
read NOMALIAS
if [ `grep ^$NOMALIAS /etc/aliases` ]
then
  echo Ese alias ya existe.
  exit 1
fi
echo
echo Ingrese nombres de usuarios a incluir en alias $NOMALIAS
echo Digite Enter con nombre en blanco para finalizar.
echo
echo -n "Nombre: "
read NOMBRE
LINEA=""
while [ $NOMBRE ]
do
  if [ $LINEA ]
  then
    # línea ya tiene algo
    LINEA=$LINEA","$NOMBRE
  else
    # línea vacía, coloca el primer nombre
    LINEA=$NOMBRE
  fi
  echo -n "Nombre: "
  read NOMBRE
done
echo
echo Se incluirán los siguientes nombres en alias $NOMALIAS:
echo $LINEA
echo -n "Está bien?(S/n): "
read RESP
if [ $RESP = "s" -o $RESP = "S" ]
then
  echo $NOMALIAS":"$LINEA >> /etc/aliases
  /usr/bin/newaliases
else
  echo No se creó el alias.
fi
 
2. El archivo bedelia.lst contiene una lista de grupos de alumnos donde el primer campo es el nombre del grupo. En el sistema debe existir una cuenta de usuario con ese mismo nombre. Escribir un script para verificar que todos los grupos de bedelía tienen una cuenta de usuario. El script deberá mandar un correo al usuario cdiadmin@cdi.edu.uy con el encabezamiento
  # Alumnos faltantes en el sistema
  # según lista de Bedelía
seguido de la lista de nombres de grupo carentes de cuenta de usuario en el sistema. Sugerencia: crear un archivo auxiliar y luego borrarlo. (15 puntos)
 
#!/bin/bash
# prob2: lista usuarios faltantes según lista de bedelía
#
clear
echo "# Alumnos faltantes en el sistema" > faltan.lst
echo "# según lista de Bedelía" >> faltan.lst
echo "#" >> faltan.lst
LISTA=`cat bedelia.lst | cut -d: -f1`
for ALUMNO in $LISTA
do
  id $ALUMNO 1>/dev/null 2>&1
  if [ $? -ne 0 ]
  then
    echo $ALUMNO >> faltan.lst
  fi
done
mail -s "Usuarios faltantes" cdiadmin@cdi.edu.uy < faltan.lst
rm faltan.lst
 
3. Escribir un script que presente un menú de alternativas para conexión a Internet, con este aspecto:
  1.Adinet.
  2.Uruguaynet.
  3.Multired.
  4.Technet.
  0.Fin.
  Opción:
El usuario digitará el número de opción. La conexión se realiza mediante el script /usr/bin/pon (PPP on) seguida del nombre de la opción elegida en minúsculas. Si el usuario elige Fin, la conexión se corta con el script /usr/bin/poff (PPP off) sin parámetros. (15 puntos)
 
#!/bin/bash
# prob3: menú de conexión a Internet
# presentación del menú
clear
echo Menú de conexión a Internet.
echo Elija una alternativa:
echo "  1. Adinet."
echo "  2. Uruguaynet."
echo "  3. Miltired."
echo "  4. Technet."
echo "  0. Fin conexión."
echo -n "Opción: "
read OPCION
case $OPCION in
1)
  /usr/bin/pon adinet;;
2)
  /usr/bin/pon uruguaynet;;
3)
  /usr/bin/pon multired;;
4)
  /usr/bin/pon technet;;
0)
  /usr/bin/poff;;
*)
  echo Opción incorrecta.
esac