Como usar o comando history no Linux

Conteúdo

Um prompt de terminal em um laptop Linux.

O shell do Linux mantém um histórico dos comandos que executa, e você pode procurá-lo para repetir os comandos que executou no passado. Depois de entender o comando de histórico do Linux e como usá-lo, pode aumentar significativamente a sua produtividade.

Manipular história

O que George Santayana disse que o famoso, “Aqueles que não se lembram do passado estão condenados a repeti-lo.”. Infelizmente, en Linux, se você não consegue se lembrar do passado, não posso repetir, mesmo se você quiser.

Foi então que o Linux history O comando é útil. Ele permite que você reveja e repita seus comandos anteriores. Isso não tem a intenção de promover preguiça ou economizar tempo.; há também um fator de eficiência (e precisão) em jogo. Quanto mais longo e complicado é um comando, mais difícil será lembrar e escrever sem cometer um erro. Existem dois tipos de erros: um que impede o comando de funcionar e outro que permite que o comando funcione, mas me faz fazer algo inesperado.

a history comando elimina esses problemas. Como a maioria dos comandos Linux, há mais do que você pensa. Apesar disto, se você aprender a usar o history comando, pode melhorar o uso da linha de comando do Linux, todos os dias. É um bom investimento do seu tempo. Existem maneiras muito melhores de usar history comando do que simplesmente pressionar a seta para cima repetidamente.

O comando da história

Em sua forma mais simples, você pode usar o history comando apenas digitando seu nome:

história

A lista de comandos usados ​​anteriormente é escrita na janela do terminal.

Os comandos são numerados, com o usado mais recentemente (aqueles com os números mais altos) no final da lista.

Para ver um certo número de comandos, você pode passar um número para history na linha de comando. Como um exemplo, para ver o mais recente 10 comandos que você usou, escreva o seguinte:

história 10

Você pode obter o mesmo resultado se canalizar history através de tail comando. Para faze-lo, escreva o seguinte:

história | cauda -n 10

RELACIONADO: Como usar Pipes no Linux

Comandos repetidos

Se você quiser reutilizar um comando da lista de histórico, escreva um ponto de exclamação (!) E o número do comando sem espaços no meio.

Como um exemplo, repetir o número do comando 37, você deve digitar este comando:

!37

Para repetir o último comando, escreva dois pontos de exclamação, novamente, sem espaços:

!!

Isso pode ser útil quando você emite um comando e se esquece de usar sudo . Escreve sudo, um espaço, pontos de exclamação duplos e pressione Enter.

Para o seguinte exemplo, nós escrevemos um comando que precisa sudo. Em vez de reescrever toda a linha, podemos salvar um monte de pressionamentos de tecla e apenas digitar sudo !!, Como mostrado abaixo:

mv ./my_script.sh / usr / local / bin /
sudo !!

Por isso, poderádigitar o respectivo número da lista para repetir um comando ou usar os pontos de exclamação duplos para repetir o último comando que usou. Apesar disto, E se você quiser repetir o quinto ou oitavo comando?

Você pode usar um ponto de exclamação, um traço (-) e o número de qualquer comando anterior (novamente, sem espaços) repetir.

Para repetir o décimo terceiro comando acima, você deve escrever o seguinte:

!-13

Pesquise comandos por string

Para repetir o último comando que começa com uma determinada string, você pode digitar um ponto de exclamação e, em seguida, a string sem espaços e, em seguida, pressione Enter.

Como um exemplo, repetir o último comando que começou com sudo, você escreveria este comando:

!sudo

Apesar disto, há um elemento de perigo neste. Se o último comando que começou com sudo não é quem você pensa que é, você executará o comando errado.

Apesar disto, para fornecer uma rede de segurança, você pode usar o :p (imprimir) modificador, como é mostrado a seguir:

!sudo:p

Isso instrui history para imprimir o comando na janela do terminal, em vez de executá-lo. Isso permite que você visualize o comando antes de usá-lo.. Se é o comando que você quer, pressione a seta para cima e pressione Enter para usá-lo.

Se você quiser encontrar um comando que contenha uma determinada string, você pode usar um ponto de exclamação e um ponto de interrogação.

Como um exemplo, para encontrar e executar o primeiro comando correspondente que contém a palavra “apelido”, você deve digitar este comando:

!?apelido

isso vai encontrar quaisquer comandos que contenham a sequência “apelido”, independentemente de onde apareça na string.

Busca interativa

Uma pesquisa interativa permite que você percorra uma lista de comandos correspondentes e repita o que deseja.

Basta pressionar Ctrl + r para iniciar a pesquisa.

Uma janela de terminal após pressionar

