Una terminal Linux llena de texto en una computadora portátil.

Si desea dominar el shell Bash en Linux, macOS u otro sistema similar a UNIX, los caracteres especiales (como ~, *, | y>) son fundamentales. Te ayudaremos a desentrañar estas crípticas secuencias de comandos de Linux y convertirte en un héroe de los jeroglíficos.

¿Qué son los caracteres especiales?

Hay un conjunto de personajes que el shell Bash trata de dos formas diferentes. Cuando los escribe en el shell, actúan como instrucciones o comandos y le dicen al shell que realice una determinada función. Piense en ellos como comandos de un solo carácter.

A veces, solo desea imprimir un carácter y no necesita que actúe como un símbolo mágico. Existe una forma de utilizar un personaje para representarse a sí mismo en lugar de su función especial.

Le mostraremos qué caracteres son "especiales" o "meta-", así como también cómo puede utilizarlos funcional y literalmente.

~ Directorio de inicio

La tilde (~) es la abreviatura de su directorio personal. Significa que no tiene que escribir la ruta completa a su directorio de inicio en los comandos. Dondequiera que se encuentre en el sistema de archivos, puede usar este comando para ir a su directorio de inicio:

cd ~

También puede utilizar este comando con rutas relativas. Por ejemplo, si se encuentra en algún lugar del sistema de archivos que no está debajo de su carpeta de inicio y desea cambiar al archive directorio en su workdirectorio, use la tilde para hacerlo:

cd ~ / trabajo / archivo

Directorio actual

Un punto (.) Representa el directorio actual. Lo verá en las listas de directorios si usa la -aopción (todos) con ls.

ls -a

También puede usar el punto en los comandos para representar la ruta a su directorio actual. Por ejemplo, si desea ejecutar un script desde el directorio actual, lo llamaría así:

./script.sh

Esto le dice a Bash que busque el script.sharchivo en el directorio actual De esta manera, no buscará en los directorios de su ruta el ejecutable o el script que coincida.

.. Directorio de padres

El punto doble o "punto doble" (..) representa el directorio principal de su actual. Puede usar esto para subir un nivel en el árbol de directorios.

discos compactos ..

También puede usar este comando con rutas relativas, por ejemplo, si desea subir un nivel en el árbol de directorios y luego ingresar otro directorio en ese nivel.

También puede usar esta técnica para moverse rápidamente a un directorio en el mismo nivel en el árbol de directorios que el actual. Usted sube un nivel y luego vuelve a bajar uno a un directorio diferente.

cd ../gc_help

/ Separador de directorio de ruta

Puede usar una barra inclinada (/), a menudo llamada simplemente barra, para separar los directorios en un nombre de ruta.

ls ~ / trabajo / archivo

Una barra diagonal representa la ruta de directorio más corta posible. Debido a que todo en el árbol de directorios de Linux comienza en el directorio raíz, puede usar este comando para moverse al directorio raíz rápidamente:

discos compactos /

# Comentar o recortar cadenas

