首页 文章 精选 留言 我的

精选列表

搜索[linux],共10000篇文章
优秀的个人博客,低调大师

全面剖析linux【bind】服务お实例篇(上)

唉,唧唧歪歪了半天了。现在开始实操下DNS了,下面是DNS的安装和配置 分4页: 一、bind简单配置正反向区域解析 二、bind主辅服务器配置 三、bind子域和区域委派 四、bind配置虚拟子域 2.1:BIND简介 BIND全称为(Berkeley Internet Name Domain<伯克利因特网名称域系统>)BIND主要有3个版本:BIND4 BIND8 BIND9。 BIND9 融合了许多提高效率,稳定性和安全性的技术,包括支持IPV6,公开密钥加密,多处理器支持,线程安全操作,增量区传送等等! 2.2:DNS所需软件包 bind-9.8.2-0.10.rc1.el6.i686.rpm bind-utils-9.8.2-0.10.rc1.el6.i686.rpm 这里我就直接用 yum 安装了 centos6.3总有点与众不同的,你用用就会知道了。这里不做解释! 3:DNS常规配置 一个比较简单的DNS服务器设置流程主要分为一下3步! 1:建立主配置文件,named.conf,该文件的最主要目的是设置DNS服务器能够管理哪些区域(zone)以及这些区域所对应的区域文件名和存放路径。 2:建立区域文件,按照named.conf文件中指定的路径建立区域文件,该文件主要记录该区域内的资源记录,例如,www.itchenyi.com对应的IP地址为182.237.3.101 3:重新加载配置文件,或者重启服务启动named使配置生效。 1:客户端需要获得www.chenyi.com这台主机所对应的IP地址,将查询请求发送给DNS服务器。 2:服务器接收到请求后,查询主配置文件,named.conf,检查是否能管理www.chenyi.com区域,而 named.conf 中记录着能够解析www.chenyi.com区域,并提供www.chenyi.com区域文件所在路径及文件名, 3:服务器则根据named.conf文件中的路径和文件名找到www.chenyi.com区域所对应的配置文件,并从中找到www.chenyi.com主机所对应的IP地址 4:将查询结果反馈给客户端,完成整个查询过程。 3.1:主配置文件,named.conf named.conf是BIND的核心配置文件,它包含了BIND的基本配置,但其并不包括区域数据,named.conf文件定义了DNS服务器的工作目录所在位置,所有的区域数据文件都存放在该目录中,该文件还定义了DNS服务器能够管理哪些区域,如果DNS服务器可以管理某个区域,它将完成区域内的域名解析工作 如果没有安装caching-nameserver 包,我们需要手动建立named.conf文件,为了便于管理,通常放置于/etc/ 目录下 当手动建立好named.conf文件后,此问件是空白的,和其他的配置文件差不多,named.conf配置文件分为整体和局部两个部分! 区域名为服务器管理区域的名称,如果添加了一个区域,并且该区域存在相应的资源记录,那么DNS服务器可以解析该区域的DNS信息 type 字段指定区域的类型,对于区域的管理至关重要,一共分为六种: Master:主DNS服务器:拥有区域数据文件,并对此区域提供管理数据 Slave:辅助DNS服务器:拥有主DNS服务器的区域数据文件的副本,辅助DNS服务器会从主DNS服务器同步所有区域数据, Stub:stub区域和slave类似:但其只复制主DNS服务器上的NS记录而不像辅助DNS服务器会复制所有区域数据 Forward:一个forward zone 是每个域的配置转发的主要部分,一个zone语句中的type forward可以包括一个forward和/或forwarders子句,它会在区域中给定的域中查询 ,如果没有forwarders语句或者forwarders是空表,那么这个域就不会有转发,消除了 options语句中有关转发的配置。 Hint:根域名服务器的初始化组指定使用线索区域hint zone 当服务器启动时,它使用根线索来查找根域名服务器,并找到最近的根域名服务器列表,如果没有指定的class IN线索区域,服务器使用编译时默认的根服务器线索,不是IN的类别没有内置的默认线索服务器。 Delegation-only : 用于强制区域的delegation.ly状态。 3.2配置正向解析区域 授权DNS服务器管理www.chenyi.com区域,并把该区域的区域文件命名为www.chenyi.com 1:建立主配置文件named.conf vim /etc/named.conf directory 路径名:用于定义服务器的工作目录,该目录存放区域数据文件,配置文件中所有相对路径的路径名都基于此目录。如果没有指定,默认的是BIND启动的目录! 2:建立www.chenyi.com区域文件 vim /var/named/chenyi.com和 localhost.zone 其实是一样的 3:配置反向解析区域 vim /etc/named.conf 配置反向区域文件 vim /var/named/192.168.1.zone 配置 localhost.zone 以上这是之前主配置文件中的个区域数据文件 然后 将权限更改一下 测试测试: service named restart host测试一下 ①辅助域名服务器 DNS 划分若干区域进行管理,每个区域由一个或多个域名服务器负责解析。如果采用单独的 DNS服务器而该服务器没有响应,那么该区域的域名解析就会失败。因此每个区域建议使用多个 DNS服务器,可以提供域名解析容错功能。对于存在多个域名服务器的区域,必须选择一台主域名服务器(master),保存并管理整个区域的信息,其他服务器称为辅助域名服务器(slave)。 管理区域时,使用辅助域名服务器的好处: (1)辅助 DNS 服务器提供区域冗余,能够在该区域的主服务器停止响应时为客户端解析该区域的 DNS 名称。 (2)创建辅助 DNS 服务器可以减少 DNS 网络通信量。采用分布式结构,在低速广域网链路中添加 DNS 服务器能有效地管理和减少网络通信量。 (3)辅助服务器可以用于减少区域的主服务器的负载。 ②区域传输 为了保证 DNS 数据相同,所有服务器必须进行数据同步,辅助域名服务器从主域名服务器获得区域副本,这个过程称为区域传输。区域传输存在两种方式:完全区域传输(AXFR)和增量区域传输(IXFR)。当新的 DNS 服务器添加到区域中,并且配置为新的辅助服务器时,它会执行完全区域传输(AXFR),从主服务器获取一份完整的资源记录副本。主服务器上区域文件再次变动后,辅助服务器则会执行增量区域传输(IXFR),完整资源记录的更新,始终保持 DNS 数据同步。 满足发生区域传输的条件时,辅助域名服务器向主服务器发送查询请求,更新其区域文件。 (1)区域传输初始阶段,辅助服务器向主 DNS 服务器发送完全区域传输(AXFR)请求。 (2)主服务器做出响应,并将此区域完全传输到辅助服务器。 该区域传输时会一并发送 SOA 资源记录。SOA 中“序列号”(serial)字段标示区域数据的版本,“刷新时间”(refresh)指出辅助服务器下一次发送查询请求的时间间隔。 (3)刷新间隔到期时,辅助服务器使用 SOA 查询来请求从主服务器续订此区域。 (4)主域名服务器应答其 SOA 记录的查询。 该响应包括主服务器中该区域的当前序列号版本。 (5)辅助服务器检查响应中的 SOA 记录的序列号,并确定续订该区域的方法,如果辅助服务器确认区域文件已经更改,则它会把 IXFR 查询发送到主服务器。 若 SOA 响应中的序列号等于其当前的本地序列号,那么两个服务器区域数据都相同,并且不需要区域传输。然后,辅助服务器根据主服务器 SOA 响应中的该字段值重新设置其刷新时间,续订该区域。如果 SOA 响应中的序列号值比其当前本地序列号要高,则可以确定此区域己更新并需要传输。 (6)主服务器通过区域的增量传输或完全传输做出响应。 如果主服务器可以保存修改的资源记录的历史记录,则它可以通过增量区域传输(IXFR)做出应答。如果主服务器不支持增量传输或没有区域变化的历史记录,则它可以通过完全区域传输(AXFR)做出应答。 配置辅助域名服务器 (1)配置主域名服务器 修改主配置文件 named.conf添加 chenyi.com 区域 创建配置正向解析区域文件vi /var/named/chenyi.com.zone 创建配置反向解析区域文件vi /var/named/1.168.192.zone (2)配置辅助域名服务器 修改主配置文件 named.conf,添加 chenyi 区域 (3)数据同步测试 重启辅助服务器 named服务,使其与主域名服务器数据同步,然后我们在主域名服务器上执行tail命令查看系统日志,辅助域名服务器通过完整无缺区域复制(AXFR)获取 michael.com区域数据。如果无法复制,请检测犀利机制(iptables、selinux) 子域与区域委派 域名空间由多个域构成,DNS提供了将域名空间划分为一个或多个区域的方法,这样使得管理更加方便。而对于域来说,随着域的规模和功能不断扩展,为了保证 DNS管理维护以及查询速度,可以为一个域添加附加域,上级域为父域,下级域为子域。父域为itchenyi.com,子域为bbs.itchenyi.com。 子域应用环境 当要为一个域附加子域时,请检查是否属于以下三种情况: (1)域中增加了新的分支或站点,需要添加子域扩展域名空间。 (2)域中规模不断扩大,记录条目不断增多,该域的 DNS数据库变得过于庞大,用户检索 DNS信息时间增加。 (3)需要将 DNS域名空间的部分管理工作分散到其他部门或地理位置。 管理子域 如果根据需要,决定添加子域,可以有两种方法进行子域的管理。 (1)区域委派 父域建立子域并将子域的解析工作委派到额外的域名服务器,并在父域的权威 DNS 服务器中登记相应的委派记录,建立这个操作的过程称为区域委派。任何情况下,创建子域都可以进行区域委派。 (2)虚拟子域 建立子域时,子域管理工作并不委派给其他服务器,而是与父域信息一起,存放在相同的域名服务器的区域文件中。如果只是为域添加分支或子站,不考虑到分散管理,选择虚拟子域的方式,可以降低硬件成本。 注意: 执行区域委派时,仅仅创建子域是无法使子域信息得到正常的解析。在父域的权威域名服务器的区域文件中,务必添加子域域名服务器的记录,建立子域与父域的关联,否则,子域域名解析无法完成。 配置区域委派 案例:公司提供虚拟主机服务,所有主机后缀域名为 itchenyi.com。随着虚拟主机注册量大幅增加,DNS 查询速度明显变慢,并且域名的管理维护工作非常困难。 分析:对于 DNS 的一系列问题,查询速度过慢,管理维护工作繁重,均是域名服务器中记录条目过多造成的。管理员可以为itchenyi.com 新建子域 a.itchenyi.com 并配置区域委派,将子域的维护工作交付其他的 DNS 服务器,新的虚拟主机注册域名为 a.itchenyi.com,减少 itchenyi.com 域名服务器负荷,提高查询速度。 (1)父域设置区域委派 <1>设置父域名服务器 named.conf 文件 编辑/etc/named.conf 并添加itchenyi.com 区域记录 <2>添加 .com 区域文件 父域的区域文件中,务必要添加子域的委派记录及管理子域的权威服务器的 IP 地址。 vi /var/named/itchenyi.com.zone 第九行:指定委派区域,a. itchenyi.com 管理工作由域名服务器 ns1.a. itchenyi.com 负责。 第11行:添加 ns1.a. itchenyi.com 的 A 记录信息,定位子域 a.itchenyi.com 的权威服务器。 <3>添加 michael.com 反向区域文件 vi /var/named/1.168.192.in-addr.arpa.zone (2)子域设置 <1>编辑/etc/named.conf 并添加 a.itchenyi.com 区域记录 <2>子域域名服务器中,添加 a.mich ael.com 域的正向解析区域文件 vi /var/named/a.itchenyi.com.zone <3>子域域名服务器中,添加 a.mich ael.com 域的反向解析区域文件 vi /var/named/1.168.192.in-addr.arpa.zone (2)测试 配置虚拟子域 如果域中需要增加新的分支或部门,而该域区域文件中资源记录数较少,为了节约成本,在不添加额外服务器的情况下,可以配置虚拟子域,将子域信息添加到父域区域文件。 修改主配置文件 named.conf 编辑父域正向区域文件 itchenyi.com.zone 编辑父域反向区域文件 1.168.192.in-addr.arpa.zone 编辑子域正向区域文件 bbs.itchenyi.com.zone 编辑子域反向区域文件 bbs.1.168.192.in-addr.arpa .zone 重启服务 使配置生效 客户端测试: 客户端设置 DNS 为父域地址 客户端设置 DNS 为子域地址 本文转自 lgpqdwjh 51CTO博客,原文链接:http://blog.51cto.com/itchenyi/1054317,如需转载请自行联系原作者

