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

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

El '!' El símbolo u operador en Linux se puede usar como Negación lógica operador y para obtener comandos de la historia con ajustes o ejecutar el comando ejecutar previamente con modificación. Todos los comandos a continuación se han verificado explícitamente en Bash Shell. Aunque no lo he revisado, pero un importante de estos no se ejecutará en otro shell. Aquí entramos en los usos asombrosos y misteriosos de '!' símbolo u operador en comandos de Linux.

1. Ejecute un comando desde el historial por número de comando.

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

$ Historia 

Ahora ejecuta un comando desde historia solo por el número en el que aparece, en la salida de historia. Digamos ejecutar un comando que aparece en número 1551 en la salida de 'historia' dominio.

ps !1551 

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

2. Ejecutar el comando ejecutado previamente como el segundo comando del segundo último comando, etc.

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

Primer intento historia Comando para obtener una lista del último comando ejecutado. Es necesario correr historia comando, para que pueda estar seguro de que no hay comando como comando rm> archivo y otros solo para asegurarse de que no ejecute ningún comando peligroso accidentalmente. Y luego verifique el sexto último comando, ocho Últimos comando y el décimo último comando.

$ Historia $ !-6 $ !-8 $ !-10 
Ejecute los últimos comandos ejecutados por números
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'Entonces 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 necesito. Solo necesito llevar el último argumento a este nuevo comando como:

$ ls -l !ps 

Aquí !ps llevarán argumentos aprobados en el último comando a este nuevo comando.

Pasar argumentos del último comando ejecutado a nuevo
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/escritorio/1.TXT 

y luego copiarlo a '/Home/Avi/Descargas'Usar ruta completa a ambos lados con CP dominio.

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

Ahora hemos aprobado dos argumentos con CP dominio. Primero es '/home/avi/escritorio/1.TXT'Y el segundo es'/Home/Avi/Descargas', Vamos a manejarlos de manera diferente, solo ejecute echo [argumentos] para imprimir ambos argumentos de manera diferente.

$ echo “El primer argumento es: !^"$ ECHO" Segundo argumento es: !CP: 2 " 

Nota 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 un segundo argumento para imprimir. Por eso "!CP: 2 ", Si algún comando diga xyz se ejecuta con 5 argumentos y debe obtener el cuarto argumento, puede usar "!xyz: 4 ", y úsalo como quieras. Se puede acceder a todos los argumentos por "!*.

Manejar dos o más argumentos
5. Ejecutar el último comando sobre la base 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 [comando 1] $ ls -l/home/avi/escritorio>/dev/null [comando 2] $ ls -la/home/avi/downloads>/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 a la salida de cada comando a '/dev/nulo'Como no vamos a tratar con la salida del comando, la consola permanece limpia.

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

ps ! 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 por LS Palabras clave.

Ejecutar comandos basados ​​en palabras clave
6. El poder de !! Operador

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

Último día ejecuto un script de una línea para obtener mi IP privada, así que ejecuto,

$ ip addr show | Grep Inet | GREP -V 'INET6' | GREP -V '127.0.0.1 '| Awk 'imprimir $ 2' | cortar -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 y redirigir la salida a un archivo?? Bueno, una solución fácil es usar ARRIBA Clave de navegación 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' | cortar -f1 -d> ip.TXT 

Gracias al salvavidas ARRIBA Clave de navegación aquí. Ahora considere la siguiente condición, la próxima vez que ejecute el script de una línea.

$ ifconfig | GREP "INET ADDR:" | Awk 'imprimir $ 2' | GREP -V '127.0.0.1 '| cortar -f2 -d: 

Tan pronto como ejecuto el script, la solicitud de bash devolvió un error con el mensaje "Bash: ifconfig: comando no encontrado", No fue difícil para mí adivinar que ejecuto 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! También (Clave de navegación) en el último ejemplo no vino a rescatar aquí. Entonces? Necesitamos llamar "!!" sin cotizaciones, que llamará al último comando para ese usuario.

$ su -c "!!" raíz 

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

El poder de !! Llave

Hago uso de !! Principalmente en los siguientes escenarios,

1. Cuando corro apt-get Comando como usuario normal, generalmente recibo un error diciendo que no tiene permiso para ejecutar.

$ apt-get actualización && apt-get dist uprade 

Error de Opps ... no te preocupes Execúir el siguiente comando para que sea exitoso ..

$ su -c !! 

De la misma manera que lo hago para,

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

Oops User no autorizado para llevar esa tarea, así que ejecuto ..

$ SU -C 'Servicio Apache2 Start' o $ su -c '/etc/init.d/apache2 start 'o $ su -c' systemctl start apache2 ' 
7. Ejecutar un comando que afecta todo el archivo excepto ![NOMBRE DEL ARCHIVO]

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

A. Eliminar todos los archivos de un directorio, excepto el que se llama el que es 2.TXT.

$ RM !(2.TXT) 

B. Elimine todo el tipo de archivo de la carpeta, excepto la de la extensión de la cual es 'pdf'.

$ $ $ rm !(*.PDF) 
8. Compruebe si existe un directorio (say/home/avi/tecMint)? Printf si dicho directorio existe o no.

Aquí usaremos '! -d' para validar si el directorio existe o no seguido por lógico y operador (&&) para imprimir ese directorio no existe y lógico u operador (||) 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 lógico o (||) y ejecutar lo que se encuentra más allá de la lógica O.

ps ! -d/home/avi/tecMint] && printf '\ nno tal/home/avi/tecMint Directory existen \ n' || printf '\ n/home/avi/tecMint Directory Exist \ n' 
9. Compruebe 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.

ps ! -D/Home/Avi/TecMint] && Salir 
10. Cree un directorio (digamos prueba) en su directorio de inicio si no existe.

Una implementación general en el 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 conoces o te encuentras con algún otro uso de '!' que vale la pena saber, es posible que desee proporcionarnos su sugerencia en los comentarios. Mantener conectado!