解决 DDoS Deflate 运行出现‘$CONF not found.’

摘要

说起 DDoS Deflate 来,很多玩VPS的站长们应该都知道这是一个非常适合我们博客站长们装在自己的服务器上的一个防御脚本,配合 iptables 防火墙使用可以说是价廉物美。反正明月部署 VPS 的话, DDoS Deflate 几乎是必装的一个脚本程序了。

说起 DDoS Deflate 来,很多玩VPS的站长们应该都知道这是一个非常适合我们博客站长们装在自己的服务器上的一个防御脚本,配合 iptables 防火墙使用可以说是价廉物美。反正明月部署 VPS 的话, DDoS Deflate 几乎是必装的一个脚本程序了。

解决 DDoS Deflate 运行出现‘$CONF not found.’

话说昨天在给一个朋友维护 VPS 的时候,因为需要用到 DDoS Deflate ,所以就直接安装了(具体可参考【 DDoS Deflate 的安装和使用 】一文)。没有想到的是当输入 ddos 的时候竟然运行失败了,错误提示如下:

/usr/local/ddos/ddos.sh: 25: [: /etc/ddos/ddos.conf: unexpected operator DDoS-Deflate version 0.9 Copyright (C) 2005, Zaf root@mydomain.com $CONF not found.

上述错误提示简单理解就是 /usr/local/ddos/ddos.sh 文件存在一个意外无效的操作造成 DDoS Deflate 无法找到 /etc/ddos/ddos.conf 文件,也就是 DDoS Deflate 的配置文档无法找到。

这个配置文档都可以通过 VI/VIM 编辑打开的,脚本竟然找不到?

那么只能说明 ddos.sh 脚本出了问题,没办法只能求助于度娘了,没有想到度娘对英文技术关键词搜索的支持返回的依然都是中文结果,自然很难找到我需要的解决答案了。

没办法,搭起我亲爱的“小梯子”翻到墙外找谷姐,妥妥的,终于搞明白问题出在哪里了?原来真的就是 ddos.sh 出的问题,并且问题就出在此脚本的第一行, #!/bin/sh 这里,只需要将其修改为 #!/bin/bash 即可。

#!/bin/sh 是指此脚本使用 /bin/sh 来解释执行, #! 是特殊的表示符,其后面跟的是此解释此脚本的 shell 的路径。 #!/bin/bash 的话同上述的一个道理,就是用不同的脚本 shell 来执行下面的代码的意思。

GNU/Linux 操作系统中的 /bin/sh 本是 bash ( Bourne-Again Shell ) 的符号链接,但鉴于 bash 过于复杂,有人把 bashNetBSD 移植到 Linux 并更名为 dash ( Debian Almquist Shell ),并建议将 /bin/sh 指向它,以获得更快的脚本执行速度。 Dash ShellBash Shell 小的多,符合 POSIX 标准。

所以也就是在 Ubuntu 中可以认为 /bin/sh 就是 /bin/dash , 如果打算使用 bash , 可直接将 /bin/sh 软链接到 /bin/bash

Ubuntu 继承了 Debian ,所以从 Ubuntu 6.10 开始默认是 Dash Shell

解决 DDoS Deflate 运行出现‘$CONF not found.’

应该说, /bin/sh/bin/bash 虽然大体上没什么区别,但仍存在不同的标准。标记为 #!/bin/sh 的脚本不应使用任何 POSIX 没有规定的特性 (如 let 等命令, 但 #!/bin/bash 可以)。 Debian 曾经采用 /bin/bash 更改 /bin/dash ,目的使用更少的磁盘空间、提供较少的功能、获取更快的速度。但是后来经过 shell 脚本测试存在运行问题。因为原先在 bash shell 下可以运行的 shell script ( shell 脚本),在 /bin/sh 下还是会出现一些意想不到的问题,不是100%的兼用。

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: