Blog DLN Cloud

Histórico de comandos no linux

Aprenda a controlar o Histórico de comandos no Shell Bash do Linux

O Shell BASH (Bourne Again SHell) é o shell que é usado como padrão em praticamente todos os sistemas operacionais baseados em Linux. Todos os comandos que escrevemos no terminal são interpretados pelo bash e são armazenados em um histórico de comandos no linux. O Objetivo desse artigo é vemos onde o histórico do shell é salvo e como gerenciá-lo usando o comando interno do bash chamado history e algumas variáveis.

Onde e como é salvo o histórico de comandos no linux usando o Shell BASH

Quando acessamos a linha de comando no linux usando um emulador de terminal ou quando estamos trabalhando em um TTY(Terminal Virtual), e digitamos um comando, esse comando é salvo no buffer(espaço da memoria) e mantido no buffer, somente após a sessão do shell ser fechada a lista de comandos digitados no shell Bash é gravada no chamado “arquivo de histórico”, que por padrão é o valor da variável HISTFILE, na maioria das distribuições linux a variável HISTFILE recebe como valor o arquivo ~/.bash_history, os comandos são armazenados um por linha no arquivo ~/.bash_history.

Lembre-se: O caractere “~” é substituído pela localização do diretório home do usuário, por exemplo, se o diretório home da conta de usuário dlncloud é /home/dlncloud, o caractere “~” é substituído por /home/dlncloud, asism a localização do arquivo ~/.bash_history da conta dlncloud é /home/dlncloud/.bash_history nesse exemplo.

É importante mencionar que se o valor da variável HISTFILE não estiver definido, o histórico de comandos que está armazenado no buffer não será gravado em nenhum arquivo.

Como visualizar e usar o histórico atual do shell Bash

Quando queremos ver os ultimos comandos digitados ou executa-los novamente, pressionamos a tecla seta pra cima ↑, assim vamos navegando no histórico de comandos. para voltar usamos a tecla de seta para baixo ↓ para navegar para frente no histórico do shell

Para visualizar o conteúdo atual do histórico do shell, podemos usar o comando history, sem passar nenhum argumento ou opção. Cada linha na saída produzida por ela é prefixada por um número:

comando history no linux

Para executar um comando especifico do histórico de comandos, usamos o caractere ! ( Ponto de Exclamação ) seguido do número que corresponde o comando no histórico de comandos, por exemplo, para executar o comando 74 do histórico, que na imagem é o comando “man rsyslogd”, o comando ficaria:

!74

Para executar o último comando do histórico de comandos, digitamos duas vezes o caractere ! (Ponto de Exclamação):

!!

Como limpar o histórico do shell Bash

O comando history não é usado apenas para exibir o histórico atual do shell, mas também para fazer outras operações. Para limpar todo o histórico atual do shell Bash, por exemplo, basta invocá-lo com a opção -c.

history -c

Também podemos deletar um comando específico no histórico, usando a opção -d, seguido do número da linha que corresponde ao comando que deseja remover do histórico. Exemplo prático: queremos remover a linha 1 do histórico atual na memória. executamos o comando o history da seguinte forma:

history -d 1

Forçando o histórico do shell bash a ser gravado no arquivo de histórico

Como mencionado anteriormente, o histórico do shell é gravado no arquivo de histórico apenas quando a sessão do shell é fechada.

E se quisermos forçar o histórico da memória a ser gravado em algum momento específico ? A resposta é: Podemos usar o comando history para realizar tal tarefa. Executando o comando history com a opção -w, que não leva argumento:

history -w

Controlando e modificando o comportamento do histórico

O Histórico do shell pode ser modificado e controlado definindo o valor de algumas variáveis ​​de ambiente. É o que iremos ve a seguir com alguns exemplos.

Variável HISTIGNORE

A variável HISTIGNORE é usada para especificar quais comandos devem ser excluídos do histórico do shell. Vamos ver um exemplo: Não queremos gravar no histórico do shell os comandos “ls” e “history“. O valor da variável HISTIGNORE deve ser:

HISTIGNORE="ls:history"
comando history no linux variável HISTIGNORE

Como pode ver na imagem acima, depois que alteramos o valor da variável HISTIGNORE, apenas o comando “echo” e a declaração da variável com valor alterado foram gravados no histórico depois executamos os comandos ls e history.

Existe um detalhe importante: apenas o comando exato que especificamos como valor na variável HISTIGNORE será excluído. Por exemplo, acima configuramos o comando ls para ser excluído, porém se executarmos ls -l, o comando será incluído no histórico do shell:

comando history no linux variável HISTIGNORE

Como podemos evitar isso ? Podemos simplesmente usar o caractere asterisco * (glob) como parte do comando especificado: ele corresponde a todos os caracteres. Alterando o valor da variável HISTIGNORE da seguinte forma:

HISTIGNORE="ls:ls *:history"
comando history no linux variável HISTIGNORE
Variável HISTTIMEFORMAT

A variável HISTTIMEFORMAT pode ser usada para adicionar um prefixo para cada comando no histórico do shell com a data e hora que o comando foi executado. O formato da data e hora é determinado pelo valor atribuído à variável HISTTIMEFORMAT. Alguns valores podem ser usados, veja na tabela a seguir:

ValorSignificado
%dDia
%mMês
%YAno
%HHora
%MMinuto
%SSegundo

Vamos ver um exemplo. Digamos que queremos que cada comando no histórico seja prefixado pela data em que foi executado e a hora seguido do minuto, usando o formado DD/MM/YYYY ( Dia/Mês/Ano ) . O valor que atribuiríamos à variável é:

HISTTIMEFORMAT="%d/%m/%Y %H:%M"
comando history no linux variável HISTTIMEFORMAT
Variável HISTSIZE

A variável HISTSIZE controla quantos comandos são mantidos no histórico do Shell Bash. Se o valor for 0, os comandos não serão salvos na lista de histórico. O shell bash define o valor padrão para 500 depois de ler qualquer arquivo de inicialização.

echo $HISTSIZE 
500

Podemos aumentar ou diminuir este valor de acordo com às nossas necessidades. Se excedermos o valor especificado, os comandos mais antigos serão excluídos do início da lista no histórico, veja um exemplo para armazenar somente os ultimos 3 comandos no histórico:

HISTSIZE=3
comando history no linux variável HISTSIZE

Como pode ver na imagem acima, o primeiro comando que executamos, que foi a atribuição da variável, é excluído, o comando “cat /proc/cmdline” também é excluído do histórico assim que executamos o quinto comando. Apenas três comandos são mantidos. Este é apenas um simples exemplo, mas espero que dê uma ideia.

Esperamos ter ajudado a esclarecer dúvidas e que o conteúdo seja instrutivo.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *