1 Introducción
Este es Lab 4: Los fundamentos de la Línea de Comandos. Mediante la realización de esta práctica
de laboratorio, los estudiantes aprenderán cómo utilizar las funciones básicas del shell.
En este capítulo harás las siguientes tareas:
sysadmin@localhost:~$
Recuerda: Es posible que tengas que presionar Entrar en la ventana para visualizar la línea.
El promt te dice que eres un usuario sysadmin; el host o la computadora que estás
utilizando: localhost; y el directorio en el que te encuentras: ~, lo cuál representa el directorio
inicial.
Cuando introduces un comando, éste aparecerá en el cursor de texto. Puedes utilizar las teclas
como inicio, fin, retroceso, y teclas de flecha para la editar el comando que estás introduciendo.
Una vez que hayas introducido el comando correctamente, presiona Entrar para ejecutarlo.
1.2.1 Paso 1
El siguiente comando mostrará la misma información que ves en la primera parte del prompt.
Asegúrate de que hayas seleccionado (hecho clic) la primera ventana de la Terminal e introducido
el siguiente comando seguido por la tecla Entrar:
whoami
sysadmin@localhost:~$ whoami
sysadmin
sysadmin@localhost:~$
La salida del comando whoami visualiza el nombre del usuario actual. Aunque en este caso el
nombre de usuario se muestra en el prompt, este comando se podría utilizar para obtener esta
información en una situación en la que el prompt no contuviera tal información.
1.2.2 Paso 2
El siguiente comando muestra información sobre el sistema actual. Para poder ver el nombre del
kernel que estás utilizando, introduce el siguiente comando en la terminal:
uname
sysadmin@localhost:~$ uname
Linux
Muchos de los comandos que se ejecutan producen salida de texto como ésta. Puedes cambiar la
salida producida con un comando mediante el uso de las opciones después del nombre del
comando.
Las opciones para un comando se pueden especificar de varias formas. Tradicionalmente, en UNIX,
las opciones se expresaban por un guión seguido por otro carácter, por ejemplo: -n.
En Linux, las opciones pueden a veces también ser dadas por dos caracteres de guión seguidos por
una palabra o palabra con guión, por ejemplo: --nodename.
Ejecuta el comando uname de nuevo dos veces en la terminal, una vez con la opción -n y de nuevo
con la opción --nodename. Esto mostrará el nombre del host del nodo de la red, también visualizado
en el prompt.
uname -n
uname --nodename
sysadmin@localhost:~$ uname -n
localhost
sysadmin@localhost:~$ uname --nodename
localhost
1.2.3 Paso 3
El comando pwd se utiliza para mostrar tu «ubicación» actual o el directorio de «trabajo» actual.
Introduce el siguiente comando para visualizar el directorio de trabajo:
pwd
sysadmin@localhost:~$ pwd
/home/sysadmin
sysadmin@localhost:~$
1.3.1 Paso 1
El comando echo se puede utilizar para imprimir el texto, el valor de una variable y mostrar cómo el
entorno del shell expande los metacaracteres (más detailles sobre los metacaracteres más adelante
en este laboratorio). Introduce el siguiente comando para que de salida a texto literal:
1.3.2 Paso 2
Introduce el siguiente comando para mostrar el valor de la variable PATH:
echo $PATH
La variable PATH se visualiza mediante la colocación del carácter $ delante del nombre de la
variable.
Esta variable se utiliza para encontrar la ubicación de los comandos. Cada uno de los directorios
mencionados anteriormente se buscan cuando ejecutas un comando. Por ejemplo, si intentas a
ejecutar el comando date, el shell buscará el comando primero en el
directorio /home/sysadmin/bin, luego en el directorio /usr/local/sbin y así sucesivamente.
Una vez el shell encuentra el comando date, «lo ejecuta».
1.3.3 Paso 3
Utiliza el comando which para determinar si existe un archivo ejecutable llamado date ubicado en
un directorio que aparece en el valor PATH:
which date
La salida del comando which te dice que cuando ejecutas el comando date, el sistema ejecutará el
comando /bin/date. El comando which hace uso de la variable PATH para determinar la
ubicación del comando date
1.4 Globbing
El uso de los caracteres glob en Linux es similar a lo que muchos sistemas operativos se refieren
como caracteres «wildcard». Utilizando los caracteres glob haces coincidir los nombres de archivos
usando patrones.
Los caracteres glob son una característica del shell, no es algo propio de algún comando específico.
Como resultado de ello, puedes utilizar los caracteres glob con cualquier comando de Linux.
Cuando se utilizan los caracteres glob, el shell «expande» todo el patrón para coincidir con todos
los archivos en el directorio especificado que coincide con el patrón.
A efectos de demostración, vamos a utilizar el comando echo para visualizar este proceso de
expansión
1.4.1 Paso 1
Utiliza el siguiente comando echo para mostrar todos los nombres de archivo en el directorio actual
que coincide con el patrón global *:
echo *
sysadmin@localhost:~$ echo *
Desktop Documents Downloads Music Pictures Public Templates Videos
sysadmin@localhost:~$
1.4.2 Paso 2
Los siguientes comandos mostrarán todos los archivos en el directorio actual que comienzan con la
letra D y la letra P:
echo D*
echo P*
sysadmin@localhost:~$ echo D*
Desktop Documents Downloads
sysadmin@localhost:~$ echo P*
Pictures Public
sysadmin@localhost:~$
Piensa en el primer ejemplo, D*, como «coincidencia con todos los nombres de archivo en el
directorio actual que comienzan con la letra d en mayúscula y tienen cero o más de cualquier otro
carácter después de la letra D».
1.4.3 Paso 3
El asterisco * se puede utilizar en cualquier lugar de la cadena. El siguiente comando mostrará
todos los archivos en tu directorio actual que terminan en la letra s:
echo *s
sysadmin@localhost:~$ echo *s
Documents Downloads Pictures Templates Videos
sysadmin@localhost:~$
1.4.4 Paso 4
Observa que el asterisco también puede aparecer varias veces o en medio de varios caracteres:
echo D*n*s
1.4.5 Paso 5
Dado que cada signo de interrogación coincide con un carácter desconocido, introduciendo seis de
ellos coincidirán con los nombres de archivo de seis caracteres. Introduce lo siguiente para mostrar
los nombres de los archivos que tienen exactamente seis caracteres:
echo ??????
Importante: Cada carácter ? debe coincidir exactamente con un carácter en un nombre de archivo,
ni más ni menos de un carácter.
1.4.6 Paso 6
Utilizando el signo de interrogación con otros caracteres se limitarán las coincidencias. Escribe lo
siguiente para mostrar los nombres de los archivos que comienzan con la letra D y tienen
exactamente nueve caracteres:
echo D????????
1.4.7 Paso 7
Los comodines o caracteres glob pueden combinarse entre sí. El siguiente comando mostrará los
nombres de archivo que tienen al menos seis caracteres y terminan en la letra s.
echo ?????*s
El resultado debe ser similar al siguiente:
Piensa en el patrón ?????*s en el sentido de «coincide con los nombres de archivo que comienzan
con cualquier cinco caracteres, y luego tenga cero o más caracteres y luego termine con el
carácter s»
1.4.8 Paso 8
El siguiente glob es similar al glob signo de interrogación para especificar un carácter. Este glob
utiliza un par de corchetes [ ] para especificar qué se le permitirá a un carácter. Los caracteres
permitidos se pueden especificar como una serie, una lista, o por lo que se conoce como una clase
de caracteres.
Los caracteres permitidos también pueden ser anulados con un signo de exclamación !.
En el primer ejemplo, el primer carácter del nombre de archivo puede ser o bien una D o una P. En
el segundo ejemplo, el primer carácter puede ser cualquier carácter excepto una D o P:
echo [DP]*
echo [!DP]*
1.4.9 Paso 9
En estos siguientes ejemplos se especifica una serie de caracteres. En el primer ejemplo, el primer
carácter del nombre de archivo puede ser cualquier carácter que comienze cualquier carácter entre
la D y la P. En el segundo ejemplo, este rango de caracteres es negado, lo que significa cualquier
carácter individual coincidirá, excepto si está entre la letra D y la P:
echo [D-P]*
echo [!D-P]*
Te podrías preguntar «¿quién decide qué letras haya entre la D y la P? ». En este caso la respuesta
es bastante obvia (E, F, G, H, I, J, K, L, M, N y O), pero ¿qué tal que el rango fuese [1-A]?
Para determinar el rango de caracteres se utiliza la tabla de texto ASCII. Puedes consultar esta
tabla mediante su búsqueda en Internet o introduciendo el comando siguiente, el comando ascii.
Por lo tanto, ¿con qué caracteres coincidirá el glob [1-A] ? De acuerdo con la tabla de texto
ASCII: 1, 2, 3, 4, 5, 6, 7, 8, 9, :, ;, <, =, >, ?, @ y A
1.5.1 Paso 1
Ejecuta el siguiente comando para usar las comillas invertidas ` para ejecutar el
comando date dentro de la línea del comando echo:
1.5.2 Paso 2
También puedes colocar un $ ( antes del y ) después del comando para llevar a cabo la sustitución
de comandos:
¿Por qué dos métodos diferentes pueden lograr lo mismo? Las comillas invertidas se parecen
mucho a las comillas simples, por lo que es más difícil «ver» lo que un comando debería hacer.
Originalmente los shell utilizaban las comillas invertidas; el formato $(comando) se añadió en una
versión posterior del shell bash para que la instrucción fuera visualmente más clara.
1.5.3 Paso 3
Si no quieres que se usen las comillas invertidas para ejecutar un comando, coloca alrededor de
ellas las comillas simples. Ejecuta lo siguiente:
1.5.4 Paso 4
Ten en cuenta que también puedes colocar una barra invertida delante de cada comilla invertida.
Ejecuta lo siguiente:
1.5.5 Paso 5
Las comillas dobles no tienen ningún efecto sobre las comillas invertidas. El shell las seguirá
utilizando como una sustitución del comando. Ejecuta lo siguiente para ver una demostración:
1.5.6 Paso 6
Las comillas dobles tendrán efecto sobre los caracteres comodín de tal manera que deshabilitan su
significado especial. Ejecuta lo siguiente:
echo D*
echo "D*"
sysadmin@localhost:~$ echo D*
Desktop Documents Downloads
sysadmin@localhost:~$ echo "D*"
D*
sysadmin@localhost:~$
Importante:
Las comillas pueden parecer triviales y raras en este momento, pero a medida que adquieras más
experiencia de trabajo en el shell de comandos, descubrirás que entender bien cómo las diferentes
comillas funcionan es fundamental para el uso del shell.
1.6.1 Paso 1
Ejecuta los tres siguientes comandos juntos separadas por punto y coma:
1.6.2 Paso 2
Ahora, pon juntos los tres comandos separados por punto y coma, donde el primer comando se
ejecuta con un resultado de fallo:
Ten en cuenta que en el ejemplo anterior, los tres comandos se ejecutan a pesar de que el primero
falle. Aunque no lo puedes ver en la salida del comando false, éste se ejecutó. Sin embargo,
cuando los comandos están separadas por el carácter ;, son completamente independientes entre
sí.
1.6.3 Paso 3
A continuación, utiliza «logical and» («y» lógico) y para separar los comandos:
Debido a que cada instrucción echo se ejecuta correctamente, se proporciona un valor de retorno
de éxito, permitiendo que la siguiente instrucción también se ejecute.
4.6.4 Paso 4
Usa «y lógico» con un comando que falla como se muestra a continuación:
El primer comando echo se ejecuta correctamente y vemos su salida. El comando false se ejecuta
con un resultado de fallo, por lo que el último comando echo no se ejecuta.
4.6.5 Paso 5
Los carácteres or que separan los siguientes comandos muestra cómo el fracaso antes de la
instrucción or provoca que el siguiente comando sea ejecutado; sin embargo, la primera instrucción
exitosa hace que el comando no se ejecute:
4.7.1 Paso 1
Ejecuta algunos comandos y luego ejecuta el comando history:
date
clear
echo Hi
history
Recuerda: El comando date imprimirá la fecha y la hora en el sistema. El comando clear borra la
pantalla.
El resultado debe ser similar al siguiente:
sysadmin@localhost:~$ echo Hi
Hi
sysadmin@localhost:~$ history
1 date
2 clear
3 echo Hi
4 history
sysadmin@localhost:~$
4.7.2 Paso 2
Para ver un número limitado de comandos, el comando history puede tomar un número como un
parámetro para mostrar exactamente ese número de entradas recientes. Introduce el siguiente
comando para mostrar los últimos cinco comandos de tu historial:
history 5
sysadmin@localhost:~$ history 5
185 false || Fail Or
186 false || echo Fail Or
187 true || echo Nothing to see here
188 history
189 history 5
sysadmin@localhost:~$
4.7.3 Paso 3
Para ejecutar un comando, introduce el signo de exclamación y el número de la lista del historial.
Por ejemplo, para ejecutar el comando número 94 en la lista del historial, tienes que ejecutar lo
siguiente:
!94
4.7.4 Paso 4
A continuación, experimenta con el acceso a tu historial utilizando las teclas de flecha hacia
arriba y teclas de flecha hacia abajo. Mantén presionada la tecla de flecha arriba hasta encontrar
un comando que quieras ejecutar. Si fuera necesario, utiliza otras teclas para editar el comando y, a
continuación, presiona Entrar para ejecutar el comando.