优秀的个人博客,低调大师

Linux基础之bash脚本进阶篇-数组

数组 什么是数组? 计算机中的数组指的是具有相同类型的若干变量按照一定的顺序组织起来的一种数据类型。 通俗点来说数组就是变量的一种,按现在的术语来说就是变量圈子中的一个,只不过这个变量圈子都是相同类型的变量并有一定的组织顺序。 数组的格式 array[key]=value array:表示数组变量的名称 key:表示数组元素的索引又称下标 value:表示key对应的数组元素的值 大体了解了什么是数组,下面就来了解下如何定义数组或如何创建数组 定义数组 定义数组主要有如下几种类型 1、通过指定元素来定义数组 1 2 3 4 5 6 7 #!/bin/bash #通过指定元素来定义数组 #指定数组元素值 array[0]=8 array[2]=two #输出数组元素 echo "${array[@]}" 运行脚本 1 2 [root@docker test ] #sh20160910-1 8two 2、通过declare语句来定义数组 1 2 3 4 5 6 7 8 9 #!/bin/bash #通过declare语句来定义数组 #定义数组-a选项表示后面定义的是一个名为array的数组。 declare -aarray #为元素赋值 array[0]=1 array[1]=2 #输出元素值 echo "${array[@]}" 运行脚本 1 2 [root@docker test ] #sh20160910-2 12 通过上面两个例子,其实可以发现在shell中这样的声明不是非常必要的,因为在shell中,所有的变量不必显示定义就可以用作数组,在某种意义上所有变量都是数组:赋值给没有下标的变量与赋值给下标内为0的元素效果是相同的。 示例: 1 2 3 4 #!/bin/bash tom=1 echo "${tom}" echo "${tom[0]}" 运行脚本 1 2 3 [root@docker test ] #sh20160910-3 1 1 由结果可知赋值给没有下标的变量与赋值给下标内为0的元素效果是相同的。 3、通过元素列表定义数组 1 2 3 4 5 6 7 8 #!/bin/bash #通过元素列表定义数组 #定义数组 array=(123456) #输出第4个数组元素的值 echo "Thefourthelementis${array[3]}" #输出所有元素的值 echo "Theelementsofthisarrayare${array[@]}" 运行脚本 1 2 3 [root@docker test ] #sh20160910-4 Thefourthelementis4 Theelementsofthisarrayare123456 数组的访问或查看 数组访问有若干途径,下面列举常用两种: 1、通过索引值来查看其对应的元素值 1 2 3 4 5 #!/bin/bash #定义数组 array=(123) #查看下标为1的元素 echo "thesecondelementis${array[1]}" 运行脚本 1 2 [root@docker test ] #sh20160910-5 thesecondelementis2 2、通过循环列表遍历数组 我们如果要用for循环的c表达,那么有一个问题需要解决,就是取值范围,而数组中有多少个元素只有定义的人才知道,如果有一个现成的数组,我们在不知道其有多少个元素的情况下如何通过for循环遍历显示? 为此我们需要先知道该数组有多少个元素,在数组里面可以通过${#array[@]}表示 1 2 3 4 5 6 7 8 9 10 #!/bin/bash #通过循环列表定义数组 #定义数组 array=(onetwothreefourfive678910) #获取数组长度 length= "${#array[@]}" #通过循环遍历数组 for ((i=0;i<$length;i++)); do echo "${array[$i]}" done 运行脚本 1 [root@docker test ] #sh20160910-6 1 2 3 4 5 6 7 8 9 10 one two three four five 6 7 8 9 10 关联数组 “关联数组”是一种具有特殊索引方式的数组。不仅可以通过整数来索引它,还可以使用字符串或者其他类型的值(除了NULL)来索引它 关联数组必须事先声明,否则导致创建关联数组失败 declare -A array声明关联数组 array=([a]=tom [b]=john [c]=3) 如果我们定义下标内是人名其对应的元素为成绩,那么输入指定的人名就可以知道其对应的成绩 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #!/bin/bash #定义关联数组 declare -Agrades #为数组下标指定对应的分数 grades=([tom]=90[lilei]=88[rose]=92[Lucy]=80) #给一个名字 read -p "Giveaname:" name_G #判断是否给了内容,若没有则在提示后退出 [-z$name_G]&& echo "Nonepleaseselect[tom|lilei|rose|Lucy]&&exit1" #根据输入的名字输出对应的分数 case $name_G in tom) echo "tom'sgradesis${grades[tom]}" ;; lilei) echo "lilei'sgradesis${grades[lilei]}" ;; rose) echo "rose'sgradesis${grades[rose]}" ;; Lucy) echo "Lucy'sgradesis${grades[Lucy]}" ;; *) echo "pleaseselect[tom|lilei|rose|Lucy]" esac 运行脚本 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 [root@docker test ] #sh20160910-7 Giveaname:tom Tom'sgradesis90 [root@docker test ] #vim20160910-7 [root@docker test ] #sh20160910-7 Giveaname:rose rose'sgradesis92 [root@docker test ] #sh20160910-7 Giveaname:lilei lilei'sgradesis88 [root@docker test ] #sh20160910-7 Giveaname:Lucy Lucy'sgradesis80 [root@docker test ] #sh20160910-7 Giveaname:other please select [tom|lilei|rose|Lucy] 数组的增删合 增加数组个数 1 2 3 4 5 6 7 8 9 10 11 12 13 #!/bin/bash #定义数组 array=(12) #显示数组所有元素 echo "${array[@]}" #显示数组元素个数 echo "${#array[@]}" #追加数组元素 array[2]=3 array[3]=4 #显示追加后的数组信息 echo "${array[@]}" echo "${#array[@]}" 运行脚本 1 2 3 4 5 [root@docker test ] #sh20160910-8 12 2 1234 4 可以从数组的任意未使用的下标数开始。可以非连续增加数组 删除数组 1、删除数组指定某个元素 命令:unset array[n] 1 2 3 4 5 6 7 8 9 10 11 #!/bin/bash #定义数组 array=(123) #显示数组所有元素 echo "${array[@]}" #显示下标为0的数组元素 echo "${array[0]}" #删除下标为0的数组元素 unset array[0] echo "${array[@]}" echo "${array[0]}" 2、删除整个数组 命令:unset array 1 2 3 4 5 6 7 #!/bin/bash #定义数组 array=(123) echo "${array[@]}" #删除整个数组 unset array echo "${array[@]}" 运行脚本 1 2 [root@docker test ] #sh20160910-9 123 数组之间的合并 数组可以将多个不同的数组组合成一个新的数组。 数组连接语法如下: ("${array1[@]}" "${array2[@]}" ... "${arrayN[@]}") 数组之间用空格隔开 示例 1 2 3 4 5 6 7 #定义两个数组 array1=(123) array2=(456) #连接数组 array1_2=( "${array1[@]}" "${array2[@]}" ) #显示合并后数组的所有元素 echo "${array1_2[@]}" 运行脚本 1 2 [root@docker test ] #sh20160910-10 123456 数组中的切片 所谓切片,是指截取数组的部分元素或某个元素的部分内容 基本语法为:${array[@|*|n]:start:length} 示例1:给定一个长度为8的数组,截取第3个元素开始的4个元素。 1 2 3 4 #!/bin/bash array=(12345678) var=${array[@]:3:4} echo "$var" 运行脚本 1 2 [root@docker test ] #sh20160910-11 4567 示例2:给定一个长度为3的数组,截取第2个元素,从该元素的第1个字符开始,截取其中3个字符 1 2 3 4 #!/bin/bash array=(appleorangebanana) var=${array[2]:1:3} echo "$var" 运行脚本 1 2 [root@docker test ] #sh20160910-12 ana 数组中的替换 数组的替换是指将某个数组元素的部分内容用其他字符串来代替,但不影响原来的数组的值。 基本语法为:${array[@|*]/pattern/replacement} 1 2 3 4 #!/bin/bash replace=(abcde) echo "thereplacedarrayis${replaced[@]/c/3}" echo "theoriginalarrayis${replace[@]}" 运行脚本 1 2 3 [root@docker test ] #sh20160910-13 thereplacedarrayisab3de theoriginalarrayisabcde 小结 本文主要讲述数组的概念,数组的定义,数组的查看,关联数组的使用,数组的增删合,数组的切片,数组的替换这7部分内容。 感触:我在总结完数组后,隐隐感觉到数组与数据库之间有一定的关联性。 查看历史可以知道数组诞生于数据库之前,因此我感觉数据库这个思想一定程度上是借鉴了数组的一些理念。当然数据库比数组要强大很多,在数据查询搜索专业许多。可还是觉得这两者之间有种本质上的一致:基于数据之间的对应。 本文转自 紫色的茶碗 51CTO博客,原文链接:http://blog.51cto.com/chawan/1851443,如需转载请自行联系原作者

