GNU/Linux >> Tutoriales Linux >  >> Linux

10 usos asombrosos y misteriosos de (!) símbolo u operador en los comandos de Linux

El '!' el símbolo u operador en Linux se puede usar como negación lógica operador, así como para obtener comandos del historial con ajustes o para ejecutar comandos ejecutados previamente con modificaciones. Todos los comandos a continuación se han verificado explícitamente en bash Shell. Aunque no lo he comprobado, la mayoría de estos no se ejecutarán en otro shell. Aquí entramos en los asombrosos y misteriosos usos de '!' símbolo u operador en los comandos de Linux.

1. Ejecute un comando del historial por número de comando.

Es posible que no sepa que puede ejecutar un comando desde su historial comando (comandos ejecutados ya/anteriormente). Para comenzar, primero busque el número de comando ejecutando 'historial ‘ comando.

$ history

Ahora ejecute un comando desde historial solo por el número en el que aparece, en la salida del historial . Di ejecutar un comando que aparece en el número 1551 en la salida de 'historia ‘ comando.

$ !1551

Y ejecuta el comando (comando superior en el caso anterior), que figuraba en el número 1551 . Esta forma de recuperar el comando ya ejecutado es muy útil, especialmente en el caso de los comandos que son largos. ¡Solo necesita llamarlo usando ![Número en el que aparece en la salida del comando de historial] .

2. Ejecute el comando ejecutado anteriormente como segundo último comando, séptimo último comando, etc.

Puede ejecutar los comandos que ha ejecutado anteriormente por su secuencia de ejecución, siendo el último comando ejecutado se representará como -1 , penúltimo como -2 , séptimo último como -7 ,….

Historial de primera ejecución comando para obtener una lista del último comando ejecutado. Es necesario ejecutar historial comando, para que pueda estar seguro de que no hay ningún comando como rm command > file y otros solo para asegurarse de que no ejecuta ningún comando peligroso accidentalmente. Y luego marque Sexto último comando, Ocho último comando y Décimo último comando.

$ history
$ !-6
$ !-8
$ !-10
3. Pase los argumentos del último comando que ejecutamos al nuevo comando sin volver a escribir

Necesito enumerar el contenido del directorio '/home/$USER/Binary/firefox así que disparé.

$ ls /home/$USER/Binary/firefox

Entonces me di cuenta de que debería haber disparado 'ls -l ' para ver qué archivo es ejecutable allí? ¡Así que debería escribir todo el comando de nuevo! No, no necesito. Solo necesito llevar el último argumento a este nuevo comando como:

$ ls -l !$

Aquí !$ llevará los argumentos pasados ​​en el último comando a este nuevo comando.

4. Cómo manejar dos o más argumentos usando (!)

Digamos que creé un archivo de texto 1.txt en el escritorio.

$ touch /home/avi/Desktop/1.txt

y luego cópielo en '/home/avi/Downloads ' usando la ruta completa en cualquier lado con cp comando.

$ cp /home/avi/Desktop/1.txt /home/avi/downloads

Ahora hemos pasado dos argumentos con cp dominio. Primero es '/home/avi/Desktop/1.txt ' y el segundo es '/home/avi/Downloads ‘, vamos a manejarlos de manera diferente, simplemente ejecute echo [arguments] para imprimir ambos argumentos de manera diferente.

$ echo “1st Argument is : !^”
$ echo “2nd Argument is : !cp:2”

Tenga en cuenta que el primer argumento se puede imprimir como “!^” y el resto de los argumentos se pueden imprimir ejecutando “![Name_of_Command]:[Number_of_argument]” .

En el ejemplo anterior, el primer comando fue 'cp ' y se necesitaba el segundo argumento para imprimir. Por lo tanto “!cp:2” , si algún comando dice xyz se ejecuta con 5 argumentos y necesita obtener el cuarto argumento, puede usar “!xyz:4” , y úsalo como quieras. Se puede acceder a todos los argumentos mediante “!*” .

5. Ejecutar el último comando en función de las palabras clave

Podemos ejecutar el último comando ejecutado sobre la base de palabras clave. Podemos entenderlo de la siguiente manera:

$ ls /home > /dev/null						[Command 1]
$ ls -l /home/avi/Desktop > /dev/null		                [Command 2]	
$ ls -la /home/avi/Downloads > /dev/null	                [Command 3]
$ ls -lA /usr/bin > /dev/null				        [Command 4]

Aquí hemos usado el mismo comando (ls) pero con diferentes interruptores y para diferentes carpetas. Además, hemos enviado a la salida de cada comando a '/dev/null ‘ como no vamos a ocuparnos de la salida del comando, la consola también permanece limpia.

Ahora ejecute el último comando de ejecución en función de las palabras clave.

$ ! ls					[Command 1]
$ ! ls -l				[Command 2]	
$ ! ls -la				[Command 3]
$ ! ls -lA				[Command 4]

Verifique la salida y se sorprenderá de que está ejecutando comandos ya ejecutados con solo ls palabras clave.

6. El poder de !! Operador

Puede ejecutar/modificar su último comando de ejecución usando (!!) . Llamará al último comando de ejecución con alter/tweak en el comando actual. Vamos a mostrarte el escenario

