Está en la página 1de 15

1.

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:

 Explorar características Bash


 Usar variables shell
 Entender como usar globbing
 Ser capaz de usar comillas

1.2 Los Archivos y los Directorios


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.
La ventana donde escribirás el comando se conoce como un emulador de la terminal. Dentro de la
ventana de la terminal, el sistema está mostrando un prompt (símbolo), que actualmente contiene
un prompt seguido por un cursor parpadeante:

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

El resultado debe ser similar al siguiente:

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

El resultado debe ser similar al siguiente:

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

El resultado debe ser similar al siguiente:

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

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ pwd
/home/sysadmin
sysadmin@localhost:~$

El directorio actual en el ejemplo anterior es /home/sysadmin. Esto también se conoce como tu


directorio home , una ubicación especial en la que controlas los archivos y al que los otros usuarios
normalmente no tienen acceso. De forma predeterminada, este directorio tiene el mismo nombre
que tu nombre de usuario y se encuentra bajo el directorio /home.
Como puedes ver en la salida del comando, /home/sysadmin, Linux utiliza la barra
diagonal / para separar los directorios para crear lo que se denomina ruta. La barra diagonal inicial
representa el directorio de nivel superior, conocido como el directorio root . Más información sobre
los archivos, directorios y caminos se presentará en los laboratorios posteriores.
El tilde ~ que ves en el prompt también está indicando cuál es el directorio actual. Este carácter es
una forma de «acceso directo» para representar tu home.
Considera Esto
El comando pwd significa «imprimir el directorio de trabajo». A pesar de que las versiones modernas
en realidad no «imprimen», las máquinas UNIX más antiguas no tenían monitores y la salida de los
comandos iban a una impresora, de ahí el nombre divertido de pwd.

1.3 Variables del Shell


Las variables del Shell se utilizan para almacenar los datos en Linux. Estos datos los utiliza el
propio shell, los programas y los usuarios.
El enfoque de esta sección es aprender cómo mostrar los valores de las variables del Shell

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:

echo Hello Student

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo Hello Student


Hello Student
sysadmin@localhost:~$

1.3.2 Paso 2
Introduce el siguiente comando para mostrar el valor de la variable PATH:

echo $PATH

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo $PATH


/home/sysadmin/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/b
in:/usr/games
sysadmin@localhost:~$

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

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ which date


/bin/date
sysadmin@localhost:~$

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 *

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo *
Desktop Documents Downloads Music Pictures Public Templates Videos
sysadmin@localhost:~$

El asterisco * busca «cero o más» coincidencias de caracteres en un nombre de archivo. En el


ejemplo anterior, esto se traduce en la adecuación de todos los nombres del archivo en el directorio
actual.
El comando echo, a su vez, muestra los nombres del archivo que fueron agrupados.

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*

El resultado debe ser similar al siguiente:

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

El resultado debe ser similar al siguiente:

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

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo D*n*s


Documents Downloads
sysadmin@localhost:~$

El siguiente metacarácter glob que vamos a examinar es el signo de interrogación ?. El signo de


interrogación coincide exactamente con un carácter. Este único carácter puede ser cualquier
carácter posible.
Al igual que el asterisco, se puede utilizar en cualquier lugar de una cadena y puede aparecer varias
veces

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 ??????

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo ??????


Public Videos
sysadmin@localhost:~$

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????????

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo D????????


Documents Downloads
sysadmin@localhost:~$

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:

sysadmin@localhost:~$ echo ?????*s


Documents Downloads Pictures Templates Videos
sysadmin@localhost:~$

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]*

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo [DP]*


Desktop Documents Downloads Pictures Public
sysadmin@localhost:~$ echo [!DP]*
Music Templates Videos
sysadmin@localhost:~$

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]*

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo [D-P]*


Desktop Documents Downloads Music Pictures Public
sysadmin@localhost:~$ echo [!D-P]*
Templates Videos
sysadmin@localhost:~$

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 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.

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:

echo Today is `date`

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo Today is `date`


Today is Tue Jan 19 15:48:57 UTC 2016
sysadmin@localhost:~$

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:

echo Today is $(date)

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo Today is $(date)


Today is Tue Jan 19 15:51:09 UTC 2016
sysadmin@localhost:~$

¿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:

echo This is the command '`date`'

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo This is the command '`date`'


