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

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

El ‘!’ El símbolo u operador en Linux se puede usar como operador de Negación lógica. así como para recuperar 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 usos asombrosos y misteriosos 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 se dé cuenta del hecho de que puede ejecutar un comando desde su comando historial. (comandos ya ejecutados o anteriormente). Para comenzar, primero busque el número de comando ejecutando el comando ‘ history. .

$ history

 Buscar los últimos comandos ejecutados con el comando Historial Buscar último ejecutado Comandos con comando de historial

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

$! 1551

 Ejecutar los últimos comandos ejecutados por ID de número  Ejecutar los últimos comandos ejecutados por ID de número

freestar.config.enabled_slots.push (LocationName:” tecmint_incontent “, slotId:” tecmint_incontent ” );

Y ejecuta el comando (comando superior en el caso anterior), que se enumeró en el número 1551. Esta forma de recuperar un 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 previamente como segundo último comando, séptimo último comando, etc.

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

Primero ejecute el comando historial. para obtener una lista del último comando ejecutado. Es necesario ejecutar el comando history. para que pueda estar seguro de que no hay ningún comando como rm command> file y otros solo para asegurarse de no ejecutar ningún comando peligroso accidentalmente. Y luego marque el sexto último comando, el octavo último comando y el décimo último comando.

$ history $!-6 $!-8 $!-10  Ejecutar los últimos comandos ejecutados por números  Ejecutar los últimos comandos ejecutados por números Ejecutar los últimos comandos ejecutados por números 3. Pasar 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í? ¡Entonces debería escribir todo el comando de nuevo! No, no lo 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.

 Pasar argumentos del último comando ejecutado al nuevo  Pasar argumentos del último comando ejecutado a New Pasar argumentos del último comando ejecutado a New 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 lo copie en ‘/home/avi/Downloads. ‘usando la ruta completa a cada lado con el comando cp.

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

Ahora hemos pasado dos argumentos con el comando cp. Primero es ‘/home/avi/Desktop/1.txt. y el segundo es ‘/home/avi/Downloads. , manejémoslos de manera diferente, simplemente ejecute echo [argumentos ] para imprimir ambos argumentos de forma diferente.

$ echo “El primer argumento es:! ^” $ echo “El segundo argumento es:! cp: 2”

Nota El primer argumento se puede imprimir como “! ^” y el resto de los argumentos se pueden imprimir ejecutando “! [Nombre_de_comando]: [Número_de_argumento]”.

En el ejemplo anterior, el primer comando era “ cp. y se necesitaba un 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 usarlo como desee. Se puede acceder a todos los argumentos mediante “! *”.

Manejar dos o más argumentos  Manejar dos o más argumentos Manejar dos o más argumentos 5. Ejecute el último comando basándose en palabras clave

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

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

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

Ahora Ejecute el último comando de ejecución basándose en palabras clave.

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

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

Ejecutar comandos basados ​​en palabras clave  Ejecutar comandos basados ​​en palabras clave Ejecutar comandos basados ​​en 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 mostrarle 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 ‘imprimir $ 2’ | cut-f1-d/

Entonces, de repente, me di cuenta de que necesito redirigir la salida del script anterior a un archivo ip.txt. entonces, ¿qué debo hacer? ¿Debo volver a escribir todo el comando y redirigir la salida a un archivo? Bueno, una solución fácil es usar la tecla de navegación ARRIBA y agregar ‘> 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 ‘imprimir $ 2’ | cut-f1-d/> ip.txt

Gracias a la tecla de navegación de Life Savior ARRIBA aquí. Ahora considere la siguiente condición, la próxima vez que ejecute un script de una sola línea.

$ ifconfig | grep “inet addr:” | awk ‘imprimir $ 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: comando no encontrado”. No fue difícil para mí adivinar que ejecuté este comando como usuario donde debe ejecutarse como root.

Entonces, ¿cuál es la solución? ¡Es difícil iniciar sesión en root y luego escribir todo el comando nuevamente! Además, ( tecla de navegación ARRIBA. en el último ejemplo no vino a rescatar aquí. ¿Entonces? Necesitamos llamar “!!” sin comillas, que llamará al último comando de 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í. ¡Si! Debe proporcionar la contraseña de root.

¡¡El poder de !! Clave  El poder de !! Clave El poder de !! Clave

¡¡Yo la uso !! principalmente en los siguientes escenarios,

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

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

Error de Opps… no te preocupes, ejecuta el siguiente comando para que tenga éxito ..

$ su-c !!

De la misma manera que lo hago para,

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

OOPS Usuario no autorizado para realizar dicha tarea, así que ejecuto ..

$ su-c ‘service apache2 start’ o $ su-c ‘/etc/init.d/apache2 start’ o $ su-c ‘systemctl start apache2’ 7. Ejecute un comando que afecte a todos los archivos excepto ! [FILE_NAME]

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

A.. Eliminar todos los archivos de un directorio excepto aquel cuyo nombre es 2.txt.

$ rm! (2.txt)

B.. Eliminar todos el tipo de archivo de la carpeta, excepto el que tiene la extensión ‘ pdf. .

$ $ rm! (*. pdf) 8. Compruebe si un directorio (digamos/home/avi/Tecmint) ¿existen o no? Printf si dicho directorio existe o no.

Aquí usaremos ‘!-d ‘para validar si el directorio existe o no seguido por el operador lógico AND (&&) para imprimir que el 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 se encuentra más allá de la lógica Y. de lo contrario, irá a la lógica OR (||) y ejecutará lo que está más allá O. lógico.

$ [!-d/home/avi/Tecmint] && printf ‘\ nno existe el directorio/home/avi/Tecmint \ n’ || printf ‘\ n/home/avi/Tecmint existe el directorio \ n’ 9. ¿Verifica 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 (digamos test) en su directorio personal si no existe.

Una implementación general en Scripting Language 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 conocer, es posible que desee proporcionarnos su sugerencia en los comentarios. ¡Mantente conectado!