La mayoría de las veces, usa el hash o el signo de número (#) para decirle al shell que lo que sigue es un comentario, y no debería actuar en consecuencia. Puede usarlo en scripts de shell y, menos útil, en la línea de comandos.

# Esto será ignorado por el shell Bash

Sin embargo, no se ignora realmente porque se agrega a su historial de comandos.

También puede utilizar el hash para recortar una variable de cadena y eliminar parte del texto del principio. Este comando crea una variable de cadena llamada this_string.

En este ejemplo, asignamos el texto "¡Dave Geek!" a la variable.

this_string = "¡Dave Geek!"

Este comando se utiliza echopara imprimir las palabras "Cómo hacer" en la ventana del terminal. Recupera el valor almacenado en la variable de cadena mediante una  expansión de parámetrosDebido a que agregamos el hash y el texto "Dave", recorta esa parte de la cadena antes de pasarla echo.

echo How-To $ {this_string # Dave}

Esto no cambia el valor almacenado en la variable de cadena; solo afecta a lo que se envía echoPodemos usar echopara imprimir el valor de la variable de cadena una vez más y verificar esto:

echo $ this_string

Comodín de un solo carácter

El shell Bash admite tres comodines, uno de los cuales es el signo de interrogación (?). Utiliza comodines para reemplazar caracteres en plantillas de nombre de archivo. Un nombre de archivo que contiene un comodín forma una plantilla que coincide con un rango de nombres de archivo, en lugar de solo uno.

El comodín del signo de interrogación representa  exactamente un carácter . Considere la siguiente plantilla de nombre de archivo:

¿Es insignia? .txt

Esto se traduce como "enumere cualquier archivo con un nombre que comience con 'insignia' y vaya seguido de cualquier carácter antes de la extensión del nombre del archivo".

Coincide con los siguientes archivos. Tenga en cuenta que algunos tienen números y otros tienen letras después de la parte de la "insignia" del nombre del archivo. El comodín del signo de interrogación coincidirá con letras y números.

Sin embargo, esa plantilla de nombre de archivo no coincide con "badge.txt" porque el nombre de archivo no tiene un solo carácter entre "badge" y la extensión del archivo. El comodín del signo de interrogación debe coincidir con el carácter correspondiente en el nombre del archivo.

También puede utilizar el signo de interrogación para buscar todos los archivos con un número específico de caracteres en los nombres de archivo. Esto enumera todos los archivos de texto que contienen exactamente cinco caracteres en el nombre del archivo:

ls ?????. txt

* Comodín de secuencia de caracteres

Puede utilizar el comodín de asterisco (*) para representar cualquier secuencia de caracteres, incluido ningún carácter . Considere la siguiente plantilla de nombre de archivo:

ls insignia *

Esto coincide con todo lo siguiente:

Coincide con "badge.txt" porque el comodín representa cualquier secuencia de caracteres o ningún carácter.

Este comando coincide con todos los archivos denominados "fuente", independientemente de la extensión del archivo.

ls fuente. *

[] Conjunto de caracteres comodín

Como se mencionó anteriormente, usa el signo de interrogación para representar cualquier carácter individual y el asterisco para representar cualquier secuencia de caracteres (sin incluir ningún carácter).

Puede formar un comodín con los corchetes ([]) y los caracteres que contienen. El carácter relevante del nombre de archivo debe coincidir con al menos uno de los caracteres del conjunto de caracteres comodín.

En este ejemplo, el comando se traduce como: "cualquier archivo con una extensión" .png ", un nombre de archivo que comience con" tuberías_0 "y en el que el siguiente carácter sea  2, 4 o 6."

ls badge_0 [246] .txt

Puede utilizar más de un conjunto de corchetes por plantilla de nombre de archivo:

ls badge_ [01] [789] .txt

También puede incluir rangos en el juego de caracteres. El siguiente comando selecciona archivos con los números del 21 al 25 y del 31 al 35 en el nombre del archivo.

ls badge_ [23] [1-5] .txt

Separador de comandos de Shell

Puede escribir tantos comandos como desee en la línea de comandos, siempre que separe cada uno de ellos con un punto y coma (;). Haremos esto en el siguiente ejemplo:

ls> count.txt; wc -l count.txt; rm count.txt

Tenga en cuenta que el segundo comando se ejecuta incluso si el primero falla, el tercero se ejecuta incluso si el segundo falla, y así sucesivamente.

Si desea detener la secuencia de ejecución si falla un comando, use un doble y comercial (&&) en lugar de un punto y coma:

cd ./doesntexist && cp ~ / Documentos / informes / *.

& Proceso de fondo

Después de escribir un comando en una ventana de terminal y se completa, regresa al símbolo del sistema. Normalmente, esto solo toma un momento o dos. Pero si inicia otra aplicación, como por ejemplo gedit, no podrá usar la ventana de su terminal hasta que cierre la aplicación.

Sin embargo, puede iniciar una aplicación como proceso en segundo plano y continuar usando la ventana de terminal. Para hacer esto, simplemente agregue un ampersand a la línea de comando:

gedit command_address.page &

Bash le muestra el ID de proceso de lo que se inició y luego lo regresa a la línea de comando. Luego puede continuar usando la ventana de su terminal.

<Redirección de entrada

Muchos comandos de Linux aceptan un archivo como parámetro y toman sus datos de ese archivo. La mayoría de estos comandos también pueden recibir información de una secuencia. Para crear una secuencia, utilice el corchete de ángulo izquierdo (<), como se muestra en el siguiente ejemplo, para redirigir un archivo a un comando:

ordenar <palabras.txt

Cuando un comando tiene entrada redirigida a él, puede comportarse de manera diferente a cuando lee un archivo con nombre.

Si usamos wcpara contar las palabras, líneas y caracteres en un archivo, imprime los valores y luego el nombre del archivo. Si redirigimos el contenido del archivo a wc, imprime los mismos valores numéricos pero no conoce el nombre del archivo del que proceden los datos. No puede imprimir un nombre de archivo.

A continuación, se muestran algunos ejemplos de cómo puede utilizar  wc:

wc words.txt
wc <palabras.txt

> Redirección de salida

Puede utilizar el corchete en ángulo recto (>) para redirigir la salida de un comando (normalmente, a un archivo); aquí hay un ejemplo:

ls> archivos.txt
cat files.txt

La redirección de salida también puede redirigir los mensajes de error si usa un dígito (2, en nuestro ejemplo) con  >He aquí cómo hacerlo:

wc doesntexist.txt 2> errors.txt
cat errors.txt

Tubo

Un "tubo" encadena comandos juntos. Toma la salida de un comando y la envía al siguiente como entrada. El número de comandos canalizados (la longitud de la cadena) es arbitrario.

Aquí, usaremos  catpara introducir el contenido del archivo words.txt grep, que extrae cualquier línea que contenga una "C" minúscula o mayúscula. grep luego pasará estas líneas a  sortsortestá utilizando la -ropción (inversa), por lo que los resultados ordenados aparecerán en orden inverso.

Escribimos lo siguiente:

cat words.txt | grep [cC] | sort -r

Operador de historial y NOT lógico de canalización

El signo de exclamación (!) Es un operador lógico que significa NO.

Hay dos comandos en esta línea de comandos:

[! -d ./backup] && mkdir ./backup
  • El primer comando es el texto entre corchetes;
  • El segundo comando es el texto que sigue a los dobles símbolos de unión &&.

El primer comando se utiliza !como operador lógico. Los corchetes indican que se va a realizar una prueba. La  -dopción (directorio) prueba la presencia de un directorio llamado copia de seguridad. El segundo comando crea el directorio.

Debido a que los símbolos de unión dobles separan los dos comandos, Bash solo ejecutará el segundo si el primero  tiene éxito . Sin embargo, eso es lo contrario de lo que necesitamos. Si la prueba del directorio de "copia de seguridad" tiene éxito, no es necesario que la creemos Y si la prueba para el directorio de "respaldo" falla, el segundo comando no se ejecutará y no se creará el directorio que falta.

Aquí es donde !entra el operador lógico . Actúa como un NOT lógico. Entonces, si la prueba tiene éxito (es decir, el directorio existe), la !cambia a "NO éxito", que es un fracaso . Entonces, el segundo comando no está  activado.

Si la prueba de directorio falla (es decir, el directorio no existe), !cambia la respuesta a "NO falla", que es exitosa . Entonces, se ejecuta el comando para crear el directorio faltante .

¡Ese pequeño tiene ! mucho impacto cuando lo necesitas!

Para verificar el estado de la carpeta de respaldo, use el lscomando y las opciones -l(lista larga) y -d(directorio), como se muestra a continuación:

ls -l -d copia de seguridad

También puede ejecutar comandos desde su historial de comandos con el signo de exclamación. El historycomando enumera su historial de comandos, y luego escribe el número del comando con el que desea volver !a ejecutarlo para ejecutarlo, como se muestra a continuación:

! 24

Lo siguiente vuelve a ejecutar el comando anterior:

!!

$ Expresiones variables

En el shell de Bash, crea variables para contener valores. Algunas, como las variables de entorno, siempre existen y puede acceder a ellas cada vez que abre una ventana de terminal. Estos contienen valores, como su nombre de usuario, directorio de inicio y ruta.

Puede usar echopara ver el valor que tiene una variable; simplemente preceda el nombre de la variable con el signo de dólar ($), como se muestra a continuación:

echo $ USER
echo $ HOME
echo $ PATH

Para crear una variable, debe darle un nombre y proporcionar un valor para que se mantenga. No es necesario  utilizar el signo de dólar para crear una variable. Solo agrega $cuando hace referencia a una variable, como en el siguiente ejemplo:

ThisDistro = Ubuntu
MyNumber = 2001
echo $ ThisDistro
echo $ MyNumber

Agregue llaves ({}) alrededor del signo de dólar y realice una expansión de parámetros para obtener el valor de la variable y permitir más transformaciones del valor.

Esto crea una variable que contiene una cadena de caracteres, como se muestra a continuación:

MyString = 123456qwerty

Use el siguiente comando para hacer eco de la cadena en la ventana de la terminal:

echo $ {MyString}

Para devolver la subcadena que comienza en la posición 6 de toda la cadena, use el siguiente comando (hay un desplazamiento cero, por lo que la primera posición es cero):

echo $ {myString: 6}

Si desea hacer eco de una subcadena que comienza en la posición cero y contiene los siguientes seis caracteres, use el siguiente comando:

echo $ {myString: 0: 6}

Utilice el siguiente comando para hacer eco de una subcadena que comienza en la posición cuatro y contiene los siguientes cuatro caracteres:

echo $ {myString: 4: 4}

Citando caracteres especiales

Si desea utilizar un carácter especial como carácter literal (no especial), debe informar al shell Bash. Esto se llama cotización y hay tres formas de hacerlo.

Si encierra el texto entre comillas (“…”), esto evita que Bash actúe sobre la mayoría de los caracteres especiales y simplemente se imprimen. Sin embargo, una excepción notable es el signo de dólar ($). Todavía funciona como el carácter de las expresiones de variables, por lo que puede incluir los valores de las variables en su salida.

Por ejemplo, este comando imprime la fecha y la hora:

echo "Hoy es $ (fecha)"

Si encierra el texto entre comillas simples ('…') como se muestra a continuación, detiene la función de  todos  los caracteres especiales:

echo 'Hoy es $ (fecha)'

Puede usar una barra invertida (\) para evitar que el siguiente carácter funcione como un carácter especial. A esto se le llama "escapar" del personaje; vea el ejemplo a continuación:

echo "Hoy es \ $ (fecha)"

Piense en los caracteres especiales como comandos muy cortos. Si memoriza sus usos, puede beneficiar enormemente su comprensión del shell Bash y los guiones de otras personas.