This is the command `date`
sysadmin@localhost:~$

1.5.4 Paso 4
Ten en cuenta que también puedes colocar una barra invertida delante de cada comilla invertida.
Ejecuta lo siguiente:

echo This is the command \`date\`

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo This is the command \`date\`


This is the command `date`
sysadmin@localhost:~$

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:

echo This is the command "`date`"

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo This is the command "`date`"


This is the command Tue Jan 19 16:05:41 UTC 2016
sysadmin@localhost:~$

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*"

El resultado debe ser similar al siguiente:

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 Las Instrucciones de Control


Por lo general, introduces un solo comando y lo ejecutas presionando Entrar. El shell Bash ofrece
tres estados diferentes que se pueden utilizar para separar varios comandos escritos juntos.
El separador más simple es el punto y coma (;). El uso de punto y coma entre múltiples comandos
les permite ejecutarse el uno tras el otro de forma secuencial de la izquierda a la derecha.
Los caraceters && crean una lógica e instrucción. Los comandos separados por && se ejecutan de
manera condicional. Si el comando a la izquierda de && tiene éxito, entonces el comando a la
derecha de && también será ejecutado. Si el comando a la izquierda de && falla, entonces el
comando a la derecha de la && no se ejecuta.
Los caracteres || crean una lógica o una instrucción que también causa una ejecución condicional.
Cuando los comandos están separados por ||, entonces sólo si el comando a la izquierda falla, el
comando a la derecha de || se ejecuta. Si el comando a la izquierda de || tiene éxito, entonces el
comando a la derecha de la || no se ejecuta.
Para ver cómo funcionan instrucciones de control, podrás utilizar dos ejecutables
especiales: true y false. El ejecutable true siempre tiene éxito cuando se ejecuta, mientras que,
el ejecutable false siempre falla. Si bien esto no te puede proporcionar ejemplos realistas acerca
de cómo && y || funcionan, proporciona un medio para demostrar cómo funcionan sin tener que
introducir nuevos comandos.

1.6.1 Paso 1
Ejecuta los tres siguientes comandos juntos separadas por punto y coma:

echo Hello; echo Linux; echo Student


Como puedes ver en la salida, los tres comandos se ejecutan de forma secuencial:

sysadmin@localhost:~$ echo Hello; echo Linux; echo Student


Hello
Linux
Student
sysadmin@localhost:~$

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:

false; echo Not; echo Conditional

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ false; echo Not; echo Conditional


Not
Conditional
sysadmin@localhost:~$

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:

echo Start && echo Going && echo Gone

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo Start && echo Going && echo Gone


Start
Going
Gone
sysadmin@localhost:~$

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:

echo Success && false && echo Bye

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ echo Success && false && echo Bye


Success
sysadmin@localhost:~$

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:

false || echo Fail Or


true || echo Nothing to see here

El resultado debe ser similar al siguiente:

sysadmin@localhost:~$ false || echo Fail Or


Fail Or
sysadmin@localhost:~$ true || echo Nothing to see here
sysadmin@localhost:~$

4.7 Historia del Shell


El shell bash mantiene un historial de los comandos que introduces. Los comandos anteriores son
fácilmente accesibles en esta historia de varias maneras.
La primera y más fácil manera de llamar o recordar un comando anterior es el uso de la tecla de
flecha arriba. Cada presión de la tecla de flecha arriba va hacia atrás un comando a través del
historial. Si accidentalmente vas atrás demasiado, entonces la tecla de flecha abajo irá hacia
delante a través del historial de los comandos.
Cuando encuentres el comando que quieres ejecutar, puedes utilizar las teclas de flecha hacia
izquierda y flecha hacia derecha para colocar el cursor para edición. Otras teclas útiles para
edición incluyen Inicio, Fin, Retroceso y Suprimir.
Otra forma de utilizar el historial de comandos es ejecutar el comando history para poder ver una
lista numerada del historial. El número que aparece a la izquierda del comando se puede utilizar
para ejecutar el comando de nuevo. El comando history también tiene una serie de opciones y
argumentos que pueden manipular cuáles de los comando se almacenarán o se mostrarán.

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:~$

Tus números de comando probablemente serán diferentes de los proporcionados anteriormente.


Esto se debe a que es probable que hayas ejecutado un número diferente de comandos.

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

El resultado debe ser similar al siguiente:

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.

También podría gustarte