Primera Parte: Uso del Shell en GNU/Linux

Anuncio
100
UNIVERSIDAD DE COSTA RICA
ESCUELA DE INGENIERÍA ELÉCTRICA
IE-0117 Programación Bajo Plataformas Abiertas
Profesor: Francisco Siles Canales
Asistente: Félix Suárez Bonilla
Estudiante: Christian Chaves Bejarano A81740
Laboratorio No. 2
El Shell de GNU/ Linux
Primera Parte: Uso del Shell en GNU/Linux
1. Usando comandos conocidos, explore las funciones de autocompletado, historial y
búsqueda de comando del Shell, así como las distintas formas de indicar nombre de
archivos y directorios.
2. Explore el funcionamiento de las variables de entorno. Ejecute los siguientes
comandos:
$ echo $SALUDO
$ SALUDO=hola
$ echo $SALUDO
$ bash
$ echo $SALUDO
$ exit
$ export SALUDO=hola
$ bash
$ echo $SALUDO
$ exit
¿Qué sucede en cada caso? ¿Cuándo no funciona el comando echo y porqué?
Mediante el comando echo se imprime en pantalla la entrada asignada a cierta
variable, de esta manera cuando ingresamos el primer comando en la terminal echo
$SALUDO, no se imprime nada debido a que SALUDO no tiene ningún valor asignado, luego
asignando a la variable de entorno SALUDO=hola, mediante el comando echo se imprime en
pantalla la salida hola definida para la variable SALUDO, esto se puede observar en imagen 1.
Luego al ingresar bash en línea de comando nos trasladamos a un nuevo shell, del tal manera
que si tratamos de ver que salida nos imprime el comando echo $SALUDO, este será en
blanco de nuevo debido a que debemos definir de nuevo la variable SALUDO mediante el
comando export VARIABLE=variable.
Imagen 1. Comando echo y variables de entorno.
3. Declare algunas variables usando el comando export. Verifique que la declaración
haya sido exitosa usando printenv. ¿Qué sucede con las variables declaradas si cierra
la sesión y la inicia de nuevo?
A partir del comando export declaramos algunas variables, en mi caso en
específico declara las variables A,B y C con sus respectivos valores A=a B=b y C=c,
como se puede observar en imagen 2. A partir del comando printenv se puede
observar que la declaración ha sido exitosa, de nuevo hago referencia a imagen 2
para respaldar lo dicho anteriormente. Si cerramos e iniciamos sesión las variables no
se guardan las variables declaradas o definidas anteriormente por lo tanto no pueden
ser utilizadas, esto quiere decir que si abrimos una nueva terminal, la salida de las
variables A, B y C serán nulas o en blanco.
Imagen 2. Comando export y variables.
4. Declare algunas variables usando export, pero esta vez editando el archivo ~/.bashrc
(archivo de configuración de bash para el usuario). Cierre la sesión e ingrese de
nuevo. ¿Qué sucede ahora con las variables?
Si realizamos un proceso similar al anterior, pero modificando el
archivo .bashrc el cual almacena las variables declaradas y los datos pertenecientes al
shell bash, podemos cerrar sesión e iniciar de nuevo sin temor a perder la información
de las variables definidas. De esta manera mediante el comando nano o gedit
modicamos el archivo de configuración antes mencionado y agregamos las variables
de entorno deseadas, en este caso SALUDO1=buenosdias SALUDO2=buenastardes
SALUDO3=buenasnoches; imagen 3. De esta manera mediante el comando export
definimos las variables en línea de comandos y podemos seguir utilzando las
variables aún cuando cerremos sesión. Se puede observar los anterior en imagen 4.
Imagen 3. Edición de archivo .bashrc
Imagen 4. Archivo bashrc
5. Explore las redirecciones de entrada y salida y las tuberías usando los siguientes
comandos (si tiene dudas sobre lo que hace alguno de los comandos, consulte la
página de manual):
$ date > fecha.txt CASO 1
$ date >> fecha.txt CASO 2
$ ls -l /etc/ > dir.txt CASO 3
$ ls -l /bin/ > dir.txt CASO 4
$ echo Hola Mundo! > hola.txt CASO 5
$ gzip < /etc/passswd > passwd.gz CASO 6
$ gzip –dc passwd.gz | less CASO 7
$ apt-cache search text editor | less CASO 8
$ cat /etc/passwd | grep root CASO 9
$ cat /usr/share/doc/gcc/copyright | wc CASO 10
$ ls –l /etc/ | tee ls.txt CASO 11
¿Qué sucede en cada caso? ¿Qué función cumple la redirección o tubería?
Dividiendo las redirecciones de entrada y salida en casos, analizo y explico uno a uno
haciendo referencia a las imágenes siguientes. Para el primer caso $ date > fecha.txt,
sabemos de antemano que mediante el comando date se obtiene en salida la fecha del
sistema, de tal manera que mediante el símbolo “>” redireccionamos la información
brindada por el comando date al archivo fecha.txt. Dado que el archivo no existe se crea con
el nombre asignado y dado que no existe información se ingresa la respuesta del comando
date. Para el segundo caso es muy similar sin embargo en este caso mediante “>>” logramos
direccionar la salida del comando date al archivo fecha.txt. En este caso dado que el archivo
ya existía, el nuevo contenido es agregado al final
Imagen 5. Comando date y archivo fecha.txt
En la caso 3 y 4, guardamos la salida del comando ls –l /etc/ y ls –l / bin/, en
los archivos dir.txt. Se puede observar en imagen 6, que dado que el archivo no estaba
creado se crea en el directorio donde nos encontremos y se guarda el output de los
comandos respectivos en el archivo dir.txt. Dado que utizamos el redireccionamiento
mediante “>” entonces guardamos inicialmente los valores desplegadas por el comando
ls –l /etc/ y luego le caemos encima mediante el comando ls –l / bin/, a partir del
comando cat dir.txt podemos ver lo grabado dentro del archivo mencionado.
Imagen 6. Archivo dir.txt
Como vimos anteriormente el comando echo despliega como respuesta la
cadena de valores asignadas a este comando, entonces para el caso 5 mediante el
comando echo Hola Mundo!, redireccionado hacia el archivo hola.txt este archivo se
crea y dentro de él se guarda la salida desplega por el comando echo. Para observar lo
que ocurre en imagen 8 donde se puede utilizar el comando cat hola.txt;de esta
manera se observa lo que despliega el archivo hola.txt.
Siguiendo con el caso 6 y haciendo referencia a la imagen 9, podemos observar
que mediante el gzip < /etc/passswd > passwd.gz, se logra redireccionar la entrada del
archivo a un archivo comprimido y a su vez nombrarlo passwd.gz. A su vez mediante
el comando gzip –dc passwd.gz | less, este archivo se descomprime y con el uso de la
tubería o pipe se toma la salida del comando a la izquierda como la salida del comando
a la derecha dado que less es utilizado para desplegar en pantalla lo existente dentro
de cierto archivo.
Imagen 7. Archivo hola.txt
Imagen 8. Archivo passwd.gz
Imagen 9. Comando gzip -dc
Para el caso 8 hago referencia a imagen 10, para observar lo logrado mediante la
tubería, dado que el comando apt –cache search text editor se encarga de buscar los
paquetes con este nombre, busca y encuentra el paquete text editor y luego mediante el
símbolo “|” se hace el pipe y se logra redireccionar la salida del comando inicial con el
comando less de la izquierda. De tal manera que lo desplegado en pantalla es la información
acerca del paquete text editor. Siguiendo con las tuberías y el caso 9, podemos observar que
el comando cat /etc/passwd se encarga de desplegar la información existente dentro del
archivo /etc/passwd y mediante la tubería o pipe se utiliza esta salida como entrada del
comando grep, de tal manera que la tubería cat /etc/passwd | grep root, se encarga de buscar
la cadena de líneas que coincidan con la palabra root dentro del archivo asignado. Podemos
observar esto en la imagen 11. Por último para las redirecciones y tuberías de los casos 10 y
11, se observa que el uso del comando wc para el caso 10 donde se toma la salida del
comando cat /usr/share/doc/gcc/copyright y se direcciona a el comando wc el cual se
encarga de contar los caracteres del archivo indicado y se despliega en pantalla en el
siguiente orden líneas/palabras/caracteres. Para finalizar esta sección en el caso 11 se
utilizado el comando tee, el cual es un comando que escribe en salida estándar y en un
archivo todo lo que es introducido en su entrada estándar. En este caso en específico, se
observa en imagen 12 como se crear el archivo ls.txt y además se despliega en pantalla la
información de entrada del comando respectivo.
Imagen 10. Tuberías y comando less
Imagen 11. Tuberías y comando grep
Imagen 12. Tuberías y comando tee.
Segunda Parte: Programación de tareas con cron
1. Edite el crontab del usuario y agregue el comando
date >> /tmp/date
para que sea ejecutado cada minuto. Espere un par de minutos y compruebe que la acción
se haya efectuado correctamente.
Mediante el comando crontab –e se puede modificar el crontab del usuario, no
tenemos problemas con los permisos dado que tenemos que modificar el cron relacionado con
el usuario. Agregamos el comando * * * * * date >> /tmp/date al final del archivo del crontab,
los asteriscos significan respectivamente minutos, horas, día, mes y día de la semana. Dado
que lo que nos interesa en nuestro ejercicio es ejecutar el comando cada minuto dejamos sin
valor estos datos. Sabemos ya que el date imprime en pantalla la fecha y hora del servidor,
luego redireccionamos este valor al archivo /tmp/date. Esto se puede observar en imagen 13,
luego después de haber modificado el crontab esperamos en la terminal unos minutos y
mediante el comando cat /tmp/date, podemos observar el funcionamiento correcto de esta
acción, hago referencia a imagen 14.
Imagen 13. Edición del crontab del usuario.
Imagen 14. Comando date >> /tmp/date
2. Edite el crontab del sistema y agregue el comando que se muestra a
continuación para que sea ejecutado dentro de tres minutos (compruebe la hora
del sistema usando el comando date) y todos los demás días jueves de cada
semana a la misma hora. El comando debe ser ejecutado por el usuario root:
echo “Esto es una prueba” > /root/prueba
Espere y compruebe su funcionamiento.
En este caso debido a que debemos modificar el crontab del sistema,
debemos modificar el archivo de configuración /etc/crontab mediante comandos
como el gedit o nano sin embargo dado que vamos a modificar un archivo de root
necesitamos permiso del superusuario esto mediante el comando sudo delante
del comando. Se puede observar que mediante el comando gedit modifico el
archivo de configuración y agrego al final el comando 43 23 25 03 * dado que la
feha del servidor en el momento de realizar el ejercicio era 23:42:38 del 25 de
marzo. Luego cerramos el archivo y esperamos un minuto para observar la acción
del proceso mediante el comando sudo cat /root/prueba de tal manera que en
pantalla se despliega “Esto es una prueba”. Por último se agrega en el archivo de
configuración el comando 43 23 * * 4 para lograr lo solicitado de obtener la misma
respuesta todos los jueves a la misma hora. Esto se puede observar en la imagen
15 y 16 respectivamente.
Imagen 15. Edición del crontab del servidor
Imagen 16. Edición del crontab del usuario.
Descargar