Como encontrar o histórico de comandos do shell desde que a máquina foi criada?

23

Criei uma máquina virtualbox Ubuntu há algumas semanas e tenho trabalhado em projetos desde então.

Agora eu gostaria de encontrar a sintaxe de alguns comandos digitados no terminal há uma semana, mas abri e fechei a janela do terminal e reiniciei a máquina várias vezes.

Como posso obter o historycomando para voltar ao primeiro comando digitado depois que criei a máquina?
Ou existe outro lugar em que todos os comandos estão armazenados no Ubuntu?

Edward Tanguay
fonte
2
Tanto quanto eu sei, você não pode. Você só pode voltar até o buffer do histórico estar definido. Se você está perguntando sobre qual pacote você pode instalar para salvar indefinidamente o histórico de comandos no futuro, talvez você deva revisar sua pergunta.
7118 RobotHumans

Respostas:

26

Pode ou não ser possível obter todos os comandos. Depende de quantos comandos você executou e como o limite do histórico foi definido.

No entanto, você pode ver a lista do histórico está armazenada aqui

/home/<YOUR_USERNAME>/.bash_history

Pergunta relacionada (para lidar com vários históricos de shell):

É possível tornar a escrita em .bash_history imediata?

Web-E
fonte
3
Não é verdade que o histórico seja salvo apenas de um terminal / shell. Quando você executa history, ele mostra o histórico do shell atual como o mais recente e o histórico de todos os outros shells (incluindo shells nas sessões anteriores, inclusive nos ciclos de energia) antes disso. Todas as instâncias do shell salvam seu histórico para .bash_historyquando a saída. Nenhuma instância o salva lá automaticamente, antes desse ponto.
Eliah Kagan
6

Por padrão, não há lugar onde todos os comandos sejam gravados e mantidos indefinidamente, embora ~/.bash_historycontenha os últimos comandos (se você usar bash, que é o shell padrão no Ubuntu).

Se você deseja que todos os comandos digitados sejam bashgravados para sempre , é necessário configurá-lo. Por exemplo, você pode colocar o seguinte em seu ~/.bashrcarquivo para registrar todos os comandos digitados em um bashshell no arquivo ~/.command_log:

# log every command typed and when
if [ -n "${BASH_VERSION}" ]; then
    trap "caller >/dev/null || \
printf '%s\\n' \"\$(date '+%Y-%m-%dT%H:%M:%S%z')\
 \$(tty) \${BASH_COMMAND}\" 2>/dev/null >>~/.command_log" DEBUG
fi

O exemplo acima ativa uma interceptação DEBUG, que é executada imediatamente antes da execução de um comando comum. O callerbuilt-in é usado para testar se o comando está sendo digitado em um shell interativo ou executado através de algo parecido ~/.bashrc. O valor ${BASH_COMMAND}contém o comando que está sendo executado no momento.

Richard Hansen
fonte
Gostaria de observar que, no macOS, essa técnica também registra update_terminal_cwdo arquivo de histórico, que é um comando que o usuário não executa, mas é executado automaticamente.
Ashish Ahuja
5

Algo que também pode ser do seu interesse é como pesquisar no histórico de comandos anterior. Você pode reverter a pesquisa no seu histórico na linha de comando pressionando Ctrl+re digitando as letras que deseja corresponder. Se você tiver mais de um comando correspondente, pressione Ctrl+rnovamente. Para sair da pesquisa reversa, pressione Ctrl+g.

http://www.ice2o.com/bash_quick_ref.html

Sepero
fonte
4

Você só pode voltar até o limite do seu histórico estar definido; uma vez atingido esse ponto, o histórico começará a ser substituído. No entanto, é possível ter um tamanho maior de histórico para o futuro. Coloque isso no seu .bashrc e especifique um valor (o meu é definido como 1000):

export HISTSIZE=1000

fonte