O '!'
símbolo ou operador no Linux pode ser usado como Negação Lógica operador, bem como para buscar comandos do histórico com ajustes ou para executar o comando executado anteriormente com modificação. Todos os comandos abaixo foram verificados explicitamente no bash Shell. Embora eu não tenha verificado, mas um destes principais não funcionará em outro shell. Aqui vamos ver os usos incríveis e misteriosos de '!'
símbolo ou operador em comandos do Linux.
Você pode não estar ciente do fato de que pode executar um comando de seu história comando (comandos já executados / anteriormente). Para começar, primeiro encontre o número do comando executando ‘história‘Comando.
$ história.
Agora execute um comando de história apenas pelo número em que aparece, na saída de história. Digamos que execute um comando que aparece no número 1551 na saída de 'história‘Comando.
$ !1551.
E, ele executa o comando (comando superior no caso acima), que foi listado no número
1551. Esta forma de recuperar comandos já executados é muito útil, principalmente no caso de comandos longos. Você só precisa chamá-lo usando ! [Número em que aparece na saída do comando de histórico].Você pode executar os comandos que executou anteriormente por sua sequência de execução, sendo que o último comando de execução será representado como -1, penú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á nenhum comando como comando rm> arquivo
e outros apenas para garantir que você não execute nenhum comando perigoso acidentalmente. E então verifique o Sexto último comando, Oito último comando e o Décimo último comando.
$ história. $ !-6. $ !-8. $ !-10.
Eu preciso listar o conteúdo do diretório '/home/$USER/Binary/firefox_ Então eu atirei.
$ ls / home / $ USER / Binário / firefox.
Então eu percebi que deveria ter disparadols -l‘Para ver qual arquivo é executável lá? Portanto, devo digitar todo o comando novamente! Não, eu não preciso. Eu só preciso transportar o último argumento para este novo comando como:
$ ls -l! $
Aqui !$
carregará os argumentos passados no último comando para este novo comando.
Digamos que eu criei um arquivo de texto 1.txt na área de trabalho.
$ touch /home/avi/Desktop/1.txt.
e, em seguida, copie-o para ‘/home/avi/Downloads‘Usando o caminho completo em cada lado com cp comando.
$ cp /home/avi/Desktop/1.txt / home / avi / downloads.
Agora passamos dois argumentos com cp comando. O primeiro é ‘/home/avi/Desktop/1.txt‘E o segundo é‘/home/avi/Downloads‘, Vamos lidar com eles de forma diferente, apenas execute echo [argumentos]
para imprimir os dois argumentos de maneira diferente.
$ echo “1º argumento é:! ^” $ echo “2º argumento é:! cp: 2”
Observe que o primeiro argumento pode ser impresso como “!^”
e o resto dos argumentos podem ser impressos executando “! [Name_of_Command]: [Number_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 diga xyz é executado com 5 argumentos e você precisa obter o 4º argumento, você pode usar “! Xyz: 4”
e use-o como quiser. Todos os argumentos podem ser acessados por “!*”
.
Podemos executar o último comando executado com base em palavras-chave. Podemos entendê-lo da seguinte forma:
$ 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 nós usamos o mesmo comando (ls) mas com opções diferentes e para pastas diferentes. Além disso, enviamos 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 último comando de 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 ao saber que está executando comandos já executados apenas por ls
palavras-chave.
Você pode executar / alterar seu último comando de execução usando (!!)
. Ele chamará o último comando de execução com alter / tweak no comando atual. Vamos mostrar o cenário
No dia passado, executei um script de uma linha para obter meu IP privado para executar,
$ ip addr show | grep inet | grep -v 'inet6' | grep -v '127.0.0.1' | awk '{print $ 2}' | cut -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 redigitar todo o comando novamente e redirecionar a saída para um arquivo? Bem, uma solução fácil é usar PRA CIMA
tecla de navegação e adicionar '> 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}' | cut -f1 -d /> ip.txt.
Graças ao salvador da vida PRA CIMA
tecla de navegação aqui. Agora considere a condição abaixo, na próxima vez que eu executar o script abaixo de uma linha.
$ ifconfig | grep "inet addr:" | awk '{print $ 2}' | grep -v '127.0.0.1' | cut -f2 -d:
Assim que executo o script, o prompt bash retornou um erro com a mensagem “Bash: ifconfig: comando não encontrado”
, Não foi difícil para mim adivinhar que executo este comando como usuário, onde deveria ser executado como root.
Então, qual é a solução? É difícil fazer o login para fazer root e depois digitar o comando inteiro novamente! Além disso (Tecla de navegação PARA CIMA) no último exemplo não veio resgatar aqui. Então? Precisamos ligar “!!”
sem aspas, o que chamará o último comando desse usuário.
$ su -c “!!” raiz.
Aqui su é trocar o usuário que é root, -c
é executar o comando específico como o usuário e a parte mais importante !!
será substituído por comando e o comando da última execução será substituído aqui. Isso! Você precisa fornecer a senha de root.
Eu faço uso de !!
principalmente nos seguintes cenários,
1. Quando eu corro apt-get comando como usuário normal, geralmente recebo uma mensagem de 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 o comando abaixo para obtê-lo bem-sucedido.
$ su -c!!
Da mesma forma que faço para,
$ service apache2 start. ou. $ /etc/init.d/apache2 start. ou. $ systemctl start apache2.
OOPS usuário não está autorizado a realizar tal tarefa, então eu executo ..
$ su -c 'service apache2 start' ou. $ su -c '/etc/init.d/apache2 start' ou. $ su -c 'systemctl start apache2'
O !
(NÃO Lógico) pode ser usado para executar o comando em todos os arquivos / extensão, exceto que está atrás '!'
.
UMA. 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 aquele cuja extensão é ‘pdf‘.
$ $ rm! (*. pdf)
Aqui vamos usar '! -d '
para validar se o diretório existe ou não seguido por Operador Lógico E (&&)
para imprimir esse diretório não existe e Operador lógico OU (||)
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 da lógica E caso contrário, irá para Lógico OU (||)
e executar o que está além da lógica OU.
$ [! -d / home / avi / Tecmint] && printf '\ nNão existe tal diretório / home / avi / Tecmint \ n' || printf '\ n / home / avi / diretório Tecmint existe \ n'
Semelhante à condição acima, mas aqui se o diretório desejado não existir, ele sairá do comando.
$ [! -d / home / avi / Tecmint] && exit.
Uma implementação geral em Scripting Language onde se o diretório desejado não existir, ele irá criar um.
[! -d / home / avi / Tecmint] && mkdir / home / avi / Tecmint.
É tudo por agora. Se você conhece ou encontra qualquer outro uso de '!'
o que vale a pena saber, você pode nos dar sua sugestão no feedback. Mantenha-se conectado!