La shell bash guia de ejercicios
Transcripción
La shell bash guia de ejercicios
1 La shell bash Capítulo 1 Introducción a Bash Conceptos clave • • • • La shell por defecto en Red Hat Enterprise Linux es la shell bash. La shell bash se puede utilizar de modo interactivo o como un lenguaje de escritura de gran alcance. Tras el arranque, bash ejecuta comandos hallados en el archivo ~/.bashrc, permitiéndole a los usuarios personalizar su shell. La shell bash guarda el historial de las líneas de comando ejecutadas. La líneas de comando se pueden recuperar desde el historial mediante varias expansiones de historial que comienzan por "!". Preguntas Question 1 ¿Cuál es la shell predeterminada en Red Hat Enterprise Linux? A. /bin/conch B. /bin/sh C. /usr/bin/tcsh D. /bin/bash E. None of the above Question 2 ¿Qué podría interpretarse como un comentario de una shell bash? A. /* blagh */ B. % blagh C. # blagh D. B and C E. None of the above Question 3 2 La shell bash ¿Para cuál de las siguientes tareas la shell bash se utiliza más? A. Ejecutar comandos para usuarios de modo interactivo B. Cálculos numéricos C. Ejecución automática de comandos desde scripts D. A y C E. Todas las anteriores Question 4 Tras arrancar, ¿desde qué archivo bash ejecuta automáticamente los comandos? A. ~/bash_startup B. ~/.bash_startup C. ~/.bash D. ~/.bashrc E. None of the above Utilice la siguiente salida del comando history para contestar las siguientes 4 preguntas. Para cada pregunta, asuma que el comando se teclea directamente después del comando history como se muestra a continuación. [elvis@station elvis]$ history 4 cd .. 5 ls 6 cd doc/ 7 ls ... 977 xmms & 978 ls -al /tmp/.esd/socket 979 rm /tmp/.esd/socket 980 ps aux | grep karen 981 pgrep -u karen 982 rm /tmp/.esd/socket 983 su 984 ls 985 ls -l /tmp/.esd/ 986 ls -ld /tmp/.esd/ 987 s u 988 su 989 history Question 5 3 La shell bash ¿Qué comando se sustituiría si elvis después tecleara !5? A. xmms & B. rm /tmp/.esd/socket C. ls D. historial E. None of the above Question 6 ¿Qué comando se sustituiría si elvis después tecleara !!? A. xmms & B. cd .. C. su D. ls E. None of the above Question 7 ¿Qué comando se sustituiría si elvis después tecleara !-5? A. xmms & B. ls C. ls -l /tmp/.esd/ D. historial E. None of the above Question 8 4 La shell bash ¿Qué comando se sustituiría si elvis después tecleara !p? A. ps aux | grep karen B. pgrep -u karen C. ps aux D. pico /etc/hosts E. La sustitución no se puede determinar a partir de la información provista. Question 9 ¿Qué secuencias se pueden utilizar para acceder a partes del historial de comandos de bash? A. ESC-. B. CTRL-. C. CTRL-H D. CTRL-ALT-F3 E. None of the above Question 10 ¿Qué comando se utiliza para listar el historial de comandos de bash? A. historial 5 La shell bash B. hist C. h D. command E. A y D Capítulo 2 Listas de comandos y scripts Conceptos clave • • • • Comandos múltiples se pueden separar con un ;. Tras la salida, cada comando devuelve un entero a su padre denominado valor de retorno. La variable de shell $? se expande al valor de retorno de un comando ejecutado previamente. && y || separan condicionalmentecomandos múltiples. Preguntas Question 1 ¿Qué no se utiliza como nombre de variable de shell? A. NAME B. PHONE_1 C. Addr2 D. ZipCode E. All of the above could be used as the name of a shell variable. 6 La shell bash Question 2 ¿Cuál de los siguientes no puede utilizarse como nombre de una variable de entorno? A. NAME B. PHONE_1 C. Addr2 D. ZipCode E. All of the above could be used as the name of a environment variable. El usuario elvis lee el siguiente párrafo desde la página de manual date(1). ENVIRONMENT TZ line param- Specifies the timezone, unless overridden by command eters. If neither is specified, the setting from /etc/localtime is used. Al ejecutar el comando date descubre que la zona horaria actual es EDT. [elvis@station elvis]$ date Fri Sep 5 15:46:02 EDT 2003 En un esfuerzo por configurar su zona horaria como MDT, elvis agrega la siguiente línea al archivo .bashrc en su directorio de inicio. TZ=MDT Question 3 El usuario elvis inicia una nueva subshell y ejecuta el comando date, esperando ver la fecha reportada en la zona horariaMDT. No obstante, el comando date aún reporta la fecha en la zona horaria EDT. ¿Qué hizo mal elvis? A. The variable TZ is being set as a shell variable, not an environment variable. B. Para que los cambios en el archivo ~/.bashrc surtan efecto, elvis debe salir y reiniciar (en vez de iniciar una nueva subshell). 7 La shell bash elvis debe establecer permisos ejecutables en el archivo .bashrc en su directorio de inicio. elvis utilizó una sintaxis errada y debería haber agregado la línea TZ = MDT en D. su lugar. C. E. Ninguna explica de forma adecuada el error que cometió elvis. Question 4 ¿Qué cambio debería hacer elvis para corregir su error? A. Debería modificar la línea agregada a .bashrc para leer export TZ=MDT B. Ejecutar el comandochmod a+x ~/.bashrc Debería modificar la línea agregada a .bashrc para que lea TZ=MDT; export C. TZ D. Either A or C E. Ninguno de estos pasos resolvería el problema. Question 5 ¿Qué establecería correctamente la variable de shell ADDR como 123 Elm St.? A. ADDR= 123_Elm_St. B. ADDR = 123 Elm St. C. ADDR="123 Elm St." D. ADDR=123_Elm_St. E. None of the above. 8 La shell bash Question 6 ¿Cuál de las siguientes no es una característica de las variables de entorno? A. Todos los procesos usan variables de entorno, no sólo aquellos que ejecutan la shell bash. B. La variables de entorno son heredadas por defecto por los procesos hijos. C. Upon startup, the bash shell clears all previously defined environment variables. D. Las variables de entorno pueden examinarse mediante archivos que se encuentran en el sistema de archivos /proc. E. Las variables de entorno poseen todas las características. Question 7 ¿Qué comando presentaría el id (pid) del proceso de la shell actual? A. echo $$ B. echo $! C. echo $PID D. echo $BASH_PID E. None of the above. Question 8 ¿Cuál de los siguientes comandos crearía un archivo llamado jan_reports.txt? A. MONTH=jan; touch ${MONTH}_report.txt 9 La shell bash B. MONTH=jan; touch $MONTH_report.txt C. MONTH= jan; touch $MONTH_report.txt D. MONTH= jan; touch $"MONTH"_report.txt E. A y B Question 9 ¿Cuál de los siguientes comandos agregaría el directorio /opt/bin al valor actual de la variable de entorno PATH? A. PATH=$PATH:/opt/bin B. PATH+=/opt/bin C. PATH=${PATH}+"/opt/bin" D. A y B E. Todas las anteriores El usuario elvis ejecuta el siguiente comando. [elvis@station elvis]$ STYLE=terse Question 10 ¿Cuál de los siguientes comandos podría utilizarse para examinar el valor de STYLE? A. set B. env C. cat /proc/$$/environ D. export E. A y C 10 La shell bash Capítulo 3 Variable de bash Conceptos clave • • • • • Las variables de la shell se asignan mediante una sintaxis A=apple. Las variables se examinan ("desreferencian") con el caracter $ como en echo $A. En el nivel de kernel, cada proceso tiene una colección de variables de entorno que los procesos hijos heredan. El comando export convierte una variable de shell en una variable de entorno. Los comandos set y env listan las variables de shell y las variables de entorno, respectivamente. Preguntas Question 1 ¿Qué signo de puntuación no está asociado con la expansión de la línea de comandos bash? A. { } B. ~ C. $ D. * E. % Question 2 Cuando es evaluado por la shell bash, ¿ a cuántas palabras se expandirá lo siguiente? {jan,feb,mar}.{data,report}.{txt,html} A. 3 B. 8 C. 9 D. 12 E. 24 11 La shell bash Question 3 ¿Cuál de las siguientes líneas de comando crearían un archivo llamado make $ at home! A. touch "make $ at home"\! B. touch 'make $ at home!' C. touch 'make $'\ at\ home\! D. A y C E. Todas las anteriores Question 4 En una instalación predeterminada de Red Hat Enterprise Linux, el símbolo ~aristotle muy probablemente se expandirá a qué directorio? A. /home B. /home/aristotle C. /tmp/aristotle D. /aristotle E. None of the above Question 5 Cuando el usuario plato ejecuta el siguiente comando, ¿cuál es el nombre del archivo en que se escribe? cal > calendar.$(id -un).txt A. calendar.txt B. calendar.plato.txt C. calendar.id -un.txt D. calendar.512.txt E. None of the above 12 La shell bash Question 6 Si asumimos que prince es un miembro de los grupos prince y music, ¿cuál de los siguientes comandos produciría la siguiente salida? I am a member of: prince music A. echo "I am a member of: $(id -Gn)" B. echo 'I am a member of: $(id -Gn)' C. echo I am a member of: "id -Gn" D. echo I am a member of: `id -Gn` E. A y D En la siguiente transcripción, prince está tratando de crear un archivo cuyo nombre de archivo contenga la hora actual, tal como timestamp.10.23.43. Use la siguiente transcripción para contestar las dos preguntas a continuación. [prince@station prince]$ touch timestamp.'date +%H.%M.%S' [prince@station prince]$ ls timestamp.date +%H.%M.%S Question 7 ¿Cuál de las siguientes razones explican mejor el porqué prince no creó el nombre de archivo que deseaba? Porque como el comando date (y su argumento) contiene un espacio, prince tenía que haber utilizado comillas dobles. La shell bash no pudo localizar el comando date y por lo tanto dejó el comando B. "tal como está" en lugar de ejecutar una sustitución de comandos. Porque como los caracteres de porcentaje en date no se escaparon,bash no C. ejecutó sustitución de comandos. A. D. The user prince did not use the correct syntax for command substitution. 13 La shell bash E. None of the above. Question 8 ¿Cuál de las siguientes líneas ejecutarían correctamente la operación de prince? A. touch timestamp.$(date +%H.%M.%S) B. touch timestamp.$((date +%H.%M.%S)) C. touch timestamp.`date +%H.%M.%S` D. A y C E. None of the above Use the following transcript to answer the next two questions. [prince@station prince]$ COLOR=red [prince@station prince]$ ls Question 9 Si prince fuera luego a ejecutar el siguiente comando, ¿qué salida se produciría? echo "My favorite colors are {blue,green,$COLOR} !!" A. My favorite colors are {blue,green,red} ls B. My favorite colors are blue green red !! C. My favorite colors are blue green $COLOR ls D. My favorite colors are {blue,green,$COLOR} !! E. My favorite colors are {blue,green,red} Question 10 14 La shell bash Si prince fuera luego a ejecutar el siguiente comando, ¿qué salida se produciría? echo 'My favorite colors are {blue,green,$COLOR} !!' A. My favorite colors are {blue,green,red} ls B. My favorite colors are {blue,green,$COLOR} !! C. My favorite colors are blue green red !! D. My favorite colors are blue green $COLOR ls E. None of the above Capítulo 4 Expansión de la línea de comandos Conceptos clave • • • • • La shell bash expande ciertos metacaracteres de línea de comandos antes de interpretar el comando. La expansión con la tilde amplía los símbolos que comienzan por una tilde (~) a los directorios de inicio de usuarios. La expansión de llaves amplía los símbolos con corchetes ({}) en palabras múltiples, cada una contiene una sola palabra a partir de la lista especificada. La sustitución de comandos expande el texto delimitado por comillas invertidas (``) o "dólar paréntesis" ($()) en la salida producida por el comando encerrado. Las comillas dobles ("..." ), las comillas sencillas ('...') y el caracter de barra invertida pueden usarse para evitar que la shell expanda los caracteres. Preguntas Question 1 ¿Qué signo de puntuación no está asociado con la expansión de la línea de comandos bash? 15 La shell bash A. { } B. ~ C. $ D. * E. % Question 2 Cuando es evaluado por la shell bash, ¿ a cuántas palabras se expandirá lo siguiente? {jan,feb,mar}.{data,report}.{txt,html} A. 3 B. 8 C. 9 D. 12 E. 24 Question 3 ¿Cuál de las siguientes líneas de comando crearían un archivo llamado make $ at home! A. touch "make $ at home"\! B. touch 'make $ at home!' C. touch 'make $'\ at\ home\! D. A y C E. Todas las anteriores Question 4 En una instalación predeterminada de Red Hat Enterprise Linux, el símbolo ~aristotle muy probablemente se expandirá a qué directorio? A. /home B. /home/aristotle C. /tmp/aristotle 16 La shell bash D. /aristotle E. None of the above Question 5 Cuando el usuario plato ejecuta el siguiente comando, ¿cuál es el nombre del archivo en que se escribe? cal > calendar.$(id -un).txt A. calendar.txt B. calendar.plato.txt C. calendar.id -un.txt D. calendar.512.txt E. None of the above Question 6 Si asumimos que prince es un miembro de los grupos prince y music, ¿cuál de los siguientes comandos produciría la siguiente salida? I am a member of: prince music A. echo "I am a member of: $(id -Gn)" B. echo 'I am a member of: $(id -Gn)' C. echo I am a member of: "id -Gn" D. echo I am a member of: `id -Gn` E. A y D En la siguiente transcripción, prince está tratando de crear un archivo cuyo nombre de archivo contenga la hora actual, tal como timestamp.10.23.43. Use la siguiente transcripción para contestar las dos preguntas a continuación. [prince@station prince]$ touch timestamp.'date +%H.%M.%S' [prince@station prince]$ ls timestamp.date +%H.%M.%S Question 7 17 La shell bash ¿Cuál de las siguientes razones explican mejor el porqué prince no creó el nombre de archivo que deseaba? Porque como el comando date (y su argumento) contiene un espacio, prince tenía que haber utilizado comillas dobles. La shell bash no pudo localizar el comando date y por lo tanto dejó el comando B. "tal como está" en lugar de ejecutar una sustitución de comandos. Porque como los caracteres de porcentaje en date no se escaparon,bash no C. ejecutó sustitución de comandos. A. D. The user prince did not use the correct syntax for command substitution. E. None of the above. Question 8 ¿Cuál de las siguientes líneas ejecutarían correctamente la operación de prince? A. touch timestamp.$(date +%H.%M.%S) B. touch timestamp.$((date +%H.%M.%S)) C. touch timestamp.`date +%H.%M.%S` D. A y C E. None of the above Use the following transcript to answer the next two questions. [prince@station prince]$ COLOR=red [prince@station prince]$ ls Question 9 Si prince fuera luego a ejecutar el siguiente comando, ¿qué salida se produciría? echo "My favorite colors are {blue,green,$COLOR} !!" A. My favorite colors are {blue,green,red} ls B. My favorite colors are blue green red !! C. My favorite colors are blue green $COLOR ls 18 La shell bash D. My favorite colors are {blue,green,$COLOR} !! E. My favorite colors are {blue,green,red} Question 10 Si prince fuera luego a ejecutar el siguiente comando, ¿qué salida se produciría? echo 'My favorite colors are {blue,green,$COLOR} !!' A. My favorite colors are {blue,green,red} ls B. My favorite colors are {blue,green,$COLOR} !! C. My favorite colors are blue green red !! D. My favorite colors are blue green $COLOR ls E. None of the above Capítulo 5 Personalización de la shell Conceptos clave • • • • • • • La shell bash internamente implementa ciertos comandos sencillos que están muy ligados con la conducta de la shell. Estos se conocen como los comandos incorporados. Los alias de shell crean comandos aparentes que expanden a texto arbitrario. Los alias de shell se establecen y examinan con el comando alias. Los alias de shell se remueven con el comando unalias. El intérprete de comandos de la shell bash se puede personalizar mediante la variable PS1. Las banderas de shell se pueden establecer con el comando set -f y se limpian con set +f. Las opciones de shell se examinan, establecen y se anulan con el comando shopt. 19 La shell bash Preguntas A title El usuario prince está tratando de hallar el ejecutable para el comando cd. Use la transcripción acontinuación para contestar la siguiente pregunta. [prince@station prince]$ which cd /usr/bin/which: no cd in (/bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr/X11R6/b in:/home/prince/bin) Question 1 ¿Cuál es la mejor razón por la cual no se encontró el ejecutable para el comando cd? A. El paquete RPM coreutils no está instalado en el sistema. B. El comando vive fuera de la ruta de prince. C. The command is a bash builtin command. D. La variable PATH está mal configurada (los directorios listados deberían ir separados por espacios, no comas). E. None of the above. Question 2 ¿cuál de los siguientes crearía un alias llamado tf el cual se expandiría a la frase tail f? A. alias tf=tail -f B. tf=tail -f 20 La shell bash C. alias tf="tail -f" D. alias tf = "tail -f" E. C y D Question 3 ¿Cuál de los siguientes se podría utilizar para examinar los alias actuales para tf? A. alias -s tf B. alias tf C. showalias tf D. alias -d tf E. None of the above Question 4 ¿Cuál de los siguientes suprimiría el alias tf? A. unalias tf B. alias tf C. rmalias tf D. alias -d tf E. None of the above Question 5 El usuario prince ha personalizado su prompt para que aparezca de la siguiente manera. El tiempo es la hora actual y el número 613 es el número de historial del comando actual. ¿Cuál de los siguientes comandos configuraría la variable PS1 correctamente? (02Sep03-11:11:53) [prince@tation ~] 613 $ A. PS1="(\d) [\u@\h \w] !\# " 21 La shell bash B. PS1="($(date)) [\u@\h] \! \$ " C. PS1="(\d) [$(whoami)] \! $ " D. PS1="($(date --iso-8601)) [\u@\h \w] \! \$ " E. None of the above La siguiente transcripción muestra a prince tratando de iniciar sesión en una consola virtual. Refiérase a esto cuando conteste la siguiente pregunta. Red Hat Enterprise Linux release 3 (Taroon) Kernel 2.4.20-4ES on an i686 station login: prince Password: Last login: Tue Sep 9 08:43:15 on tty3 login: prince -bash: prince: command not found login: Question 6 ¿Cuál de las siguientes sería la explicación maś adecuada al problema de prince? A. No hay ninguna cuenta para el usuario prince. B. Hay un error de sintaxis en el archivo ~/.bashrc, por lo tanto la shell está saliendo en el arranque. C. El usuario no tiene un directorio de inicio en la máquina local. D. El usuario prince ha olvidado su contraseña. E. The file ~/.bashrc contains the line PS1="\nlogin: " Use the following transcript to answer the next 3 questions. [prince@station prince]$ ls / + ls --color=tty -w80 / bin data du.out home lib misc var boot dev etc initrd lost+found mnt web ++ echo -ne '\033]0;prince@station:~\007' [prince@station prince]$ Question 7 opt rha RPMS tmp proc root sbin usr 22 La shell bash ¿Qué esperaría prince que el comando alias ls retornara? A. alias ls='ls --color=tty' B. alias ls='ls --color=tty -w80' C. alias ls='ls --color=tty -w80 /' D. alias ls='ls -w80 ' E. -bash: alias: ls: not found Question 8 ¿Qué comando ejecutó aparentemente prince para habilitar los comandos que han sido impresos en la pantalla? A. shopt -x B. set +x C. shopt x D. set -x E. None of the above Question 9 Si prince estuviera cansado de ver que sus comandos se impriman en la pantalla, ¿qué comando debería ejecutar? A. set -x B. set +x C. shopt x D. shopt -s x E. None of the above Question 10 ¿Cuál de los siguientes comandos habilitaría la opción de shell extglobbash? A. shopt -s extglob B. shopt extglob=yes 23 La shell bash C. shopt extglob D. shopt +extglob E. None of the above Capítulo 6 Lectura de scripts de shell e inicialización de shell Conceptos clave • • • • • • • Los scripts de shell son leídos con el comando source o con .. Todos los scripts de shell se ejecutan en la misma shell que lee el script. Las shells bash pueden ser tanto shells de inicio como de no inicio. Las shells bash pueden ser tanto shells interactivas como no-interactivas. /etc/profile, archivos dentro del directorio /etc/profile.d y ~/.bash_profile leídos en el arranque de cada shell de inicio de sesión. /etc/bashrc y ~/.bashrc se leen en el arranque de cada shell de inicio. ~/.bash_logout es leída por cada salida de shell de inicio de sesión. Preguntas Question 1 ¿Cuál de las siguientes líneas de comandos podrían utilizarse para leer el archivo config.script? A. .. config.script B. source config.script C. < config.script D. bash config.script E. None of the above Question 2 ¿Cuál de los siguientes comados aplicaría los cambios hechos al archivo ~/.bashrc a la shell shell actual? A. . ~/.bashrc B. . ~/.bash_profile C. A y B 24 La shell bash D. . /etc/profile E. Todas las anteriores Question 3 ¿Cuál de los siguientes archivos se leen cuando se cierra una shell de inicio de sesión? A. ~/.bash_logout B. ~/.bash_profile C. /etc/bash_logout D. A y C E. None of the above Question 4 ¿Cuáles archivos las shells iniciadas leen para implementar la sustitución de comandos? A. ~/.bashrc B. No files are sourced. C. /etc/profile D. /etc/bashrc E. A y D Question 5 ¿Cuál de los archivos siguientes se lee cuando un usuario ingresa desde una consola virtual? A. /etc/profile B. /etc/profile.d/less.sh C. ~/.bashrc D. Todas las anteriores E. None of the above Question 6 25 La shell bash Después de instalar un nuevo paquete RPM, se agrega un nuevo archivo al directorio /etc/profile.d. ¿Cuál de los siguientes comandos aplicaría la configuración del archivo a la shell actual? A. source /etc/profile B. . ~/.bashrc C. bash /etc/bashrc D. Todas las anteriores E. None of the above La usuaria blondie agrega las siguientes líneas a las versiones predeterminadas de Red Hat Enterprise Linux de los archivos ~/.bashrc y ~/.bash_profile. [blondie@station blondie]$ echo 'echo "sourcing ~/.bashrc"' >> ~/.bashrc [blondie@station blondie]$ echo 'echo "sourcing ~/.bash_profile"' >> ~/.bash_profile Luego inicia una nueva subshell bash. [blondie@station blondie]$ bash sourcing ~/.bashrc [blondie@station blondie]$ Question 7 ¿Por qué blondie no vio la línea sourcing ~/.bash_profile? A. Ella olvidó agregar permisos de ejecución al archivo ~/.bash_profile. B. Because the subshell is a non-login shell, the file ~/.bash_profile does not get sourced. C. Para que sus cambios se efectúen, blondie debe salir e ingresar de nuevo. D. Al aplicar comillas a echo a la línea de comandos, blondie por error utilizó la sustitución de comandos. E. None of the above reasons apply. Al ingresar desde una consola virtual, blondie ve lo siguiente. Red Hat Enterprise Linux release 3 (Taroon) Kernel 2.4.20-4ES on an i686 station login: blondie 26 La shell bash Password: Last login: Wed Sep 3 09:54:31 on tty2 sourcing ~/.bashrc sourcing ~/.bash_profile [blondie@station blondie]$ Question 8 ¿Por qué el archivo ~/.bashrc se pudo leer antes que ~/.bash_profile? A. Esa es la conducta del ejecutable de bash para las shells de inicio. Los dos archivos se leen en orden de tiempo de modificación y el archivo ~/.bashrc tuvo el tiempo de modificación menos reciente. The file ~/.bashrc is not sourced first. For login shells, the bash shell only sources the file ~/.bash_profile directly. In the default Red Hat Linux C. configuration, this file sources the file ~/.bashrc. The line sourcing ~/.bashrc comes before the line containing the echo command blondie added above. Ninguno de los archivos es leído por bash directamente. En cambio, el archivo D. /etc/login los lee en el orden sugerido arriba. B. E. Ninguna de las anteriores. Question 9 ¿Qué permisos se necesitan en un archivo para que sea leído? A. ejecuta permisos B. read permissions C. escribe permisos D. A y B E. Todas las anteriores Question 10 Cuando se lee un archivo con el comando interno source, ¿qué tipo de subshell se invoca? A. Una shell de inicio de sesión no-interactiva B. Una shell interactiva de no-inicio de sesión C. Una shell no interactiva de no-inicio de sesión 27 La shell bash D. The question is misguided, because no subshell is invoked when sourcing a file (the commands in the file execute in the current shell). E. None of the above