2.1 Lección 1
Certificación: |
Linux Essentials |
---|---|
Versión: |
1.6 |
Tema: |
2 Encontrando tu camino en el sistema Linux |
Objetivo: |
2.1 Conceptos básicos de la línea de comandos |
Lección: |
1 de 2 |
Introducción
A pesar de que las distribuciones modernas de GNU/Linux tienen una amplia gama de interfaces gráficas de usuario, un administrador siempre necesitará saber cómo trabajar con la línea de comandos o shell (nombre que recibe en inglés). Shell es un programa que permite la comunicación basada en texto entre el sistema operativo y el usuario. Por lo general, es un programa en modo de texto que lee la entrada del usuario y la interpreta como comandos para el sistema.
Tenemos diferentes shells en GNU/Linux, estos son algunos ejemplos:
-
Bourne-again shell (Bash)
-
C shell (csh or tcsh, the enhanced csh)
-
Korn shell (ksh)
-
Z shell (zsh)
En GNU/Linux, el más común es el Bash
Shell. Este se utilizará en diferentes
ejemplos o ejercicios que veremos durante
este tema.
Cuando se utiliza un shell interactivo, el usuario ingresa comandos en un indicador llamado (prompt). En cada distribución de GNU/Linux, el indicador predeterminado podría verse un poco diferente, pero generalmente sigue esta estructura:
username@hostname current_directory shell_type
En Ubuntu o Debian GNU/Linux, la solicitud para un usuario normal probablemente se verá así:
carol@mycomputer:~$
El indicador del superusuario se verá así:
root@mycomputer:~#
En CentOS o Red Hat Linux, el mensaje para un usuario normal se vea así:
[dave@mycomputer ~]$
Y el indicador(prompt) del superusuario se verá así:
[root@mycomputer ~]#
Vamos a explicar cada componente de la estructura:
username
-
Nombre del usuario que ejecuta la shell.
hostname
-
Nombre del host donde se ejecuta el shell. También hay un comando
hostname
, con el cual puede mostrar o configurar el nombre de host del sistema. current_directory
-
Es el directorio en el que se encuentra actualmente el shell. El caracter
~
significa que la shell está en el directorio principal (home) del usuario. shell_type
-
$
indica que el shell lo ejecuta un usuario normal.#
indica que el shell es ejecutado por el superusuarioroot
.
Como no necesitamos ningún privilegio
especial, utilizaremos una solicitud sin
privilegios en los siguientes ejemplos.
Por brevedad, solo usaremos el $
(signo de dólar) como indicador.
Estructura de la línea de comandos
La mayoría de los comandos siguen la misma estructura básica:
comando [opción(es)/párametro(s)...] [argumento(s)...]
Tome el siguiente comando como ejemplo:
$ ls -l /home
Expliquemos el propósito de cada componente:
- Comando
-
Programa que el usuario ejecutó:
ls
en el ejemplo anterior. - Opción(es)/Parámetro(s)
-
Un “switch” modifica el comportamiento del comando de alguna manera, como es el caso de
-l
(ejemplo anterior). Se puede acceder a las opciones en forma corta y larga. Por ejemplo,-l
es idéntico a--format=long
.También se pueden combinar varias opciones, las letras generalmente se pueden escribir juntas haciendolo de forma abreviada. Por ejemplo, los siguientes comandos hacen lo mismo:
$ ls -al $ ls -a -l $ ls --all --format=long
- Argumento(s)
-
Datos adicionales que requiere el programa, como un nombre de archivo o ruta, como
/home
en el ejemplo anterior.
La única parte obligatoria de esta estructura es el comando. En general, todos los demás elementos son opcionales, pero un programa puede requerir que se especifiquen ciertas opciones, parámetros o argumentos.
Note
|
La mayoría de los comandos
muestran una breve descripción
de Opción(es)/Parámetro(s)
disponibles cuando se ejecutan
con el parámetro |
Tipos de comportamiento de los comando
Shell admite dos tipos de comandos:
- Interno
-
Estos comandos son parte del propio shell y no son programas separados. Hay alrededor de 30 de estos comandos, y su principal objetivo es ejecutar tareas dentro del shell (por ejemplo,
cd
,set
,export
). - Externo
-
Estos comandos residen en archivos individuales; suelen ser programas binarios o scripts. Cuando se ejecuta un comando que no es un shell incorporado, el shell utiliza la variable
PATH
para buscar un archivo ejecutable con el mismo nombre del comando. Además de los programas que se instalan con el administrador de paquetes de la distribución, los usuarios también pueden crear sus propios comandos externos.
El comando type
muestra
de qué tipo es un comando específico:
$ type echo echo is a shell builtin $ type man man is /usr/bin/man
Comillas (Quoting)
Como usuario de GNU/Linux, deberá crear o manipular archivos o variables de diferentes maneras. Esto es fácil cuando se trabaja con nombres de archivo cortos y valores únicos, pero se vuelve más complicado cuando, por ejemplo, hay espacios involucrados, caracteres especiales y variables. Las shells proporcionan una característica llamada comillas que encapsula los datos usando varios tipos de comillas (" ", ' '). En Bash, hay tres tipos de comillas:
-
Comillas dobles (Double quotes)
-
Comillas simples (Single quotes)
-
Caracteres de Escape (Escape characters)
Por ejemplo, los siguientes comandos no actúan de la misma manera debido a las comillas:
$ TWOWORDS="two words" $ touch $TWOWORDS $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch "$TWOWORDS" $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words $ touch '$TWOWORDS' $ ls -l -rw-r--r-- 1 carol carol 0 Mar 10 15:00 '$TWOWORDS' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 two -rw-r--r-- 1 carol carol 0 Mar 10 14:58 'two words' -rw-r--r-- 1 carol carol 0 Mar 10 14:56 words
Note
|
La línea con |
Comillas dobles (Double Quotes)
Las comillas dobles le dicen al shell
que interprete el texto entre comillas
("...") como caracteres regulares.
Todos los caracteres especiales
pierden su significado, excepto el $
(signo de dólar), \
(barra invertida) y `
(comilla invertida). Esto significa
que las variables, la sustitución de
comandos y las funciones aritméticas
todavía se pueden usar.
Por ejemplo, la sustitución de la
variable $USER
no se ve
afectada por las comillas dobles:
$ echo I am $USER I am tom $ echo "I am $USER" I am tom
Por otro lado, un carácter de espacio pierde su significado como separador de argumentos:
$ touch new file $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:18 file -rw-rw-r-- 1 tom students 0 Oct 8 15:18 new $ touch "new file" $ ls -l -rw-rw-r-- 1 tom students 0 Oct 8 15:19 new file
En el primer ejemplo, el comando touch
crea dos archivos individuales, el
comando interpreta las dos cadenas
como argumentos individuales. En el
segundo ejemplo, el comando interpreta
ambas cadenas como un argumento, por
lo tanto, solo crea un archivo. Sin
embargo, es una buena práctica evitar
el carácter de espacio en los nombres
de archivo. En su lugar podría usar un
guión bajo (_
) o un punto
(.
).
Comillas simples (Single Quotes)
Las comillas simples no tienen la excepción de las comillas dobles. Estos revocan cualquier significado especial de cada caracter. Tomemos uno de los primeros ejemplos de arriba:
$ echo I am $USER I am tom
Al aplicar las comillas simples, verá un resultado diferente:
$ echo 'I am $USER' I am $USER
El comando ahora muestra la cadena exacta sin sustituir la variable.
Caracteres de Escape (Escape characters)
Podemos usar caracteres de
escape para eliminar
significados especiales de los
caracteres de Bash. Volvamos a la
variable de entorno $USER
:
$ echo $USER carol
Vemos que por defecto, el contenido
de la variable se muestra en la
terminal. Sin embargo, si precedemos
el signo de dólar con un carácter de
barra diagonal inversa (\
),
negará su significado especial. Esto
provocara que Bash no expanda el valor
de la variable al nombre de usuario de
la persona que ejecuta el comando,
sino que literalmente interpretará el
nombre de la variable:
$ echo \$USER $USER
Como hemos visto en el apartado "Comillas simples", podemos obtener resultados similares a estos usando la comilla simple, que imprime el contenido literal de lo que esté entre ellas. Sin embargo, el carácter de escape funciona de manera diferente al indicarle a Bash que ignore cualquier significado especial que pueda tener sólo el caracter que precede.
Ejercicios guiados
-
Divida las líneas a continuación en comando, opción(s)/parámetro(s) y argumento(s):
-
Ejemplo:
cat -n /etc/passwd
Comando:
cat
Opción:
-n
Argumento:
/etc/passwd
-
ls -l /etc
Comando:
Opción:
Argumento:
-
ls -l -a
Comando:
Opción:
Argumento:
-
cd /home/user
Comando:
Opción:
Argumento:
-
-
Encuentre de que tipo son los siguientes comandos:
Ejemplo:
pwd
Shell builtin
mv
External command
cd
cat
exit
-
Resuelva los siguientes comandos que usan comillas:
Example:
echo "$HOME is my home directory"
echo /home/user is my home directory
touch "$USER"
touch 'touch'
Ejercicios exploratorios
-
Con un comando y usando brace expansion en Bash (revise la página del manual para Bash), cree 5 archivos numerados del 1 al 5 con el prefijo
game
(game1
,game2
, …).
-
Elimine los 5 archivos que acaba de crear con un solo comando, utilizando un carácter especial diferente (revise Pathname Expansion en las páginas del manual de Bash).
-
¿Hay alguna otra forma de hacer que dos comandos interactúen entre sí? ¿Cuáles son?
Resumen
En esta lección, usted aprendió:
-
Conceptos del shell de Linux
-
¿Qué es Bash shell?
-
La estructura de la línea de comando
-
Una introducción a las comillas (quoting)
Comandos utilizados en los ejercicios:
bash
-
El shell más popular en las computadoras Linux.
echo
-
Texto de salida en la terminal.
ls
-
Listar el contenido de un directorio.
type
-
Muestra cómo se ejecuta un comando específico.
touch
-
Crea un archivo vacío o actualiza la fecha de modificación de un archivo existente.
hostname
-
Muestra o cambia el nombre del equipo de un sistema.
Respuestas a los ejercicios guiados
-
Divida las líneas a continuación en comando, opción(s)/parámetro(s) y argumento(s):
-
ls -l /etc
Comando:
ls
Opción:
-l
Argumento:
/etc
-
ls -l -a
Comando:
ls
Opción:
-l -a
Argumento:
-
cd /home/user
Comando:
cd
Opción:
Argumento:
/home/user
-
-
Encuentre de que tipo son los siguientes comandos:
cd
Shell builtin
cat
Comando externo
exit
Shell builtin
-
Resuelva los siguientes comandos que usan comillas:
touch "$USER"
tom
touch 'touch'
Creates a file named
touch
Respuestas a los ejercicios exploratorios
-
Con un comando y usando brace expansion en Bash (revise la página del manual para Bash), cree 5 archivos numerados del 1 al 5 con el prefijo
game
(game1
,game2
, …).Los rangos se pueden usar para expresar los números del 1 al 5 dentro de un comando:
$ touch game{1..5} $ ls game1 game2 game3 game4 game5
-
Elimine los 5 archivos que acaba de crear con un solo comando, utilizando un carácter especial diferente (revise Pathname Expansion en las páginas del manual de Bash).
Dado que todos los archivos comienzan con
game
y terminan con un solo carácter (un número del 1 al 5 en este caso), puede usar?
como un carácter especial para el último carácter en el nombre de archivo:$ rm game?
-
¿Hay alguna otra forma de hacer que dos comandos interactúen entre sí? ¿Cuales son?
Sí, un comando podría escribir datos en un archivo para luego ser procesado por otro. Linux también puede recopilar la salida de un comando y usarlo como entrada para otro comando. Esto se llama piping y aprenderemos más sobre esto en una lección futura.