优秀的个人博客,低调大师

Linux文本处理---文件属性查找

文件查找 所谓的文件查找时根据文件的各种属性在特定的路径下找到对应文件的过程。 一、文件查找的方式 实时查找:遍历所有文件进行条件匹配。查找精确,但是速度慢。 这种查找通过find命令来实现。 非实时查找:根据索引进行查找。查找速度快,但是查找不精确。 这种查找locate命令,它只依赖于索引查找的,索引的创建时在系统空闲的时候由系统自动进行的。手动更新数据库的命令式upadtedb。 二、实时查找 通过find命令来实现。find是根据查找条件,在查找路径中查找到对应的文件,根据处理动作做出相应的操作。 Usage: find [options]... [查找路径] [查找条件] [处理动作] 查找路径:默认是当前路径 查找条件:默认是指定路径下的所有文件 处理动作:默认的处理动作时显示到屏幕上 查找条件类型: 查找条件类型 具体意义 示例 -name -iname 支持通配符 -name 文件名 -iname 文件名(不区分大小写) 查找当前路径下s开头的文件名 find ./ -name "s*" 查找当前路径下s|S开头的文件名 find ./ -iname "s*" -uid -user -nouser -gid -group -nogroup -uid 根据文件属主的UID查找 -user根据文件属主名查找 -nouser 没有属主的文件 查找当前路径下文件属主uid为500文件 find ./ -uid 500 查找当前路径下文件没有属主的文件 find ./ -nouser -type -type 根据文件类型查找 文件类型:f,d,l,b,c,s,p 查找当前路径下是目录的文件 find ./ -type d -size -size 根据文件大小查找 -size 12M 精确查找(11-12M之间都满足) -size +12M 大于12M的文件 -size -12M 小于12M的文件 查找当前路径下文件名s开头的并且大于100G的文件 find ./ -size +100G -a -name 's*' -atime -mtime -ctime -amin -mmin -cmin -atime 根据访问时间查找单位是天,-amin的单位是分 -mtime -mmin 文件内容修改时间 -ctime -cmin 文件元数据信息修改时间 -atime 2 修改时间是2天之前(2-3天) -atime -2 修改时间是2天之内 -atime +2 修改时间是3天之外(>3天) 查找/etc/目录下最近一周内其内容修改过的 find /etc/ -mtime -7 查找/etc/目录下最近一周内其内容没有修改过的(也就是7天之前修改过的) find /etc/ -mtime +7 -perm -perm 根据文件权限查找 -prem 644 文件权限就是644的 -prem +222 只要有任意一类用户可写权限即可(222对应的权限是-w--w--w-,查找文件的权限中,只要有一个对应位有w权限即可) -prem -222每一用户至少有可写权限,属主,属组,其他每个都至少有可写权限 查找/etc/目录所有用户都没有写权限的文件 find /etc/ -not -perm +222 查找/etc/目录所有用户都可写权限的文件 find /etc/ -perm -222 注意:在使用查找条件是可使用组合条件查询:-a(&&),-o(||),-not(!)。 处理动作: 处理动作 具体意义 示例 -print 默认处理动作,打印 find /etc/ -mtime -7 -print -exec -exec COMMAND {} \; 一次性查找符合条件的所有文件,并一同传递给CMOMANDD作为参数 find /etc/ -mtime -7 -exec rm -f {} \; -ok -ok COMMAND {} \; 同exec一样,只是在执行命令的时候会有所提示 find /etc/ -name 'i..ue' -ok rm -f {} \; 在使用exex后ok参数的时候,有些命令接受的参数有长度有限,运行过程中出现“参数列表过长”的类似信息。此时需要用另一个命令xargs。通常的用法是 find [option] [查找路径][查找条件] | xargs COMMAND。 执行过程是:find命令把匹配到的文件传递给xargs命令,而xargs命令每次只获取一部分文件而不是全部,不像-exec选项那样。这样它可以先处理最先获取的一部分文件,然后是下一批,并如此继续下去。 在有些系统中,使用-exec选项会为处理每一个匹配到的文件而发起一个相应的进程,并非将匹配到的文件全部作为参数一次执行;这样在有些情况下就会出现进程过多,系统性能下降的问题,因而效率不高;而使用xargs命令则只有一个进程。另外,在使用xargs命令时,究竟是一次获取所有的参数,还是分批取得参数,以及每一次获取参数的数目都会根据该命令的选项及系统内核中相应的可调参数来确定。 三、非实时查找 通过locate命令来查找,是一种模糊匹配。 Usage: locate [option]... [PATTERN](通配符) 常用参数: -d 指定数据库(索引)的路径,默认是/var/lib/mlocate/mlocate.db -b '\NAME'精确匹配 1 2 3 4 5 6 7 [root@server~] #locate-b'\root' /root /etc/selinux/targeted/contexts/users/root /usr/src/kernels/2 .6.32-358.el6.x86_64 /include/config/usb/ehci/root /var/spool/cron/root /var/spool/mail/root ###locate'root'如果是这样的话,查询的是*root*这种模式 我们一般都是使用精确查找,所以这里只对locate做大致了解。 四、练习 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 #1、查找/var/目录属主为centos且属组为mail的所有文件; find /var -usercentos-a-groupmail #2、查找/usr目录下不属于root、bin或hadoop的所用文件; find /usr -not-userroot-a-not-userbin-a-not-userhadoop #这里使用小括号时需要转义,并且小括号前后都有空格 find /usr -not\(-userroot-o-userbin-o-userhadoop\) #3、查找/etc/目录下最近一周内其内容修改过的,且不属于root且不属于hadoop的文件; find /etc -mtime-7-a-not\(-userroot-o-userhadoop\) #4、查找当前系统上没有属主或属组,且最近1个月内曾被访问过的文件; find /\(-nouser-o-nogroup\)-a-atime-30 #5、查找/etc/目录下大于1M且类型为普通文件的所有文件; find /etc -size+1M- type f #6、查找/etc/目录所有用户都没有写权限的文件; find /etc/ -not-perm+222 #7、查找/etc/目录下至少有一类用户没有写权限; find /etc/ -not-perm-222 #8、查找/etc/init.d/目录下,所有用户都有执行权限且其它用户有写权限的文件; find /etc/init .d/-perm-113 本文转自 羊木狼 51CTO博客,原文链接:http://blog.51cto.com/guoting/1437432,如需转载请自行联系原作者

