Como funciona o comando “history”?

1

Tentando entender a funcionalidade de bash_history:

/home/user# ls -a
.  ..  .bash_history  .bash_logout  .bashrc  .cache  .profile  pylabs  .viminfo  .Xauthority

Eu vejo um arquivo .bash_history na pasta /home/user . Mas por que não tem todo o histórico dos comandos executados, saída abaixo?

/home/user# cat .bash_history

su
/home/user#

Mas o mesmo histórico está disponível no arquivo .bash_history na pasta /root .

 # ls -a
 .  ..  .bash_history  .bashrc  .cache  .profile  .ssh  .viminfo

/home/user# cd /root/
# cat .bash_history

bash script.sh
ls
cd pylabs/
ls
...
...
ls -a
cat .bash_history
cd /root/
#

Pergunta 2: O .bash_history estará disponível apenas em algumas pastas particulares e como ele armazena todos os comandos executados em diretórios diferentes?

/home/user/pylabs# ls -a
.  ..  backup  bkupscript.py  mybackup.py  __pycache__  solution.py
    
por Here_2_learn 20.12.2016 / 18:53

2 respostas

2

O histórico é por usuário, não global. Cada usuário possui seu próprio arquivo de histórico e os comandos de cada usuário são armazenados em seu próprio arquivo. O local padrão do arquivo de histórico do bash é $HOME/.bash_history , portanto, será /home/user/.bash_history para o usuário "usuário" e /root/.bash_history para o usuário "raiz". Você pode alterar o nome / local do arquivo de histórico configurando a variável HISTFILE environmental para outra coisa.

Agora, no exemplo que você mostra, você fez o seguinte:

  1. Conectado como "usuário" e imediatamente mudou para root com su . Isso significa que você executou exatamente um comando como "usuário" e é por isso que o arquivo de histórico de "usuário" possui apenas uma entrada: su .

  2. Como root, você executou vários comandos e todos foram armazenados no arquivo de histórico do root, já que eles eram executados pelo root. Observe que o arquivo de histórico do root não contém o comando su desde que foi executado por "usuário" e não por raiz.

Portanto, o arquivo $HOME/.bash_history armazena todos comandos executados por um usuário, independentemente de em qual diretório eles foram executados. Entretanto, como cada usuário possui seu próprio arquivo, os comandos executados por root são não armazenados no mesmo arquivo que os executados pelo "usuário".

    
por 21.12.2016 / 11:07
1

O Bash tem o histórico armazenado no arquivo que você encontrou, mas os shells que estão em execução também terão um histórico na memória que ainda não foi salvo. Use history -w para gravar seu histórico atual no arquivo.

    
por 20.12.2016 / 21:40