localização do arquivo de histórico de saída do shell bash

11

Onde o bash shell armazena a sessão de terminal real? Eu quero ler a saída de comandos que eu usei antes. Tudo o que posso encontrar no googling é como armazenar a saída de um comando.

Como a saída é exibida na tela, ela deve ser armazenada em algum lugar. Então minha pergunta é: onde?

    
por Daniel Böckenhoff 19.04.2016 / 11:26

5 respostas

10

O Bash armazena apenas o histórico dos comandos que você executou (que você pode recuperar digitando history ). A menos que você já tenha defina a rolagem para um número muito alto, não há como ver as saídas mais antigas do que o valor definido de retrocesso. Também definir esse valor para um número muito alto tornará sua rolagem lenta, já que as linhas são armazenado na memória .

Para armazenar seus comandos futuros e suas saídas, há poucas opções:

Usando screen

Inicie uma sessão de tela digitando screen . Uma vez dentro da tela, pressione Ctrl - a , depois : , e depois digite log . Toda a E / S será capturada em screenlog arquivos no diretório em que você iniciou o comando screen .

Usando script

Você pode começar digitando script . Uma sessão script será iniciada para capturar todas as E / S de um arquivo chamado typescript . Você pode sair da sessão script por Ctrl - d e visualizar os logs no arquivo typescript .

Usando tee

tee é uma ferramenta útil. Você pode fazer algo assim:

$ bash | tee log.txt

Isso abrirá um novo shell bash dentro do que você já está executando. Quando você exit , você pode ver as saídas no arquivo chamado log.txt

Outras formas

Como Dustin Kirkland sugeriu em esta postagem , você também pode usar byobu . Embora eu nunca tenha usado ferramentas de screencasting de terminal como o Shelr também parece uma opção.

    
por Ron 19.04.2016 / 12:05
2

Existem muitas questões relacionadas a esta, mas todas começam com a suposição (direita) de que a saída não está registrada.

% bl0ck_qu0te%

Em nenhum lugar: a saída do Bash (e de qualquer outro shell que conheço) não está registrada.

% bl0ck_qu0te%

É, mas provavelmente não em texto simples e nem mesmo no disco (embora isso realmente esteja no emulador de terminal): muito provavelmente, e pelo menos na maioria dos casos, em um segmento de memória alocado pelo emulador de terminal .

No entanto, com certeza ele não está logado em um arquivo, pelo menos não pelo shell, e eu não sei dos emuladores de terminal que registram a saída em um arquivo por padrão.

Na verdade, isso não significa que é impossível registrar a saída do terminal: primeiro, mencionarei algo que acho que muitos não conhecem, já que nunca vi ninguém mencionando isso pelo menos aqui no Ask Ubuntu: o Konsole permite para salvar o scrollback em um arquivo (talvez existam outros emuladores de terminal que forneçam tal funcionalidade, o Konsole é o único que eu conheço), embora isso seja limitado pelo limite de tamanho de rolagem do Konsole.

Isso geralmente não é realmente útil, e muito provavelmente você vai querer olhar para soluções "adequadas" para registrar a saída de uma sessão inteira em um arquivo ( Como faço para registrar todas as entradas e saídas em uma sessão de terminal? e Ron's answer ).

    
por kos 19.04.2016 / 12:09
1

Existe um comando chamado script, se não instalado, apt-get install script o faria.

Em seguida, no terminal, basta digitar o script.

e faça o que você quiser, depois de terminar, digite exit e, em seguida, haverá um arquivo criado em seu diretório atual com todas as informações stdout e stdin.

espero que ajude você.

    
por rɑːdʒɑ 19.04.2016 / 11:38
1

Isso não tem nada a ver com o seu shell ( bash ), não é um recurso do emulador de terminal que você está usando. Ele é armazenado no "buffer de rolagem" do seu terminal. Não consegui encontrar explicações claras de onde exatamente isso é armazenado, mas experiência pessoal me mostrou que é armazenado em algum lugar em /tmp .

Como a resposta da pergunta acima sugere, é mais provável que seja armazenada em um arquivo sem nome. Para ver o que quero dizer, abra um novo arquivo com um editor de texto:

gedit newfile

Escreva uma linha de texto no arquivo e salve-o. Agora, enquanto esse arquivo ainda estiver aberto, abra um terminal e exclua-o:

rm newfile

Como você ainda tem o arquivo aberto em gedit , pode continuar escrevendo nele. Você pode até gravar vários gigabytes de dados, apesar do fato de que o arquivo foi excluído. Isso porque excluir um arquivo simplesmente remove o link que aponta para seu inode . Se o seu descritor de arquivo for mantido aberto por outro programa, os dados poderão ser gravados nele, apesar do fato de que não há mais um link real (arquivo) correspondente ao descritor de arquivo no sistema de arquivos.

Tudo isso é para dizer que o histórico do seu terminal provavelmente é salvo usando um truque como esse, em algum lugar em um arquivo excluído em /tmp . O que você provavelmente quer é simplesmente aumentar o tamanho do buffer de rolagem do seu emulador de terminal para que você possa simplesmente rolar para cima e vê-lo. Os detalhes de como fazer isso dependem do emulador de terminal que você está usando. A maioria tem uma opção de linha de comando que permite que você e isso e muitos também têm uma maneira de configurá-lo GUI. Por exemplo, em gnome-terminal (o padrão no Ubuntu) é Editar - > Preferências - > Perfis --- clique no seu perfil - > Editar - > Rolagem - > Limitar a rolagem para NNN:

    
por terdon 19.04.2016 / 12:16
-2

A sessão de terminal é armazenada no arquivo .bash_history . Digite isso no seu terminal echo $HISTFILE , isso lhe daria o caminho do arquivo .bash_history .

    
por user532036 19.04.2016 / 11:31