O terminal armazena dados?

9

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?

Projjol
fonte
escreva histórico para obter todos os comandos usados ​​anteriormente ..
Sukupa91
O OP não está perguntando sobre o historycomando, mas como funciona todo esse sistema de lembrar comandos antigos.
Tarun
desculpe eu entendi errado ..
Sukupa91
2
Observe esta exceção: se o comando iniciar com um espaço, o comando não terminará no histórico.
Rinzwind
@Rinzwind, é adicionado à história, se iniciado com um espaço.
GC 13

Respostas:

10

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 /^HISTORYe 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 ~/.inputrce uncomment as linhas com history-search-forwarde history-search-backwardneles. 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).

Adaephon
fonte
11
E se você não quiser manter uma história, coloque unset HISTFILEem seu ~ / .bashrc. Então, ele apenas manterá o histórico na memória, limpando-o para cada nova chamada de shell.
um CVn 19/11/2013
10

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_historyarquivo comum .

Tarun
fonte