É possível ler o conteúdo de um arquivo que foi originado por um shell interativo?

1

Acabei de eliminar acidentalmente um ficheiro que foi originado pelo meu zsh shell: ~/.shrc .

Consegui restaurar um backup com três meses de idade. Mas pode perder alguma configuração que incluí no arquivo durante as últimas semanas.

O shell do qual eu deletei o arquivo ainda está aberto. Então, eu joguei os aliases, variáveis de ambiente e funções com estes comandos:

alias >~/backup_alias
env   >~/backup_env
function >~/backup_function

Com essas informações e o backup antigo, poderei restaurar a maior parte do conteúdo do arquivo. Exceto pelos comentários. Eu comento muito minhas funções, aliases, configurações de variáveis de ambiente e freqüentemente as modifico.

Desde que o arquivo foi originado quando o shell foi iniciado, e desde que o shell ainda está aberto, existe um comando que eu poderia executar a partir do último para despejar o conteúdo do arquivo, ou pelo menos algumas partes dele, incluindo os comentários?

Estou usando zsh version 5.3.1 .

    
por user852573 23.08.2017 / 10:06

2 respostas

1

Em geral, quando um shell analisa um código-fonte de shell para execução, é improvável que o texto do arquivo que é analisado seja armazenado como um todo na memória.

Mesmo se o shell ler o script completo, como está, em um buffer de memória, é improvável que esse buffer permaneça após a execução do script e nenhum shell tenha recursos para acessar esses dados de qualquer maneira.

Sua melhor aposta é, acredito, fazer exatamente o que você está fazendo; inicie a partir de um backup recente do arquivo e copie os aliases, funções e ambiente do shell atualmente ativo. Em seguida, reconstrua o arquivo dessas peças.

    
por 23.08.2017 / 10:32
1

O shell terá lido e descartado os dados lidos de lá. Mas, dependendo de como a memória foi alocada e liberada, ainda há uma chance remota de que os dados ou partes dela ainda estejam na memória do processo.

Tente executar gcore (fornecido com gdb ) no processo do shell 'pid e veja se o conteúdo do arquivo pode ser encontrado lá (por exemplo, usando grep -az 'a text you know to be in that file' core.pid (assumindo o GNU grep ) .

Tente usar o shell o menos possível antes de fazer isso para maximizar as chances de as regiões da memória não terem sido sobrescritas.

Esse é um truque que às vezes uso quando pressiono ^W por engano em firefox enquanto digito algum texto em um formulário.

    
por 23.08.2017 / 11:06

Tags