Isso é algo que eu queria saber há muito tempo, mas nunca cheguei a realmente fazer uma pergunta.
Sei que no terminal fornecido nas distribuições Linux, todo o histórico de comandos pode ser visto usando as teclas de seta (se houver outro método, não estou ciente disso), então como isso acontece?
Existe algum lugar onde o terminal registra todas as teclas digitadas? É algum tipo de buffer? Mas, novamente, se fosse um buffer, seria liberado depois de um tempo, não seria?
Como esse sistema funciona?
command-line
gnome-terminal
Projjol
fonte
fonte
history
comando, mas como funciona todo esse sistema de lembrar comandos antigos.Respostas:
Este é o histórico de comandos e é um recurso do shell, e não do terminal.
No Ubuntu (e muitas, se não a maioria das outras distribuições Linux), o shell padrão para uso interativo é Bash (
/bin/bash
). O Bash mantém seu histórico, que é uma lista dos últimos comandos em~/.bash_history
. Quando você abre um shell (geralmente abrindo um terminal), esse arquivo é lido e carregado no histórico interno desse shell. Depois de fechar o shell, as alterações são gravadas de volta no arquivo. Por padrão, isso é limitado aos últimos 500 comandos.Existem algumas variáveis e opções de shell que podem alterar o comportamento de como isso funciona exatamente. Dê uma olhada na página de manual do bash (
man bash
) se você quiser saber mais. Basta procurar HISTORY (digite/^HISTORY
e confirme com Enter, pule para a próxima localização n)Também existem muito mais métodos para percorrer a história do que apenas Upe Down:
Por exemplo, pressione Ctrl + Re parte de um comando anterior, o bash procurará um comando correspondente no histórico para trás, repita pressionando Ctrl+ Rse a primeira correspondência não for a que você está procurando. (Consulte 'Comandos para manipular a história' na página de manual do bash)
cópia de
/etc/inputrc
para~/.inputrc
e uncomment as linhas comhistory-search-forward
ehistory-search-backward
neles. Se você digitar as primeiras letras de um comando e pressionar PgUp, o bash mostrará apenas comandos do histórico que começam com as mesmas letras. (Trabalhe apenas em conchas abertas após a alteração)Digite em
!!
vez de um comando no shell, isso repetirá o último comando (consulte 'HISTORY EXPANSION' na página de manual do bash para obter mais informações).fonte
unset HISTFILE
em seu ~ / .bashrc. Então, ele apenas manterá o histórico na memória, limpando-o para cada nova chamada de shell.O histórico de comandos é geralmente armazenado por usuário no diretório
.bash_history
arquivo em seu diretório pessoal. Significa que todo usuário tem seu próprio conjunto de comandos que ele executou.Quando várias sessões de terminal estão abertas, elas podem mostrar comandos diferentes ao pressionar a tecla de seta, mas quando você fecha todas as janelas do terminal, o histórico de diferentes sessões de terminal será mesclado em um
~/.bash_history
arquivo comum .fonte