如何找到恶意别名声明?

如何找到恶意别名声明?

我正在尝试查找alias已声明特定内容的位置。我搜索了所有我知道的常用地方来寻找别名:

  • ~/.bashrc
  • 〜/ .bash_profile
  • /etc/bashrc
  • /etc/配置文件

没有运气。

我知道这是alias因为当我这样做时which COMMAND,我得到:

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

有没有办法找到哪个文件声明alias只知道alias名称?

答案1

我会调查/etc/profile.d/是否有违规行为alias

您还可以执行以下操作来查找它:

grep -r '^alias COMMAND' /etc

这将递归地grep通过文件查找以 开头的行alias COMMAND

如果所有其他方法都失败,请将其放在最后~/.bashrc

unalias COMMAND

答案2

您可以尝试以下几件事:

  1. 用于bash -v查看 shell 启动期间正在读取哪些行
  2. 用于bash -x查看 shell 启动期间正在运行哪些命令
  3. 仅使用一个启动文件运行

bash-v

-v 选项使得bash在读取时打印它读取的每个脚本文件中的每一行。

从跑步开始

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

等待 5-10 秒,然后按Ctrl+C

这将为您提供一个名为的文件bash-i.out,就像所有启动文件合并(或连接)在一起一样。

然后使用less打开文件并使用 搜索别名/aliasname

现在,比较该别名相对于文件中其他行的出现位置。例如,在大多数系统上,/etc/bash.bashrc顶部都有一条注释,表示/etc/bash.bashrc并且~/.bashrc也有一个。

如果它位于您的顶部之上,那么它可能是定义别名的~/.bashrc启动文件,否则它位于您的文件或通过或(点命令)包含的文件中。/etc~/.bashrcsource.

如果没有显示别名,请尝试

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

这告诉 bash 是一个登录 shell,它读取一些不同的启动文件,例如/etc/profile~/.bash_profile而不是/etc/bash.bashrc~/.bashrc

bash-x

如果bash -v没有给您明确的答案,请尝试 running bash -x,它会打印 shell 正在运行的命令,而不是 shell 正在读取的行。

方法与上面基本相同,只是-v改为-x. (如有必要,您可以同时使用两者。)

仅使用一个启动文件运行

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

看看你是否有别名。

如果您的系统有的话,请尝试使用rcfileset to进行相同的操作。/etc/bash.bashrc

然后尝试

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

profile并对名称中包含的每个 bash 启动文件执行相同的操作,例如更改$HOME/.bash_profile/etc/profile.

无论哪种方式显示别名都会告诉您应该开始查看的文件。

答案3

也许你的.xinitrc?您还应该检查其中是否有您的.bashrc.bash_profile来源的任何其他文件。例如,我将所有别名保存在以下命令引用的单独文件中:

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

一些可能也有帮助的问题:这是针对普通用户还是根用户?是哪个命令? Linux 是什么风格?

答案4

我遵循将别名定义放入的非常常见的做法

~/.bash_aliases

然后从 .bashrc 调用它

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

相关内容