10 usos incríveis e misteriosos de (!) Símbolo ou operador em comandos Linux

10 usos incríveis e misteriosos de (!) Símbolo ou operador em comandos Linux

O '!' símbolo ou operador no Linux pode ser usado como Negação lógica Operador, bem como buscar comandos da história com ajustes ou executar o comando de execução anteriormente com modificação. Todos os comandos abaixo foram verificados explicitamente no Bash Shell. Embora eu não tenha verificado, mas um grande deles não será executado em outra concha. Aqui entramos nos usos incríveis e misteriosos de '!' símbolo ou operador em comandos Linux.

1. Execute um comando da história pelo número do comando.

Você pode não estar ciente do fato de que você pode executar um comando do seu história Comando (já/comandos executados anteriores). Para começar primeiro, encontre o número do comando correndo 'históriaComando.

$ HISTÓRIA 

Agora execute um comando de história apenas pelo número em que aparece, na saída de história. Diga Run um comando que apareça no número 1551 Na saída de 'históriaComando.

$ !1551 

E, ele executa o comando (comando superior no caso acima), que foi listado no número 1551. Dessa forma de recuperar o comando já executado é muito útil, especialmente no caso daqueles comandos que são longos. Você só precisa chamá -lo usando ![Número em que aparece no comando de saída do histórico].

2. Execute o comando executado anteriormente como 2º último comando, 7º último comando, etc.

Você pode executar os comandos que você executou anteriormente pela sequência em execução, sendo o comando da última execução será representado como -1, segundo último como -2, sétimo último como -7,.. .

Primeira corrida história comando para obter uma lista do último comando executado. É necessário correr história comando, para que você possa ter certeza de que não há comando como como RM Comando> Arquivo e outros apenas para garantir que você não execute nenhum comando perigoso acidentalmente. E então verifique o sexto último comando, oito comando e o décimo último comando.

$ history $ !-6 $ !-8 $ !-10 
Execute os últimos comandos executados por números
3. Passe os argumentos do último comando que corremos para o novo comando sem reagir

Eu preciso listar o conteúdo do diretório '/home/$ user/binário/firefox'Então eu atirei.

$ ls/home/$ user/binário/firefox 

Então eu percebi que deveria ter demitido 'ls -l'Para ver qual arquivo é executável lá? Então devo digitar todo o comando novamente! Não, eu não preciso. Eu só preciso levar o último argumento para este novo comando como:

$ ls -l !$ 

Aqui !$ levará argumentos aprovados em último comando para este novo comando.

Passe argumentos do último comando executado para o novo
4. Como lidar com dois ou mais argumentos usando (!)

Digamos que criei um arquivo de texto 1.TXT na área de trabalho.

$ touch/home/Avi/desktop/1.TXT 

e então copie -o para '/Home/Avi/Downloads'Usando o caminho completo de ambos os lados com cp comando.

$ CP/Home/Avi/Desktop/1.txt/home/Avi/downloads 

Agora passamos dois argumentos com cp comando. Primeiro é '/Home/Avi/Desktop/1.TXT'e o segundo é'/Home/Avi/Downloads', vamos lidar com eles de maneira diferente, apenas executar eco [argumentos] Para imprimir os dois argumentos de maneira diferente.

$ echo “O 1º argumento é: !^”$ Echo“ O segundo argumento é: !CP: 2 " 

Nota 1º argumento pode ser impresso como ““!^ e o restante dos argumentos pode ser impresso executando ““![Name_of_command]: [número_of_argument] ”.

No exemplo acima, o primeiro comando foi 'cp'e o segundo argumento foi necessário para imprimir. Por isso ““!CP: 2 ”, Se algum comando disser XYZ é executado com 5 argumentos e você precisa obter o quarto argumento, você pode usar ““!XYZ: 4 ", e use como quiser. Todos os argumentos podem ser acessados ​​por ““!*”.

Lidar com dois ou mais argumentos
5. Executar o último comando com base em palavras -chave

Podemos executar o último comando executado com base em palavras -chave. Podemos entender o seguinte:

$ ls/home>/dev/null [comando 1] $ ls -l/home/avi/desktop>/dev/null [comando 2] $ ls -la/home/avi/downloads>/dev/null [comando 3 ] $ ls -la /usr /bin> /dev /null [comando 4] 

Aqui usamos o mesmo comando (LS) mas com diferentes interruptores e para diferentes pastas. Além disso, enviamos para a saída de cada comando para '/dev/null'Como não vamos lidar com a saída do comando, o console permanece limpo.

Agora execute o comando de última execução com base em palavras -chave.

$ ! LS [comando 1] $ ! ls -l [comando 2] $ ! ls -la [comando 3] $ ! LS -LA [Comando 4] 

Verifique a saída e você ficará surpreso que esteja executando comandos já executados apenas por ls palavras-chave.

