下载源代码 printscp中cc=0XAB print(cc)什么意思

makefile 中 $@ $^ %& 使用
我的图书馆
makefile 中 $@ $^ %& 使用
http://blog.csdn.net/kesaihao862/article/details/7332528这篇文章介绍在LINUX下进行C语言编程所需要的基础知识。在这篇文章当中,我们将会学到以下内容:源程序编译Makefile的编写程序库的链接程序的调试头文件和系统求助1.源程序的编译在Linux下面,如果要编译一个C语言源程序,我们要使用GNU的gcc编译器。 下面我们以一个实例来说明如何使用gcc编译器。假设我们有下面一个非常简单的源程序(hello.c):int main(int argc,char **argv){printf("Hello Linux\n");}要编译这个程序,我们只要在命令行下执行:gcc -o hello hello.cgcc 编译器就会为我们生成一个hello的可执行文件。执行./hello就可以看到程序的输出结果了。命令行中 gcc表示我们是用gcc来编译我们的源程序,-o 选项表示我们要求编译器给我们输出的可执行文件名为hello 而hello.c是我们的源程序文件。gcc编译器有许多选项,一般来说我们只要知道其中的几个就够了。 -o选项我们已经知道了,表示我们要求输出的可执行文件名。 -c选项表示我们只要求编译器输出目标代码,而不必要输出可执行文件。 -g选项表示我们要求编译器在编译的时候提供我们以后对程序进行调试的信息。知道了这三个选项,我们就可以编译我们自己所写的简单的源程序了,如果你想要知道更多的选项,可以查看gcc的帮助文档,那里有着许多对其它选项的详细说明。2.Makefile的编写假设我们有下面这样的一个程序,源代码如下:/* main.c */#include "mytool1.h"#include "mytool2.h"int main(int argc,char **argv){mytool1_print("hello");mytool2_print("hello");}/* mytool1.h */#ifndef _MYTOOL_1_H#define _MYTOOL_1_Hvoid mytool1_print(char *print_str);#endif/* mytool1.c */#include "mytool1.h"void mytool1_print(char *print_str){printf("This is mytool1 print %s\n",print_str);}/* mytool2.h */#ifndef _MYTOOL_2_H#define _MYTOOL_2_Hvoid mytool2_print(char *print_str);#endif/* mytool2.c */#include "mytool2.h"void mytool2_print(char *print_str){printf("This is mytool2 print %s\n",print_str);}当然由于这个程序是很短的我们可以这样来编译gcc -c main.cgcc -c mytool1.cgcc -c mytool2.cgcc -o main main.o mytool1.o mytool2.o这样的话我们也可以产生main程序,而且也不时很麻烦。但是如果我们考虑一下如果有一天我们修改了其中的一个文件(比如说mytool1.c)那么我们 难道还要重新输入上面的命令?也许你会说,这个很容易解决啊,我写一个SHELL脚本,让她帮我去完成不就可以了。是的对于这个程序来说,是可以起到作用 的。但是当我们把事情想的更复杂一点,如果我们的程序有几百个源程序的时候,难道也要编译器重新一个一个的去编译?为此,聪明的程序员们想出了一个很好的工具来做这件事情,这就是make。我们只要执行以下make,就可以把上面的问题解决掉。在我们执行make之 前,我们要先编写一个非常重要的文件。--Makefile。对于上面的那个程序来说,可能的一个Makefile的文件是:# 这是上面那个程序的Makefile文件main:main.o mytool1.o mytool2.ogcc -o main main.o mytool1.o mytool2.omain.o:main.c mytool1.h mytool2.hgcc -c main.cmytool1.o:mytool1.c mytool1.hgcc -c mytool1.cmytool2.o:mytool2.c mytool2.hgcc -c mytool2.c有了这个Makefile文件,不过我们什么时候修改了源程序当中的什么文件,我们只要执行make命令,我们的编译器都只会去编译和我们修改的文件有关的文件,其它的文件她连理都不想去理的。下面我们学习Makefile是如何编写的。在Makefile中也#开始的行都是注释行.Makefile中最重要的是描述文件的依赖关系的说明。一般的格式是:target:componentsTAB rule第一行表示的是依赖关系。第二行是规则。比如说我们上面的那个Makefile文件的第二行main:main.o mytool1.o mytool2.o表示我们的目标(target)main的依赖对象(components)是main.o mytool1.o mytool2.o 当倚赖的对象在目标修改后修改的话,就要去执行规则一行所指定的命令。就象我们的上面那个Makefile第三行所说的一样要执行 gcc -o main main.o mytool1.o mytool2.o 注意规则一行中的TAB表示那里是一个TAB键Makefile有三个非常有用的变量。分别是$@,$^,$&代表的意义分别是:$@--目标文件,$^--所有的依赖文件,$&--第一个依赖文件。如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为:# 这是简化后的Makefilemain:main.o mytool1.o mytool2.ogcc -o $@ $^main.o:main.c mytool1.h mytool2.hgcc -c $&mytool1.o:mytool1.c mytool1.hgcc -c $&mytool2.o:mytool2.c mytool2.hgcc -c $&经过简化后我们的Makefile是简单了一点,不过人们有时候还想简单一点。这里我们学习一个Makefile的缺省规则.c.o:gcc -c $&这个规则表示所有的 .o文件都是依赖与相应的.c文件的。例如mytool.o依赖于mytool.c这样Makefile还可以变为:# 这是再一次简化后的Makefilemain:main.o mytool1.o mytool2.ogcc -o $@ $^.c.o:gcc -c $&好了,我们的Makefile 也差不多了,如果想知道更多的关于Makefile规则可以查看相应的文档。3.程序库的链接试着编译下面这个程序/* temp.c */#includeint main(int argc,char **argv){double value;printf("Value:%f\n",value);}这个程序相当简单,但是当我们用 gcc -o temp temp.c 编译时会出现下面所示的错误。/tmp/cc33Kydu.o: In function `main':/tmp/cc33Kydu.o(.text+0xe): undefined reference to `log'collect2: ld returned 1 exit status出现这个错误是因为编译器找不到log的具体实现。虽然我们包括了正确的头文件,但是我们在编译的时候还是要连接确定的库。在Linux下,为了使用数学 函数,我们必须和数学库连接,为此我们要加入 -lm 选项。 gcc -o temp temp.c -lm这样才能够正确的编译。也许有人要问,前面我们用printf函数的时候怎么没有连接库呢?是这样的,对于一些常用的函数的实现,gcc编译器会自 动去连接一些常用库,这样我们就没有必要自己去指定了。有时候我们在编译程序的时候还要指定库的路径,这个时候我们要用到编译器的 -L选项指定路径。比如说我们有一个库在 /home/hoyt/mylib下,这样我们编译的时候还要加上 -L/home/hoyt/mylib。对于一些标准库来说,我们没有必要指出路径。只要它们在起缺省库的路径下就可以了。系统的缺省库的路径/lib /usr/lib /usr/local/lib 在这三个路径下面的库,我们可以不指定路径。还有一个问题,有时候我们使用了某个函数,但是我们不知道库的名字,这个时候怎么办呢?很抱歉,对于这个问题我也不知道答案,我只有一个傻办法。首先,我 到标准库路径下面去找看看有没有和我用的函数相关的库,我就这样找到了线程(thread)函数的库文件(libpthread.a)。 当然,如果找不到,只有一个笨方法。比如我要找sin这个函数所在的库。 就只好用 nm -o /lib/*.so|grep sin&~/sin 命令,然后看~/sin文件,到那里面去找了。在sin文件当中,我会找到这样的一行libm-2.1.2.so:00009fa0 W sin 这样我就知道了sin在 libm-2.1.2.so库里面,我用 -lm选项就可以了(去掉前面的lib和后面的版本标志,就剩下m了所以是 -lm)。 如果你知道怎么找,请赶快告诉我,我回非常感激的。谢谢!4.程序的调试我们编写的程序不太可能一次性就会成功的,在我们的程序当中,会出现许许多多我们想不到的错误,这个时候我们就要对我们的程序进行调试了。最常用的调试软件是gdb.如果你想在图形界面下调试程序,那么你现在可以选择xxgdb.记得要在编译的时候加入 -g选项.关于gdb的使用可以看gdb的帮助文件。由于我没有用过这个软件,所以我也不能够说出如何使用。不过我不喜欢用gdb.跟踪一个程序是很烦的 事情,我一般用在程序当中输出中间变量的值来调试程序的。当然你可以选择自己的办法,没有必要去学别人的。现在有了许多IDE环境,里面已经自己带了调试 器了。你可以选择几个试一试找出自己喜欢的一个用。5.头文件和系统求助有时候我们只知道一个函数的大概形式,不记得确切的表达式,或者是不记得着函数在那个头文件进行了说明。这个时候我们可以求助系统。比如说我们想知道fread这个函数的确切形式,我们只要执行 man fread 系统就会输出着函数的详细解释的。和这个函数所在的头文件说明了。 如果我们要write这个函数的说明,当我们执行man write时,输出的结果却不是我们所需要的。 因为我们要的是write这个函数的说明,可是出来的却是write这个命令的说明。为了得到write的函数说明我们要用 man 2 write. 2表示我们用的write这个函数是系统调用函数,还有一个我们常用的是3表示函数是C的库函数。记住不管什么时候,man都是我们的最好助手。附 1(1):=是为了避免递归定义,相当于c语言当中的赋值运算符。
y := $(x) bar
x := later
其等价于:
y := foo bar
x := later
如果用=, 那么$y就等于later bar了。(2)=这个运算符有点特殊,
y = $(x) bar
这个时候y就等于later bar了而不是foo bar。
正因为如此,这个运算符是不能自己给自己赋值的,比如y=$(y)ss,系统就会报错。 (3)另外,+=则表示追加符号。
GNU&make&makefile&基本结构&makefile&变量&GNU&make&的主要预定义变量&隐含规则&makefile&范例&运行&make&1.9.1&&GNU&make在大型的开发项目中,通常有几十到上百个的源文件,如果每次均手工键入&gcc&命令进行编译的话,则会非常不方便。因此,人们通常利用&make&工具来自动完成编译工作。这些工作包括:如果仅修改了某几个源文件,则只重新编译这几个源文件;如果某个头文件被修改了,则重新编译所有包含该头文件的源文件。利用这种自动编译可大大简化开发工作,避免不必要的重新编译。实际上,make&工具通过一个称为&makefile&的文件来完成并自动维护编译工作。makefile&需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系。当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件。makefile&文件是许多编译器,包括&Windows&NT&下的编译器维护编译信息的常用方法,只是在集成开发环境中,用户通过友好的界面修改&makefile&文件而已。默认情况下,GNU&make&工具在当前工作目录中按如下顺序搜索&makefile:*&GNUmakefile*&makefile*&Makefile在&UNIX&系统中,习惯使用&Makefile&作为&makfile&文件。如果要使用其他文件作为&makefile,则可利用类似下面的&make&命令选项指定&makefile&文件:$&make&-f&Makefile.debug1.9.2&&makefile&基本结构makefile&中一般包含如下内容:*&需要由&make&工具创建的项目,通常是目标文件和可执行文件。通常使用“目标(target)”一词来表示要创建的项目。*&要创建的项目依赖于哪些文件。*&创建每个项目时需要运行的命令。例如,假设你现在有一个&C++&源文件&test.C,该源文件包含有自定义的头文件&test.h,则目标文件&test.o&明确依赖于两个源文件:test.C&和&test.h。另外,你可能只希望利用&g++&命令来生成&test.o&目标文件。这时,就可以利用如下的&makefile&来定义&test.o&的创建规则:#&This&makefile&just&is&a&example.#&The&following&lines&indicate&how&test.o&depends#&test.C&and&test.h,&and&how&to&create&test.otest.o:&test.C&test.h&&&&g++&-c&-g&test.C从上面的例子注意到,第一个字符为&#&的行为注释行。第一个非注释行指定&test.o&为目标,并且依赖于&test.C&和&test.h&文件。随后的行指定了如何从目标所依赖的文件建立目标。当&test.C&或&test.h&文件在编译之后又被修改,则&make&工具可自动重新编译&test.o,如果在前后两次编译之间,test.C&和&test.h&均没有被修改,而且&test.o&还存在的话,就没有必要重新编译。这种依赖关系在多源文件的程序编译中尤其重要。通过这种依赖关系的定义,make&工具可避免许多不必要的编译工作。当然,利用&Shell&脚本也可以达到自动编译的效果,但是,Shell&脚本将全部编译任何源文件,包括哪些不必要重新编译的源文件,而&make&工具则可根据目标上一次编译的时间和目标所依赖的源文件的更新时间而自动判断应当编译哪个源文件。一个&makefile&文件中可定义多个目标,利用&make&target&命令可指定要编译的目标,如果不指定目标,则使用第一个目标。通常,makefile&中定义有&clean&目标,可用来清除编译过程中的中间文件,例如:clean:&&&&rm&-f&*.o运行&make&clean&时,将执行&rm&-f&*.o&命令,最终删除所有编译过程中产生的所有中间文件。1.9.3&&makefile&变量GNU&的&make&工具除提供有建立目标的基本功能之外,还有许多便于表达依赖性关系以及建立目标的命令的特色。其中之一就是变量或宏的定义能力。如果你要以相同的编译选项同时编译十几个&C&源文件,而为每个目标的编译指定冗长的编译选项的话,将是非常乏味的。但利用简单的变量定义,可避免这种乏味的工作:#&Define&macros&for&name&of&compilerCC&=&gcc#&Define&a&macr&o&for&the&CC&flagsCCFLAGS&=&-D_DEBUG&-g&-m486#&A&rule&for&building&a&object&filetest.o:&test.c&test.h&&&&$(CC)&-c&$(CCFLAGS)&test.c在上面的例子中,CC&和&CCFLAGS&就是&make&的变量。GNU&make&通常称之为变量,而其他&UNIX&的&make&工具称之为宏,实际是同一个东西。在&makefile&中引用变量的值时,只需变量名之前添加&$&符号,如上面的&$(CC)&和&$(CCFLAGS)。1.9.4&&GNU&make&的主要预定义变量GNU&make&有许多预定义的变量,这些变量具有特殊的含义,可在规则中使用。表&1-5&给出了一些主要的预定义变量,除这些变量外,GNU&make&还将所有的环境变量作为自己的预定义变量。&&&&&&&&&&&&&&&&&&&&&&&&表&1-5&&GNU&make&的主要预定义变量预定义变量&&&&&&&&&&&&&&&&&&&&&&含义$*&&&&&&&&&&&&&&不包含扩展名的目标文件名称。$+&&&&&&&&&&&&&&所有的依赖文件,以空格分开,并以出现的先后为序,可能包含重复的依赖文件。$&&&&&&&&&&&&&&&第一个依赖文件的名称。$?&&&&&&&&&&&&&&所有的依赖文件,以空格分开,这些依赖文件的修改日期比目标的创建日期晚。$@&&&&&&&&&&&&&&目标的完整名称。$^&&&&&&&&&&&&&&所有的依赖文件,以空格分开,不包含重复的依赖文件。$%&&&&&&&&&&&&&&如果目标是归档成员,则该变量表示目标的归档成员名称。例如,如果目标名称&&&&&&&&&&&&&&&&为&mytarget.so(image.o),则&$@&为&mytarget.so,而&$%&为&image.o。AR&&&&&&&&&&&&&&归档维护程序的名称,默认值为&ar。ARFLAGS&&&&&&&&&归档维护程序的选项。AS&&&&&&&&&&&&&&汇编程序的名称,默认值为&as。ASFLAGS&&&&&&&&&汇编程序的选项。CC&&&&&&&&&&&&&&C&编译器的名称,默认值为&cc。CCFLAGS&&&&&&&&&C&编译器的选项。CPP&&&&&&&&&&&&&C&预编译器的名称,默认值为&$(CC)&-E。CPPFLAGS&&&&&&&&C&预编译的选项。CXX&&&&&&&&&&&&&C++&编译器的名称,默认值为&g++。CXXFLAGS&&&&&&&&C++&编译器的选项。FC&&&&&&&&&&&&&&FORTRAN&编译器的名称,默认值为&f77。FFLAGS&&&&&&&&&&FORTRAN&编译器的选项。1.9.5&&隐含规则GNU&make&包含有一些内置的或隐含的规则,这些规则定义了如何从不同的依赖文件建立特定类型的目标。GNU&make&支持两种类型的隐含规则:*&后缀规则(Suffix&Rule)。后缀规则是定义隐含规则的老风格方法。后缀规则定义了将一个具有某个后缀的文件(例如,.c&文件)转换为具有另外一种后缀的文件(例如,.o&文件)的方法。每个后缀规则以两个成对出现的后缀名定义,例如,将&.c&文件转换为&.o&文件的后缀规则可定义为:.c.o:$(CC)&$(CCFLAGS)&$(CPPFLAGS)&-c&-o&$@&$&*&模式规则(pattern&rules)。这种规则更加通用,因为可以利用模式规则定义更加复杂的依赖性规则。模式规则看起来非常类似于正则规则,但在目标名称的前面多了一个&%&号,同时可用来定义目标和依赖文件之间的关系,例如下面的模式规则定义了如何将任意一个&X.c&文件转换为&X.o&文件:%.c:%.o$(CC)&$(CCFLAGS)&$(CPPFLAGS)&-c&-o&$@&$&1.9.6&&makefile&范例1.9.7&&运行&make我们知道,直接在&make&命令的后面键入目标名可建立指定的目标,如果直接运行&make,则建立第一个目标。我们还知道可以用&make&-f&mymakefile&这样的命令指定&make&使用特定的&makefile,而不是默认的&GNUmakefile、makefile&或&Makefile。但&GNU&make&命令还有一些其他选项,表&1-6&给出了这些选项。&&&&&&&&&&&&&&&&&&&&&&&&表&1-6&&GNU&make&命令的常用命令行选项命令行选项&&&&&&&&&&&&&&含义-C&DIR&&&&&&&&&&&&&&在读取&makefile&之前改变到指定的目录&DIR。-f&FILE&&&&&&&&&&&&&以指定的&FILE&文件作为&makefile。-h&&&&&&&&&&&&&&&&&&显示所有的&make&选项。-i&&&&&&&&&&&&&&&&&&忽略所有的命令执行错误。-I&DIR&&&&&&&&&&&&&&当包含其他&makefile&文件时,可利用该选项指定搜索目录。-n&&&&&&&&&&&&&&&&&&只打印要执行的命令,但不执行这些命令。-p&&&&&&&&&&&&&&&&&&显示&make&变量数据库和隐含规则。-s&&&&&&&&&&&&&&&&&&在执行命令时不显示命令。-w&&&&&&&&&&&&&&&&&&在处理&makefile&之前和之后,显示工作目录。-W&FILE&&&&&&&&&&&&&假定文件&FILE&已经被修改。
linux sheel脚本里面,在if语句里“$? -eq o” 这是什么意思!!!首先应该是0不是o$?是shell变量,表示"最后一次执行命令"的退出状态.0为成功,非0为失败.在你的问题里就是,if语句前一个命令执行成功,就怎么样
TA的最新馆藏[转]&[转]&
喜欢该文的人也喜欢Linux Vps系统防CC攻击脚本代码
Linux Vps系统防CC攻击自动拉黑IP脚本分2个版本,普通版是加入到crontab计划任务执行的,每5分钟执行一次。增强版主要是为了弥补用crontab执行时间间隔最低只能是1分钟的不足,可以让CC防护更严密,甚至每隔1S执行一次!
功能说明:通过netstat -an命令统计出当前请求并发大于100的IP,然后将不在白名单的IP自动加入DROP规则
使用说明:
1.在Linux系统下将以下代码保存为shell脚本,比如:deny_ip.sh,并执行chmod+x deny_ip.sh加执行权限
#!/bin/bash
#Author:ZhangGe
#Desc:Auto Deny Black_IP Script.
#从第一个参数取得限制阈值,如果未设置最高并发,将设置为100
if [[ -z $1 ]];then
#进入到脚本所在目录
cd $(cd $(dirname $BASH_SOURCE) && pwd)
#取得当前请求大于阈值$num的IP
iplist=`netstat -an |grep ^tcp.*:80|egrep -v 'LISTEN|127.0.0.1'|awk -F"[ ]+|[:]" '{print $6}'|sort|uniq -c|sort -rn|awk -v str=$num '{if ($1&str){print $2}}'`
#循环IP列表进行筛选和处理
if [[ ! -z $iplist ]];
for black_ip in $iplist
#取得IP所在段
ip_section=`echo $black_ip | awk -F"." '{print $1"."$2"."$3}'`
#先检查白名单中是否存在匹配的IP段(为了支持整段IP为白名单)
grep -q $ip_section ./white_ip.txt
if [[ $? -eq 0 ]];then
#若发现black_ip和白名单的一个段匹配,则写入到待验证列表,并暂时放过
echo $black_ip &&./recheck_ip.txt
#若不再白名单当中,则直接将black_ip加入到防火墙的DROP规则当中,并记录
iptables -nL | grep $black_ip || iptables -I INPUT -s $black_ip -j DROP
echo $black_ip &&./black_ip.txt
2.如果有要排除的白名单IP,需要将这些IP加入到脚本同目录的white_ip.txt当中,一行一个
3.最后使用crontab -e 将脚本加入到系统计划任务当中,每五分钟执行一次即可(最后的数值表示最大并发数):
*/5 * * * * /root/deny_ip.sh 150 &dev/null 2&&1
注意事项:
1.该脚本对于使用了百度云加速或360网站卫士的网站无效,因为IP都已经变成了CDN节点了,请勿使用此脚本
2.若不需要支持一个段为白名单,可自行修改24~27行的代码,更加准确的对应到每个IP
3.若发现和白名单同一个段IP出现在高并发列表,将不会直接拉黑,而是写入到recheck_ip.txt,如果有监控信息机制,可以在这个地方加入监控报警,告知管理员这个可疑的IP
增强版:上面的Shell脚本是加入到crontab计划任务执行的,每5分钟执行一次,如果觉得时间间隔太长,那么可以考虑下么的增强版。
#!/bin/bash
#Author:ZhangGe
#Desc:Auto Deny Black_IP Script.
#取得参数$1为并发阈值,若留空则默认允许单IP最大100并发(实际测试发现,2M带宽,十来个并发服务器就已经无法访问了!)
if [[ -z $1 ]];then
#巧妙的进入到脚本工作目录
cd $(cd $(dirname $BASH_SOURCE) && pwd)
#请求检查、判断及拉黑主功能函数
function check(){
iplist=`netstat -an |grep ^tcp.*:80|egrep -v 'LISTEN|127.0.0.1'|awk -F"[ ]+|[:]" '{print $6}'|sort|uniq -c|sort -rn|awk -v str=$num '{if ($1&str){print $2}}'`
if [[ ! -z $iplist ]];
&./iplist/black_ip.txt
for black_ip in $iplist
#白名单过滤中已取消IP段的判断功能,可根据需要自行修改以下代码(请参考前天写的脚本)
#exclude_ip=`echo $black_ip | awk -F"." '{print $1"."$2"."$3}'`
#grep -q $exclude_ip ./white_ip.txt
grep -q $black_ip ./white_ip.txt
if [[ $? -eq 0 ]];then
echo "$black_ip (white_ip)" &&./black_ip.txt
echo $black_ip &&./black_ip.txt
iptables -nL | grep $black_ip ||(iptables -I INPUT -s $black_ip -j DROP && echo "$black_ip
`date +%Y-%m-%H:%M:%S`"&&./iplist/denylog.txt)
#存在并发超过阈值的单IP就发送邮件
#发邮件函数
function sendmsg(){
netstat -nutlp | grep "sendmail" &/dev/null 2&&1 || /etc/init.d/sendmail start &/dev/null 2&&1
echo -e "From: \nTo:gobi918@vip.qq.com\nSubject:Someone Attacking your system!!\nIts Ip is" &./message
cat ./black_ip.txt &&./message
/usr/sbin/sendmail -f
-t gobi918@vip.qq.com -i &./message
#间隔10s无限循环检查函数
while true
#每隔10s检查一次,时间可根据需要自定义
二、执行脚本
将以上代码保存为deny_blackip.sh之后,使用如下命令后台执行脚本(后面的50表示并发数,可自行调整):
nohup ./deny_blackip.sh 50 &
执行后会出现如下信息:
[root@Mars_Server iptables]# nohup ./deny_blackip.sh 50 &
[root@Mars_Server iptables]# nohup: ignoring input and appending output to `nohup.out'
表示如果脚本产生输出信息,将会写入到nohup.out文件,可以看到当前目录已经生成了一个空的
nohup.out:
[root@Mars_Server iptables]# ll nohup.out
-rw------- 1 root root 0 Nov
5 21:15 nohup.out
好了,现在你执行执行ps aux 应该可以找到如下进程:
0:00 /bin/bash ./deny_blackip.sh
0:00 sleep 10
一切顺利!每10s将检查一次服务器请求,如果某个IP超过50个并发,立即拉黑,并发一封邮件给你!
1.脚本发邮件需要安装sendmail,若未安装请执行yum -y install sendmail安装并启动即可;
2.若要停止后台运行的脚本,只要使用ps aux命令找到该脚本的pid线程号,然后执行kill -9 pid号即可结束;
3.关于脚本的单IP并发限制,实际测试同时打开博客多个页面并持续刷新,顶多也就产生十来个并发,所以单IP超过50个并发就已经有很大的问题了!当然,的阈值设为50也只是建议值,你可以根据需求自行调整;
4.写这个脚本,主要是为了弥补用crontab执行时间间隔最低只能是1分钟的不足,可以让CC防护更严密,甚至每隔1S执行一次!虽说脚本不怎么占用资源,不过还是建议10s执行一次为佳,不用太过极端是吧?
5.对于白名单过滤,只要将白名单IP保存到脚本同一目录下的white_ip.txt文件中即可,若发现攻击IP在白名单中,脚本不会直接拉黑,而是发一封邮件给你,让你自己判断这个白名单攻击你是为毛?如果白名单需要支持IP段,请参考我普通版的脚本即可。色彩条形图RGBCMYKRYB色盲模拟绿色盲红色盲蓝色盲色盲#0062cc配色/混色及调色在或格式中下载调色板互补模拟式分割三进制四方四进制五进制六进制八进制十进制单色命名的颜色密切相关中度相关较远相关色彩梯度#0062cc至黑#0062cc至白HTML&CSS/CSS3案例#0062cc前景&p style="color: #0062cc"&#0062cc前景&/p&#0062cc背景&p style="background-color: #0062 color: #fff"&#0062cc背景&/p&#0062cc边界&p style="border: #0062cc 3px solid"&#0062cc边界&/p&#0062cc辐射梯度&p style="padding: 15px 0; background: -moz-radial-gradient(50% 50%, #0062cc, #fff); background: -webkit-radial-gradient(50% 50%, #0062cc, #fff); background: -o-radial-gradient(50% 50%, #0062cc, #fff); background: -ms-radial-gradient(50% 50%, #0062cc, #fff); background: radial-gradient(50% 50%, #0062cc, #fff); color: #fff"&#0062cc辐射梯度&/p&#0062cc线形梯度至互补色#cc6a00&p style="padding: 15px 0; background: -moz-linear-gradient(top, #0062cc, #cc6a00); background: -webkit-linear-gradient(top, #0062cc, #cc6a00); background: -o-linear-gradient(top, #0062cc, #cc6a00); background: -ms-linear-gradient(top, #0062cc, #cc6a00); background: linear-gradient(top, #0062cc, #cc6a00); color: #fff"&#0062cc线形梯度至互补色#cc6a00&/p&#0062cc文本阴影&p style="font-size: 24 color: #000; text-shadow: 2px 2px 3px #0062cc"&#0062cc文本阴影&/p&条形图上的颜色匹配色按照与十六进制色码#0062cc的关联度顺序排列。每个图色品牌的前四种相关色相对于十六进制色码#0062cc的视觉相似度决定了此相关度。跳到颜色品名: …<option value="AMCAlbany PaintAlcroAsian PaintsAustralian Standard AS2700BeckersBehrBenjamin MooreBergerBrilluxBritish StandardCILCalifornia PaintsCaparolChryslerCloverdale PaintColortrendCoronado PaintCraig & RoseCrayolaCrown DiamondCrown PaintDesigners GuildDevoe PaintDiamond PaintDiamond VogelDisneyDuluxDulux AustraliaDunn-EdwardsDupontDuronDutch BoyEarthpaintEvonik-DegussaFarrow & BallFederal StandardFenderFired EarthFocoltoneFordGM / General MotorsGeneral PaintGliddenGraham & BrownHabitatHomebaseHumbrolICI PaintsJedynkaJohnstone's PaintJotunKansai PaintKelly-MooreKrylonLaura AshleyLittle GreeneMarston & LangingerMartha Stewart LivingMcCormick PaintsModel MasterMylands of LondonNatural Color System / NCSNature PaintNippon PaintOlympicOpaltone / OMSOpulencePPG Pittsburgh PaintsPantone / PMSPeintures MFPlasconPorter PaintsPratt & LambertRALRalph LaurenReseneRevellRodda PaintSandersonScib PaintsSherwin-WilliamsSicoSigmaSikkensStoTRUMATCHTamiyaTaubmansTeknosTestorsTikkurilaTollensToyo InkVallejoValspar PaintVista PaintVolkswagenZoffany ΔE = 1.678 ΔE = 2.693 ΔE = 5.173 ΔE = 3.184 ΔE = 3.257 ΔE = 3.856 ΔE = 1.744 ΔE = 4.043 ΔE = 6.266 ΔE = 3.233 ΔE = 4.114 ΔE = 4.75 ΔE = 3.742 ΔE = 4.146 ΔE = 4.311 ΔE = 2.189 ΔE = 4.376 ΔE = 6.054 ΔE = 1.781 ΔE = 6.03 ΔE = 6.26 ΔE = 1.678 ΔE = 6.51 ΔE = 6.684 ΔE = 5.049 ΔE = 5.476 ΔE = 5.809 ΔE = 5.821 ΔE = 5.83 ΔE = 5.846 ΔE = 4.009 ΔE = 6.715 ΔE = 7.665 ΔE = 6.181 ΔE = 7.054 ΔE = 7.226 ΔE = 6.181 ΔE = 7.054 ΔE = 7.345 ΔE = 6.848 ΔE = 7.324 ΔE = 7.329 ΔE = 6.848 ΔE = 7.324 ΔE = 7.329 ΔE = 5.363 ΔE = 6.567 ΔE = 10.029 ΔE = 7.082 ΔE = 7.748 ΔE = 7.879 ΔE = 7.405 ΔE = 7.764 ΔE = 7.861 ΔE = 6.673 ΔE = 8.818 ΔE = 10.247 ΔE = 6.877 ΔE = 9.339 ΔE = 9.688 ΔE = 8.335 ΔE = 8.637 ΔE = 9.447 ΔE = 8.455 ΔE = 8.944 ΔE = 9.139 ΔE = 8.455 ΔE = 8.944 ΔE = 9.139 ΔE = 5.075 ΔE = 10.339 ΔE = 11.159 ΔE = 7.599 ΔE = 8.645 ΔE = 10.786 ΔE = 8.315 ΔE = 9.29 ΔE = 9.999 ΔE = 8.979 ΔE = 9.518 ΔE = 9.528 ΔE = 8.958 ΔE = 9.583 ΔE = 10.12 ΔE = 8.973 ΔE = 9.422 ΔE = 11.638 ΔE = 9.576 ΔE = 10.312 ΔE = 10.515 ΔE = 9.461 ΔE = 9.988 ΔE = 11.24 ΔE = 8.473 ΔE = 11.217 ΔE = 11.426 ΔE = 4.711 ΔE = 10.181 ΔE = 16.27 ΔE = 7.723 ΔE = 12.095 ΔE = 12.281 ΔE = 9.071 ΔE = 11.475 ΔE = 11.588 ΔE = 9.566 ΔE = 11.444 ΔE = 12.098 ΔE = 9.566 ΔE = 11.444 ΔE = 12.098 ΔE = 9.566 ΔE = 11.444 ΔE = 12.098 ΔE = 10.801 ΔE = 11.306 ΔE = 11.452 ΔE = 9.825 ΔE = 10.776 ΔE = 13.053 ΔE = 10.213 ΔE = 10.802 ΔE = 12.923 ΔE = 11.356 ΔE = 11.463 ΔE = 11.56 ΔE = 10.771 ΔE = 11.485 ΔE = 12.175 ΔE = 5.968 ΔE = 13.398 ΔE = 15.122 ΔE = 11.291 ΔE = 11.73 ΔE = 12.207 ΔE = 11.291 ΔE = 11.73 ΔE = 12.207 ΔE = 11.305 ΔE = 12.017 ΔE = 12.238 ΔE = 11.602 ΔE = 11.815 ΔE = 12.175 ΔE = 11.439 ΔE = 11.834 ΔE = 12.576 ΔE = 10.998 ΔE = 11.049 ΔE = 14.273 ΔE = 11.075 ΔE = 12.848 ΔE = 12.859 ΔE = 12.247 ΔE = 12.373 ΔE = 12.67 ΔE = 11.759 ΔE = 12.8 ΔE = 13.434 ΔE = 12.5 ΔE = 12.593 ΔE = 13.287 ΔE = 10.376 ΔE = 12.427 ΔE = 15.807 ΔE = 12.587 ΔE = 13.235 ΔE = 14.172 ΔE = 11.819 ΔE = 13.911 ΔE = 14.269 ΔE = 10.796 ΔE = 13.613 ΔE = 15.721 ΔE = 12.559 ΔE = 13.922 ΔE = 14.117 ΔE = 9.286 ΔE = 15.674 ΔE = 15.685 ΔE = 12.429 ΔE = 13.735 ΔE = 14.519 ΔE = 13.034 ΔE = 13.452 ΔE = 14.592 ΔE = 11.831 ΔE = 14.549 ΔE = 15.747 ΔE = 13.867 ΔE = 14.029 ΔE = 14.605 ΔE = 14.075 ΔE = 14.126 ΔE = 14.655 ΔE = 13.249 ΔE = 13.978 ΔE = 15.798 ΔE = 10.392 ΔE = 13.51 ΔE = 19.316 ΔE = 13.995 ΔE = 14.263 ΔE = 15.111 ΔE = 13.915 ΔE = 14.739 ΔE = 15.541 ΔE = 13.33 ΔE = 15.068 ΔE = 15.971 ΔE = 10.055 ΔE = 12.227 ΔE = 22.853 ΔE = 13.1 ΔE = 14.724 ΔE = 17.921 ΔE = 6.746 ΔE = 19.603 ΔE = 20.14 ΔE = 12.119 ΔE = 17.99 ΔE = 18.364 ΔE = 11.423 ΔE = 18.89 ΔE = 20.378 ΔE = 15.977 ΔE = 18.394 ΔE = 19.163 ΔE = 15.764 ΔE = 19.478 ΔE = 19.701 ΔE = 15.426 ΔE = 19.875 ΔE = 21.431 ΔE = 16.836 ΔE = 20.619 ΔE = 21.334 ΔE = 10.496 ΔE = 23.032 ΔE = 25.922 ΔE = 18.352 ΔE = 20.772 ΔE = 21.682 ΔE = 12.926 ΔE = 18.09 ΔE = 30.734 ΔE = 19.045 ΔE = 21.787 ΔE = 22.859 ΔE = 14.67 ΔE = 18.767 ΔE = 30.447 ΔE = 18.068 ΔE = 22.761 ΔE = 23.562 ΔE = 17.385 ΔE = 24.008 ΔE = 25.191 ΔE = 22.264 ΔE = 23.538 ΔE = 24.631 ΔE = 20.985 ΔE = 22.378 ΔE = 28.042 ΔE = 20.039 ΔE = 26.71 ΔE = 30.892 ΔE = 20.946 ΔE = 29.081 ΔE = 36.241 ΔE = 23.649 ΔE = 32.077 ΔE = 38.327 ΔE = 29.857 ΔE = 34.937 ΔE = 38.084 ΔE = 25.775 ΔE = 39.642 ΔE = 40.557 ΔE = 22.13 ΔE = 37.635 ΔE = 49.686 ΔE = 34.456 ΔE = 37.505 ΔE = 38.229 ΔE = 20.426 ΔE = 45.256 ΔE = 46.529 ΔE = 35.172 ΔE = 37.584 ΔE = 40.047 ΔE = 21.536 ΔE = 44.036 ΔE = 47.986 ΔE = 43.521 ΔE = 44.13 ΔE = 46.33 ΔE = 43.251 ΔE = 47.103 ΔE = 63.615随机色(C)

我要回帖

更多关于 pad print是什么意思 的文章

 

随机推荐