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 #).
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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?
- 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.
- 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.
- 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?
- 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.
- 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
- 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.
- 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.
- VARIABLES.
Predecir y explicar la salida de los siguientes comandos:
echo $LOGNAME
echo "$LOGNAME"
echo '$LOGNAME'
echo \"$LOGNAME\"
echo "Mi login es $LOGNAME"
echo 'Mi login es $LOGNAME'
- 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.
- 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
y repita el paso anterior. ¿Qué ha pasado?
f) Si en lugar de csh invocamos una nueva instancia
de bash, ¿ocurrirá lo mismo?
- 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:
===================================
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.
- FILTROS.
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.
- FILTROS.
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?
- OPERADOR GRAVE.
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?
- PROCESOS.
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.