Executar comandos com base em palavras -chave
6. O poder de !! Operador

Você pode executar/alterar seu comando de última execução usando (!!). Ele chamará o Comando Last Run com Alter/Tweak no comando atual. Vamos mostrar o cenário

No dia passado, corri um script de uma linha para obter meu IP privado, então eu corro,

$ ip addr show | Grep INET | Grep -v 'Inet6' | grep -v '127.0.0.1 '| awk 'print $ 2' | corte -f1 -d/ 

Então, de repente, descobri que preciso redirecionar a saída do script acima para um arquivo IP.TXT, então, o que eu deveria fazer? Devo digitar todo o comando novamente e redirecionar a saída para um arquivo? Bem, uma solução fácil é usar ACIMA chave de navegação e adicione '> IP.TXT' para redirecionar a saída para um arquivo como.

$ ip addr show | Grep INET | Grep -v 'Inet6' | grep -v '127.0.0.1 '| awk 'print $ 2' | corte -f1 -d> ip.TXT 

Graças ao salvador da vida ACIMA Chave de navegação aqui. Agora considere a condição abaixo, na próxima vez que eu corro abaixo do script de uma linha.

$ ifconfig | Grep "INET ADDR:" | awk 'print $ 2' | grep -v '127.0.0.1 '| corte -f2 -d: 

Assim que eu execute o script, o prompt de bash retornou um erro com a mensagem “Bash: ifconfig: comando não encontrado”, Não foi difícil para mim adivinhar que eu corro esse comando como usuário onde deveria ser executado como root.

Então, qual é a solução? É difícil fazer login para enraizar e depois digitar todo o comando novamente! Também (Chave de navegação na UP) no último exemplo não veio resgatar aqui. Então? Precisamos ligar ““!!” sem cotações, que chamarão o último comando para esse usuário.

$ su -c “!!" raiz 

Aqui su é o usuário do switch que é root, -c é executar o comando específico como o usuário e a parte mais importante !! será substituído pelo comando e o comando last run será substituído aqui. Sim! Você precisa fornecer senha raiz.

O poder de !! Chave

Eu uso !! principalmente nos seguintes cenários,

1. Quando eu corro apt-get Comando como usuário normal, geralmente recebo um erro dizendo que você não tem permissão para executar.

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

Erro de opps ... não se preocupe, execute abaixo o comando para obter sucesso…

$ su -c !! 

Da mesma maneira que eu,

$ service apache2 start ou $ /etc /init.D/Apache2 Iniciar ou $ SystemCtl START APACHE2 

OOPS Usuário não está autorizado a carregar essa tarefa, então eu corro…

$ su -c 'serviço apache2 start' ou $ su -c '/etc/init.D/Apache2 Iniciar 'ou $ su -C' SystemCtl Start Apache2 ' 
7. Execute um comando que afete todo o arquivo, exceto ![NOME DO ARQUIVO]

O ! (Lógico não) pode ser usado para executar o comando em todos os arquivos/extensão, exceto que está atrás '!'.

A. Remova todos os arquivos de um diretório, exceto aquele cujo nome é 2.TXT.

$ rm !(2.TXT) 

B. Remova todo o tipo de arquivo da pasta, exceto aquela cuja extensão é 'pdf'.

$ $ rm !(*.pdf) 
8. Verifique se um diretório (digamos/home/Avi/Tecmint) existe ou não? Printf se o referido diretório existir ou não.

Aqui vamos usar '! -d ' Para validar se o diretório existe ou não é seguido por lógico e operador (&&) Imprimir esse diretório não existe e lógico ou operador (||) Para imprimir o diretório está presente.

A lógica é, quando a saída de [[ ! -D/Home/Avi/Tecmint] é 0, ele executará o que está além do lógico E caso contrário, será lógico ou (||) e executar o que está além do lógico OU.

$ [ ! -D/Home/Avi/Tecmint] && printf '\ nno tais/home/Avi/Tecmint Diretório Existir \ n' || Printf '\ n/home/Avi/Tecmint Directory Existe \ n' 
9. Verifique se um diretório existe ou não? Se não sair do comando.

Semelhante à condição acima, mas aqui se o diretório desejado não existir, ele sairá do comando.

$ [ ! -D/Home/Avi/Tecmint] && Sair 
10. Crie um diretório (digamos, teste) em seu diretório doméstico se não existir.

Uma implementação geral na linguagem de script onde, se o diretório desejado não existir, ele criará um.

[[ ! -D/Home/Avi/Tecmint] && mkdir/home/Avi/Tecmint 

É tudo por agora. Se você conhece ou se deparar com qualquer outro uso de '!' O que vale a pena saber, você pode nos fornecer sua sugestão no feedback. Mantenha -se conectado!