Como posso encontrar uma declaração de alias fraudulenta?

35

Estou tentando descobrir onde um alias específico foi declarado. Eu pesquisei todos os lugares usuais que eu conheço para procurar por aliases:

  • ~ / .bashrc
  • ~ / .bash_profile
  • / etc / bashrc
  • / etc / profile

Sem sorte.

Eu sei que é um alias porque quando eu faço which COMMAND eu recebo:

alias COMMAND='/path/to/command'
    /path/to/command

Existe uma maneira de descobrir qual arquivo declara um alias sabendo apenas o nome alias ?

    
por utopiabound 10.05.2012 / 14:28

4 respostas

27

Eu procuraria em /etc/profile.d/ o alias ofensivo.

Você também pode fazer o seguinte para encontrá-lo:

grep -r '^alias COMMAND' /etc

Isso irá recursivamente grep através de arquivos procurando por uma linha começando com alias COMMAND .

Se tudo mais falhar, coloque isso no final do seu ~/.bashrc

unalias COMMAND
    
por 10.05.2012 / 14:38
23

Há algumas coisas que você pode tentar:

  1. use bash -v para ver quais linhas estão sendo lidas durante a inicialização do shell
  2. use bash -x para ver quais comandos estão sendo executados durante a inicialização do shell
  3. executado com apenas um arquivo de inicialização

bash -v

A opção -v faz com que bash imprima cada linha de cada arquivo de script que lê à medida que lê.

Comece executando

bash -i -v >bash-i.out 2>&1

aguarde de 5 a 10 segundos e, em seguida, pressione Ctrl + C .

Isso lhe dará um único arquivo chamado bash-i.out , que é como todos os seus arquivos de inicialização mesclados (ou concatenados) juntos.

Em seguida, use less para abrir o arquivo e pesquisar o alias usando /aliasname .

Agora, compare onde esse alias aparece em relação a outras linhas no arquivo. Por exemplo, na maioria dos sistemas, /etc/bash.bashrc tem um comentário no topo que diz que /etc/bash.bashrc e ~/.bashrc também têm um.

Se estiver acima do topo do seu ~/.bashrc , provavelmente é um arquivo de inicialização em /etc que está definindo o alias, caso contrário, ele está no ~/.bashrc ou um arquivo incluindo source ou . ( comando dot).

Se isso não mostrar o alias, tente

bash -l -v >bash-l.out 2>&1

Isso diz ao bash como um shell de login, que lê alguns arquivos de inicialização diferentes, por exemplo /etc/profile e ~/.bash_profile em vez de /etc/bash.bashrc e ~/.bashrc .

bash -x

Se bash -v não der uma resposta definitiva, tente executar bash -x , que imprime os comandos que o shell está executando, em vez das linhas que seu shell está lendo.

O método é basicamente o mesmo que o anterior, exceto a alteração -v to -x . (Você pode usar os dois juntos, se necessário.)

Executar com apenas um arquivo de inicialização

bash -i --rcfile="$HOME/.bashrc"

e veja se você tem o alias.

Tente o mesmo com rcfile definido como /etc/bash.bashrc se o seu sistema o tiver.

Em seguida, tente

bash -l --rcfile="$HOME/.bash_profile"

e faça o mesmo com cada arquivo de inicialização do bash que tenha profile em seu nome, por exemplo altere $HOME/.bash_profile para /etc/profile .

Seja qual for o caminho que o alias aparece, você verá o arquivo que deve começar a olhar.

    
por 11.05.2012 / 01:44
2

Talvez seu .xinitrc ? Você também deve verificar se o seu .bashrc ou .bash_profile fonte quaisquer outros arquivos neles. Por exemplo, mantenho todos os meus aliases em um arquivo separado referenciado por este comando:

[ -f ~/.bash_alias ] && source $HOME/.bash_alias

Algumas perguntas que também podem ajudar: isso é para um usuário regular ou root? Qual comando é esse? Qual o sabor do Linux?

    
por 10.05.2012 / 14:57
0

Eu sigo a prática muito comum de colocar minhas definições de alias em

~/.bash_aliases

e depois chamando isso de .bashrc com

[ -f ~/.bash_aliases ] && source $HOME/.bash_aliases
    
por 19.04.2014 / 22:09