Curso Básico de UNIX
Programación del 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 #).
En los sistemas con NIS, para passwd y group usar el
comanto ypcat en lugar de cat para listar estos archivos, o el comando
ypmatch para extraer una línea sola de alguno de ellos. Ejemplos:
ypcat passwd
ypcat group
ypmatch jperez passwd
Nota.
En la construcción de los siguientes programas o 'scripts' se valorará
la presentación interna y externa. En la presentación interna,
importa la indentación, los comentarios, la claridad de los comandos,
la significación de los nombres elegidos; todo esto debe permitir considerar
al programa como 'autodocumentado'. En la presentación externa, importan
las leyendas aclaratorias, ayudas, y avisos de ejecución que favorezcan
al usuario ocasional. Se aconseja colocar los archivos de los programas en
un subdirectorio bin del directorio propio del usuario, donde no deberá
haber otra cosa que estos programas.
1. Recibir un nombre de archivo como parámetro e indicar,
imprimiendo todas las leyendas que correspondan, si el archivo es legible,
modificable y ejecutable por el usuario.
2. Recibir varios
nombres de archivo como parámetros, y para cada uno validar si el
nombre corresponde a un archivo común existente, y si es así
mostrarlo en pantalla paginando.
3. Recibir un nombre de directorio, validar existencia y condición
de directorio y mostrar nombres de todos los directorios y subdirectorios
bajo él, en formato de página largo 23.
4. Escribir un programa seaejec que reciba un nombre de
archivo, verifique que existe y que es un archivo común, lo convierta
en ejecutable para el dueño y el grupo y muestre el modo final.
5. Escribir un programa copiabin.sh que mueva todos los
programas del directorio actual (archivos ejecutables) hacia el subdirectorio
bin del directorio propio del usuario, muestre los nombres de los
que mueve e indique cuántos ha movido o que no ha movido ninguno.
Si el directorio bin no existe, deberá ser creado.
6. Usando el archivo /etc/passwd escribir el programa usuarios
que lista los nombres de login, el directorio propio del usuario y el intérprete
invocado por defecto de todos los usuarios, ordenados alfabéticamente
por nombre de login.
7. Usando solamente el archivo /etc/group, escribir los siguientes
programas:
a) 'grupo1': listar los nombres y números de grupo y la lista de
usuarios de cada uno, ordenados por nombre.
b) 'grupo2': igual, ordenados por número de grupo.
c) 'grupo3': reúne las dos salidas anteriores, con leyendas explicativas
adecuadas para cada parte y para cada columna, así como nombre de la
máquina y fecha del día.
8. Escribir un programa usugrup que dado un nombre de
login de usuario determine si existe en el sistema, y si es así, presente
su nombre de usuario, , número de usuario (UID), grupo primario y
grupos secundarios si los tiene, con leyendas adecuadas.
9. Escribir un programa grupusu que dado un nombre de
grupo determine si existe en el sistema, y si es así, presente su
nombre, número de grupo (GID), y lista de usuarios que pertenezcan
a él, ya sea como grupo primario (en /etc/passwd) o como grupo secundario
(lista en /etc/group).
10. Escribir los siguientes programas:
a) ligass: muestra los nombres de archivo que son enlaces simbólicos.
b) ligash: muestra los archivos que tiene enlaces hard.
Ambos programas reciben un nombre como como parámetro, y validarán
que corresponda a un directorio del sistema.
*11. Escribir un programa saludo que, según la
hora, escriba el saludo correspondiente al nombre de pila del usuario. En
el archivo /etc/passwd los usuarios deben estar ingresados con nombre y apellido
separados por blanco. Los saludos corresponden a las siguientes horas: Buenos
días, de 05:00 hasta 12:59; Buenas tardes, de 13:00 hasta 19:59; Buenas
noches 20:00 hasta 04:59. Ejemplo de mensaje: Buenos días, Juan.
A efectos de pruebas, se recibirán la hora y el nombre de login
como parámetros, dejando comentados los comandos donde se extrae la
hora real y se toma el usuario real.
12. Un script de respaldo produce, entre otros mensajes, líneas
del tipo
"Total bytes written 18804023"
Guarda su salida en el archivo respaldo.error. Escribir un script
total.cinta que sume los bytes grabados e indique el total en bytes,
Mb y Gb.
Crear un archivo respaldo.error de prueba, con un contenido tal
como
Víctor A. González Barbone vagonbar en fing edu uy
Instituto de Ingeniería Eléctrica
- Facultad de Ingeniería - Montevideo,
Uruguay.