El último día ejecuté un script de una sola línea para obtener mi IP privada, así que ejecuté,

$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/

Entonces, de repente, descubrí que necesito redirigir la salida del script anterior a un archivo ip.txt , ¿entonces qué debo hacer? ¿Debo volver a escribir todo el comando nuevamente y redirigir la salida a un archivo? Bueno, una solución fácil es usar UP tecla de navegación y agregue '> ip.txt' para redirigir la salida a un archivo como.

$ ip addr show | grep inet | grep -v 'inet6'| grep -v '127.0.0.1' | awk '{print $2}' | cut -f1 -d/ > ip.txt

Gracias a la vida Salvador UP tecla de navegación aquí. Ahora considere la siguiente condición, la próxima vez que ejecute debajo de un script de una sola línea.

$ ifconfig | grep "inet addr:" | awk '{print $2}' | grep -v '127.0.0.1' | cut -f2 -d:

Tan pronto como ejecuté el script, el indicador de bash devolvió un error con el mensaje “bash: ifconfig: command not found” , No fue difícil para mí adivinar que ejecuto este comando como usuario donde debería ejecutarse como root.

Entonces, ¿cuál es la solución? ¡Es difícil iniciar sesión en la raíz y luego escribir el comando completo nuevamente! También (tecla de navegación ARRIBA ) en el último ejemplo no vino a rescatar aquí. ¿Asi que? Necesitamos llamar a “!!” sin comillas, que llamará al último comando para ese usuario.

$ su -c “!!” root

Aquí su es cambiar de usuario que es root, -c es ejecutar el comando específico como usuario y la parte más importante !! será reemplazado por el comando y el último comando de ejecución se sustituirá aquí. ¡Sí! Debe proporcionar la contraseña de root.

Hago uso de !! principalmente en los siguientes escenarios,

1. Cuando ejecuto apt-get comando como usuario normal, generalmente recibo un error que dice que no tiene permiso para ejecutar.

$ apt-get upgrade && apt-get dist-upgrade

Opps error... no se preocupe, ejecute el siguiente comando para que tenga éxito...

$ su -c !!

De la misma manera que lo hago para,

$ service apache2 start
or
$ /etc/init.d/apache2 start
or
$ systemctl start apache2

OOPS El usuario no está autorizado para llevar a cabo dicha tarea, por lo que corro...

$ su -c 'service apache2 start'
or
$ su -c '/etc/init.d/apache2 start'
or
$ su -c 'systemctl start apache2'
7. Ejecute un comando que afecte a todo el archivo excepto ![FILE_NAME]

El ! (NO lógico ) se puede usar para ejecutar el comando en todos los archivos/extensión excepto que está detrás de '!' .

A. Elimina todos los archivos de un directorio excepto el que se llama 2.txt .

$ rm !(2.txt)

B. Elimina todo el tipo de archivo de la carpeta excepto el que tiene la extensión 'pdf ‘.

$ $ rm !(*.pdf)
8. ¿Comprobar si existe un directorio (por ejemplo, /home/avi/Tecmint) o no? Printf si dicho directorio existe o no.

Aquí usaremos '! -d' para validar si el directorio existe o no seguido del operador lógico AND (&&) para imprimir ese directorio no existe y el operador lógico OR (||) para imprimir el directorio está presente.

La lógica es, cuando la salida de [ ! -d /home/avi/Tecmint ] es 0 , ejecutará lo que está más allá de Lógico Y de lo contrario, irá a Lógico O (||) y ejecutar lo que está más allá de Lógico O .

$ [ ! -d /home/avi/Tecmint ] && printf '\nno such /home/avi/Tecmint directory exist\n' || printf '\n/home/avi/Tecmint directory exist\n'
9. ¿Comprobar si existe un directorio o no? Si no, salga del comando.

Similar a la condición anterior, pero aquí, si el directorio deseado no existe, saldrá del comando.

$ [ ! -d /home/avi/Tecmint ] && exit
10. Cree un directorio (por ejemplo, prueba) en su directorio de inicio si no existe.

Una implementación general en lenguaje de secuencias de comandos donde, si el directorio deseado no existe, creará uno.

[ ! -d /home/avi/Tecmint ] && mkdir /home/avi/Tecmint

Eso es todo por ahora. Si conoce o encuentra algún otro uso de '!' que vale la pena saber, es posible que desee proporcionarnos su sugerencia en los comentarios. ¡Mantente conectado!


Linux
  1. Ver comandos y tareas con el comando watch de Linux

  2. 5 comandos de Linux que nunca uso

  3. Ejecución de comandos de Linux en segundo plano y en primer plano

  4. Comando de eco de Linux

  5. Comando de Linux para enumerar todos los comandos y alias disponibles

Comandos de Linux - Guía completa

Cómo ejecutar automáticamente secuencias de comandos y comandos de inicio de Linux

Cómo corregir errores y errores tipográficos en comandos de consola anteriores en Linux

Cómo ejecutar múltiples comandos de Linux en un solo comando

Cómo leer la salida y los usos del comando superior de Linux

Cómo ejecutar varios comandos de Linux a la vez en la terminal de Linux