-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsystem
More file actions
566 lines (404 loc) · 21 KB
/
system
File metadata and controls
566 lines (404 loc) · 21 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
获取帮助的地方,优先级从上到下:
--help命令(脚本或命令 --help)
脚本里的注释
程序自带文档
man 脚本名
curl:
curl -X POST 'http://localhost:<port>/api/chat' \
-H 'Content-Type: application/json' \
-d '{
"question": "<your_question>",
"history": "<your_history>"
}'
curl -X GET 'https://cn.aliyun.com/?from_alibabacloud=' -H 'Content-Type: application/html'
压缩与解压缩:
安装:
apt-get install rar unrar
wget http://www.rarlab.com/rar/rarlinux-x64-5.4.0.tar.gz
tar -zxvf rarlinux-x64-5.4.0.tar.gz
cd rar
make
使用
unrar x 文件名
程序运行:
一。& 最经常被用到
这个用在一个命令的最后,可以把这个命令放到后台执行
二。ctrl + z
可以将一个正在前台执行的命令放到后台,并且暂停
三。jobs
查看当前有多少在后台运行的命令
四。fg
将后台中的命令调至前台继续运行
如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
五。bg
将一个在后台暂停的命令,变成继续执行
如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)
例如:
不间断在后台运行守护进程
nohup php test.php > xxx.log 2>&1 &
0 stdin 标准输入
1 stdout 标准输出
2 stderr 标准错误
> 重定向符
crontab:
* * * * *
MINUTES Minutes in one hour (0-59)
HOURS Hours in one day (0-23)
DAYMONTH Day in a month (1-31)
MONTH Month in a year (1-12)
DAYWEEK Day of the week (0-7) where 0 and 7 are sunday
If you want to schedule your build every 5 minutes, this will do the job : */5 * * * *
If you want to schedule your build every day at 8h00, this will do the job : 0 8 * * *
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,
表示每十分钟执行一次。
例如,周二到周四每隔两小时的第3和第15分钟执行
命令:3,15 /2 * 2-4
yum,rpm
yum list installed 查看机器上已经用yum安装了的包
rpm -ql mysql 查看yum安装位置
yum repolist all 查看yum源列表
yum grouplist 查看已安装和可安装的工具包group
(?centos的一些版本没有源
yum install epel-release
ls -lah /etc/yum.repos.d/
(?rpm -e epel-release
如果ls -lah /etc/yum.repos.d/找不到epel源,说明之前有安装脏
需要rpm -e epel-release
再yum install epel-release
)
yum remove mod_wsgi yum删除
rpm:
-e, --erase=<package>+ erase (uninstall) package 删除
-i, --install install package(s) 安装
-v, --verbose provide more detailed output
-h, --hash print hash marks as package installs (good with -v)
-l, --list list files in package(with -q)
-U, --upgrade=<packagefile>+ upgrade package(s) 升级
-a, --all query/verify all packages
-q 查询
安装,升级,删除,查询可组合其他命令选项使用,例子:
rpm -q logstash 查看某个包是否被安装
rpm -qa logstash 列出所有已安装的rpm包
rpm -ql mysql 查看安装位置
rpm -ivh logstash-2.1.1-1.noarch.rpm 安装某个rpm软件包
rpm -Uvh logstash-2.1.1-1.noarch.rpm 升级某个rpm包
rpm -e epel-release 卸载某个已用rpm方式安装的软件
安装:
安装rz sz:
yum install lrzsz
环境配置
系统相关
set命令显示当前shell的变量,包括当前用户的变量;
env命令显示当前用户的变量;
export命令显示当前导出成用户变量的shell变量。
echo $PATH
which python
ln -s /usr/local/bin/python2.7 /usr/bin/python
(把后者链到前者,使用后者实际上就是使用前者,再比如/data有空间 /opt无空间 就可以 ln -s /data/storage /opt/storage
当向/opt/storage里写入时 实际上就是向/data/stroage里写入
)
vim .bashrc
export GOPATH=$HOME/go //the go path
vim /etc/profile文件 (全局所有用户)
export GOPATH=$HOME/go
编辑完/etc/profile文件后,需要执行 source /etc/profile 使之生效
语言举例:
whereis java
which java (java执行路径)
go语音相关:
go env //the go language env
php环境查看
可echo出phpinfo()这个函数
php环境配置
cd php-5.6.11/ext/zip
/data1/php/bin/phpize
./configure --with-php-config=/data1/php/bin/php-config
apache相关
apachectl -V //查看编译设置
配置JAVA_HOME举例
查看rpm方式安装的程序路径:
[root@i-be9r027r jvm]# rpm -qa | grep java
java-1.8.0-openjdk-1.8.0.51-1.b16.el6_7.x86_64
java-1.8.0-openjdk-headless-1.8.0.51-1.b16.el6_7.x86_64
java-1.7.0-openjdk-1.7.0.91-2.6.2.2.el6_7.x86_64
tzdata-java-2015f-1.el6.noarch
[root@i-be9r027r jvm]#
[root@i-be9r027r jvm]# rpm -ql java-1.7.0-openjdk
推导安装路径:
[root@i-be9r027r jvm]# which java
/usr/bin/java
[root@i-be9r027r jvm]# ls -lah /usr/bin/java
lrwxrwxrwx 1 root root 22 Jan 14 19:34 /usr/bin/java -> /etc/alternatives/java
[root@i-be9r027r jvm]# ls -lah /etc/alternatives/java
lrwxrwxrwx 1 root root 46 Jan 14 19:34 /etc/alternatives/java -> /usr/lib/jvm/jre-1.7.0-openjdk.x86_64/bin/java
编辑/etc/profile文件
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.91.x86_64/jre (这个机器应该有调整,JDK的路径较怪异)
执行source /etc/profile命令
echo $JAVA_HOME 验证是否配置成功
ssh
1.在A机下生成公钥/私钥对。
[chenlb@A ~]$ ssh-keygen -t rsa -P ''
2.把A机下的id_rsa.pub复制到B机下,在B机的.ssh/authorized_keys文件里,我用scp复制。
[chenlb@A ~]$ scp .ssh/id_rsa.pub chenlb@192.168.1.181:/home/chenlb/id_rsa.pub
3.B机把从A机复制的id_rsa.pub添加到.ssh/authorzied_keys文件里。
[chenlb@B ~]$ cat id_rsa.pub >> .ssh/authorized_keys (这一步有可能加入文件内后,没有换行,导致不生效,注意检查)
[chenlb@B ~]$ chmod 600 .ssh/authorized_keys (这一步不要忘了)
脚本:
for i in 1 2 3;do ssh-keygen -t rsa -P '';echo $i;scp .ssh/id_rsa.pub root@xx.xx.xx.$i:/root/id_rsa.pub;
ssh xx.xx.xx.$i "cat /root/id_rsa.pub >> .ssh/authorized_keys";echo $i;done
ssh非密码形式,文件钥形式:
ssh -i ~/.ssh/keyfile root@xxx.xxx.xxx.xxx
提示Enter passphrase for key时解决:
http://www.cnblogs.com/lovingprince/archive/2011/08/04/2166213.html
------------------------------------------------------------------------------------------------
centos:
CentOS 7.x开始,CentOS开始使用systemd服务来代替daemon,原来管理系统启动和管理系统服务的相关命令全部由systemctl命令来代替。
1、原来的 service 命令与 systemctl 命令对比
daemon命令 systemctl命令 说明
service [服务] start systemctl start [unit type] 启动服务
service [服务] stop systemctl stop [unit type] 停止服务
service [服务] restart systemctl restart [unit type] 重启服务
此外还是二个systemctl参数没有与service命令参数对应
status:参数来查看服务运行情况
reload:重新加载服务,加载更新后的配置文件(并不是所有服务都支持这个参数,比如network.service)
应用举例:
#启动网络服务
systemctl start network.service
#停止网络服务
systemctl stop network.service
#重启网络服务
systemctl restart network.service
#查看网络服务状态
systemctl status network.serivce
2、原来的chkconfig 命令与 systemctl 命令对比
2.1、设置开机启动/不启动
daemon命令 systemctl命令 说明
chkconfig [服务] on systemctl enable [unit type] 设置服务开机启动
chkconfig [服务] off systemctl disable [unit type] 设备服务禁止开机启动
---------------------------------------------------------------------------------------------------
跟踪
tcpdump -i bond0 port 8085 -s 0 -w - | strings
strace -p pid we can get the process run infometion
常用命令
groupadd hadoop
useradd hadoop -g hadoop
scp
“scp”调用SSH进行登录,然后拷贝文件,最后调用SSH关闭这个连接。
scp -i ~/.ssh/dev-key .ssh/id_rsa.pub root@xxx.xxx.xxx.xxx:/root/id_rsa.pub(文件钥形式)
scp .ssh/id_rsa.pub root@xxx.xxx.xxx.xxx:/home/sk77/id_rsa.pub(密码形式)
kill
kill -term(-15) 关闭程序,给程序资源回收的机会和时间
kill -kill(-9) 直接强制杀死
kill -0 Check access to pid 通常可在编写脚本时使用,用以检查进程是否运行
参考文档:http://www.cyberciti.biz/faq/unix-kill-command-examples/
通常,应该发送15,等一两秒钟,如果没效果,发送2,如果还不行,发送1。如果还不行,那你应该把那个程序删掉,因为那个程序写的太烂了!
不要使用kill -9。不要用收割机来修剪花盆里的花。
总之,在使用kill -9前,你应该先使用kill -15,给目标进程一个清理善后工作的机会。(进程也许无法捕捉或直接忽略SIGKILL信号,但它们可以,
通常也是能够捕捉SIGTERM信号的。)如果你不留机会让进程完成清理工作,它们会留下一些不完整的文件或状态,当系统重启时,
程序将无法理解这些状态。
strace/truss,ltrace和gdb都是查看一个卡住的进程因何卡住的好工具。(Solaris里的truss -u非常好用;)Solaris里还有一些
非常有用的/proc相关的工具,有一些已经被移植到了Linux上。
所谓的将程序重启,比如logstash,也就是
stop && start,也就是
kill -15 pid && /opt/logstash/bin/logstash agent -f ${LS_CONF_DIR} -l ${LS_LOG_FILE} ${LS_OPTS}
nohup,screen,& 三者的用法:
1.当交互bash退出的时候,比如exit或logout,它会发送SIGHUP到它的所有作业,作业下的所有子进程都会收到SIGHUP。
2.当终端挂断的时候,终端驱动会发送SIGHUP到它的控制进程,通常我们登录后控制进程就是bash,它收到SIGHUP,然后退出,退出的过程参1
3.显然不想让一个进程被bash发送的SIGHUP中止通常用三种方法:
a.自己处理SIGHUP
b.忽略SIGHUP(用nohup命令或disown -h)
c.脱离交互bash的作业(比如用disown,在脚本中发起后台命令,在nestedsubshell中发起后台命令)
在交互bash里使用了&的启动命令,和在脚本里使用&的启动命令一样吗?现在确定的是,在脚本里启动,就属于后台启动了,不属于当前运行脚本的
交互bash了。那直接在当前交互bash里,使用了&的命令呢?
当一个会话的终端中断后,系统只会给当前会话的前台进程组发送SIGHUP信号,如果启动进程时,让进程在后台去执行,也是执行的时候后面加一个&,
也可以自己去重定向输入输出,会话的终端中断时,后台的进程组是不会收到SIGHUP信号,也就不会被系统kill掉(再揣摩实验下,用./bin/kibana &
实验了一下,只用&,在终端里不是在脚本里,看终端关闭后,kibana进程是不是还在运行。测试结果,关闭终端后,只用&,kibana进程仍然运行)
screen应该是和在脚本里使用&一个道理,都是后台启动。screen的好处是可以调出查看。nohup就是忽略SIGHUP了。
----------------------------------------------------------------------------------------------------------------------
网络:
ifconfig
ping
telnet
nslookup
节点(node):具有ip的设备
server
client
网卡
网口: eth0 ,lo等
拓扑
路由
网关 :具有两个以上的网络接口, 可以连接两个以上不同的网段的设备
局域网LAN 内网
广域网WAN 外网
TCP/IP:
链路层:
LAN:Ethernet
WAN:
arp(ip地址与MAC地址的对应,mac地址网卡出厂时就会设定唯一的)
mac数据包,网络上数据传输的最小单位,MAC数据包跨过路由器,经过不同的网域,那么来源与目的的硬件地址(mac地址)就会跟着改变
mac地址可由ifconfig命令查看
网络层:
IP:
ip数据包内容:
TTL: IP 封包通过一个路由器时, TTL 就会减一,当 TTL 为 0 时,这个封包将会被直接丢弃
来源地址ip
目的地址ip
协议Protocol:TCP,UDP,ICMP等
IP (Internet Protocol) 其实是一种网络封包,而这个封包的表头最重要的就是那个32位的来源与目标地址!
为了方便记忆,所以我们也称这个 32 bits 的数值为 IP 网络地址就是了,
常用的是点分十进制记法,如127.0.0.1,192.168.0.1
最小:0.0.0.0 最大255.255.255.255
ip可以分Net_ID(网段号码)与Host_ID(主机号码)两部分
同一个网域的定义是『在同一个物理网段内,主机的 IP 具有相同的 Net_ID ,并且具有独特的 Host_ID』,
那么这些 IP 群就是同一个网域内的 IP 网段啦!
什么是物理网段呢?当所有的主机都是使用同一个网络媒体串在一起, 这个时候这些主机在实体装置上面其实是联机在一起的,
那么就可以称为这些主机在同一个物理网段内了!
同时并请注意,同一个物理网段之内,可以依据不同的 IP 的设定,而设定成多个『IP 网段』
Host_ID 在二进制的表示法当中,全为 0 表示整个网段的地址 (Network IP),而全为 1 则表示为广播的地址 (Broadcast IP)
同网段可透过 IP 广播传递数据(通过CSMA/CD走MAC)
在同一个物理网段之内,如果两部主机设定成不同的 IP 网段,则由于广播地址的不同,导致无法透过广播的方式来进行联机。
此时得要透过路由器 (router) 来进行沟通才能将两个网域连结在一起。
五种IP分级在十进制的表示:
Class A : 0.xx.xx.xx ~ 127.xx.xx.xx
Class B : 128.xx.xx.xx ~ 191.xx.xx.xx
Class C : 192.xx.xx.xx ~ 223.xx.xx.xx
Class D : 224.xx.xx.xx ~ 239.xx.xx.xx
Class E : 240.xx.xx.xx ~ 255.xx.xx.xx
内网,局域网:(
IPv4地址分为A、B、C、D、E五类,出去特殊作用的D、E两类,剩下的A、B、C三类地址是我们常见的IP地址段。
A类地址的容量最大,可以容纳16777214个主机,B类地址可以容纳65534个主机,C类地址可以容纳254个主机。
在这三类地址中,绝大多数的IP地址都是公有地址,需要向国际互联网信息中心申请注册。但是在IPv4地址协议中预留了3个IP地址段,
作为私有地址,供组织机构内部使用。
这三个地址段分别位于A、B、C三类地址内:
A类地址:10.0.0.0--10.255.255.255
B类地址:172.16.0.0--172.31.255.255
C类地址:192.168.0.0--192.168.255.255
所以局域网在选取使用私有地址时,一般会按照实际需要容纳的主机数来选择私有地址段。
常见的局域网由于容量小,一般选择C类的192.168.0.0作为地址段使用,一些大型企业就需要使用B类甚至A类地址段作为内部网络的地址段。
)
路由器:
连接不同网段的设备
ICMP(ping命令与tracert命令使用该协议)
传输层:
TCP
UDP
应用层:
HTTP
DNS
SSH
telnet
NFS
FTP
SMTP
POP3
CSMA/CD(同网段时):
多点传输 (Multiple Access):
我的计算机明明没有被入侵,为何我的数据会被隔壁的计算机窃取?
就因为多点传送,原本其他node收到数据不是给它的就丢弃,
但它为了窃取,利用监听软件把该丢弃的数据收集下来了
ip:http://os.51cto.com/art/201406/441461.htm
内核:
modprobe命令用于智能地向内核中加载模块或者从内核中移除模块。 modprobe可载入指定的个别模块,或是载入一组相依的模块。
modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。
语法 modprobe(选项)(参数)
选项 -a或--all:载入全部的模块;
-c或--show-conf:显示所有模块的设置信息;
-d或--debug:使用排错模式;
-l或--list:显示可用的模块;
-r或--remove:模块闲置不用时,即自动卸载模块;
-t或--type:指定模块类型;
-v或--verbose:执行时显示详细的信息;
-V或--version:显示版本信息;
-help:显示帮助。
----------------------------------------------------------------------------------------------------
linux查看相关
硬盘:
/etc/fstab fsck、mount、umount的等命令都利用该程序
fdisk -l 查看数据盘信息
df -h
df -lhT 查看磁盘容量及文件系统类型,没有分区和格式化数据盘之前,无法看到数据盘
fdisk /dev/vdb 对数据盘进行分区
磁盘分区,格式化,挂载步骤:
输入命令fdisk -l查看您的数据盘信息,注意:在没有分区和格式化数据盘之前,使用df -h 命令是无法看到数据盘的。
3) 执行以下命令,对数据盘进行分区。
fdisk /dev/vdb
按照界面的提示,依次输入“n”(新建分区)、“p”(新建扩展分区)、“1”(使用第1个主分区),两次回车(使用默认配置),输入“wq”(保存分区表),回车开始分区。
这里是以创建1个分区为例,开发者也可以根据自己的需求创建多个分区。
使用“fdisk -l”命令,即可查看到,新的分区vdb1已经创建完成。
5) 分区后需要对分好的区进行格式化,您可自行决定文件系统的格式,如ext2、ext3等。本例以“ext3”为例:
使用下面的命令对新分区进行格式化。
mkfs.ext3 /dev/vdb1
6) 使用以下命令创建mydata目录并将分区挂载在该目录下:
mkdir /mydata
mount /dev/vdb1 /mydata
最后用以下命令查看
df -h
出现如图信息则说明挂载成功,即可以查看到数据盘了。
7) 如果希望云服务器在重启或开机时能自动挂载数据盘,必须将分区信息添加到/etc/fstab中。如果没有添加,则云服务器重启或重新开机后,都不能自动挂载数据盘。
使用以下命令添加分区信息:
echo '/dev/vdb1 /mydata ext3 defaults 0 0' >> /etc/fstab
使用以下命令查看
cat /etc/fstab
出现如图信息则说明添加分区信息成功。
cpu:
cat /proc/cpuinfo
内存:
cat /proc/meminfo
版本:
cat /proc/version
cat /etc/redhat-release
查看所有运行服务:
service --status-all
进程
查看进程树: pstree -p 进程号
---------------------------------------------------------------------------------------------
编译安装:
# yum groupinstall "Development tools"
# yum install curl-devel expat-devel zlib-devel bzip2-devel openssl-devel ncurses-devel zx-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel python-devel libffi-devel libxml2-devel openssl-devel libxslt-devel gcc libgcc glibc
以上这些必要的基础依赖,在以后其他组件的安装及使用过程中需要用到,所以要提前装好
对于基础依赖,要有个共识印象
编译安装php apache http://php.net/manual/zh/install.unix.apache2.php
apache:
yum groupinstall "Development tools"
yum install curl-devel expat-devel zlib-devel bzip2-devel openssl-devel ncurses-devel zx-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel python-devel libffi-devel libxml2-devel openssl-devel libxslt-devel gcc libgcc glibc
tar -zxvf httpd-2.4.27.tar.gz
cd httpd-2.4.27
wget https://archive.apache.org/dist/apr/apr-util-1.5.4.tar.gz
wget http://www-us.apache.org/dist//apr/apr-1.6.2.tar.gz
tar -zxvf apr-util-1.5.4.tar.gz
tar -zxvf apr-1.6.2.tar.gz
cp -R apr-1.6.2 httpd-2.4.27/srclib/
cp -R apr-util-1.5.4 httpd-2.4.27/srclib/
cd httpd-2.4.27/srclib/
mv apr-1.6.2 apr
mv apr-util-1.5.4 apr-util
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.41.tar.gz
tar -zxvf pcre-8.41.tar.gz
cd pcre-8.41
./configure --prefix=/usr/local/pcre
./configure --enable-so --with-included-apr --with-pcre=/usr/local/pcre
make
make install
php:
yum list installed |grep php (把原有的yum安装脏都干掉)
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-mysql --with-pdo-mysql --with-curl
cp php.ini-development /usr/local/lib/php.ini
(php --ini 查看php用哪个ini
php-config 查看php配置
)
例如编译安装apche,报configure: error: pcre-config for libpcre not found
这样安装依赖:
下载源码
1. Download PCRE from PCRE.org
确定安装路径
2. Compile it with a prefix and install it:
./configure --prefix=/usr/local/pcre
make
make install
带上所需要依赖的安装路径
3. Go back to where your Apache installation is and compile Apache with PCRE:
--with-pcre=/usr/local/pcre
安装依赖时,小组件的版本也要注意,比如安装httpd2.4时,下了最新的apr-util1.6不行,需要apr-util-1.5.4