2011-11-24 47 views
5

我一直在编辑.bashrc文件和其他初始化文件,似乎我留下了一些代码片段或两个在提示时导致一些错误(例如文件丢失),但我找不到他们。如何调试bash提示符?

如何调试提示以找出我不小心被黑客入侵的init脚本?

+0

在务实的层面,有一两件事你可以迅速做将是一个虚拟的用户添加到您的机器:这对于检查哪些变量设置为您.bashrc运行前等启用跟踪和源的.bashrc是有用,然后将在该帐户中创建的文件与您的文件进行比较。更复杂的计划是找出违约来自哪里,并与这些违约相比较。当然,如果您修改了系统范围的文件,您需要找到一种方法将文件从安装包中取出。 –

回答

9

大多数shell都具有显示正在执行的命令的调试标志。 Bash甚至可能会在扩展变量之前和之后显示一个命令。你有没有试过检查(我相信)-c -x或-X标志,看看它们是否显示你正在寻找的信息。

您可以将它们设置为rc文件(大多数全局文件)中的第一件事,或者通过从另一个shell中调用它将其传递到bash命令中。实际上,如果您从另一个shell调用bash,您还可以使用脚本命令来记录您在文件中看到的所有内容,这使得事后分析变得更加容易。

+0

把东西转储到一个文件后,几个简单的grep就把我需要的东西拉出来了。 – fny

0

试试,看你已经定义的提示 - 它可能在某些点文件在你的home目录:

grep PS1 ~/.* 

你可以看到提示的当前值由刚刚打印出来:

echo $PS1 

HTH

0

检查主目录中的.bash_history文件,以了解您已运行的命令。如果您使用诸如vi filename之类的命令来打开init脚本,它会在命令历史记录中找到它们。

8

尝试使用-x标志调用bash,然后找到.bashrc或.bash_profile或您正在使用的任何东西。这应该足够了冗长找到你的问题

即:

bash -x 
source .bashrc 
3

得到一个干净的初始状态的最简单方法是使用SSH到您当前的主机,但不是让SSH启动您的外壳采用默认设置,您提供了一个明确的命令,可以防止.bashrc被读取。

ssh -tt localhost /bin/bash --norc 

-tt力SSH分配一个TTY,它是当你打开外壳连接东西通常会发生,但默认运行的明确命令时。

--norc防止bash读取您的设置文件(因为我们自己想这样做)。

您现在应该在bash提示符下,在清洁环境中。

set -x # Enable tracing 
source .bashrc