Búsqueda de sitios web

15 personajes especiales que debes conocer para Bash


Enlaces rápidos

  • ¿Qué son los caracteres especiales?
  • ~ Directorio de inicio
  • . Directorio actual
  • .. Directorio de padres
  • / Separador de directorio de ruta
  • # Comentar o recortar cadenas
  • ? Comodín Bash de un solo carácter
  • * Comodín de Bash de secuencia de caracteres
  • [] Conjunto de caracteres comodín
  • ; Separador de comandos de Shell
  • Y proceso en segundo plano
  • < Redirección de entrada
  • > Redirección de salida
  • | Tubo
  • ! Operador histórico y NOT lógico de canalización
  • $Expresiones variables
  • Citar caracteres especiales

Si desea dominar el shell Bash en Linux, macOS u otro sistema similar a UNIX, los caracteres especiales (como ~, *, | y >) son fundamentales. Le ayudaremos a desentrañar estas crípticas secuencias de comandos de Linux y a convertirse 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 maneras 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, sólo deseas imprimir un carácter y no necesitas que actúe como un símbolo mágico. Hay una manera de utilizar un personaje para representarse a sí mismo en lugar de su función especial.

Le mostraremos qué caracteres son caracteres "especiales" o "meta", y también cómo puede usarlos funcional y literalmente.

~ Directorio de inicio

La tilde (~) es una abreviatura de su directorio de inicio. Significa que no es necesario escribir la ruta completa a su directorio de inicio en los comandos. Dondequiera que esté 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á en su carpeta de inicio y desea cambiar al directorio archive en su directorio work, use la tilde para hacerlo. él:

cd ~/work/archive

. Directorio actual

Un punto (.) representa el directorio actual. Lo verá en los listados de directorios si usa la opción -a (todos) con ls.

ls -a

También puede utilizar 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 en el directorio actual el archivo script.sh. De esta manera, no buscará en los directorios de su ruta ningún ejecutable o script que coincida.

.. Directorio de padres

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

cd ..

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 utilizar esta técnica para moverse rápidamente a un directorio en el mismo nivel en el árbol de directorios que el actual. Saltas un nivel y luego bajas uno a un directorio diferente.

cd ../gc_help

/ Separador de directorio de ruta

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

ls ~/work/archive

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:

cd /

# Comentar o recortar cadenas

