Curso  Básico de UNIX

Preguntas y Ejercicios. 
Ficha Referencia: Introducción al Shell

 
Estructura de archivos.
Estructura del archivo /etc/passwd:
  #nombre:contraseña:UID:GID:comentarios:dir_propio:shell
  jperez:Xdio0IKLLP:1130:103:Juan Pérez:/home/jperez:/bin/bash
Estructura del archivo /etc/group:
  #grupo:GID:lista_usuarios
  docentes:103:victor,german,fernando
Estructura del archivo /etc/hosts:
  #número_IP nombre_máquina alias
  10.137.137.250    liebre.cdi.edu.uy liebre localhost mailhost
Todos los archivos anteriores pueden tener comentarios (líneas comenzadas por #).

  1. COMANDOS. Cambiar hacia el directorio /etc, verificar que se está allí mostrando el nombre del directorio actual, desplegar la lista de archivos en ese directorio, volver al directorio propio, verificar. 
  2. COMANDOS. Estudiar en la reseña de comandos el comando more, asegurándose de conocer la forma de avanzar una página, retroceder una página, avanzar y retroceder una línea, y salir de more. Sugerencia: usar el comando man ls para mostrar la página man del comando ls ; las páginas man se paginan con more automáticamente.  Repetir con less, anotando las diferencias.
  3. FILTROS. Crear el archivo hosts.txt con las 10 primeras líneas del archivo /etc/hosts; crear el archivo group.txt con las 10 últimas líneas del archivo /etc/group . Verificar su contenido. Concatenar ambos archivos presentándolos juntos en pantalla. 
  4. FILTROS. Presentar el archivo largo /etc/inetd.conf con formato de impresión fijando el largo de página en 23; paginar la presentación en pantalla para poder examinarlo. 
  5. REDIRECCION. Crear el archivo lineas con el texto "Archivo lineas" como contenido. Verificar con listado largo sus características de creación, explicando la salida del comando ls -l. Agregar al archivo creado una línea de texto, por ejemplo "Esta es la línea 1", y mostrar su contenido.  Repetir agregando otra línea similar, y mostrar el contenido del archivo.
  6. COMANDOS. Analizar la salida de los siguientes comandos: who, who am i, whoami e indicar las direrencias. Analizar la salida de los comandos hostname, id
  7. COMANDOS. Analizar la salida del comando finger nombre-usuario . Use primero su propio nombre de usuario, luego el de otro usuario del sistema. ¿Qué información brinda? 
  8. COMANDOS. Usando el directorio /bin, mostrar todos los nombres de archivo que empiecen con c; mostrar luego todos losnombres de archivo que terminen con t; mostrar finalmente los nombres de archivo que empiecen con c y terminen con t.
  9. VARIABLES.
    a) Asignar el valor "Lunes" a la variable DIA1, el valor "Martes" a la variable DIA2, hasta asignar "Domingo" a la variable DIA7.
    b) mostrar el valor de todas para verificar.
    c) Usando estas variables, obtener la salida
    Semana: Lunes Martes Miércoles Jueves Viernes Sábado Domingo
    d) Usando sólo las variables definidas, cargar en la variable SEMANA la lista de días, separados por espacios. Mostrar el contenido de SEMANA para verificar.
  10. VARIABLES.
    Usando variables del ambiente del usuario (variables de login), mostrar
    a) vía del directorio propio del usuario;
    b) nombre de login del usuario;
    c) nombre de la terminal en uso en la sesión actual;
    d) nombre del intérprete de comandos actual.
    e) vía de búsqueda de ejecutables.
    f) Mostrar todas las variables de ambiente. ¿Cuáles puede reconocer?
  11. VARIABLES.
    a) Fijar el valor de la variable VIAS en "/usr/doc:/var/lib/dpkg"; mostrar su contenido.
    b) agregar a la variable VIAS el directorio /usr/doc/HOWTO al final, y /usr/doc/FAQ al principio.
  12. ERROR.
    a) ¿Qué muestra el shell para la variable NOEXISTO ? ¿Qué código de error devuelve?
    b) Asignar a la variable NULA la cadena nula. ¿Qué muestra el shell para esta variable? ¿Qué codigo de error devuelve? Repetir asignando blancos.
    c) Asignar a la variable BLANCOS una cadena con blancos embebidos, por ejemplo "Esta cadena contiene blancos". ¿Qué pasa si no se usan comillas al asignar?  Explicar el comportamiento. Mostrar el código de error devuelto en cada caso.
    d) Mostrar el contenido del archivo /etc/group. ¿Qué código de error devuelve el comando?
    e) Mostrar el contenido del archivo noexiste. ¿Qué código de error devuelve el comando
  13. REDIRECCION.
    a) Con el comando cat, mostrar en pantalla el archivo /etc/services.
    b) Escribir el comando cat de modo redireccionando la entrada estándar desde el archivo /etc/services y la salida estándar hacia el archivo servicios.txt. Visualizar servicios.txt.
    c) Usando echo, crear un archivo errores.txt con contenido "Archivo de Errores".
    d) Con el comando cat, intentar mostrar el archivo noexiste.xxx sin redireccionar entrada estándar, pero redireccionando la salida estándar hacia noexiste.txt y el error estándar para  agregar al archivo errores.txt. Visualizar errores.txt.
  14. REDIRECCION (teórico).
    a) Haciendo uso del shell bash invocar el script comotodo para que lea desde el archivo larguisimo, no muestre ni grabe su salida y grabe los errores en el archivo errores.
    b) Repetir para que no muestre ni grabe los errores.
  15. VARIABLES.
    Predecir y explicar la salida de los siguientes comandos:
  16.   echo $LOGNAME
      echo "$LOGNAME"
      echo '$LOGNAME'
      echo \"$LOGNAME\"
      echo "Mi login es $LOGNAME"
      echo 'Mi login es $LOGNAME'
  17. EXPANSIONES DEL SHELL (teórico).
    Escribir expresiones para englobar todos los nombres de archivos que
    a) comiencen con un dígito.
    b) terminen con una vocal.
    c) terminen con una letra mayúscula.
    d) de 6 caracteres terminados en dos dígitos.
    e) formados por tres letras: una minúscula, una mayúscula o minúscula, una vocal minúscula. Ejemplos: sTa, bta, mbu, tTo.
    f) empezados con letra minúscula, terminados con un punto y tres dígitos.
  18. VARIABLES DE AMBIENTE.
    a) visualizar el contenido de la variable que guarda el indicador de comandos; copiar en un papel su valor actual.
    b) Cambiar el indicador de comandos para que se muestre así:
      UNIX listo>
    Recordar que > es un caracter de redirección del shell; es interpretado por el shell.
    c) Inicializar la variable VAR1 con la cadena "shell bash 1". Mostrar su contenido. Invocar ahora el shell csh. Mostrar contenido de la variable VAR1. Explique.
    d) Salga de csh. ¿Qué valor tiene VAR1 ? Explique.
    e) En el primer shell (shell de login), ejecute el comando
      export VAR1

  19. y repita el paso anterior. ¿Qué ha pasado?
      f) Si en lugar de csh invocamos una nueva instancia de bash, ¿ocurrirá lo mismo?
  20. FILTROS.
    a) Obtener una lista de los usuarios habilitados en el sistema, usando el archivo /etc/passwd. Sugerencia: filtrar las líneas de comentario conectando la salida del listado con el comando de filtro grep -v "^#", que elimina las líneas empezadas con "#".
    b) Repetir, pero mostrando sólo nombre de login y nombre en la vida real.
    c) Repetir, ordenando alfabéticamente.
    d) Crear el archivo usuarios.txt con la lista, con un encabezado similar a éste:
  21.     ===================================
        Usuarios en el Sistema.
        Lunes 23 de Agosto de 1999, 20:45
        ==================================
    e) Presentar el contenido del archivo en formato de impresión, con encabezado en cada página diciendo "Lista de Usuarios", longitud de página 23 y margen izquierdo 12.
  22. FILTROS.
  23. a) Contar la cantidad de líneas, palabras y caracteres en el archivo historia.txt.
    b) Contar la cantidad de usuarios habilitados en el sistema.
    c) Contar la cantidad de archivos en el directorio /bin usando el comando ls.
    d) Repetir usando el comando ls -l. Explicar la diferencia.
  24. FILTROS.
  25. a) Mostrar el archivo historia.txt todo en mayúsculas. Resolver bien la ñ y las vocales acentuadas.
    b) Repetir, pero dejando las vocales acentuadas minúsculas como vocales no acentuadas mayúsculas.
    c) Transformar todos los espacios en subrayas (_). Contar ahora las palabras. ¿Cuántas había en el archivo sin transformar?
  26. OPERADOR GRAVE.
  27. a) Escribir comandos para cargar la variable LISTA con los nombres de los archivos del directorio actual.
    b) Crear el archivo usuarios.txt con 4 o 5 nombre propios, uno en cada línea. Cargar en la variable USUARIOS el contenido del archivo usuarios.txt. Mostrar contenido de USUARIOS
    c) Sin editar el archivo usuarios.txt, agregar al final del mismo la fecha y hora del día.
    d) ¿Cómo haría para agregar la fecha y hora del día al principio del archivo?
  28. PROCESOS.
  29. a) Mostrar los procesos propios corriendo en el sistema.
    b) Explicar la salida del comando ps auxw.
    c) Idem para ps ajxw.
    d) Si estamos corriendo varias instancias de bash, ¿cómo sabemos cuál es el shell de login?


Nota. Para estos ejercicios, el archivo historia.txt puede ser sustituído por cualquier archivo de texto en español.


Víctor A. González Barbone  vagonbar en fing edu uy
Instituto de Ingeniería Eléctrica - Facultad de Ingeniería - Montevideo, Uruguay.