优秀的个人博客,低调大师

Linux网站架构系列之Mysql----部署篇

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司。MySQL所使用的SQL语言是用于访问数据库的最常用标准化语言。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择MySQL作为网站数据库。由于其社区版的性能卓越,搭配PHP和Apache可组成良好的开发环境。本篇将为大家讲解mysql的简单部署。 mysql的分为四个版本: 1 2 3 4 Alpha版:一般只在软件开发公司内部运行,不对外公开。 Beta版:完成功能的开发和所有的测试工作之后的产品,不会存在较大的漏洞和BUG,并且邀请和提供给用户体验与测试,以便更全面地测试软件的不足之处或存在的问题。 RC版:属于生产环境发布之前的一个小版本或称候选版本,是测试Beta版本二收集到的BUG或不足之处,根据手机到的信息而进行修复和完善之后的产品。 GA版本:软件产品正式发布的版本,也成生产版本的产品。 并且mysql为了更好发展将版本路线分为了三条。 1 2 3 第一条产品线:从5.0版本升级到5.1的系列版本,继续完善与改进其用户体验和性能,同时增加新功能。 第二条产品线:为了更好的整合MySQLAB公司,社区和新功能。版本编号从5.4开始,目前发展到5.6。 第三条产品线:为了更好推广MySQLCluster版本,从6.0版本开始,目前发展到7.3版本。 由于mysql不同产品线之间的编译安装方法还有差别,因此本篇将分别为大家讲解mysql的5.1.7版本和5.6.13版本的简单部署。 5.1.7版本 1 2 3 4 5 6 7 8 环境 CentOS6.4x86_64位采用最小化安装,系统经过了基本优化 selinux为关闭状态,iptables为无限制模式 ip:192.168.1.113 /24 mysql版本:mysql-5.1.70 源码包存放位置: /server/tools 源码包编译安装位置: /etc/local/ 软件名称 数据库存放位置: /mydata 一、准备工作 1、开发环境部署 1 2 [root@c64-web~] #yumgroupinstall"Developmenttools""ServerPlatformDevelopment"-y#安装这两个开发环境的软件包组 [root@c64-web~] #yuminstallpcre*-y#安装pcre兼容的正则表达式 2、创建用户及目录 1 2 3 [root@c64-web~] #useradd-s/sbin/nologin-Mmysql#创建mysql用户,并加入mysql组,不创建家目录,关闭登陆 [root@c64-web~] #mkdir/mydata#创建数据库存放目录 [root@c64-web~] #chown-Rmysql.mysql/mydata 3、下载源码包 1 2 [root@c64-web~] #cd/server/tools [root@c64-webtools] #wgethttp://mysql.ntu.edu.tw/Downloads/MySQL-5.1/mysql-5.1.70.tar.gz 二、编译安装 准备工作已经做好了,现在我们就开始编译安装mysql。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 [root@c64-webtools] #tarzxfmysql-5.1.70.tar.gz [root@c64-webtools] #cdmysql-5.1.70 [root@c64-webmysql-5.1.70] #./configure\ --prefix= /usr/local/mysql \ #设定mysql安装路径,默认为/usr/local --with-unix-socket-path= /usr/local/mysql/tmp/mysql .sock\ #指定Mysqlsocket文件存放目录 --localstatedir= /mydata \ #设定mysql的数据文件存放位置 -- enable -assembler\ #允许使用汇编模式(优化性能) -- enable -thread-safe-client\ #以线程方式编译客户端 --with-mysqld-user=mysql\ #指定MySQL运行的系统用户 --with-big-tables\ #启用大表支持 --without-debug\ #使用非debug模式 --with-pthread\ #强制使用pthread线程序库编译 --with-extra-charsets=complex\ #复杂字符集支持 --with-readline\ #使用系统readline代替捆绑副本。 --with-ssl\ #启用ssl加密 --with-embedded-server\ #构建嵌入式MySQL库(libmysqld.a) -- enable - local -infile\ #让mysql支持从本地加载数据库(默认关闭) --with-plugins=partition #mysql分区功能支持 --with-plugins=innobase\ #innobas存储引擎支持 --with-mysqld-ldflags=-all-static\ #服务器使用静态库(优化性能) --with-client-ldflags=-all-static #客户端使用静态库(优化性能) [root@c64-webmysql-5.1.70] #make&&makeinstall 执行了上面的操作之后,mysql-5.1.7版本就编译安装成功了。 下面为快速复制,编译配置文本: 1 [root@c64-webmysql-5.1.70] #./configure--prefix=/usr/local/mysql-5.1.70--with-unix-socket-path=/usr/local/mysql/tmp/mysql.sock--localstatedir=/mydata--enable-assembler--enable-thread-safe-client--with-mysqld-user=mysql--with-big-tables--without-debug--with-pthread--with-extra-charsets=complex--with-readline--with-ssl--with-embedded-server--enable-local-infile--with-plugins=partition--with-plugins=innobase--with-mysqld-ldflags=-all-static--with-client-ldflags=-all-static 三、启动配置 1、创建目录软链接 mysql安装完成之后,我们要先为编译安装好的目录添加软链接。此操作在生产环境中为重要调优参数,添加这条软链接的目的有两点:1、方便人类使用。2、便于以后升级版本。 1 2 [root@c64-webmysql-5.1.70] #cd/root [root@c64-web~] #ln-s/usr/local/mysql-5.1.70/usr/local/mysql 2、创建其它相应目录及权限设置 1 2 [root@c64-web~] #mkdir/mydata#建立mysql数据文件目录 [root@c64-web~] #chown-Rmysql/mydata#授权mysql用户访问mysql数据库目录 3、获取Mysql主配置文件并修改 由于mysql的主配置文件,编译安装之后默认是没有的。因此我们需要在mysql的编译包中,选择预支的*.cnf结尾的配置文件将其复制到我们的/etc/目录下。 1 2 3 4 5 6 7 8 9 [root@c64-web~] #ll/server/tools/mysql-5.1.70/support-files/*.cnf -rw-r--r--1rootroot471411月602:25 /server/tools/mysql-5 .1.70 /support-files/my-huge .cnf -rw-r--r--1rootroot1976311月602:25 /server/tools/mysql-5 .1.70 /support-files/my-innodb-heavy-4G .cnf -rw-r--r--1rootroot468811月602:25 /server/tools/mysql-5 .1.70 /support-files/my-large .cnf -rw-r--r--1rootroot469911月602:25 /server/tools/mysql-5 .1.70 /support-files/my-medium .cnf -rw-r--r--1rootroot246711月602:25 /server/tools/mysql-5 .1.70 /support-files/my-small .cnf #中小型公司用这个即可 [root@c64-webmysql-5.1.70] #/bin/cp/server/tools/mysql-5.1.70/support-files/my-small.cnf/etc/my.cnf 修改mysql的主配置文件 /etc/my .cnf,添加如下1行 datadir= /mydata #我们自定义的数据库存放目录 4、让系统识别源码包安装的软件 a)将mysql的库文件路径加入系统的库文件搜索路径中 方法一:直接做软链接 1 [root@c64-web~] #ln-s/usr/local/mysql/lib/mysql/usr/lib/mysql 方法二:利用ldconfig导入系统库(推荐) 1 2 [root@c64-web~] #echo"/usr/local/mysql/lib">>/etc/ld.so.conf.d/mysql.conf [root@c64-web~] #ldconfig b)输出mysql的头文件到系统头文件 1 [root@c64-web~] #ln-s/usr/local/mysql/include/mysql/usr/include/mysql c)配置mysql命令全局使用路径 1 2 [root@c64-web~] #echo"PATH=/usr/local/mysql/bin:$PATH">>/etc/profile [root@c64-web~] #source/etc/profile 5、以mysql用户的身份初始化数据库并启动 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 [root@c64-web~] #/usr/local/mysql/bin/mysql_install_db--basedir=/usr/local/mysql--datadir=/mydata--user=mysql#初始化mysql数据库文件 WARNING:Thehost 'c64-web' couldnotbelookedupwithresolveip. Thisprobablymeansthatyourlibclibrariesarenot100%compatible withthisbinaryMySQLversion.TheMySQLdaemon,mysqld,shouldwork normallywiththeexceptionthathostnameresolvingwillnotwork. ThismeansthatyoushoulduseIPaddressesinsteadofhostnames whenspecifyingMySQLprivileges! #此警告我们可以通过在/etc/hosts文件中修改127.0.0.1后面的localhost为当前c64-web来消除。 InstallingMySQLsystemtables... 13110818:07:26[Warning] '--skip-locking' isdeprecatedandwillberemoved in afuturerelease.Pleaseuse '--skip-external-locking' instead. #这里的警告无需理会 OK Fillinghelptables... 13110818:07:27[Warning] '--skip-locking' isdeprecatedandwillberemoved in afuturerelease.Pleaseuse '--skip-external-locking' instead. #这里的警告无需理会 OK Tostartmysqldatboot time youhavetocopy support-files /mysql .servertotherightplace for yoursystem #这里是说,你可以创建快速启动脚本,我们下面会提到 PLEASEREMEMBERTOSETAPASSWORDFORTHEMySQLrootUSER! To do so,starttheserver, then issuethefollowingcommands: /usr/local/mysql/bin/mysqladmin -urootpassword 'new-password' /usr/local/mysql/bin/mysqladmin -uroot-hlhhpassword 'new-password' #教你如何创建root用户进入mysql数据库的密码 Alternativelyyoucanrun: /usr/local/mysql/bin/mysql_secure_installation which willalsogiveyoutheoptionofremovingthe test databasesandanonymoususercreatedbydefault.Thisis stronglyrecommended for productionservers. Seethemanual for more instructions. YoucanstarttheMySQLdaemonwith: cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe & #上面的即为开启命令中的一种,后面的&为放入后台执行的意思 Youcan test theMySQLdaemonwithmysql- test -run.pl cd /usr/local/mysql/mysql-test ;perlmysql- test -run.pl #这里是给你说如何执行测试 Pleasereportanyproblemswiththe /usr/local/mysql/scripts/mysqlbug script! #以上为初始化创建mysql数据库文件时产生的信息。 [root@lhhmydata] #cd/usr/local/mysql;/usr/local/mysql/bin/mysqld_safe& [1]7146 13110818:50:37mysqld_safeLoggingto '/mydata/lhh.err' . 13110818:50:37mysqld_safeStartingmysqlddaemonwithdatabasesfrom /mydata #此处需要敲击回车才能回到命令输入界面。 mysql数据库启动的另外一种方法 1 2 3 4 5 [root@c64-web~] #/bin/cp/server/tools/mysql-5.1.70/support-files/mysql.server/etc/init.d/mysqld#拷贝mysql启动脚本mysql命令路径 [root@c64-web~] #chmod700/etc/init.d/mysqld#使脚本可执行 [root@c64-web~] #/etc/init.d/mysqldstart#这是启动数据库方法之一 [root@c64-web~] #/etc/init.d/mysqldstop#关闭数据库的方法 [root@c64-web~] #killalllmysqld#关闭数据库的另外一种方法 6、检查mysql数据库是否启动: 1 2 [root@c64-web~] #netstat-lnt|grep3306 tcp000.0.0.0:33060.0.0.0:*LISTEN 可以看到,我们的mysql服务已经启动起来了。这里如果发现3306端口没起来,请tail -100 /usr/local/mysql/data/机器名.err 检查日志报错进行调试。 7、设置初始账户,并登陆后台 在上面,初始化创建mysql数据库的时候,已经给我们提到了如何给mysql数据库账号设置密码,下面我们就进行操作。 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 [root@c64-web~] #mysqladmin-urootpassword123456#设置密码 [root@c64-web~] #history-c#设置之后注意清除历史记录,防止密码泄露 [root@c64-web~] #mysql-uroot-p#连接数据库查看 Enterpassword: #这里输入刚才设置的密码 WelcometotheMySQLmonitor.Commandsendwith;or\g. YourMySQLconnection id is2 Serverversion:5.1.70Sourcedistribution Copyright(c)2000,2013,Oracleand /or itsaffiliates.Allrightsreserved. OracleisaregisteredtrademarkofOracleCorporationand /or its affiliates.Othernamesmaybetrademarksoftheirrespective owners. Type 'help;' or '\h' for help.Type '\c' to clear thecurrentinputstatement. mysql>showdatabases; #查看现有的数据库 +--------------------+ |Database| +--------------------+ |information_schema| |mysql| | test | +--------------------+ 3rows in set (0.00sec) mysql> select user(); #查看现有用户 +----------------+ |user()| +----------------+ |root@localhost| +----------------+ 1row in set (0.00sec) mysql>quit #退出 Bye 到此,我们mysql-5.1.17的部署就已经完成了,下面将是5.6.13的部署。 5.6.13版本 mysql的第二条产品线和第一条产品线的产品主要在数据存储引擎和编译安装的方法上有点区别,因此这里我就主要对编译安装的部分进行讲解,其它地方都是大同小异的。 mysql-5.6.13源码包下载地址:http://mysql.ntu.edu.tw/Downloads/MySQL-5.6/mysql-5.6.13.tar.gz 一、更改编译配置工具为cmake 注意下面mysql-5.6.x系列版本在编译配置时,放弃了用./configure,进而使用到了cmake,因此我们需要先安装cmake这个工具,下面才能执行编译配置。 二、编译参数更改 mysql-5.6.x系列版本综合性的编译参数详解: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 [root@c64-webmysql-5.6.13] #cmake -DCMAKE_INSTALL_PREFIX= /usr/local/mysql \ #指定mysql安装目录 -DMYSQL_UNIX_ADDR= /tmp/mysql .sock\ #Unixsocket文件路径,自定义此路径防报错 -DDEFAULT_CHARSET=gbk\ #默认字符 -DDEFAULT_COLLATION=gbk_chinese_ci\ #校验字符 -DEXTRA_CHARSETS=all\ #安装所有扩展字符集 -DWITH_MYISAM_STORAGE_ENGINE=1\ #安装myisam存储引擎 -DWITH_INNOBASE_STORAGE_ENGINE=1\ #安装innodb存储引擎 -DWITH_ARCHIVE_STORAGE_ENGINE=1\ #安装archive存储引擎 -DWITH_BLACKHOLE_STORAGE_ENGINE=1\ #安装blackhole存储引擎 -DWITH_MEMORY_STORAGE_ENGINE=1\ #安装memory存储引擎 -DWITH_FEDERATED_STORAGE_ENGINE=1 #安装frderated存储引擎 -DWITH_READLINE=1\ #快捷键功能 -DENABLED_LOCAL_INFILE=1\ #允许从本地导入数据 -DMYSQL_DATADIR= /usr/local/mysql/data \ #数据库存放目录 -DMYSQL_USER=mysql\ #数据库属主 -DMYSQL_TCP_PORT=3306\ #数据库端口 -DSYSCONFDIR= /etc \ #MySQL配辑文件 -DWITH_SSL= yes #数据库SSL 下面为快捷复制执行命令: 1 [root@c64-webmysql-5.6.13] #cmake-DCMAKE_INSTALL_PREFIX=/usr/local/mysql-DMYSQL_UNIX_ADDR=/tmp/mysql.sock-DDEFAULT_CHARSET=gbk-DDEFAULT_COLLATION=gbk_chinese_ci-DEXTRA_CHARSETS=all-DWITH_MYISAM_STORAGE_ENGINE=1-DWITH_INNOBASE_STORAGE_ENGINE=1-DWITH_ARCHIVE_STORAGE_ENGINE=1-DWITH_BLACKHOLE_STORAGE_ENGINE=1-DWITH_MEMORY_STORAGE_ENGINE=1-DWITH_FEDERATED_STORAGE_ENGINE=1-DWITH_READLINE=1-DENABLED_LOCAL_INFILE=1-DMYSQL_DATADIR=/mydata-DMYSQL_USER=mysql-DMYSQL_TCP_PORT=3306-DSYSCONFDIR=/etc-DWITH_SSL=yes 执行之后,还是用make&&make install 来执行编译安装。 三、主配置文件调整 在5.6.X系列的版本中,mysql的主配置文件发生了变化。可以看到,mysql-5.6.13版本中取消了原来的my-huge.cnf,my-large.cnf,my-small.cnf模版,同时取而代之是my.cnf 或者是my-default.cnf一个配置模板。 1 2 3 [root@c64-webmysql-5.6.13] #ll/server/tools/mysql-5.6.13/support-files/*.cnf -rw-r--r--.1rootroot1126Nov801:37 /server/tools/mysql-5 .6.13 /support-files/my-default .cnf [root@c64-webmysql-5.6.13] #/bin/cp/server/tools/mysql-5.6.13/support-files/my-default.cnf/etc/my.cnf 并且,模板文件里需要配置的地方很少。这是因为mysql-5.6.x系列将以前许多默认值设置不合理的参数都进行了调整,并且采用了一种out-of-box的思维,即有些值是固定的,有些值是启动时,根据其他参数或者服务器的配置来自动设置的,所以不需要初始指定很多值。 主要的区别就是这三点了,其它的操作和5.1.13基本一致,这里就不再重复写一遍了。希望大家本篇博文能对大家有帮助。 本文转自 aaao 51CTO博客,原文链接:http://blog.51cto.com/nolinux/1321079,如需转载请自行联系原作者