La mayoría de las veces, utiliza el signo numérico (#) para indicarle al shell que lo que sigue es un comentario y que no debe actuar en consecuencia. Puede usarlo en scripts de shell y, de manera menos útil, en la línea de comando.

# This will be ignored by the Bash shell

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

También puedes usar el hash para recortar una variable de cadena y eliminar parte del texto desde el 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 utiliza echo para imprimir las palabras "How-To" en la ventana del terminal. Recupera el valor almacenado en la variable de cadena mediante una expansión de parámetros. Debido a que agregamos el hash y el texto "Dave", se recorta esa parte de la cadena antes de pasarla a echo.

echo How-To ${this_string#Dave}

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

echo $this_string

? Comodín Bash de un solo carácter

Bash Shell admite tres comodines, uno de los cuales es el signo de interrogación (?). Utilice comodines para reemplazar caracteres en plantillas de nombres de archivos. 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:

ls badge?.txt

Esto se traduce como "enumerar cualquier archivo con un nombre que comience con 'insignia' y sea seguido por 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 letras después de la parte "insignia" del nombre del archivo. El comodín del signo de interrogación coincidirá tanto con letras como con 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 Bash de secuencia de caracteres

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

ls badge*

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 llamados "fuente", independientemente de la extensión del archivo.

ls source.*

[] Conjunto de caracteres comodín

Como se explicó anteriormente, se utiliza el signo de interrogación para representar cualquier carácter individual y el asterisco para representar cualquier secuencia de caracteres (incluido ningún carácter).

Puedes formar un comodín con los corchetes ( [] ) y los caracteres que contienen. El carácter relevante en el nombre del archivo debe coincidir con al menos uno de los caracteres del juego 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 "pipes_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 signo doble (&&) en lugar de un punto y coma:

cd ./doesntexist && cp ~/Documents/reports/* .

Y proceso en segundo plano

Después de escribir un comando en una ventana de terminal y completarlo, regresa al símbolo del sistema. Normalmente, esto sólo lleva uno o dos momentos. Pero si inicia otra aplicación, como 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 del terminal. Para hacer esto, simplemente agregue un signo y a la línea de comando:

gedit command_address.page &

Bash le muestra el ID del proceso que se inició y luego lo devuelve 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 angular izquierdo ( < ), como se muestra en el siguiente ejemplo, para redirigir un archivo a un comando:

sort < words.txt

Cuando se redirige una entrada a un comando, es posible que se comporte de manera diferente que cuando lee desde un archivo con nombre.

Si usamos wc para contar las palabras, líneas y caracteres de 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 sabe el nombre del archivo del que provienen 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 < words.txt

> Redirección de salida

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

ls > files.txt
cat files.txt

La redirección de salida también puede redirigir 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

Una "tubería" encadena los comandos. 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 cat para introducir el contenido del archivo palabras.txt en grep, que extrae cualquier línea que contenga una "C" minúscula o mayúscula. grep luego pasará estas líneas a sort. sort utiliza la opción -r (inversa), por lo que los resultados ordenados aparecerán en orden inverso.

Escribimos lo siguiente:

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

! Operador histórico 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 comando:

[ ! -d ./backup ] && mkdir ./backup
  • El primer comando es el texto entre corchetes;
  • El segundo comando es el texto que sigue a los signos dobles &&.

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

Debido a que los símbolos 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 "copia de seguridad" tiene éxito, no es necesario crearlo. Y si la prueba del directorio "copia de seguridad" falla, el segundo comando no se ejecutará y no se creará el directorio que falta.

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

Si la prueba del directorio falla (es decir, el directorio no existe), ! cambia la respuesta a "NO falla", que es éxito. Entonces, se ejecuta el comando para crear el directorio que falta.

¡Ese pequeño ! tiene mucha fuerza cuando lo necesitas!

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

ls -l -d backup

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

!24

Lo siguiente vuelve a ejecutar el comando anterior:

!!

$Expresiones variables

En el shell 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 echo para ver el valor que contiene 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 un valor para que se mantenga. No es necesario utilizar el signo de dólar para crear una variable. Solo agregas $ cuando haces 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

Utilice el siguiente comando para hacer eco de la cadena en la ventana de 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 de cero, por lo que la primera posición es cero):

echo ${myString:6}

Si desea repetir 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}

Citar caracteres especiales

Si desea utilizar un carácter especial como carácter literal (no especial), debe informarle al shell Bash. A esto se le llama citar y hay tres formas de hacerlo.

Si incluye 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 del dólar ($). Todavía funciona como carácter para expresiones 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 "Today is $(date)"

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

echo 'Today is $(date)'

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

echo "Today is \$(date)"

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

Linux Commands

Files

tar·pv·cat·tac·chmod·grep ·diff·sed·ar·man·pushd·popd·fsck·testdisk·seq·fd·pandoc·cd·$PATH·awk·join·jq·fold·uniq·journalctl·tail·stat·ls·fstab·echo·less·chgrp·chown·rev·look·strings·type·rename·zip·unzip·mount·umount·install·fdisk·mkfs·rm·rmdir·rsync·df·gpg·vi·nano·mkdir·du·ln·patch·convert·rclone·shred·srm·scp·gzip·chattr·cut·find·umask·wc· tr

Processes

alias·screen·top·nice·renice·progress·strace·systemd·tmux·chsh·history·at·batch·free·which·dmesg·chfn·usermod·ps·chroot·xargs·tty·pinky·lsof·vmstat·timeout·wall·yes·kill·sleep·sudo·su·time·groupadd·usermod·groups·lshw·shutdown·reboot·halt·poweroff·passwd·lscpu·crontab·date·bg·fg·pidof·nohup·pmap

Networking

netstat·ping·traceroute·ip·ss·whois·fail2ban·bmon·dig·finger·nmap·ftp·curl·wget·who·whoami·w·iptables·ssh-keygen·ufw·arping·firewalld

Artículos relacionados