Digamos que armazenei variáveis diferentes na RAM e executei algumas ações com resultados conectados ao expandir variáveis e fazer referência a arquivos como neste caso .
Qual é a limpeza mais próxima para todos os dados de RAM "artificiais" sem reinicializar?
Por artificial, quero dizer os dados que inseri manualmente na RAM, como a declaração de uma variável (ou que entrou lá como resultado de qualquer ação que fiz). É qualquer coisa que não veio naturalmente com a sessão (como variáveis de ambiente e dados herdados).
Não, você provavelmente não armazenou nenhuma variável na RAM.
A menos que você esteja usando
/dev/mem
(veja mem(4) ), o que é estranho e requer privilégios de root.A RAM física é gerenciada pelo kernel (somente). Portanto, a única maneira de armazenar algo na RAM é por meio do código do kernel. O código do aplicativo (mesmo seu shell Unix ) está sendo executado em processos , cada um com seu próprio espaço de endereço virtual e usando memória virtual .
O espaço de endereço virtual é inicializado no tempo execve(2) quando um programa é iniciado (por exemplo, pelo seu shell). Ele é destruído quando o processo termina (ou é reinicializado por qualquer programa que executa um
execve
).Quando o processo com essas "variáveis" (na verdade, elas são locais no espaço de endereço virtual) termina, os dados desaparecem. Se esse processo for um shell, você só precisa encerrá-lo (talvez com o
exit
shell builtin , ou com kill(1) , etc...), mas não precisa reiniciar.Para esquecer uma variável de ambiente definida pelo
export
shell interno , use ounset
shell interno. Veja também bash(1) e a documentação do GNUbash
.Talvez você queira usar o
batch
utilitário , talvez com algum documento aqui . Talvez você queira apenas executar um sub shell oubash
ele mesmo.Talvez executar explicitamente e sabiamente alguns
bash
possa ser muito útil. Você tentou executarbash
em sua sessão de massa? Você pode ter vários shells aninhados e até mesmo executar algum outro shell em sua sessão de massa, por exemplofish
, ....Você deve considerar ler mais sobre programação Linux (talvez o antigo ALP ; veja também intro(2) ). Você pode querer ler mais sobre sistemas operacionais , por exemplo, Operating Systems: Three Easy Pieces .
Observe que o estado do shell não é persistente . Obviamente, arquivos de inicialização contêm
$HOME/.bashrc
comandos que são executados no início de cada shell interativo (portanto, você colocaria sua configuração "permanente" nesse$HOME/.bashrc
arquivo comoexport
comandos).Os shells Unix são programas comuns (e você pode alterar seu shell de login usando chsh(1) ; talvez seja necessário ter seu novo shell listado em
/etc/shells
, consulte shells(5) ). Se você não estiver satisfeitobash
, pode usar outro shell (por exemplo , zsh ou fish , etc...), e pode escrever seu próprio shell (provavelmente em alguma linguagem compilada como Rust, C++, Ocaml, C, Go, ... .). Seu shell deve ser apenas um executável ELF .(na verdade, codificar seu próprio shell é um exercício muito útil e ajudará você a entender muitas coisas; ou pelo menos estudar o código-fonte de algum shell existente, geralmente são softwares livres , talvez tão pequenos quanto sash )
Você também pode considerar agrupar seus comandos em algum script de shell e executar esse script em sua sessão de putty (que provavelmente é um interativo
bash
).