Conforme você digita a faixa de pesquisa, o primeiro comando correspondente aparecerá. As letras que você digita aparecem entre o crase (`) e o apóstrofo (‘). Os comandos correspondentes são atualizados conforme você digita cada letra.

Uma pesquisa

Toda vez que você pressiona Ctrl + r, olhe para trás para o próximo comando correspondente, que aparece na janela do terminal.

Quando eu pressiono Enter, o comando mostrado será executado.

Para editar um comando antes de executá-lo, pressione a tecla de seta para a esquerda ou direita.

O comando aparece na linha de comando e você pode editá-lo.

Um comando na linha de comando com edição habilitada.

Você pode usar outras ferramentas do Linux para pesquisar a lista de histórico. Como um exemplo, para canalizar a saída de history dentro de grep e procure por comandos que contenham a string “Pseudônimo” você pode usar este comando:

história | grep aliases

Modifique o último comando

Se você precisar corrigir um erro de digitação e, em seguida, repetir o comando, você pode usar acento circunflexo (^) para modificá-lo. Esteéum ótimo truque para ter na manga sempre que você soletrar um comando incorretamente ou quiser executá-lo novamente com uma opção ou parâmetro de linha de comando diferente.

Para usá-lo, escriba (sem espaços) um acento circunflexo, o texto que você deseja substituir, outro acento circunflexo, o texto que você deseja substituir, outro acento circunflexo e pressione Enter.

Como um exemplo, suponha que você digite o seguinte comando, digitando acidentalmente “shhd” ao invés de “sshd”:

sudo systemctl start shhd

Você pode corrigir isso facilmente digitando o seguinte:

^ shhd ^ sshd ^

O comando é executado com “shhd” fixo para “sshd”.

Removendo comandos da lista de histórico

Além disso, você pode remover comandos da lista de histórico com o -d (retirar) opção. Não há razão para manter o seu comando com erros ortográficos na lista do histórico.

Você pode usar grep Para encontrar isso, passe seu número para history com ele -d opção para removê-lo, e, em seguida, pesquise novamente para se certificar de que desapareceu:

história | grep shhd
história -d 83
história | grep shhd

Você também pode passar uma série de comandos para o -d opção. Para remover todas as entradas da lista de 22 uma 32 (inclusivo), escreva este comando:

história -d 22 32

Para remover apenas os últimos cinco comandos, você pode escrever um número negativo, Então:

história -d -5

Atualização manual do arquivo de log

Quando você faz login ou abre uma sessão de terminal, a lista de histórico é lida do arquivo de histórico. Na festa, o arquivo padrão é .bash_history.

Quaisquer alterações que você fizer na sessão atual da janela do terminal só serão gravadas no arquivo de log quando você fechar a janela do terminal ou sair.

Suponha que você deseja abrir outra janela de terminal para acessar a lista de histórico completa, incluindo os comandos que você digitou na primeira janela do terminal. a -a Opção (tudo) permite que você faça isso na primeira janela do terminal antes de abrir a segunda.

Para usá-lo, escreva o seguinte:

história -a

Os comandos são gravados silenciosamente no arquivo.

Se você deseja gravar todas as mudanças da lista de histórico para o arquivo de histórico (se você removeu alguns comandos antigos, como um exemplo), você pode usar o -w (escrever) opção, Então:

história -w

Exclua a lista de histórico

Para remover todos os comandos da lista de histórico, você pode usar o -c (retirar) opção, na próxima maneira:

história -c

Se ao mesmo tempo você quiser forçar essas mudanças no arquivo de log, usar el -w opção, Então:

história -w

Segurança e histórico de arquivos

Se você usar qualquer aplicativo que exija a inserção de informações confidenciais (como senhas) na linha de comando, lembre-se de que isso também será salvo no arquivo de histórico. Se você não quiser que certas informações sejam salvas, você pode usar a próxima estrutura de comando para removê-lo da lista de histórico imediatamente:

minha-senha-secreta de aplicativo especial;história -d $(história 1)
história 5

Esta estrutura inclui dois comandos separados por ponto e vírgula (;). Vamos analisar isso:

  • aplicação especial: O nome do programa que estamos usando.
  • minha-senha-secreta: A senha secreta que devemos fornecer para o aplicativo na linha de comando. Este é o fim do comando um.
  • história -d: No comando dois, nós invocamos o -d (retirar) opção de history. O que vamos remover está na próxima parte do comando.
  • $ (registro 1): Isso usa uma substituição de comando. A parte do comando contida no $() roda em uma subcamada. O resultado dessa execução é publicado como texto no comando original. a history 1 o comando retorna o comando anterior. Por isso, você pode pensar no segundo comando como história -d “último comando aqui”.

Você pode usar o history 5 comando para se certificar de que o comando que contém a senha foi removido da lista de histórico.

Apesar disto, existe uma maneira ainda mais fácil de fazer isso. Porque Bash ignora linhas que começam com um espaço por padrão, só incluem um espaço no início da linha, na próxima maneira:

 aplicativo especial outra senha
história 5

o comando com a senha não é adicionado à lista de história. A razão pela qual este truque funciona está contido no .bashrc procedimentos.

O arquivo .bashrc

a .bashrc o arquivo é executado toda vez que você faz login ou abre uma janela de terminal. Ele também contém alguns valores que controlam o comportamento do history comando. Vamos editar este arquivo com gedit.

Escreva o seguinte:

gedit .bashrc

Perto do topo do arquivo, você verá duas entradas:

  • HISTSIZE: O número máximo de entradas que a lista de histórico pode conter.
  • HISTFILESIZE: O limite para o número de linhas que um arquivo pode conter.

Esses dois valores interagem das seguintes maneiras:

  • Quando você faz login ou inicia uma sessão de janela de terminal, a lista de histórico é completada a partir do .bash_history procedimentos.
  • Quando você fecha uma janela de terminal, o número máximo de comandos definidos em HISTSIZE são armazenados no .bash_history procedimentos.
  • Se ele histappend A opção de shell está habilitada, comandos são adicionados a .bash_history. E histappend não está configurado, .bash_history é sobrescrito.
  • Depois de salvar os comandos da lista de histórico para .bash_history , o arquivo de log é truncado para conter não mais do que HISTFILESIZE linhas.

Também perto do topo do arquivo, você verá uma entrada para o HISTCONTROL valor.

A entrada

Você pode determinar esse valor para fazer qualquer uma das seguintes:

  • ignorespaces:As linhas que começam com um espaço não são adicionadas à lista de histórico.
  • ignoredups:Comandos duplicados não são adicionados ao arquivo de histórico.
  • ignoreboth:Habilite ambos os itens acima.

Além disso, você pode listar comandos específicos que não deseja adicionar à sua lista de histórico. Separe-os com dois pontos (:) e colocá-los entre aspas (“…”).

Eu seguiria esta estrutura para adicionar uma linha ao seu .bashrc arquivo e substitua os comandos que deseja que sejam ignorados:

export HISTIGNORE ="ls:história"

Um comando

Use carimbos de data / hora

Se você deseja adicionar carimbos de data / hora à lista de histórico, você pode usar o HISTIMEFORMAT configuração. Para faze-lo, apenas adicione uma linha como a próxima ao seu .bashrc procedimentos:

export HISTTIMEFORMAT ="%c "

Observe que há um espaço antes das aspas finais. Isso evita que o carimbo de data / hora corresponda aos comandos na lista de comandos.

Um comando

Agora, quando você executa o comando de histórico, veja os carimbos de data e hora. Observe que todos os comandos que estavam na lista de histórico antes de adicionar os carimbos de data / hora serão marcados com a data e hora do primeiro comando que receber um carimbo de data / hora. Neste exemplo mostrado abaixo, este era o comando 118.

Este é um carimbo de data / hora muito longo. Apesar disto, você pode usar tokens diferentes de %c para refinar isso. Os outros tokens que você pode usar são:

  • %d: Dia
  • %m: Meu
  • %y: Ano
  • %H: Hora
  • %M: Minutos
  • %S: Segundos
  • %F: Data completa (formato ano-mês-data)
  • %T: Hora (formato de hora: minutos: segundos)
  • %c: Data e hora completas (formatos dia-dia-mês-ano e hora: minutos: segundos)

Vamos experimentar e usar alguns tokens diferentes:

export HISTTIMEFORMAT ="%d n% m% T "

O comando HISTTIMEFORMAT = export

A saída usa o dia, o mês e a hora.

Apesar disto, se eliminarmos o dia e o mês, só vai mostrar a hora.

Quaisquer mudanças que você fizer em HISTIMEFORMAT aplica-se a toda a lista de histórico. Isso é viável porque o tempo de cada comando é armazenado como número de segundos desde os dias Unix. a HISTTIMEFORMATA diretiva simplesmente especifica o formato usado para converter esse número de segundos em um estilo legível por humanos, O que:

export HISTTIMEFORMAT ="%T "

O comando

Nossa produção agora é mais gerenciável.

Você também pode usar o history comando para auditar. As vezes, revisar os comandos que você usou no passado pode ajudá-lo a identificar o que pode ter causado um obstáculo.

Como pode na vida, en Linux, você pode usar o history Comando para reviver os bons tempos e aprender com os maus.

RELACIONADO: 37 Comandos importantes do Linux que você deve conhecer

Assine a nossa newsletter

Nós não enviaremos SPAM para você. Nós odiamos isso tanto quanto você.