Capitulo 4
Capitulo 4
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 esta tarea vamos a acceder a la interfaz de línea de comandos (CLI) para Linux para explorar
cómo ejecutar los comandos básicos y ver como afecta la forma en que se pueden ejecutar.
La mayoría de los usuarios probablemente están más familiarizados con cómo se ejecutan los
comandos utilizando una interfaz gráfica de usuario (GUI). Por lo tanto, probablemente esta tarea
presente algunos conceptos nuevos para ti, si no habías trabajado previamente con una CLI. Para
utilizar una CLI, tendrás que introducir el comando que quieras ejecutar.
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.
4.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.
4.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
4.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:~$
4.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:
echo $PATH
4.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
4.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.
4.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:~$
4.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».
4.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:~$
4.4.4 Paso 4
Observa que el asterisco también puede aparecer varias veces o en medio de varios
caracteres:
echo D*n*s
4.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 ??????
4.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????????
4.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:
4.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]*
4.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.
4.5 Las Comillas
Hay tres tipos de comillas utilizadas por Shell Bash: comillas simples ('), comillas dobles (")
comilla invertida (`). Estas comillas tienen características especiales dentro de shell bash tal
como se describe a continuación.
Para entender las comillas simples y dobles, considera que a veces no quieres que el shell
trate algunos caracteres como «especiales». Por ejemplo, como viste anteriormente en este
laboratorio, el carácter * se utiliza como comodín. ¿Y que pasa si quieres que el
carácter * signifique solamente un asterisco?
Las comillas simples evitan que el shell «interprete» o expanda todos los caracteres
especiales. A menudo, las comillas simples se utilizan para proteger una cadena de ser
cambiada por el shell, por lo que la cadena puede ser interpretada por un comando como
parámetro para afectar la forma en la cuál se ejecuta el comando.
Las comillas dobles detienen la expansión de los caracteres glob como el asterisco (*), signo
de interrogación (?) y corchetes ( [ ] ). Las comillas dobles no permiten que la expansión de
las variables y la sustitución de los comandos (ver comilla invertida) se lleve a cabo.
Las comillas invertidas causan «sustitución del comando», que permite que un comando
ejecute dentro de la línea de otro comando.
Al utilizar las comillas, se deben introducir en pares o de lo contrario el shell no considerará el
comando como completo.
Mientras que las comillas simples son útiles para que el shell no interprete uno o más
caracteres, el shell también proporciona una manera de bloquear la interpretación de un solo
carácter llamado «escaping». Para «evadir» el significado especial de un metacarácter del
shell, se utiliza la barra invertida \ como un prefijo para ese único carácter.
4.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:
4.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:
echo Today is $(date)
¿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.
4.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:
4.5.4 Paso 4
Ten en cuenta que también puedes colocar una barra invertida delante de cada comilla
invertida. Ejecuta lo siguiente:
4.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.
4.6.1 Paso 1
Ejecuta los tres siguientes comandos juntos separadas por punto y coma:
Como puedes ver en la salida, los tres comandos se ejecutan de forma secuencial:
4.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í.
4.6.3 Paso 3
A continuación, utiliza «logical and» («y» lógico) y para separar los comandos:
4.6.4 Paso 4
Usa «y lógico» con un comando que falla como se muestra a continuación:
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.