100 Muy bien - Universidad de Costa Rica

Anuncio
Universidad de Costa Rica
Facultad de Ingeniería
Escuela de Ingeniería Eléctrica
IE0117 – Programación bajo plataformas abiertas
I ciclo 2012
Profesor
Francisco Siles Canales
Asistente
Félix Suárez Bonilla
Laboratorio
100
Muy bien !
Laboratorio 2
Estudiante
Enrique Sáurez Apuy, A95872
19 de marzo, 2012
Primera Parte: Uso del shell en GNU/Linux
2. ¿Qué sucede en cada caso? ¿Cuándo no funciona el comando echo y por qué?
En el Cuadro 1 se muestran todos los comandos que se ejecutaron en la terminal y cada
uno de los casos. En el primer caso se utiliza el comando echo $SALUDO, pero no se obtiene
respuesta (respuesta vacía), esto se debe a que para este punto no se ha definido la variable de
entorno SALUDO, por lo que al buscarla, no existe, y no se da la respuesta que se está buscando
que es hola.
Para el segundo caso, ya se definió la variable SALUDO, por lo que cuando se ejecuta el
echo $SALUDO, la terminal responde con hola, esto se debe a que no se ha cambiado de bash, y
ya se definió la variable.
El tercer caso, se encuentra en un bash nuevo, y dado que cuando se definió SALUDO
fue en un bash distinto, cuando se utiliza el comando echo, no se obtiene respuesta.
En el cuarto caso, a pesar de estar en un nuevo bash, la variable SALUDO fue exportada
con anterioridad, por lo que sí se puede acceder en cualquier bash nuevo dentro de la misma
terminal. Por lo que al llamarla, esta si responde con hola.
quique@ubuntu:~$ echo $SALUDO //Primer Caso
quique@ubuntu:~$ SALUDO=hola
quique@ubuntu:~$ echo $SALUDO //Segundo caso
hola
quique@ubuntu:~$ bash
quique@ubuntu:~$ echo $SALUDO //Tercer Caso
quique@ubuntu:~$ exit
exit
quique@ubuntu:~$ export SALUDO=hola
quique@ubuntu:~$ bash
equique@ubuntu:~$ echo $SALUDO //Cuarto caso
hola
quique@ubuntu:~$ exit
exit
Cuadro 1: Código echo y creación de variables de entorno
3. ¿Qué sucede con las variables declaradas si cierra la sesión y la inicia de nuevo?
En el Cuadro 2 se muestra la creación de las variables, y su verificación. No se utiliza
printenv para mostrar las variables, porque existen bastantes variables más, que complican su
verificación en el presente documento. Pero, en su momento si fueron mostradas por printenv.
Si se cierra la terminal y se vuelve a abrir, se pierden las variables definidas en la anterior
terminal.
quique@ubuntu:~$ export GRUPO=1 //Primer terminal
quique@ubuntu:~$ export SIGLAS=ie0117
quique@ubuntu:~$ export ESTUDIANTE=enrique
quique@ubuntu:~$ echo $SIGLAS $GRUPO $ESTUDIANTE
ie0117 1 enrique
quique@ubuntu:~$ echo $SIGLAS $GRUPO $ESTUDIANTE//Terminal nueva
Cuadro 2: Variables de entorno,
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?
En el Cuadro 3 se muestra las líneas que se le agregaron al archivo .bashrc, luego en un
terminal nueva se llaman a las variables SIGLA y GRUPO, y se obtiene la respuesta correcta.
Por lo que ahora la variable de entorno ahora es global para cualquier terminal que se abra.
export GRUPO=1
export SIGLA=ie117
Cuadro 3: Valores agregados al .bashrc
quique@ubuntu:~$ echo $SIGLA
ie117
quique@ubuntu:~$ echo $GRUPO
1
Cuadro 4: Invocación a las variables luego de haberlas agregado al .bashrc
5. ¿Qué sucede en cada caso? ¿Qué función cumple la redirección o tubería?
En el Cuadro 5 se muestra el comando utilizado para almacenar la fecha en un documento
denominado “fecha.txt”, el resultado se muestra en Cuadro 6. Si el archivo ya existía este lo
sobrescribe. Luego se utiliza el comando del Cuadro 7, que lo que hace es escribir de nuevo la
fecha pero agregándolo al final del documento “fecha.txt”, esto se observa en el Cuadro 8.
quique@ubuntu:~/Desktop$ date > fecha.txt
Cuadro 5: Comando
Mon Mar 19 08:15:34 CST 2012
Cuadro 6: Contenido de fecha.txt
quique@ubuntu:~/Desktop$ date >> fecha.txt
Cuadro 7: Comando
Mon Mar 19 08:15:34 CST 2012
Mon Mar 19 08:17:48 CST 2012
Cuadro 8: Nuevo contenido de fecha.txt
En el comando del Cuadro 9, se guardan el nombre y otros datos de los archivos (en
formato largo) contenidos en /etc/, donde el inicio del archivo se muestra en el Cuadro 10.
Luego si se utiliza el comando en el Cuadro 11, se reescribe el archivo dir.txt con los nombres de
los archivos en /bin, y se crea el archivo en el Cuadro 12, donde resulta evidente que se modifico
el archivo, es decir, se reescribió el mismo.
quique@ubuntu:~/Desktop$ ls -l /etc/ > dir.txt
Cuadro 9: Comando
total 1284
drwxr-xr-x 3 root root 4096 2012-02-27 09:03 acpi
-rw-r--r-- 1 root root
2981 2011-10-12 08:27 adduser.conf
-rw-r--r-- 1 root root
46 2012-02-27 16:21 adjtime
drwxr-xr-x 2 root root 4096 2012-03-18 14:20 akonadi
drwxr-xr-x 2 root root 4096 2012-03-13 21:29 alternatives
-rw-r--r-- 1 root root
395 2010-06-20 02:11 anacrontab
-rw-r--r-- 1 root root
112 2007-06-22 09:08 apg.conf
drwxr-xr-x 6 root root 4096 2011-10-12 08:28 apm
drwxr-xr-x 3 root root 4096 2011-10-12 08:29 apparmor
…
Cuadro 10: Parte del contenido del archivo dir., txt
quique@ubuntu:~/Desktop$ ls -l /bin/ > dir.txt
Cuadro 11: Comando
total 9056
-rwxr-xr-x 1 root root 950896 2011-05-18 04:00 bash
-rwxr-xr-x 1 root root 31112 2011-12-13 10:30 bunzip2
-rwxr-xr-x 1 root root 1719048 2011-09-01 11:02 busybox
-rwxr-xr-x 1 root root 31112 2011-12-13 10:30 bzcat
lrwxrwxrwx 1 root root
6 2011-12-13 10:30 bzcmp -> bzdiff
-rwxr-xr-x 1 root root 2140 2011-12-13 10:30 bzdiff
lrwxrwxrwx 1 root root
6 2011-12-13 10:30 bzegrep -> bzgrep
-rwxr-xr-x 1 root root 4877 2011-12-13 10:30 bzexe
…
Cuadro 12: Parte del contenido del archivo dir.txt
Luego se utilizó el comando que se observa en el Cuadro 13, el cual genera el archivo
hola.txt con el contenido “Hola Mundo!” como se muestra en el Cuadro 14.
quique@ubuntu:~/Desktop$ echo Hola Mundo! >hola.txt
Cuadro 13: Comando
Hola Mundo!
Cuadro 14: Contenido del archivo hola.txt
En el Cuadro 15 se observa el comando que se utilizó, lo que hace esta línea es tomar el
archivo passwd (como entrada estándar) y lo comprime al archivo passwd.gz (salida estándar).
quique@ubuntu:~/Desktop$ gzip < /etc/passwd > passwd.gz
Cuadro 15: Comando
Luego se ejecuto el comando del Cuadro 16, que lo que hace es descomprimir y mostrar
como salida estándar al archivo “passwd.gz” y luego se realiza un pipe para conectar esta salida
al comando less para que lo muestre en la pantalla de la terminal como se muestra en el Cuadro
17.
gzip -dc passwd.gz |less
Cuadro 16: Comando
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
lp:x:7:7:lp:/var/spool/lpd:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
uucp:x:10:10:uucp:/var/spool/uucp:/bin/sh
Cuadro 17: Parte del contenido de la terminal.
Al editar el comando del Cuadro 18, lo que se hace es buscar un paquete que contenga en
su descripción las palabras “text editor” y luego el resultado de este comando es mostrado en la
terminal utilizando el comando less, tal y como se muestra en el Cuadro 19.
apt-cache search text editor | less
Cuadro 18: Comando
ed - The classic UNIX line editor
emacs - The GNU Emacs editor (metapackage)
emacs23 - The GNU Emacs editor (with GTK+ user interface)
emacs23-bin-common - The GNU Emacs editor's shared, architecture dependent files
emacs23-common - The GNU Emacs editor's shared, architecture independent infrastructure
emacs23-el - GNU Emacs LISP (.el) files
emacs23-nox - The GNU Emacs editor (without X support)
libqscintilla2-5 - The Qt4 port of the Scintilla source code editing widget
libqscintilla2-designer - Qt4 Designer plugin for QScintilla 2
libqscintilla2-dev - The Scintilla source code editing widget for Qt4, development files
libqscintilla2-doc - API documentation for QScintilla 2
linuxdoc-tools - convert LinuxDoc SGML source into other formats
nano - small, friendly text editor inspired by Pico
python-qscintilla2 - Python bindings for QScintilla 2
scribus - Open Source Desktop Page Layout - stable branch
texlive-latex-extra - TeX Live: LaTeX supplementary packages
tmispell-voikko - Ispell wrapper which uses Voikko for spell-checking
x11-apps - X applications
axe - An editor for X
:
Cuadro 19: resultado de la búsqueda de “text editor”
Luego se ejecuta el comando que se muestra en el Cuadro 20, el cual lo que hace es leer
el archivo /etc/passwd, y luego se envía estos datos a un grep buscando la palabra root, la cual
luego despliega el resultado en la siguiente línea, mostrando en que línea del documento contiene
la palabra root.
quique@ubuntu:~/Desktop$ cat /etc/passwd | grep root
root:x:0:0:root:/root:/bin/bash
Cuadro 20: Comando y resultado
A continuación se utiliza el comando mostrado en el Cuadro 21, que lo que hace es enviar
la lectura del documento copyright al comando wc que lo que hace es leer la cantidad de líneas
nuevas, palabras y bytes, en ese orden, y los muestra en la terminal.
quique@ubuntu:~/Desktop$ cat /usr/share/doc/gcc/copyright | wc
42 330 2207
Cuadro 21: Comando y resultado
En el Cuadro 22 se muestra la ejecución del último comando, que lo que hace es mostrar
todos los documentos en /etc/ a través del comando tee, que además de mostrarlo en la terminal,
lo guarda en el documento ls.txt
quique@ubuntu:~/Desktop$ ls -l /etc/ | tee ls.txt
total 1284
drwxr-xr-x 3 root root 4096 2012-02-27 09:03 acpi
-rw-r--r-- 1 root root
2981 2011-10-12 08:27 adduser.conf
-rw-r--r-- 1 root root
46 2012-02-27 16:21 adjtime
drwxr-xr-x 2 root root 4096 2012-03-18 14:20 akonadi
drwxr-xr-x 2 root root 4096 2012-03-13 21:29 alternatives
-rw-r--r-- 1 root root
395 2010-06-20 02:11 anacrontab
-rw-r--r-- 1 root root
112 2007-06-22 09:08 apg.conf
drwxr-xr-x 6 root root 4096 2011-10-12 08:28 apm
drwxr-xr-x 3 root root 4096 2011-10-12 08:29 apparmor
drwxr-xr-x 8 root root 4096 2012-03-18 14:20 apparmor.d
drwxr-xr-x 5 root root 4096 2012-02-27 09:00 apport
drwxr-xr-x 6 root root 4096 2012-03-13 21:20 apt
-rw-r----- 1 root daemon 144 2011-05-16 04:32 at.deny
drwxr-xr-x 2 root root 4096 2012-02-27 08:59 at-spi2
Cuadro 22: comando y resultado
Segunda Parte: Programación de tareas con cron
En el Cuadro 23, se muestra como se completo el ejercicio requerido, que era escribir en
el archivo /tmp/date para que se escriba cada minuto la fecha en el archivo /tmp/date
* * * * * date >> /tmp/date
quique@ubuntu:~$ cat /tmp/date
Mon Mar 19 09:00:01 CST 2012
Mon Mar 19 09:01:01 CST 2012
Cuadro 23: Edición del crontab, y resultado
En el Cuadro 24 se muestra la modificación hecha al archivo /etc/crontab para realizar la
acción solicitada, que era escribir “Esto es una prueba” en el archivo /root/prueba dentro de tres
minutos, y luego cada jueves a esa misma hora. Dado que la hora actual es la 9:14, dentro de 3
minutos es las 9:17, en el Cuadro 25 se verifica el funcionamiento de la modificación. Dado que
antes de las 9:17 no se ha generado el archivo por lo que se busca el archivo y este todavía no
existe. Luego de las 9:17 ya existe el archivo, y se escribe en la pantalla “Esto es una prueba”.
17 9 19 3 * root echo "Esto es una prueba" > /root/prueba
17 9 * * 4 root "Esto es una prueba" > /root/prueba
Cuadro 24: modificación del archivo /etc/crontab
quique@ubuntu:~$ sudo cat /root/prueba
cat: /root/prueba: No such file or directory
quique@ubuntu:~$ date
Mon Mar 19 09:16:47 CST 2012
quique@ubuntu:~$ sudo cat /root/prueba
Esto es una prueba
quique@ubuntu:~$ date
Mon Mar 19 09:17:20 CST 2012
Cuadro 25: salida estándar para verificar que la modificación en /etc/crontab funciona
Descargar