Centro de Informática
Sistemas Operativos II (UNIX)

Examen Febrero 1998

Resolución


PARTE I. Sin consulta de material.

1. Al ingresar comandos, para qué sirven los símbolos ";" y "|"?

Ambos separan comandos. El símbolo ";" permite escribir varios comandos en una misma línea, que se ejecutan en forma independiente; el símbolo "|" dirige la salida de un comando hacia la entrada del siguiente.
2. Los paréntesis y otros símbolos son "interpretados por el shell". ¿Cómo puede escaparse esta intepretación y mostrar los paréntesis? Escribir un comando que muestre en pantalla la leyenda
  (aquí se ven los paréntesis)
de todas las formas que sepa hacerlo.
echo '(aquí se ven los paréntesis)'
echo "(aquí se ven los paréntesis)"
echo \(aquí se ven los paréntesis\)
3. 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.

  /usr/local/bin/nsk </home/jperez/datos >jperez.dts 2>jperez.errs

4. Mostrar en pantalla el calendario del mes actual. Luego mostrar en pantalla el calendario del mes de marzo del año en curso, y finalmente el calendario de 1999

cal
cal 03 1998
cal 1999
5. Mostrar las primeras dos líneas de los archivos cap01.txt a cap99.txt del directorio novela bajo el directorio actual. Mostrar la salida paginada.

  head -2 novela/cap[0-9][0-9].txt | more

6. ¿Cuáles son los tres modos del editor vi? ¿Cómo se pasa de uno a otro?

Los modos son comando, inserción de texto y última línea o modo ex. Para pasar de comando a inserción se digita i, I, a, A, o, O, que permiten insertar texto en diferentes formas. Para volver a modo comando, tecla ESC. Para pasar de modo comando a última línea digitar ":". Para pasar de última línea a modo comando, con ENTER al ejecutar el comando de última línea o con ESC para cancelarlo. No se puede pasar directamente de inserción a última línea o viceversa.
7. Escribir comandos para borrar

- arch1, archivo;
- lharch2, enlace hard al archivo arch2;
- lnarch2, enlace simbólico al archivo arch1;
- dir 1, directorio vacío;
- dir2, directorio lleno, junto con todos sus archivos;
- lndir3, enlace al directorio dir3.

Crear los siguientes enlaces, o indicar si no es posible:

- lnarch3, enlace simbólico hacia el archivo arch3.
- lharch3, enlace hard hacia el archivo arch3.
- lndir3, enlace simbólico hacia el directorio dir3.
- lhdir3, enlace hard hacia el directorio dir3.

rm arch1
rm lharch2
rm lnarch2
rmdir dir1
rm -r dir2
rm lndir3
ln -s arch3 lnarch3
ln arch3 lharch3
ln -s dir3 lndir3
(no es posible)
8. Fijar los permisos del archivo resumen.txt para que el dueño pueda leer y escribir, el grupo pueda leer y el resto no pueda nada. Usar modo absoluto y modo simbólico.
chmod u+rw-x,g+r-wx,o-rwx resumen.txt
chmod 640
9. Fijar los permisos del directorio varios para que el dueño pueda ver, recorrer y borrar archivos, el grupo pueda ver y recorrer, y el resto sólo pueda recorrer. Usar modo absoluto y modo simbólico.
chmod u+rwx,g+rx-w,o+x-rw varios
chmod 751
10. Escribir un script que reciba un nombre de archivo y agregue, al principio del archivo, las leyendas
MEMORANDUM.
Montevideo, URUGUAY.
(fecha del día)
(renglón en blanco)
Se dispone del comando fecha que pone la fecha en español. Si se usan archivos temporales, eliminarlos al terminar.
echo "MEMORANDUM." > temporal.tmp
echo "Montevideo, URUGUAY." >> temporal.tmp
fecha >> temporal.tmpç
echo >> temporal.tmp
cat $1 >> temporal.tmp
rm $1
mv temporal.tmp $1


PARTE II: Con libre consulta de material.

Escribir scripts para realizar las siguientes tareas.

1. Escribir un script que reciba como parámetros un nombre de login, un nombre verdadero y un número de usuario, y cree ese usuario con grupo primario 101, directorio en /home y shell bash.

NOMLOGIN=$1
NUMERO=$2
NOMBRE=$3
echo "$NOMLOGIN::$NUMERO:101:$NOMBRE:/home/$LOGIN:/bin/bash" \
/etc/passwd
mkdir /home/$NOMLOGIN
2. Escribir un script que reciba como parámetro una palabra y el nombre de un archivo de texto, e indique si la palabra está contenida en el archivo de texto y cuántas veces.
HAY=`cat $2 | tr -cs "[a-zA-Z]" "\n" | tr [a-z] [A-Z] | \
sort | grep $1 | uniq -c`
echo "La palabra $1 está contenida $HAY veces en $2"
3. El comando ls -l muestra la cantidad de enlaces hard en el campo 2, y el nombre del archivo en el campo 9; los campos están separados por uno o más espacios. Escribir un script que muestre, para los archivos que tengan enlace hard, la cantidad de enlaces hard y el nombre del archivo.
ls -l | tr -s " " | cut -d" " -f2,9 | grep -v "^1"
4. El comando ps -auxw muestra los procesos que están corriendo. Sus campos, separados por uno o más espacios, indican en el lugar 2 el número identificador de proceso y en el lugar 11 el comando de invocación. Escribir un script que reciba el nombre de un comando y devuelva el (los) identificador(es) de proceso de ese comando, o indique que no está corriendo.
PROCESO=$1
NUMEROS=`ps -auxw | tr -s " " | grep $1 | cut -d" " -f2`
if [ -z $NUMEROS ]
then
  echo "El proceso $PROCESO no está corriendo"
else
  echo "El proceso $PROCESO tiene idenfificador\(es\)"
  echo $NUMEROS
fi