Quais arquivos são executados quando eu entro ou reinicializo minha máquina?

3

Estou tentando descobrir qual "script" (realmente é provavelmente um arquivo "* rc") está executando um comando em particular quando eu reinicio minha máquina Ubuntu. Eu tentei grepping para o que está sendo exibido quando eu entrar na máquina depois de uma reinicialização, mas eu não consegui encontrá-lo.

Eu sei que, por exemplo, o .bash_profile é "originado" quando eu entro, mas o que os outros executam Isso me ajudará a rastrear o script / arquivo que está executando um conjunto antigo de comandos que eu preciso atualizar. / p>

Obrigado!

aqui está o que acontece quando eu faço login:

bos-mp2o6:~ user$ ssh -A X.X.X.X
[email protected]'s password: 
Linux bos-lpwy9 2.6.32-54-generic #116-Ubuntu SMP Tue Nov 12 19:23:22 UTC 2013 x86_64 GNU/Linux
Ubuntu 10.04.4 LTS

Welcome to Ubuntu!
 * Documentation:  https://help.ubuntu.com/

New release 'precise' available.
Run 'do-release-upgrade' to upgrade to it.

Last login: Tue Dec 31 10:53:25 2013 from 172.19.43.138
Agent pid 2117
/home/user/.ssh/internal/2013-07-29: No such file or directory
/home/user/.ssh/deployed/2013-07-29: No such file or directory
Identity added: /home/user/.ssh/external/2013-07-29 (/home/user/.ssh/external/2013-07-29)

Se você notar a peça "Identity added", é o que estou procurando. Então usei o seguinte comando (sem sorte):

[user@Linux_Desktop:~]$grep_bash 2013-07-29
[user@Linux_Desktop:~]$
    
por Ramy 31.12.2013 / 17:03

3 respostas

3

Isso vai depender de muitas coisas. Eu estou supondo que você realmente não quer que os arquivos sejam executados quando a máquina for reinicializada (existem MUITAS), mas aqueles executados pelo seu shell (por exemplo, bash ) quando você fizer login ou abrir um terminal.

A maneira mais fácil de encontrar o comando relevante seria percorrer todos os arquivos de inicialização possíveis do shell, tanto para o login quanto para os shells interativos. Eu tenho a seguinte função definida no meu $HOME/.bashrc :

grep_bash(){
  for f in  ~/.bashrc ~/.profile ~/.bash_profile ~/.bash_login \
        /etc/profile /etc/bash.bashrc /etc/environment; 
  do 
    [ -e $f ] && grep -H "$@" $f; 
  done
}

Eu posso usá-lo para pesquisar nesses arquivos por uma string de interesse:

$ grep_bash foo
/home/terdon/.bashrc:echo foo

Os arquivos reais sendo lidos dependem do tipo de shell que você está executando. Estas são as seções relevantes de man bash :

   When  bash is invoked as an interactive login shell, or as a non-inter‐
   active shell with the --login option, it first reads and executes  com‐
   mands  from  the file /etc/profile, if that file exists.  After reading
   that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile,
   in  that order, and reads and executes commands from the first one that
   exists and is readable. 

   When an interactive shell that is not a login shell  is  started,  bash
   reads  and  executes  commands  from /etc/bash.bashrc and ~/.bashrc, if
   these files exist.  This may be inhibited by using the  --norc  option.
   The  --rcfile  file option will force bash to read and execute commands
   from file instead of /etc/bash.bashrc and ~/.bashrc.

Na maioria dos * nix (a única exceção que eu conheço é OSX), o shell padrão quando você abre um novo terminal é um shell não-login interativo, então ~/.bashrc e company são lidos.

Finalmente, você também tem /etc/environment , que é usado para definir variáveis de ambiente global e que deve ser lido pela maioria dos shells.

Após a discussão com o OP em chat , @derobert nos ajudou a descobrir que o problema foi causado por /etc/ssh/sshrc .

    
por 31.12.2013 / 17:16
2

"Agente pid" é de iniciar ssh-agent , e "Identity added" é de executar ssh-add para carregar as chaves no agente. O bit no meio provavelmente é um script personalizado.

Se o seu shell de login é bash (o padrão), ele carrega o primeiro dos seguintes arquivos: ~/.bash_profile , ~/.bash_login , ~/.profile . Verifique qual deles carrega e adicione set -x na parte superior, depois faça login novamente ou execute bash --login . Isso diz ao bash para imprimir um rastreamento de cada comando que ele executa. Procure essas mensagens no rastreamento, isso deve informar o que está sendo impresso.

Se as mensagens vierem antes do primeiro rastreamento, elas poderão ser de um arquivo de inicialização global: /etc/profile ou scripts em /etc/profile.d (ou scripts que eles chamam).

Se a mensagem não for exibida quando você executar bash --login , ela virá de algo iniciado pelo daemon SSH e não pelo shell. Verifique se você adicionou algo incomum à pilha PAM : /etc/pam.d/sshd ou os arquivos /etc/pam.d/common-* . Se isso ocorrer apenas quando você fizer login com o SSH, pode ser um comando em ~/.ssh/rc ou /etc/ssh/sshrc no servidor.  Se isso ocorrer apenas quando você efetuar login com uma chave SSH específica, pode ser um comando associado à chave em ~/.ssh/authorized_keys no servidor.

    
por 31.12.2013 / 18:36
1

Uma solução mais simples é usar os comandos find , grep e arquivo , combinados desta maneira:

  find / -type f -mount -exec sh -c ' file "{}" | grep text 1>/dev/null && grep -l "2013-07-29" "{}" ' \;

Primeiro, você encontra todos os arquivos, e passa o nome de cada um para um shell que primeiro testará seu tipo de arquivo e, se for encontrado do tipo texto , tentará localizar a string 2013-07-29 dentro dele, cuspindo o nome do arquivo se e somente (a opção -l ) for encontrada.

Vai ser um negócio lento, vá tomar um café nesse meio tempo.

    
por 31.12.2013 / 18:30

Tags