如何找到流氓别名声明?


37

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

  • 〜/ .bashrc
  • 〜/ .bash_profile
  • / etc / bashrc
  • / etc / profile

没有运气。

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

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

有没有一种方法可以找到声明alias唯一知道alias名称的文件?


3
一个相关的问题有关的环境变量,而不是别名。基本上,没有简单的方法,因为可以在任何地方设置别名。尝试set -x按照建议的方式放在您的顶部,看看是否能为您缩小范围。
jw013

1
您必须将或放在set -x顶部。为什么不只是运行或?/etc/bash_profile/etc/bashrcbash -i -xbash -l -x
Mikel

Answers:


30

我会寻找/etc/profile.d/冒犯的人alias

您也可以执行以下操作找到它:

grep -r '^alias COMMAND' /etc

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

如果所有其他方法都失败,请将其放在您的末尾 ~/.bashrc

unalias COMMAND

26

您可以尝试以下几种方法:

  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定义别名的启动文件,否则它在您~/.bashrc的文件中,或者是通过sourceor .(点命令)包含的文件。

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

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

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

bash -x

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

除了更改-v为之外,方法基本上与上述方法相同-x。(如果需要,可以将两者一起使用。)

仅使用一个启动文件运行

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

看看你是否有别名。

如果系统具有,请尝试将rcfileset设置为/etc/bash.bashrc

然后尝试

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

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

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


2

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

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

一些可能也有帮助的问题:这是普通用户还是root用户?这是哪个命令?什么版本的Linux?


0

我遵循将别名定义放入其中的非常普遍的做法

~/.bash_aliases

然后从.bashrc调用

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

我能猜出你在第二个命令中是.bash_aliases而不是.bash_alias吗?
stagl
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.