O terminal armazena dados?

9

Isso é algo que eu queria saber há muito tempo, mas nunca chegou a fazer uma pergunta.

Eu sei que no terminal que é fornecido nas distribuições Linux, todo o histórico de comandos pode ser visto usando as teclas de seta (se houver algum outro método, eu não estou ciente disso), então como isso acontecer?

Existe algum lugar onde o terminal registra todas as teclas digitadas? É algum tipo de buffer? Mas, novamente, se fosse um buffer, ele seria esvaziado depois de um tempo, não seria?

Como funciona este sistema?

    
por Projjol 19.11.2013 / 07:19

2 respostas

10

Este é o histórico de comandos e é um recurso do shell em vez do terminal.

No Ubuntu (e muito, se não na maioria das outras distribuições Linux), o shell padrão para uso interativo é o 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) este arquivo é lido e carregado no histórico interno deste shell. Depois de fechar o shell, as alterações são gravadas 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 no bash manpage ( man bash ) se você quiser saber mais. Apenas procure por HISTORY (digite /^HISTORY e confirme com Enter , pule para a próxima localização com n )

Além disso, há muito mais métodos para percorrer a história do que apenas Up e Down :

  • Por exemplo, pressione Ctrl + R e parte de um comando anterior, o bash irá procurar no histórico por um comando correspondente, repetir pressionando Ctrl + R se a primeira correspondência não for a que você está procurando. (Veja 'Comandos para Manipulação do Histórico' no bash manpage)

  • Copie /etc/inputrc para ~/.inputrc e descomente as linhas com history-search-forward e history-search-backward nelas. Se você digitar as primeiras letras de um comando e pressionar PgUp , o bash mostrará apenas os comandos do histórico que começam com as mesmas letras. (Trabalhe somente em shells abertos após essa alteração)

  • Digite !! em vez de um comando no shell, isso repetirá o último comando (consulte 'HISTORY EXPANSION' no bash manpage para obter mais informações sobre isso).

por Adaephon 19.11.2013 / 08:09
10

O histórico de comandos geralmente é armazenado por usuário no arquivo .bash_history 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ê fechar todas as janelas de terminal, o histórico da sessão de terminal diferente será mesclado em um arquivo ~/.bash_history comum.

    
por Tarun 19.11.2013 / 07:28