优秀的个人博客,低调大师

Linux网站架构系列之PHP----部署篇

PHP(Hypertext Preprocessor),中文译为超文本预处理器是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,它可以比CGI或者Perl更快速地执行动态网页。用PHP做出的动态页面与其他的编程语言相比,PHP是将程序嵌入到HTML文档中去执行,执行效率比完全生成HTML标记的CGI要高许多;PHP还可以执行编译后代码,编译可以达到加密和优化代码运行,使代码运行更快。并且其入门门槛较低,易于学习,因此得到了广泛的使用。当今,php主要适用于Web开发领域。它与mysql,apache,nginx形成独特的lamp和lnmp网站架构是极其典型架构类型,广受中小型互联网企业推崇。 本文将分别以php在lamp和lnmp两个环境下的部署为例,为大家讲解php在生产环境中的部署应用。 lamp中的php 1 2 3 4 5 6 7 环境 CentOS6.4x86_64位采用最小化安装,系统经过了基本优化 selinux为关闭状态,iptables为无限制模式 apache版本:apache-2.4.6mysql版本:mysql-5.1.70php版本:php-5.3.27 源码包存放位置: /server/tools 源码包编译安装位置: /etc/local/ 软件名称 数据库存放位置: /mydata 一、准备工作 1、检查apache和mysql安装情况 由于php作为一种编程语言,因此我们往往不会去裸装php。上文也提到,lamp和lnmp架构中的p指的就是php。因此,我们这里要在安装php之前,先检查一下apache和mysql服务是否开启。这样,我们在后面安装完PHP之后,我们就可以检查apache是否成功支持它,以及是否和mysql数据库连接正常了。 检查方法一共有三种: 第一种、检查路径 检查我们apache和mysql软件包的安装路径,根据我们的习惯,我们都是讲软件编译安装/usr/local目录下,然后以软件名称命名的,因此我们就ll跟上软件名,看是否有其目录存在即可。 第二种、检查端口 在部署PHP的是否,一般都是我们apache和mysql已经部署好了,并且服务也是开启状态的。因此我们可以通过查看其端口来判断是否安装。 注意:apache常用的端口为80,mysql的则为3306。这两个端口我们一定要记牢。 1 2 3 [root@c64-lamp~] #netstat-lnt|egrep"3306|80" tcp000.0.0.0:800.0.0.0:*LISTEN tcp000.0.0.0:33060.0.0.0:*LISTEN 第三种、查看版本 这一种方法是最实在的方法,我们可以查看apache和mysql的版本来确定是否安装了此服务。查看方法如下: 1 2 3 4 5 6 7 8 9 [root@c64-lamp~] #/usr/local/apache/bin/apachectl-v [root@c64-lamp~] #mysql-uroot-p-e"selectversion();" [root@c64-lamp~] #mysql-uroot-p-e"selectversion();" Enterpassword: +-----------+ |version()| +-----------+ |5.1.70| +-----------+ 2、环境检查 1、常用lib库安装 由于PHP的安装需要调用很多lib库,因此我们需要预先查看这些lib是否存在才行。缺少的话,要及时安装,不然下面的操作就会报错。 我们可以用rpm -qa后跟软件名的方式来查看软件是否安装。 1 [root@c64-lamp~] #rpm-qazliblibxmllibjpegfreetypelibpnggdcurllibiconvzlib-devellibxml2-devellibjpeg-develfreetype-devellibpng-develgd-develcurl-devel 检测完之后,我们可以用yun来安装缺少的包,这里为了方便,我就全给列出来了。 1 [root@c64-lamp~] #yuminstallzliblibxmllibjpegfreetypelibpnggdcurllibiconvzlib-devellibxml2-devellibjpeg-develfreetype-devellibpng-develgd-develcurl-devellibxslt-devel-y 2、字符库安装 安装libiconv库 1 2 3 4 5 6 7 [root@c64-lamp~] #cd/tools [root@c64-lamptools] #wgethttp://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz [root@c64-lamptools] #tarzxflibiconv-1.14.tar.gz [root@c64-lamptools] #cdlibiconv-1.14 [root@c64-lamplibiconv-1.14] #./configure--prefix=/usr/local/libiconv [root@c64-lamplibiconv-1.14] #make&&makeinstall [root@c64-lamplibiconv-1.14] #cd../ 3、libmcrypte库(加密相关库) 1 2 3 4 5 6 7 8 9 10 [root@c64-lamptools] #wgethttp://ncu.dl.sourceforge.net/project/mcrypt/Libmcrypt/2.5.8/libmcrypt-2.5.8.tar.gz [root@c64-lamptools] #tarzxflibmcrypt-2.5.8.tar.gz [root@c64-lamptools] #cdlibmcrypt-2.5.8 [root@c64-lamplibmcrypt-2.5.8] #./configure [root@c64-lamplibmcrypt-2.5.8] #make&&makeinstall [root@c64-lamplibmcrypt-2.5.8] #/sbin/ldconfig [root@c64-lamplibmcrypt-2.5.8] #cdlibltdl/ [root@c64-lamplibltdl] #./configure--enable-ltdl-install [root@c64-lamplibltdl] #make&&makeinstall [root@c64-lamplibltdl] #cd../../ 4、安装mhash加密扩展库 mhash是基于离散数学原理的不可逆向的php加密方式扩展库,其在默认情况下不开启。mhash的可以用于创建效验数值,消息摘要,消息认证码,以及无需原文的关键信息保存(密码)等。 Mhash为php提供了多种哈希算法,如MD5,SHA1,GOST等。你可以通过MHASH_hashname()来查看支持的算吗有哪些。 注意问题: 1、该扩展不能提供最新的哈希算法 2、该扩展结果原则上运算不可逆 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@c64-lamptools]#wgethttp: //sourceforge.net/projects/mhash/files/mhash/0.9.9.9/mhash-0.9.9.9.tar.gz/download [root@c64-lamptools]#tarzxfmhash- 0.9 . 9.9 .tar.gz [root@c64-lamptools]#cdmhash- 0.9 . 9.9 [root@c64-lamp- 0.9 . 9.9 ]#./configure [root@c64-lamp- 0.9 . 9.9 ]#make&&makeinstall [root@c64-lamp- 0.9 . 9.9 ]#cd../ [root@c64-lamp- 0.9 . 9.9 ]#这里注意,下面的命令,我直接复制了粘贴到这执行的,方便你们输入,你们搞时,注意看下没错,就全部复制执行。一条一条太费劲了。 rm-f/usr/lib64/libmcrypt.* rm-f/usr/lib64/libmhash* ln-s/usr/local/lib64/libmcrypt.la/usr/lib64/libmcrypt.la ln-s/usr/local/lib64/libmcrypt.so/usr/lib64/libmcrypt.so ln-s/usr/local/lib64/libmcrypt.so. 4 /usr/lib64/libmcrypt.so. 4 ln-s/usr/local/lib64/libmcrypt.so. 4.4 . 8 /usr/lib64/libmcrypt.so. 4.4 . 8 ln-s/usr/local/lib64/libmhash.a/usr/lib64/libmhash.a ln-s/usr/local/lib64/libmhash.la/usr/lib64/libmhash.la ln-s/usr/local/lib64/libmhash.so/usr/lib64/libmhash.so ln-s/usr/local/lib64/libmhash.so. 2 /usr/lib64/libmhash.so. 2 ln-s/usr/local/lib64/libmhash.so. 2.0 . 1 /usr/lib64/libmhash.so. 2.0 . 1 ln-s/usr/local/bin/libmcrypt-config/usr/bin/libmcrypt-config cp-frp/usr/lib64/libldap*/usr/lib/#这最后一个是由于下面编译时跟了ldap参数,因此这里就执行下这个防止后面安装报错,大家不要奇怪哈 [root@c64-lamp~]#cd../ 注意:这里如果我们用的是32位系统,那么我们就需要把lib64替换成lib。另外,其实64位用lib也是能用的,不过用lib64的更好一点。 4、安装mcrypt加密扩展库 PHP程序员在编写代码程序时,除了要保证代码的高性能之外,还有一点是非常重要的,那就是程序的代码的安全性保障。PHP除了自带的几种加密函数外,还有功能更全面的PHP加密库Mcrypt和Mhash。 其中,Mcrypt扩展库可以实现加密解密功能,就是既能将明文加密,也可以密文还原。 mcrypt是php里面重要的加密支持扩展库,该库在默认情况下不开启。 编辑本段支持的算法和加密模式 Mcrypt库支持20多种加密算法和8种加密模式,具体可以通过函数mcrypt_list_algorithms()和mcrypt_list_modes()来显示。 1 2 3 4 5 6 7 8 [root@c64-lamptools] #wgethttp://sourceforge.net/projects/mcrypt/files/MCrypt/2.6.8/mcrypt-2.6.8.tar.gz/download [root@c64-lamptools] #tarzxfmcrypt-2.6.8.tar.gz [root@c64-lamptools] #cdmcrypt-2.6.8 [root@c64-lampmcrypt-2.6.8] #/sbin/ldconfig [root@c64-lampmcrypt-2.6.8] #exportLD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH [root@c64-lampmcrypt-2.6.8] #./configure [root@c64-lampmcrypt-2.6.8] #make&&makeinstall [root@c64-lampmcrypt-2.6.8] #cd../ 5、PHP源码包下载 1 [root@c64-lamptools] #wgethttp://cn2.php.net/distributions/php-5.3.27.tar.gz 二、安装PHP 上面的各种步骤准备完毕之后,下面就可以开始安装PHP了。 1 2 3 4 [root@c64-lamptools] #tarzxfphp-5.3.27.tar.gz [root@c64-lamptools] #cdphp-5.3.27 [root@c64-lampphp-5.3.27] #./configure--prefix=/usr/local/php5.3.27--with-apxs2=/usr/local/apache/bin/apxs--with-mysql=/usr/local/mysql--with-xmlrpc--with-openssl--with-zlib--with-freetype-dir--with-gd--with-jpeg-dir--with-png-dir--with-iconv=/usr/local/libiconv--enable-short-tags--enable-sockets--enable-zend-multibyte--enable-soap--enable-mbstring--enable-static--enable-gd-native-ttf--with-curl--with-xsl--enable-ftp--with-lixml-dir--enable-xml--disable-rpath--enable-safe-mode--enable-bcmath--enable-shmop--enable-sysvsem--enable-inline-optimization--with-curlwrappers--enable-mbregex--with-mcrypt--with-mhash--enable-pcntl--with-ldap--with-ldap-sasl--enable-zip--with-libevent-dir [root@c64-lampphp-5.3.27] #make&&makeinstall 安装完毕之后,记住为php配置简化的路径 1 [root@c64-lampphp- 5.3 . 27 ]#ln-s/usr/local/php- 5.3 . 27 /usr/local/php 三、配置PHP 1、获取主配置文件 php的配置文件默认有2个。第一个是开发环境下的,第二个是生产环境下的。 1 2 3 4 [root@c64-lampphp-5.3.27] #cd../ [root@c64-lamptools] #ls/server/tools/php-5.3.27/php.ini-* /server/tools/php-5 .3.27 /php .ini-development /server/tools/php-5 .3.27 /php .ini-production 开发版和产品版最大区别在于,开发错的错误日志和调试信息都打开了,方便调试。 1 [root@c64-lamptools] #cp/server/tools/php-5.3.27/php.ini-production/usr/local/php/lib/php.ini 2、配置apache支持 每次对主配置文件操作之前,都需要进行备份操作,这样不仅可以防止误操作,而且可以做修改对比。 1 [root@c64-lamptools] #cp/usr/local/apache/conf/httpd.conf/usr/local/apache/conf/httpd.conf.bak 我们通过编译apache的主配置文件,ServerName下面添加ServerName 127.0.0.1:80 在369 #AddType application/x-gzip .tgz行的下一行加两行: 1 2 3 [root@c64-lamptools] #vim/usr/local/apache/conf/httpd.conf AddTypeapplication /x-httpd-php .php AddTypeapplication /x-httpd-php-source .phps 然后我们要在在DirectoryIndexindex.html这一行进行修改 1 DirectoryIndexindex.phpindex.html 配置完成之后,对apache服务进行重启之后,编写一个下面的php后缀文件, 1 2 3 4 [root@c64-lamptools] #vim/www/sunsky/index.php <?php phpinfo(); ?> 然后访问它,如果出现下面的图画,则说明apache已经支持了php功能。 3、配置mysql支持 这个无需配置什么,默认成功安装之后,即可。 我们同样需要创建一个php后缀的文件,内容如下 1 2 3 4 5 6 7 8 9 10 11 [root@c64-lamptools] #vim/www/sunsky/mysql.php <?php // $link_id=mysql_connect( '主机名' , '用户' , '密码' ); $link_id=mysql_connect( 'localhost' , 'root' , 'mima' )ormysql_error(); // $link_id=mysql_connect( 'localhost' , 'test' , '' ); if ($link_id){ echo "mysqlsuccessfulbysunsky!" ; } else { echo mysql_error(); } ?> 如果出现下面的信息,则表示php和mysql数据库连接正常。 lnmp中的php 1 2 3 4 5 6 7 8 环境 CentOS6.4x86_64位采用最小化安装,系统经过了基本优化 selinux为关闭状态,iptables为无限制模式 nginx版本:nginx-1.2.9mysql版本:mysql-5.1.70php版本:php-5.3.27 源码包存放位置: /server/tools 源码包编译安装位置: /etc/local/ 软件名称 数据库存放位置: /mydata 日志目录: /app/logs 在lnmp中php的部署和lamp中php的部署相同,唯一的几点区别就在于,编译的参数不同,调用的程序不同。apache调用的mod_php之类的模块来调用php。而在nginx上则是调用fpm来执行的。并且fpm程序可以不依附于nginx独立存在。而mod_php模块则必须依附于apahce而存在。 一、编译参数 PHP-5.3.27在lnmp架构下的编译配置参数: 1 2 [root@c64-lnmpphp-5.3.27] #./configure--prefix=/usr/local/php5.3.27--with-mysql=/usr/local/mysql--with-iconv-dir=/usr/local/libiconv--with-freetype-dir--with-jpeg-dir--with-png-dir--with-zlib--with-libxml-dir=/usr--enable-xml--disable-rpath--enable-safe-mode--enable-bcmath--enable-shmop--enable-sysvsem--enable-inline-optimization--with-curl--with-curlwrappers--enable-mbregex--enable-fpm--enable-mbstring--with-mcrypt--with-gd--enable-gd-native-ttf--with-openssl--with-mhash--enable-pcntl--enable-sockets--with-ldap--with-ldap-sasl--with-xmlrpc--enable-zip--enable-soap--enable-short-tags--enable-zend-multibyte--enable-static--with-xsl--with-fpm-user=nginx--with-fpm-group=nginx--with-libevent-dir--enable-ftp [root@c64-lnmpphp-5.3.27] #make&&makeinstall 二、配置PHP 0、增加php的主配置文件 1 2 [root@c64-lnmptools] #cp/server/tools/php-5.3.27/php.ini-production/usr/local/php/lib/php.ini [root@c64-lnmptools] #ln-s/usr/local/php/lib/php.ini/etc/php.ini 1、配置php-fpm配置文件 php-fpm(fastcgi进程管理),它是一个可以独立运行不依赖与nginx的程序,通过他可以调用fastcgi来对php进行解析。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 [root@c64-lnmptools] #cp/usr/local/php/etc/php-fpm.conf.default/usr/local/php/etc/php-fpm.conf#本文件我修改过,所以大家可以下载附件我修改过的用 [root@c64-lnmptools] #/usr/local/php/sbin/php-fpm-t [10-Nov-201319:36:02]NOTICE:configuration file /usr/local/php5 .3.27 /etc/php-fpm .conf test issuccessful [root@c64-lnmptools] #/usr/local/php/sbin/php-fpm [root@c64-lnmptools] #lsof-i:9000#查看fpm的进程 COMMANDPIDUSERFDTYPEDEVICESIZE /OFF NODENAME php-fpm20129root7uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20130nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20131nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20132nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20133nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20134nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20135nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20136nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20137nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20138nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20139nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20140nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20141nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20142nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20143nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20144nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) php-fpm20145nginx0uIPv43722140t0TCPlhh:cslistener(LISTEN) 2、配置nginx配置文件 我们通过在server{}标签内,加上如下的话来实现php-fpm和nginx的相互支持。此段话,可以在我们备份的nginx主配置文件里面找到,默认是注释掉的。 1 2 3 4 5 6 7 location~\.(php|php5)?${ #roothtml; fastcgi_pass127.0.0.1:9000; fastcgi_indexindex.php; fastcgi_paramSCRIPT_FILENAME /scripts $fastcgi_script_name; includefastcgi_params; } 添加完毕之后,我们就可以开始测试了,测试方式和apache的一样。这里就不再重述了。 到此为止,我们已经讲了apache,mysql,php和nginx的部署等方面的知识。后面,我会再系统的出一个部署lamp和lnmp架构的部署博文,并且也会有如何架设论坛,博客之类的博文。希望能多多帮助到大家的学习和工作。 附件:http://down.51cto.com/data/2363742 本文转自 aaao 51CTO博客,原文链接:http://blog.51cto.com/nolinux/1322666,如需转载请自行联系原作者

资源下载

更多资源
优质分享App

优质分享App

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册