Linux / Comando / history / Comando para exibir uma lista de comandos executados anteriormente

No Linux, o comando history no Bash exibe o histórico de comandos gerenciado pelo shell atual junto com números. Você pode consultar o histórico para encontrar comandos anteriores ou reexecutá-los, e o intervalo e a forma de salvar o histórico dependem das configurações do shell.

Verificando o histórico de comandos

Digite o seguinte comando em um terminal Bash interativo. history é um comando interno do Bash que exibe a lista de histórico do shell atual.

history

A saída mostra o número de cada item e o comando. Por exemplo, uma linha mostrando 42 pwd significa que o item número 42 no histórico do shell é pwd. Os números e o conteúdo variam dependendo da conta, sessão e configurações de histórico, então não use os números de exemplo diretamente. O comando que você digita é registrado, não o resultado da execução.

Para visualizar apenas os itens recentes, especifique um número. O seguinte comando exibe as últimas 10 entradas no histórico.

history 10

Este comando history 10 por si só pode ser incluído na lista. Se o comando desejado não aparecer, verifique o recurso de histórico, o tamanho de armazenamento e as configurações de exclusão.

Pesquisar e reexecutar comandos

Na entrada interativa padrão do Bash, pressionar a tecla de seta para cima permite lembrar e editar entradas anteriores. Pressione Ctrl+R e digite um termo de pesquisa para procurar o histórico para trás. Você pode verificar o conteúdo do comando encontrado e então executá-lo ou modificá-lo.

No Bash interativo com a expansão de histórico habilitada, !! se expande para a entrada anterior do histórico. !n se refere ao item de número n na lista. Por exemplo, o seguinte comando executa o item se o número 42 estiver na lista atual.

!42

Certifique-se primeiro de que o número corresponde ao histórico real. A expansão de histórico geralmente é executada imediatamente após a entrada, então tenha cuidado especialmente com comandos como exclusão de arquivos ou alterações de configuração. Em shells não interativos, a expansão de histórico geralmente está desabilitada por padrão, e o comportamento pode diferir em outros shells.

Para apenas ver o resultado da expansão da entrada anterior sem executá-la, coloque-a entre aspas simples e digite-a da seguinte forma. O comando exibido na tela não será executado.

history -p '!!'

Se você definir shopt -s histverify, o comando expandido será exibido na linha de edição em um Bash interativo usando Readline, permitindo que você o verifique antes da execução. Para reverter as configurações no shell atual, use shopt -u histverify. Para mais detalhes, consulte a documentação de expansão de histórico do Bash.

Onde e quando o histórico é salvo

O Bash gerencia o histórico como uma lista na memória e lê o histórico do arquivo especificado por HISTFILE na inicialização. O arquivo padrão típico é ~/.bash_history, mas isso pode variar dependendo do ambiente ou do modo POSIX. Você pode verificar as configurações atuais com o seguinte comando.

printf '%s\n' "$HISTFILE"

Quando um shell com histórico ativo sai, ele é salvo em um arquivo, mas se o arquivo não puder ser escrito, HISTFILE não é definido, ou estiver vazio, ele não será salvo. Múltiplos terminais têm memórias de histórico separadas, então comandos executados em um podem não aparecer imediatamente em outro. De acordo com a opção histappend, o histórico será adicionado ao arquivo ou o arquivo será sobrescrito ao sair, e o resultado varia dependendo das configurações e das sessões simultâneas.

history -a adiciona novas entradas que ainda não foram adicionadas na sessão atual ao arquivo de histórico. Por outro lado, history -w sobrescreve o arquivo de histórico com a lista atual, o que pode resultar na perda de histórico de outras sessões. Se você usar múltiplos terminais, verifique essa diferença antes de usá-lo. O comportamento de salvamento pode ser encontrado na documentação do recurso de histórico do Bash.

Verifique o tamanho do histórico e as configurações de exclusão

HISTSIZE controla o número de entradas de histórico na memória, enquanto HISTFILESIZE controla o número máximo de linhas no arquivo de histórico. Entradas com múltiplas linhas são exceções à contagem de linhas no arquivo. Os valores atuais podem ser verificados da seguinte forma.

printf 'HISTSIZE=%s\nHISTFILESIZE=%s\nHISTCONTROL=%s\nHISTIGNORE=%s\n' "$HISTSIZE" "$HISTFILESIZE" "$HISTCONTROL" "$HISTIGNORE"

HISTCONTROL e HISTIGNORE podem determinar quais entradas devem ser excluídas do histórico. Por exemplo, se HISTCONTROL incluir ignorespace, entradas que começam com um espaço podem ser excluídas da lista de histórico. Esta é apenas uma configuração relacionada ao histórico do shell e não apaga o histórico deixado em outros registros ou programas.

Excluindo histórico e informações sensíveis

history -d n exclui o item número n da lista de histórico do shell atual. Primeiro, verifique o número real com history. history -c limpa toda a lista atual, então deve ser usado com cautela. Esses dois comandos não apagam automaticamente o arquivo de histórico já salvo ou as listas de outros shells.

Evite inserir senhas ou tokens diretamente na linha de comando, pois eles podem permanecer no histórico ou em outros locais. Se informações secretas já foram expostas, não suponha que simplesmente excluir o histórico resolve o problema; em vez disso, substitua as credenciais e verifique o alcance da exposição relacionada.