ip11尺寸长度(ip11长度多少厘米)

ip11尺寸长度(ip11长度多少厘米)ls hl 显示详细信息 a 显示全部文件 cd 切换目录 nbsp pwd 显示当前路径 mkdir 创建目录 p 递归创建目录 nbsp rm 删除目录 r 强制 f 不提示 alias 别名设置 nbsp nbsp etc bashre root bashre 用户 bashre hostnamectl 查看主机名

大家好,我是讯享网,很高兴认识大家。



ls -hl 显示详细信息 -a 显示全部文件
cd 切换目录  
pwd 显示当前路径
mkdir 创建目录 -p 递归创建目录  
rm 删除目录 -r强制 f不提示
alias别名设置   /etc/bashre /root/.bashre /用户/.bashre
hostnamectl 查看主机名 hostnamectl set-hostname 永久修改
ifconfig eth0        //查看eth0网卡信息
5.cat /proc/cpuinfo    //查看cpu信息
6.cat /proc/meminfo    //查看内存信息
看文件类型 file 文件名
查看内容 cat -n head tail more 按行显示 less 分屏可控
touch 创建文件
find 查找内容  
mv 移动  
cp -r 递归
tar -cf 要压缩到的路径和名字 要压缩文件的目录和路径
tar -xf 要解压的文件 要解压文件的路径
        gz –gzip 速度快
       .bz2—bzip2 中间
       .xz—-xz 慢 小
vim 有三种工作模式 命令模式默认 末行模式 输入模式
i光标起始 o光标下另起一行 a光标后起始位置
gg首 G末 3G指定几行
p粘贴
u撤销
x删除
/查找替换文字  
dd 删除一行 3dd指定删除  
/s/原内容/先内容
:set nu行号

nmcli device show 网卡名字
nmcil device staus 查看网卡和链接
nmcil connection show 看设备名称和Mac地址
cat /etc/resolv.conf 检查DNS地址
ping -c 2 ping两次
 
useradd
userdcl
/etc/passwd 用户名 密码占位符 uid gid 用户描述 用户家目录  解释器
echo 123 | passwd –stdin 用户名
usermod -d 移动家目录-m联合使用 -s解释器
id 用户名
看登录who  
pkill -kill -t pts/0
su - 用户名  
sudo提权
groupadd 组名
gpasswd -a 添加
gpasswd -b 删除 用户 组
/etc/grouop 组的基本信息
groupdel 删除
yum -y install
crounteb -e 编辑
crounteb -r 删除
crounteb -l 查看
 分    时    日    月   周     任务命令行(绝对路径)
            *      *    *    *     *      #每分钟都执行
date 系统时间
chown 属主:属组 /文件名  -R
chmod ugo=rwx /文件名  /文件 -R
ls -l 查看权限
grep nsd01 /etc/查看用户对文件夹的权限

wget 下载
 
rpm -ivh 安装
rpm -q 软件名 查看
rpm -e 软件名 卸载
rpm -ql 详细详细
 

                             YUM
rm -rf /etc/yumm.repos.d/dc.repo
vim /etc/yum.repos.d/dc.repo
    [名字]3
    name= 描述
    baseurl=指定服务端
    enabled=1 是否启用
    gpgcheck=0 是否检查
 yum repolist 显示厂库信息
 yum -y install 安装
 yum -y info 查询
 yum remove 删除
清除yum缓存  yum clean all
升级linux内核 wget kernel
reboot重启

                                    磁盘
lsblk  #查看当前系统的磁盘信息
fdisk #磁盘分区
mkfs,xfs 格式化
mkfs.ext4 格式化
    blkid 查看格式化类型
    mkdir /要挂载的文件
    mount 挂载的磁盘 挂载到的路径
    /etc/fstab
    设备路径 挂载点 格式类型 参数 0 0 设备路径 挂载点   类型   参数  备份标记   检测顺序
    mount -a 运行开机文件
    umount 卸载挂载的磁盘
df -h 查看
#
刷新 partprobe

           lvm逻辑卷
PV 物理 s查看 remove删除 create创建  
vG 卷组  
LV 逻辑卷
 
successfully 成功
pvcreate 创建物理卷
 
vgcreate 名字 物理卷 创建卷组
vgextend 卷组名字 要加入的物理卷 扩展
vgdisplay 详细信息
vgchange -s 1M 卷组名字 改变PE大小 PE 默认为(4)
vgremove 删除
 
lvreate -L(-l改PE大小) 大小(M G) -n 逻辑卷名字 卷组

1 空间大小:扩展lvextend -L 要扩展到的大小 路径逻辑卷
lvs空间
2 文件系统大小扩展:
扩展ext4:resize2fs
扩展xfs:xfs_growfs  
df -h系统空间也叫格式化的空间  

3 缩小ext4支持
ls -l /dev/卷组名/逻辑卷快捷方式
ls /1dev/dm-0逻辑卷存放路径

find 目录 条件 [-a|-o] 条件2
-type 类型(f文件,d目录,l快捷方式)
-name 名字
-mtime [+-天数]
-user 用户拥有的文件
           
find /root -mtime +1000
高级使用find
find .. … .. -exec 命令 {}   ;
grep用法
grep -v ^# /etc/login.defs | grep -v ^\( &gt; /opt.txt <br>显示文件的有效信息(去除注释行 去除空行) <br>&nbsp;去除 &nbsp;<br>&nbsp;-v ^\)匹配空行
&nbsp;-v ^#注释
&nbsp;

NTP时间同步
date -s ‘年-月-日 时:分:秒’
rpm -q chront
yum -y install chrony
配置文件
vim /etc/chrony.conf
将不需要的注释掉
server classroom.example.com iburst #写入需要的
重启程序(重启服务)
systemctl restart chronyd
systemctl enable chronyd
查看结果
date
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LDAP认证
yum -y install sssd
&nbsp;
dc=example,de=com
classroom.example.com

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shell脚本
重定向输出
&nbsp;&gt;:只收集前面命令的正确输出
&nbsp;2&gt;只收集前面命令的错误输出
&nbsp;&&gt;正确错误都收集
&nbsp;”:取消特殊字符和命令的意义
&nbsp;或$()将命令的输出做为字符 例:mkdir nsd-`date +%F` <br>&nbsp;<br>变量:会变化的量 <br>变量名要求 <br>位置变量:$1 $2 $3&nbsp; 脚本后直接加参数 第一个参数为$1......... <br>系统变量 $# 你输入数值的个数 $? 命令是否为真 &amp;2让输出为报错输出 <br>$()变成一个整体的命令 <br>&nbsp;<br>&nbsp;<br>if判断: <br>-f 判断文件存在为真 <br>-e 存在就是真 <br>-d 判断目录存在为真 <br>&nbsp;<br>-eq等于,-lt小于,-le小于等于,-gt大于,-ge大于等于 <br>&nbsp;<br>&nbsp;1 字符串判断 <br>&nbsp;<br>str1 = str2     当两个串有相同内容、长度时为真 <br>str1 != str2     当串str1和str2不等时为真 <br>-n str1       当串的长度大于0时为真(串非空) <br>-z str1       当串的长度为0时为真(空串) <br>str1        当串str1为非空时为真 <br>&nbsp;<br>2 数字的判断 <br>&nbsp;<br>int1 -eq int2   两数相等为真 <br>int1 -ne int2   两数不等为真 <br>int1 -gt int2    int1大于int2为真 <br>int1 -ge int2   int1大于等于int2为真 <br>int1 -lt int2    int1小于int2为真 <br>int1 -le int2    int1小于等于int2为真 <br>&nbsp;<br>3 文件相关的if判断条件语句 <br>&nbsp;<br>-r file     用户可读为真 <br>-w file     用户可写为真 <br>-x file     用户可执行为真 <br>-f file     文件为正规文件为真 <br>-d file     文件为目录为真 <br>-c file     文件为字符特殊文件为真 <br>-b file     文件为块特殊文件为真 <br>-s file     文件大小非0时为真 <br>-t file     当文件描述符(默认为1)指定的设备为终端时为真 <br>&nbsp;<br>3 复杂逻辑判断 <br>-a        与 <br>-o       或 <br>!       非 <br>&nbsp;<br>容器: <br>a=1000 <br>echo $a <br>echo ${a}${b} <br>&nbsp;<br>read -p &nbsp;<br>for [ $变量 函数 1]// <br>运行 <br>elif [ $变量 函数 1] <br>运行 <br>else <br>&nbsp;&nbsp; 运行 <br>&nbsp;<br>for 变量名 in 循环列表 列表可以不参与执行 <br>&nbsp;do <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 要做的操作 <br>&nbsp;don <br>造数工具 {1..20} <br>设置每次循环隔开的时间sleep 0.5 <br>&nbsp;<br>vim错误产生交换文件 <br>可以删除缓存文件 在同父目录下.文件名 <br> <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安全保护防火墙配置和搭建服务 <br>&nbsp;<br>知识点: <br>系统安全防护:SELinux 美国NSA国家安全局主导开发 一套增强Linux系统安全的强制访问控制体系 <br>SELinux状态: enforcing(强制) perminssive(宽松) disabled(彻底禁用) &nbsp;<br>切换运行模式 setenforce1/2(1强制0宽松) /etc/selinux/config文件 切换disbled必须重启 <br>查看运行模式:getenforce &nbsp;<br>&nbsp;<br>搭建服务: <br>一 web服务提供网页内容 <br>&nbsp;实现web服务的软件: httpd 最久的web软件 nginx 中国使用最多 tomcat &nbsp;<br>&nbsp;实现web服务的协议: http(超文本传输服务) <br>安装httpd:yum -y install httpd <br>重启服务:systemctl restart httpd &nbsp;<br>本机测试:firefox 加IP地址 <br>&nbsp;<br>书写页面文件 <br>&nbsp;默认存放路径:/var/www/html <br>&nbsp;默认首页文件名称:index.html <br>&nbsp;<br>二 FTP服务:传输数据 <br>FTP协议:文件传输协议 <br>实现FTP服务软件:vsftpd <br>安装 yum -y install vsftpd <br>重启服务:systemctl restart vsftpd <br>本机测试:firefox ftp://加IP地址 <br>默认共享地址/var/ftp/ <br>&nbsp;<br>&nbsp;<br>防火墙:默认禁止所有人去访问本机web服务 <br>&nbsp; 作用: 隔离 拥有众多的策略 允许出站 严格控制入站 <br>载体:&nbsp;&nbsp;&nbsp; 硬件防火墙 贵的一匹 <br>&nbsp;&nbsp; &nbsp;软件防火墙:firewalld服务基础 <br>&nbsp;&nbsp; &nbsp;管理工具:firewall-cmd(命令),firewall-cofig(图形) <br>&nbsp;<br>防火墙预设四个区域: &nbsp;<br>&nbsp;&nbsp; &nbsp;public:只允许服务主机的ssh dhcp ping服务 <br>&nbsp;&nbsp; &nbsp;trusted:允许任何访问 <br>&nbsp;&nbsp; &nbsp;block:阻塞任何来访请求(明确拒绝,有回应客服端) <br>&nbsp;&nbsp; &nbsp;drop:丢弃任何来访的数据包&nbsp;&nbsp; &nbsp;(不回应 节省服务端资源) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 根据数据包的原ip地址 <br>&nbsp;<br>防火墙判定原则&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;1查看数据包的源ip地址,然后查看自己所有的区域,那个区域中有该源Ip地址规则,则进去该区域 <br>&nbsp;&nbsp; &nbsp;2默认区域 firewall-cmd --get-default-zone(查看默认区域) <br>&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; firewall-cmd --set-default-zone=block (修改)可以通信,有回应 &nbsp;<br>&nbsp;&nbsp; &nbsp; firewall-cmd --set-default-zone=drop(不通信 无回应) <br>&nbsp;<br> <br>互联网常见的协议: &nbsp;<br>http:超文本传输协议&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:80 <br>https:安全的超文本传输协议 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:443 <br>DNS:域名解析协议 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:53 <br>FTP:文件传输协议 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:21 <br>tftp:简单的文件传输协议 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:69 <br>telnet:远程管理协议(明文传输) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:23 <br>shh:远程管理协议(加密传输) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:22 <br>SMTP:邮件协议(收取邮件)&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:25 <br>pop3:用户发邮件协议&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认端口:110 <br>snmp:简单的网络管理协议&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:161 <br> <br>&nbsp;<br>防火墙区域添加规则 <br>firewall-cmd --set-default-zone=public #修改默认区域 <br>firewall-cmd --zone=public --list-all #查看区域规则 <br>firewall-cmd --zone=public --add-servis=ftp&nbsp; #添加协议 <br>firewall-cmd --zone=public --add-servis=http&nbsp;&nbsp; &nbsp;#添加协议 <br>firewall-cmd --zone=public --list-all #查看区域规则 <br>&nbsp;<br>防火墙规则永久设置 <br>--permanent 加入配置防火墙命令中 <br>&nbsp;<br>重新加载防火墙配置文件 <br>firewall-cmd --reload <br>&nbsp;<br>单独拒绝虚拟机desktop访问 <br>firewall-cmd --zone=block --add-source=172.25.0.10 <br>firewall-cmd --zone=block --list-all <br>firewall-cmd --zone=block --remove-source=172.25.0.10 #删除规则 <br>&nbsp;<br> <br>&nbsp;<br>实现本机端口映射 <br>&nbsp;本地应用的端口重定向(端口1-&gt;&gt;端口2) <br>&nbsp;端口重定向对本机无效 <br>firewall-cmd -permanent --zone=public --add-forward-port=port=5423:proto=tcp:toport=80&nbsp; #配置http默认端口80改为5423 <br>firewall-cmd --reload&nbsp; #重置配置文件 <br>firefox 172.25.0.11:5423 #用desktop访问http成功 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br># <br>互联网常见的协议: &nbsp;<br>http:超文本传输协议&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:80 <br>https:安全的超文本传输协议 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:443 <br>DNS:域名解析协议 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:53 <br>FTP:文件传输协议 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:21 <br>tftp:简单的文件传输协议 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:69 <br>telnet:远程管理协议(明文传输) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:23 <br>shh:远程管理协议(加密传输) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:22 <br>SMTP:邮件协议(收取邮件)&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:25 <br>pop3:用户发邮件协议&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认端口:110 <br>snmp:简单的网络管理协议&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 默认端口:161 <br>端口:利用root可以改变端口,而且一个程序可以具备多个端口 <br>监听端口:端口随时待命 # https 443 <br># <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 交换空间(虚拟内存) <br>&nbsp;<br>一 fdisk分区 <br>二 格式化为交换文件系统 <br>mkswap 加设备路径&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !!#一次只能一个 <br>三 启用交换分区(交换空间) <br>swapon 加设备路径&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !!#一次只能一个 <br>查看 swapon -s <br>四 停用 <br>swapoff 加设备路径&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !!#一次只能一个 <br>五 开机自动启用交换分区 <br>/etc/fstab <br>设备路径 swap swap defaults 0 0 &nbsp;<br>swapon -a #运行挂载文件vim <br>&nbsp;<br># <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 触发挂载(autofs) <br>partprob 刷新分区表 <br>mkfs.xfs 格式化为文件系统 <br>一 安装触发挂载的软件包 <br>&nbsp;&nbsp; &nbsp;yum -y install autofs #安装 <br>二 重启autofs程序 <br>&nbsp;&nbsp; &nbsp;systemctl restart autofs #重启服务 <br>&nbsp;&nbsp; &nbsp;systemctl enable autofs #设置为开机自启 &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; systemctl &nbsp;<br> 启动服务之后会在/下自动创建一个目录/misc 如果有光盘设备直接cd/ls /misc/cd 这个软件会自动有一条光盘的配置 <br>三 完成对/dev/vdb3触发挂载的配置 <br>&nbsp;访问路径:可以随意设置 挂载设备/dev/vdb3 到/liujia/lj(随意设置) <br>&nbsp; &nbsp;&nbsp; 设置两级目录 主配置文件为监控目录 挂载配置文件可以自定义&nbsp; <br>&nbsp;&nbsp; &nbsp;主配置文件:定义监控目录&nbsp;&nbsp; /etc/auto.master <br>&nbsp;&nbsp;&nbsp; &nbsp;格式: 监控目录 挂载配置文件的路径 <br>&nbsp;<br>挂载配置文件:挂载目录与设备 <br>&nbsp;cd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom <br>&nbsp;挂载点目录&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 文件系统类型(格式化类型)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 挂载设备&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>实现步骤 1 首先安装软件包&nbsp; 2 重启服务 3 修改/etc/auto.master配置文件 将/一级文件 和挂载配置文件(/liujia /etc/liu.txt)写入 #都需要手动创建 4 把 (/etc/auto.misc) 复制到 /etc/改名为liu.txt 进入修改 (挂载点目录 #随便写) -fstype=(格式化类型) 挂载设备&nbsp; 五.重启服务 六.测试(ls /liujia/自己创建挂载点目录) <br>&nbsp;<br>&nbsp;<br> <br>&nbsp; iSCSI网络磁盘 <br>&nbsp;<br>• Internet SCSI,网际SCSI接口&nbsp;&nbsp;&nbsp; 默认端口:3260 <br>– 一种基于C/S架构的虚拟磁盘技术 <br>– 服务器提供磁盘空间,客户机连接并当成本地磁盘使用 <br>&nbsp;<br>• backstore,后端存储 <br>– 对应到服务端提供实际存储空间的设备,需要起一个管理名称 <br>• target,磁盘组 <br>– 是客户端的访问目标,作为一个框架,由多个lun组成 <br>• lun,逻辑单元 <br>– 每一个lun需要关联到某一个后端存储设备,在客户端 <br>会视为一块虚拟硬盘 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 冰箱----&gt;纸质包装&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 木质箱子 <br>&nbsp;<br>• ISCSI Qualified Name 名称规范(iqn) <br>– iqn.yyyy-mm.倒序域名:自定义标识 <br>–&nbsp; 用来识别 target 磁盘组,也用来识别客户机身份 <br>&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>&nbsp;<br>一&nbsp; 修改防火墙默认区域 <br>虚拟机server <br>]# firewall-cmd --set-default-zone=trusted <br>虚拟机desktop <br>]# firewall-cmd --set-default-zone=trusted <br>&nbsp;<br>二 划分一个5G的主分区 <br>[root@server0 ~]# fdisk /dev/vdb <br>[root@server0 ~]# lsblk <br>&nbsp;<br>虚拟机server服务端: <br>1.安装软件包targetcli <br>[root@server0 ~]# yum -y install targetcli <br>&nbsp;<br>2.运行targetcli命令进行配置 <br>[root@server0 ~]# targetcli <br>/&gt; ls&nbsp;&nbsp;&nbsp;&nbsp; #查看相关配置 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; 1)建立后端存储backstore,后端存储&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>/&gt; backstores/block create name=nsd dev=/dev/vdb1 <br>/&gt; ls <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; 2)建立target磁盘组 <br>/&gt; iscsi/ create&nbsp; iqn.2019-07.com.example:server <br>/&gt; ls <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; 3)进行lun关联 <br>/&gt; iscsi/iqn.2019-07.com.example:server/tpg1/luns&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; create /backstores/block/nsd &nbsp;<br>/&gt; ls <br>/&gt; exit&nbsp; #退出 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; 4)设置访问控制,客户端声称的名字,符合iqn名称规范 <br>[root@server0 ~]# targetcli &nbsp;<br>/&gt; ls <br>/&gt; iscsi/iqn.2019-07.com.example:server/tpg1/acls create iqn.2019-07.com.example:desktop <br>&nbsp;<br>/&gt; ls <br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; 5)设置监听的IP地址 <br>/&gt; iscsi/iqn.2019-07.com.example:server/tpg1/portals&nbsp; create ip_address=172.25.0.11 &nbsp;<br>&nbsp;<br>/&gt; ls <br>/&gt; exit&nbsp; #退出 <br>&nbsp;<br>三 重启服务(重启程序) <br>[root@server0 ~]# systemctl restart target <br>[root@server0 ~]# systemctl enable target&nbsp; #设置为开机自启 <br>ln -s '/usr/lib/systemd/system/target.service' '/etc/systemd/system/multi-user.target.wants/target.service' <br> <br>&nbsp;<br>虚拟机desktop <br>1.安装软件包(客户端软件) <br>• 所需软件包:iscsi-initiator-utils <br>Yum仓库可以补全软件名: <br>&nbsp;&nbsp;&nbsp; 前提1:当前系统没有安装此软件 <br>&nbsp;&nbsp;&nbsp; 前提2:必须具备Yum缓存&nbsp; (yum repolist 可以直接生成缓存) <br>&nbsp;<br>[root@desktop0 ~]# yum repolist <br>[root@desktop0 ~]# rpm -q&nbsp; iscsi-initiator-utils <br>iscsi-initiator-utils-6.2.0.873-21.el7.x86_64 <br>&nbsp;<br>[root@desktop0 ~]# yum -y install iscsi(tab) <br>2.设置客户端生成的名字 <br>[root@desktop0 ~]# vim /etc/iscsi/initiatorname.iscsi <br>InitiatorName=iqn.2019-07.com.example:desktop &nbsp;<br>&nbsp;<br>3.客户端刷新声称名字的服务 <br>[root@desktop0 ~]# systemctl restart iscsid <br>&nbsp; Warning: Unit file of iscsid.service changed on&nbsp; &nbsp;<br>&nbsp; disk, 'systemctl daemon-reload' recommended. <br>[root@desktop0 ~]# systemctl daemon-reload <br>[root@desktop0 ~]# systemctl restart iscsid <br>&nbsp;<br>4.发现共享存储 <br>&nbsp; Linux查看命令帮助的方法 :&nbsp; man&nbsp; iscsiadm &nbsp;<br>&nbsp;&nbsp; 全文查找/example&nbsp;&nbsp; 按n项下跳转匹配,看到EXAMPLES <br>&nbsp;<br>&nbsp;&nbsp; Ctrl&nbsp;&nbsp;&nbsp; - :减小字体 <br>&nbsp;&nbsp; Ctrl&nbsp;&nbsp; Shift&nbsp;&nbsp; + :变大字体&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>[root@desktop0 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 172.25.0.11 --discover <br>&nbsp;<br>方法二:发现iSCSI磁盘 <br>– iscsiadm -m discovery -t st -p 服务器地址[:端口] <br>&nbsp;<br>5.加载共享存储 <br>[root@desktop0 ~]# systemctl restart iscsi <br>[root@desktop0 ~]# systemctl enable iscsi <br>[root@desktop0 ~]# lsblk &nbsp;<br>&nbsp;<br> <br>数据库服务基础 <br>&nbsp;<br>什么是数据库: 存放数据的仓库 <br>&nbsp;<br>&nbsp; 数据库中有众多库,在每一个库中有众多的表格 <br>&nbsp;<br>&nbsp;<br>• 常见的关系型 数据库管理系统 <br>– 微软的 SQL Server <br>– IBM的 DB2 <br>– 甲骨文的 Oracle、MySQL <br>– 社区开源版 MariaDB <br>&nbsp;<br>&nbsp;database:数据库 <br>&nbsp;<br> <br>&nbsp;<br>虚拟机server:部署mariadb数据库服务器 <br>• RHEL7 中的 MariaDB相关包 <br>– mariadb-server :提供服务端有关的系统程序 <br>&nbsp;<br>[root@server0 ~]# systemctl restart mariadb <br>[root@server0 ~]# systemctl enable mariadb <br>ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service' <br>[root@server0 ~]# &nbsp;<br> <br>数据库的基本操作: <br>[root@server0 ~]# mysql&nbsp;&nbsp;&nbsp; #进入数据库 <br>MariaDB [(none)]&gt; show databases;&nbsp;&nbsp;&nbsp;&nbsp; #查看所有的库 <br>&nbsp;<br>MariaDB [(none)]&gt; create database nsd;&nbsp; #创建nsd库 <br>MariaDB [(none)]&gt; show databases; <br>&nbsp;<br>MariaDB [(none)]&gt; drop database nsd;&nbsp; #删除nsd库 <br>MariaDB [(none)]&gt; show databases; <br>&nbsp;<br>MariaDB [(none)]&gt; create database nsd1906;&nbsp; &nbsp;<br>MariaDB [(none)]&gt; show databases; <br>&nbsp;<br>MariaDB [(none)]&gt; use mysql;&nbsp;&nbsp;&nbsp; #切换到mysql库 <br>MariaDB [mysql]&gt; use nsd1906; <br>MariaDB [nsd1906]&gt; use mysql; <br>&nbsp;<br>MariaDB [mysql]&gt; show tables;&nbsp; #查看当前库中有哪些表格 <br>MariaDB [mysql]&gt; exit&nbsp; #退出整个数据库 <br> <br>在Linux命令行,为数据库管理员设置密码 <br>&nbsp;<br>数据库管理员为root,对数据库有最高权限用户,存放在mysql库user表 <br>Linux系统管理员为root,对系统有最高权限用户,存放/etc/passwd <br>&nbsp;<br>• 为数据库账号修改密码 <br>– mysqladmin [-u用户名] [-p[旧密码]] password '新密码' <br>&nbsp;<br>]# mysqladmin -u root&nbsp;&nbsp; password&nbsp; '123'&nbsp; #首次设置密码 <br>&nbsp;<br>]# mysql -u root&nbsp; -p&nbsp;&nbsp;&nbsp; #交互式进入 <br>Enter password: &nbsp;<br>&nbsp;<br>]# mysql -u root -p123&nbsp; #非交互式进入 <br>&nbsp;<br>已知旧密码修改新密码 <br>]# mysqladmin -u root -p123&nbsp;&nbsp; password '456' <br># <br>MariaDB主配置文件: <br>[root@server0 ~]# ls /etc/my.cnf <br>&nbsp;<br># <br>表格 : 增(insert)&nbsp;&nbsp;&nbsp; 删(delete)&nbsp;&nbsp;&nbsp; 改(update)&nbsp;&nbsp;&nbsp;&nbsp; 查(select)&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>&nbsp;&nbsp; 表记录&nbsp;&nbsp;&nbsp;&nbsp; 表字段 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 编号&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 姓名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 联系方式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 居住地址 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dc&nbsp;&nbsp;&nbsp; 138.....&nbsp;&nbsp;&nbsp;&nbsp; 东村 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tc&nbsp;&nbsp;&nbsp; 138.....&nbsp;&nbsp;&nbsp;&nbsp; 西村 <br>&nbsp;<br>• 导入/恢复到数据库 <br>&nbsp;<br>– mysql [-u用户名] [-p[密码]] 数据库名 &lt; 备份文件.sql <br>&nbsp;<br>[root@server0 ~]# wget http://classroom.example.com/pub/materials/users.sql <br>[root@server0 ~]# ls <br>&nbsp;<br>]# mysql -u root -p123 nsd1906 &lt; /root/users.sql &nbsp;<br>&nbsp;<br>]# mysql -u root -p123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #进入到数据库 <br>MariaDB [(none)]&gt; use nsd1906;&nbsp; #切换到nsd1906库 <br>MariaDB [nsd1906]&gt; show tables; #显示所有表格 <br>+-------------------+ <br>| Tables_in_nsd1906 | <br>+-------------------+ <br>| base&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br>| location&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | <br>+-------------------+ <br> <br>查(select)&nbsp;&nbsp; &nbsp;<br>格式: select&nbsp; 表字段&nbsp;&nbsp;&nbsp; from&nbsp; 库名.表名&nbsp; where 条件 ; <br>]# mysql -u root -p123&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #进入到数据库 <br>&gt; use nsd1906;&nbsp;&nbsp; #切换到nsd1906库 <br>&gt; show tables;&nbsp;&nbsp; #显示所有表格 <br>&gt; select * from&nbsp; base;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #查看表所有字段及所有记录内容 <br>&gt; select * from&nbsp; location;&nbsp; #查看表所有字段及所有记录内容 <br>&nbsp;<br>&gt; use mysql; <br>&gt; select * from nsd1906.base;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>&gt; use nsd1906; <br>&gt; select id,name from base; <br>&gt; select&nbsp; *&nbsp; from base where name='tom'; <br>&gt; select&nbsp; *&nbsp; from base where password='456'; <br>&gt; select&nbsp; *&nbsp; from base where id='3'; <br>&nbsp;<br> <br>查询表结构: desc 表名; <br>MariaDB [(none)]&gt; use nsd1906; <br>MariaDB [nsd1906]&gt; desc base; <br>+----------+-------- <br>| Field&nbsp;&nbsp;&nbsp; | <br>+----------+--------- <br>| id&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>| name&nbsp;&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; &nbsp;<br>| password |&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>+----------+---------- <br>MariaDB [nsd1906]&gt; use mysql; <br>MariaDB [mysql]&gt; desc user; <br>MariaDB [mysql]&gt; select user,host,password from user; <br> <br>数据库授权 <br>用户授权设置 <br>• MariaDB [(none)]&gt; 交互指令 <br>&nbsp;<br>– GRANT 权限列表&nbsp; ON&nbsp; 数据库名.表名 TO 用户名@ <br>客户机地址 IDENTIFIED BY '密码'; <br>&nbsp;<br>– 除了 root 用户,此nsd1906数据库只能被用户 lisi 查询, <br>此用户的密码为123 <br>&nbsp;<br>&gt; grant select&nbsp; on&nbsp; nsd1906.*&nbsp; to&nbsp; lisi@localhost identified by '123'; <br>&nbsp;<br>当lisi从localhost本地登录,输入密码123,将会获得nsd1906库中所有表格的查询权限; <br>&nbsp;<br>&gt; select user,host,password from user; <br>&nbsp;<br> <br>&nbsp;<br>案例4:使用数据库查询 <br>2. 在系统 server0 上使用数据库 nsd1906,并使用相 <br>应的 SQL 查询以回答下列问题: <br>1)密码是 solicitous 的人的名字? <br>[root@server0 ~]# mysql -u root -p123 <br>&gt; use nsd1906; <br>&gt; select * from base; <br>&gt; select * from base where&nbsp; password='solicitous'; <br>&gt; select name from base where&nbsp; password='solicitous'; <br>&nbsp;<br>2)有多少人的姓名是 Barbara 同时居住在 Sunnyvale?&nbsp;&nbsp; &nbsp;<br>&gt; select * from&nbsp; base,location <br>&nbsp; where base.name='Barbara'&nbsp; and&nbsp; &nbsp;<br>&nbsp; location.city='Sunnyvale'&nbsp; and&nbsp; base.id=location.id; <br>&nbsp;<br>&gt; select count(*) from&nbsp; base,location <br>&nbsp; where base.name='Barbara'&nbsp; and&nbsp; &nbsp;<br>&nbsp; location.city='Sunnyvale'&nbsp; and&nbsp; base.id=location.id; <br>&nbsp;<br>&gt; insert base&nbsp; values('6','Barbara','xixi');&nbsp; #插入记录 <br>&gt; select * from&nbsp; base; <br>&gt; insert location&nbsp; values('6','Sunnyvale');&nbsp; #插入记录 <br>&gt; select * from&nbsp; location; <br>&nbsp;<br># <br>1. 禁止空密码root用户访问 mariadb 数据库 <br>&gt; use mysql; <br>&gt; select user,host,password from user; <br>&gt; select user,host,password from user where password=''; <br>&nbsp;<br>&gt; delete from user&nbsp; where&nbsp; password='';&nbsp;&nbsp; #删除记录 <br>&gt; select user,host,password&nbsp; from&nbsp; user; <br>&nbsp;<br>&gt; flush&nbsp; privileges;&nbsp;&nbsp;&nbsp; #刷新user表记录 <br>&nbsp;<br>验证登录失败: <br>[root@server0 ~]# mysql -u root -h server0.example.com &nbsp;<br>33 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>NFS共享概述 <br>• Network File System,网络文件系统 <br>– 用途:为客户机提供共享使用的文件夹 <br>– 协议:NFS(TCP/UDP 2049)、RPC(TCP/UDP 111) <br>&nbsp;<br>• 所需软件包:nfs-utils <br>• 系统服务:nfs-server <br>&nbsp;<br>虚拟机server:构建NFS服务 <br>1.安装nfs-utils软件包 <br>[root@server0 ~]# rpm -q nfs-utils <br>nfs-utils-1.3.0-0.el7.x86_64 <br>&nbsp;<br>2.配置共享 <br>[root@server0 ~]# mkdir /nsd <br>[root@server0 ~]# echo 123 &gt; /nsd/1.txt <br>[root@server0 ~]# ls /nsd/ <br>[root@server0 ~]# vim /etc/exports <br>– 文件夹路径&nbsp;&nbsp; 客户机地址(权限) 客户机地址(权限) .. .. <br>&nbsp;&nbsp; /nsd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *(ro) <br>&nbsp;&nbsp; /opt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; *(ro) <br>&nbsp;<br>3.重启服务(重启程序) <br>[root@server0 ~]# systemctl restart nfs-server <br>&nbsp;<br>虚拟机desktop:访问共享文件夹 <br>1.挂载共享目录 <br>]# mkdir /mnt/a&nbsp; /mnt/b <br>]# showmount -e 172.25.0.11&nbsp;&nbsp;&nbsp;&nbsp; #查看服务端共享内容 <br>]# mount 172.25.0.11:/nsd /mnt/a/&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp;&nbsp; mount /dev/sdb1&nbsp; /nsd <br>]# df -h <br>]# ls&nbsp; /mnt/a <br>&nbsp;<br>]# mount 172.25.0.11:/opt/&nbsp; /mnt/b <br>]# ls&nbsp; /mnt/b <br>]# df -ah&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #显示当前全部的挂载 <br>&nbsp;<br>2.开机自动挂载/etc/fstab&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; _netdev:声明网络设备 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 指明挂载本设备需要有网络参数再进行挂载 <br>&nbsp;<br>[root@desktop0 ~]# vim /etc/fstab &nbsp;<br>&nbsp;172.25.0.11:/nsd&nbsp; /mnt/a&nbsp; nfs defaults,_netdev 0 0 <br>&nbsp;172.25.0.11:/opt&nbsp; /mnt/b&nbsp; nfs defaults,_netdev 0 0 <br>&nbsp;<br>[root@desktop0 ~]# umount /mnt/a <br>[root@desktop0 ~]# umount /mnt/b <br>[root@desktop0 ~]# df -ah <br>[root@desktop0 ~]# mount -a <br>[root@desktop0 ~]# df -ah <br>&nbsp;<br> <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;HTTP服务基础 <br>&nbsp;<br>Web服务:提供网页内容 <br>&nbsp;<br>• 基于 B/S (Browser/Server)架构的网页服务 <br>– 服务端提供网页 <br>– 浏览器下载并显示网页 <br>&nbsp;<br>• Hyper Text Markup Language(html),超文本标记语言 <br>• Hyper Text Transfer Protocol(http),超文本传输协议 <br>&nbsp;<br>• 软件包:httpd(Apache组织)&nbsp; #专门实现Web服务的软件 <br>&nbsp;<br>虚拟机server: <br>1.安装httpd软件 <br>[root@server0 ~]# yum -y install httpd <br>&nbsp;<br>2.重启服务 <br>[root@server0 ~]# systemctl restart httpd <br>&nbsp;<br>3.访问测试 <br>[root@server0 ~]# firefox&nbsp; 172.25.0.11 <br>&nbsp;<br>4.书写页面文件 <br>]# echo '&lt;h1&gt;NSD1906 Web' &gt;&nbsp; /var/www/html/index.html <br>]# cat&nbsp; /var/www/html/index.html <br>&nbsp;<br>]# firefox&nbsp; 172.25.0.11 <br> <br>&nbsp;<br>主配置文件配置字段: <br>– Listen:监听地址:端口(80) <br>– ServerName:本站点注册的DNS名称(空缺) <br>– DocumentRoot:网页根目录(/var/www/html) <br>– DirectoryIndex:起始页/首页文件名(index.html) <br>&nbsp;<br>&nbsp;&nbsp; 虚拟机classroom: <br>&nbsp;&nbsp; DNS服务器的解析:将域名解析为IP地址 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server0.example.com-----&gt;172.25.0.11 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; www0.example.com-----&gt;172.25.0.11 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; webapp0.example.com-----&gt;172.25.0.11 <br>&nbsp; <br>[root@desktop0 ~]# nslookup webapp0.example.com <br>[root@desktop0 ~]# nslookup server0.example.com <br>[root@desktop0 ~]# nslookup www0.example.com <br># <br>– DocumentRoot:网页文件的根目录(/var/www/html)&nbsp;&nbsp; &nbsp;<br>虚拟机server <br>]# mkdir /var/www/myweb <br>]# echo '&lt;h1&gt;wo shi myweb'&nbsp; &gt; /var/www/myweb/index.html <br>]# cat /var/www/myweb/index.html <br>&nbsp;<br>]# vim /etc/httpd/conf/httpd.conf <br>&nbsp;DocumentRoot "/var/www/myweb"&nbsp; &nbsp;<br>&nbsp;<br>]# systemctl restart httpd <br>&nbsp;<br>虚拟机desktop:测试 <br>[root@desktop0 ~]# firefox 172.25.0.11 <br>&nbsp;<br> <br>网络路径与实际服务器路径&nbsp;&nbsp;&nbsp; 网页文件的根目录 <br>&nbsp;<br>客户端:firefox http://172.25.0.11:80----&gt;服务端172.25.0.11 <br>-----&gt;httpd 80-----&gt;DocumentRoot /var/www/myweb---&gt;index.html <br>&nbsp;<br>客户端: firefox 172.25.0.11 <br>服务端: /var/www/myweb <br>&nbsp;<br>客户端: firefox 172.25.0.11/abc <br>服务端: /var/www/myweb/abc/index.html <br>&nbsp;<br>DocmentRoot&nbsp; /var/www/myweb <br>客户端: firefox 172.25.0.11/var/www/myweb/abc <br>服务端: /var/www/myweb/var/www/myweb/abc <br>&nbsp;<br>&nbsp;<br>虚拟机server: <br>]# mkdir /var/www/myweb/abc <br>]# echo '&lt;h1&gt;wo shi abc' &gt;&nbsp;&nbsp;&nbsp; /var/www/myweb/abc/index.html <br>&nbsp;<br>]# firefox&nbsp; 172.25.0.11/abc &nbsp;<br>&nbsp;<br>&nbsp; vsftpd-----&gt;/var/ftp <br>&nbsp; httpd------&gt;/var/www/html <br>&nbsp;<br> <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>虚拟Web主机 <br>&nbsp;<br>• 虚拟Web主机 <br>– 由同一台服务器提供多个不同的Web站点 <br>&nbsp;<br>• 区分方式 <br>– 基于域名的虚拟主机 <br>– 基于端口的虚拟主机 <br>– 基于IP地址的虚拟主机 <br>&nbsp;<br>• 配置文件路径 <br>– /etc/httpd/conf/httpd.conf&nbsp;&nbsp; #主配置文件 <br>– /etc/httpd/conf.d/*.conf&nbsp;&nbsp;&nbsp;&nbsp; #调用配置文件 <br>&nbsp;<br> <br>&nbsp;<br>• 为每个虚拟站点添加配置 <br>&nbsp;&nbsp; &nbsp;&lt;VirtualHost IP地址:端口&gt; <br>&nbsp;&nbsp; &nbsp; ServerName&nbsp; 此站点的DNS名称 <br>&nbsp;&nbsp; &nbsp; DocumentRoot&nbsp; 此站点的网页根目录 <br>&nbsp;&nbsp; &nbsp;&lt;/VirtualHost&gt; <br>&nbsp;<br>&nbsp;<br>虚拟机server: vim命令模式下 u 可以撤销 <br>]# vim /etc/httpd/conf.d/nsd01.conf&nbsp;&nbsp; #建立调用配置文件 <br>&lt;VirtualHost *:80&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #启用虚拟Web主机功能 <br>&nbsp;ServerName server0.example.com&nbsp; #指定网站DNS名称 <br>&nbsp;DocumentRoot /var/www/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #指定网页文件根目录 <br>&lt;/VirtualHost&gt; <br>&nbsp;<br>&lt;VirtualHost *:80&gt; <br>&nbsp;ServerName www0.example.com <br>&nbsp;DocumentRoot /var/www/baidu <br>&lt;/VirtualHost&gt; <br>]# mkdir&nbsp; /var/www/&nbsp;&nbsp; /var/www/baidu <br>]# echo '&lt;h1&gt; 企鹅'&nbsp; &gt;&nbsp; /var/www//index.html <br>]# echo '&lt;h1&gt;baidu 百度'&nbsp; &gt;&nbsp; /var/www/baidu/index.html <br>]# systemctl restart httpd <br>&nbsp;<br> <br>虚拟Web主机优先级,由上到下依次匹配,匹配即停止 <br>&nbsp;<br>一旦使用虚拟Web主机功能,所有的网站都必须利用虚拟Web主机实现 <br>[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf <br>&lt;VirtualHost *:80&gt; <br>&nbsp;ServerName www0.example.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;DocumentRoot /var/www/baidu <br>&lt;/VirtualHost&gt; <br>&lt;VirtualHost *:80&gt; <br>&nbsp;ServerName server0.example.com <br>&nbsp;DocumentRoot /var/www/ <br>&lt;/VirtualHost&gt; <br>&lt;VirtualHost *:80&gt; <br>&nbsp;ServerName webapp0.example.com <br>&nbsp;DocumentRoot /var/www/myweb <br>&lt;/VirtualHost&gt; <br>[root@server0 ~]# systemctl restart httpd <br>&nbsp;<br># <br>Web访问控制,针对存放网页文件的目录 <br>&nbsp;&nbsp; 子目录默认继承父目录的Web访问控制&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>&lt;Directory /&gt; <br>&nbsp;&nbsp;&nbsp; Require all denied&nbsp;&nbsp; #拒绝所有人访问 <br>&lt;/Directory&gt; <br>&nbsp;<br>&lt;Directory "/var/www"&gt; <br>&nbsp;&nbsp;&nbsp; Require all granted&nbsp;&nbsp;&nbsp; #允许所有人访问 <br>&lt;/Directory&gt; <br>&nbsp;<br>案例:自定义Web的网页文件根目录&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>1.实现server0.example.com访问网页文件根目录修改为/webroot <br>]# vim /etc/httpd/conf.d/nsd01.conf &nbsp;<br>&lt;VirtualHost *:80&gt; <br>&nbsp;ServerName server0.example.com <br>&nbsp;DocumentRoot /webroot <br>&lt;/VirtualHost&gt; <br>]# mkdir /webroot <br>]# echo '&lt;h1&gt;wo shi webroot' &gt; /webroot/index.html <br>2.修改访问控制 <br>[root@server0 ~]# vim /etc/httpd/conf/httpd.conf &nbsp;<br>[root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf <br>&lt;Directory&nbsp;&nbsp; "/webroot"&gt;&nbsp;&nbsp;&nbsp; #针对/webroot路径 <br>&nbsp;&nbsp;&nbsp; Require all granted&nbsp;&nbsp; #允许所有人访问 <br>&lt;/Directory&gt; <br>[root@server0 ~]# systemctl restart httpd <br>&nbsp;<br>3.SELinux策略 <br>[root@server0 ~]# setenforce 0 <br>[root@server0 ~]# getenforce &nbsp;<br>Permissive <br>[root@server0 ~]# vim /etc/selinux/config <br>SELINUX=permissive <br>&nbsp;<br>[root@server0 ~]# firefox server0.example.com <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>环境准备:防火墙设置 <br>虚拟机server <br>]# firewall-cmd --set-default-zone=trusted &nbsp;<br>虚拟机desktop <br>]# firewall-cmd --set-default-zone=trusted &nbsp;<br> <br>案例:为虚拟机server配置以下虚拟Web主机 <br>- 实现三个网站的部署 <br>- 实现客户端访问server0.example.com网页内容为 卖女孩的小火柴 <br>- 实现server0.example.com网页根目录为/var/www/abc01 <br>&nbsp;<br>- 实现客户端访问www0.example.com网页内容为&nbsp; 奔跑吧骆驼 <br>- 实现www0.example.com网页根目录为/var/www/abc02 <br>&nbsp;<br>- 实现客户端访问webapp0.example.com网页内容为 20里春风不如你 <br>- 实现webapp0.example.com网页根目录为/var/www/abc03 <br>&nbsp;<br> <br>文件夹权限 <br>• 针对 DocumentRoot 网页目录的权限控制 <br>– httpd 运行身份(用户/组):apache <br>&nbsp;<br>客户机地址限制 <br>• 使用 &lt;Directory&gt; 配置区段 <br>– 每个文件夹自动继承其父目录的ACL访问权限 <br>– 除非针对子目录有明确设置 <br>&lt;Directory 目录的绝对路径&gt; <br>.. .. <br>Require all denied|granted <br>Require ip IP或网段地址 .. .. <br>&lt;/Directory&gt; <br>&nbsp;<br>案例1:配置网页内容访问 <br>在 Web 网站 http://server0.example.com 的&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>DocumentRoot 目录下创建一个名为 private 的子目录,要求如下: <br>1.创建目录 <br>]# cat /etc/httpd/conf.d/nsd01.conf&nbsp; #查看DocumentRoot <br>]# mkdir /var/www/abc01/private <br>&nbsp;<br>2.从 http://classroom.example.com/pub/materials/private.html下载一个文件副本到这个目录,重命名为 index.html <br>不要对文件 index.html 的内容作任何修改 <br>]# cd /var/www/abc01/private <br>]# wget http://classroom.example.com/pub/materials/private.html <br>]# mv private.html index.html <br>]# firefox server0.example.com/private <br>&nbsp;<br>3)从虚拟机server0 上,任何人都可以浏览 private 的内容, <br>但是从其他系统不能访问这个目录的内容 <br>[root@server0 /]# vim /etc/httpd/conf/httpd.conf <br>[root@server0 /]# vim /etc/httpd/conf.d/nsd02.conf <br>&lt;Directory&nbsp; "/var/www/abc01/private"&gt; <br>&nbsp;&nbsp;&nbsp; Require ip 172.25.0.11&nbsp;&nbsp;&nbsp; #仅允许172.25.0.11访问 <br>&lt;/Directory&gt; <br>[root@server0 /]# systemctl restart httpd <br>&nbsp;<br>虚拟机desktop: <br>[root@desktop0 ~]# firefox server0.example.com/private <br>Forbidden <br>&nbsp;<br>You don't have permission to access /private on this server. <br> <br>&nbsp;<br>案例2:使用自定Web根目录 <br>调整 Web 站点 http://server0.example.com 的网页目录,要求如下: <br>1)新建目录 /webroot,作为此站点新的网页目录 <br>]# mkdir /webroot <br>]# echo '&lt;h1&gt; wo shi webroot' &gt; /webroot/index.html <br>[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf <br>&lt;VirtUalHost *:80&gt; <br>&nbsp; ServerName server0.example.com <br>&nbsp; DocumentRoot /webroot <br>&lt;/VirtUalHost&gt; <br>&nbsp;<br>2)修改访问控制 <br>[root@server0 /]# vim /etc/httpd/conf.d/nsd02.conf <br>&lt;Directory&nbsp; "/webroot"&gt; <br>&nbsp;&nbsp;&nbsp; Require all granted&nbsp;&nbsp; #允许所有人可以访问 <br>&lt;/Directory&gt; <br>[root@server0 /]# systemctl restart httpd <br>&nbsp;<br> <br>3)修改SELinux策略:安全上下文值(打标签) 布尔值策略 非默认端口开放 <br>&nbsp; 神州旅游: 红色帽子&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp; 达内旅游: 绿色帽子 <br>]# semanage --help <br>]# semanage fcontext -l&nbsp; |&nbsp; less&nbsp;&nbsp; #查看所有上下文值 <br>]# ls -Zd /var/www/&nbsp;&nbsp;&nbsp; #专查看目录上下文值 <br>]# ls -Zd /webroot/ <br>• 方式1:参照标准目录,重设新目录的属性 <br>– chcon [-R] --reference=模板目录&nbsp;&nbsp; 新目录 <br>&nbsp;<br>]# chcon -R&nbsp; --reference=/var/www&nbsp; /webroot/ <br>]# ls -Zd /webroot/ <br>测试: <br>[root@desktop0 ~]# firefox server0.example.com <br> <br>部署动态网站 <br>&nbsp;<br>静态网站的运行 <br>• 服务端的原始网页 = 浏览器访问到的网页 <br>– 由Web服务软件处理所有请求 <br>– 文本(txt/html)、图片(jpg/png)等静态资源 <br>&nbsp;<br>&nbsp;<br>动态网站的运行 <br>• 服务端的原始网页 ≠ 浏览器访问到的网页 <br>– 由Web服务软件接受请求,动态程序转后端模块处理 <br>– PHP网页、Python网页、JSP网页...... <br>&nbsp;<br> <br>为站点 webapp0.example.com 配置提供动态Web内容,要求如下: <br>1.部署Python页面文件 <br>]# cat /etc/httpd/conf.d/nsd01.conf&nbsp; #查看DocumentRoot <br>]# cd /var/www/abc03 <br>]# wget http://classroom.example.com/pub/materials/webinfo.wsgi <br>&nbsp;<br>]#&nbsp; ls <br>&nbsp;<br>2.页面跳转(页面别名&nbsp; 地址重写)方便用户的访问 <br>&nbsp;<br>当用户访问 webapp0.example.com将webinfo.wsgi页面进行呈现 <br>&nbsp;<br>格式:&nbsp; Alias&nbsp; 网络路径&nbsp;&nbsp;&nbsp;&nbsp; 实际路径 &nbsp;<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; Alias&nbsp;&nbsp; /&nbsp;&nbsp;&nbsp;&nbsp; /var/www/abc03/webinfo.wsgi <br>当用户访问的时网页文件根目录时,跳转到/var/www/abc03/webinfo.wsgi <br>&nbsp;<br>[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf &nbsp;<br>&lt;VirtUalHost *:80&gt; <br>&nbsp; ServerName webapp0.example.com <br>&nbsp; DocumentRoot /var/www/abc03 <br>&nbsp; Alias&nbsp; /&nbsp;&nbsp; /var/www/abc03/webinfo.wsgi <br>当用户访问的是网页文件根目录时,跳转到/var/www/abc03/webinfo.wsgi <br>&lt;/VirtUalHost&gt; <br>[root@server0 /]# systemctl restart httpd <br>&nbsp;<br>[root@desktop0 ~]# firefox webapp0.example.com <br>&nbsp;<br>3.翻译Python页面代码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>[root@server0 /]# yum -y install mod_wsgi <br>[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf <br>&lt;VirtUalHost *:80&gt; <br>&nbsp; ServerName webapp0.example.com <br>&nbsp; DocumentRoot /var/www/abc03 <br>&nbsp; WsgiScriptAlias /&nbsp; /var/www/abc03/webinfo.wsgi <br>&lt;/VirtUalHost&gt; <br>[root@server0 /]# systemctl restart httpd <br>&nbsp;<br>页面内容显示: <br>&nbsp; UNIX时间戳:从1970-1-1 0:0:0到达现在时间,所经历的秒数 <br>[root@desktop0 ~]# firefox webapp0.example.com <br>&nbsp;<br>4.此虚拟Web主机侦听在端口8909 <br>[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf <br>Listen 8909&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #设置httpd程序监听8909端口 <br>&lt;VirtUalHost *:8909&gt;&nbsp;&nbsp;&nbsp;&nbsp; #设置虚拟Web主机监听8909端口 <br>&nbsp; ServerName webapp0.example.com <br>&nbsp; DocumentRoot /var/www/abc03 <br>&nbsp; WsgiScriptAlias /&nbsp; /var/www/abc03/webinfo.wsgi <br>&lt;/VirtUalHost&gt; <br>&nbsp;<br>]# semanage port -l&nbsp; | grep http&nbsp; #查看关于http开放的端口 <br>]# semanage port -a -t http_port_t&nbsp; -p tcp 8909 <br>此命令会占用较多内存, -a 添加&nbsp; -t 类型&nbsp; -p 协议 <br>&nbsp;<br>]# systemctl restart httpd <br>测试验证: firefox webapp0.example.com:8909 <br>总结:访问时端口优先级最高 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br> <br>安全Web服务 <br>&nbsp;<br>PKI公钥基础设施 <br>• Public Key Infrastructure,公钥基础设施 <br>– 公钥:主要用来加密数据 <br>– 私钥:主要用来解密数据(与相应的公钥匹配) <br>– 数字证书:证明拥有者的合法性/权威性(单位名称、 <br>有效期、公钥、颁发机构及签名、......) <br>– Certificate Authority,数字证书授权中心:负责证书 <br>的申请/审核/颁发/鉴定/撤销等管理工作 <br>&nbsp;<br>&nbsp;<br>&nbsp;数据证书授权中心:虚拟机classroom <br> <br>虚拟机server: <br>为站点 www0.example.com 配置安全加密的Web内容 <br>1.部署网站证书(营业执照) <br>]# cd /etc/pki/tls/certs/ <br>]# wget http://classroom.example.com/pub/tls/certs/server0.crt <br>]# ls <br>&nbsp;<br>2.部署网站的根证书(工商局的信息) <br>]# cd /etc/pki/tls/certs/ <br>]# wget http://classroom.example.com/pub/example-ca.crt <br>]# ls <br>&nbsp;<br>3.部署解密数据的私钥 <br>]# cd /etc/pki/tls/private/ <br>]# wget http://classroom.example.com/pub/tls/private/server0.key <br>]# ls <br>&nbsp;<br>4.安装可以进行加密支持的软件mod_ssl <br>[root@server0 /]# yum -y install mod_ssl <br>[root@server0 /]# vim /etc/httpd/conf.d/ssl.conf &nbsp;<br>&nbsp;补充:vim末行模式&nbsp; 输入set&nbsp; nu 可以开启行号 <br>&nbsp;<br>&nbsp;59 DocumentRoot "/var/www/abc02" <br>&nbsp;60 ServerName www0.example.com:443 <br>指定网站证书 <br>100 SSLCertificateFile /etc/pki/tls/certs/server0.crt <br>指定解密的私钥 <br>107 SSLCertificateKeyFile /etc/pki/tls/private/server0.key <br>指定网站的根证书 <br>122 SSLCACertificateFile /etc/pki/tls/certs/example-ca.crt <br>[root@server0 /]# systemctl restart httpd <br>[root@server0 /]# firefox https://www0.example.com <br>&nbsp;&nbsp;&nbsp; 我已了解可能的风险---&gt;添加例外----&gt;确认安全例外 <br> <br>补充:Samba共享服务(Windows与Linux跨平台的共享) <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; smb(用户验证通信协议)&nbsp; cifs(Samba独有文件系统) &nbsp;<br>&nbsp;<br>&nbsp;程序名(服务名):smb <br>&nbsp;<br>虚拟机server: <br>1.安装软件包 <br>[root@server0 /]# yum -y install samba&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>2.创建Samba共享帐号 &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.建立在本地用户的基础上 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.采用独立的密码,与用户登录系统的密码不同 <br>[root@server0 /]# useradd harry <br>[root@server0 /]# pdbedit -a harry&nbsp; #添加为samba帐号 <br>new password: <br>retype new password:&nbsp; &nbsp;<br>[root@server0 /]# pdbedit -L&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #查看所有的samba帐号 <br>[root@server0 /]# pdbedit -x harry&nbsp; #删除samba帐号harry <br>[root@server0 /]# pdbedit -a harry <br>&nbsp;<br>3.创建共享目录及配置共享 <br>[root@server0 /]# mkdir /public <br>[root@server0 /]# echo haha &gt; /public/1.txt <br>[root@server0 /]# vim /etc/samba/smb.conf &nbsp;<br>&nbsp;命令模式: G(大写) 到全文的末行 <br>[nsd]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #设置共享名 <br>path = /public&nbsp;&nbsp;&nbsp;&nbsp; #设置实际共享的路径 <br>&nbsp;<br>[root@server0 /]# systemctl restart smb <br>&nbsp;<br>4.修改SELinux策略: 布尔值策略(服务功能的开关) <br>[root@server0 /]# getsebool -a | grep samba <br>[root@server0 /]# setsebool samba_export_all_ro on <br>[root@server0 /]# getsebool -a | grep samba <br>&nbsp;<br>客户端:虚拟机desktop0 <br>1.安装软件包,支持cifs文件系统 <br>[root@desktop0 ~]# yum -y install cifs-utils <br>2.进行挂载访问 <br>]# mkdir /mnt/smb <br>格式:mount -o user=用户名,pass=密码&nbsp; //服务器IP地址/共享名&nbsp; 挂载点目录 <br>]# mount -o user=harry,pass=123&nbsp; //172.25.0.11/nsd&nbsp; /mnt/smb/ <br>]# df -h <br>]# ls /mnt/smb/ <br>&nbsp;<br>3.开机自动挂载/etc/fstab <br>&nbsp;<br>//172.25.0.11/nsd&nbsp; /mnt/smb&nbsp; cifs defaults,user=harry,pass=123,_netdev 0 0 <br>&nbsp;<br>[root@desktop0 ~]# umount /mnt/smb/ <br>[root@desktop0 ~]# df -h <br>[root@desktop0 ~]# mount -a <br>[root@desktop0 ~]# df -h <br>&nbsp;<br> <br>网络配置 <br>设置网络参数 <br>一 设置永久的主机名,配置文件为/etc/hostname <br>[root@server0 ~]# echo 'nsd.tedu.cn' &gt; /etc/hostname <br>[root@server0 ~]# cat /etc/hostname <br>nsd.tedu.cn <br>[root@server0 ~]# hostname <br>nsd.tedu.cn <br>[root@server0 ~]# exit <br>登出 <br>Connection to 172.25.0.11 closed. <br>[student@room9pc01 ~]$ gos <br>Last login: Sat Jul 13 08:35:21 2019 from 172.25.0.250 <br>[root@nsd ~]# &nbsp;<br>&nbsp;<br>二 永久设置设置IP地址 子网掩码&nbsp; 网关地址 <br>1.查看识别的网卡名 <br>[root@nsd ~]# nmcli connection show <br>名称&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>System eth0&nbsp; &nbsp;<br>&nbsp;<br>2.设置永久的IP地址 子网掩码&nbsp; 网关地址 <br>]# nmcli connection modify 'System eth0' &nbsp;<br>&nbsp;ipv4.method manual &nbsp;<br>&nbsp;ipv4.addresses '172.25.0.110/24&nbsp;&nbsp; 172.25.0.254' &nbsp;<br>&nbsp;connection.autoconnect&nbsp; yes <br>&nbsp;<br>]# nmcli connection 修改&nbsp; '网卡名' &nbsp;<br>&nbsp;&nbsp; ipv4.方法&nbsp; 手工设置 <br>&nbsp;&nbsp; ipv4.地址&nbsp; 'IP地址/子网掩码&nbsp;&nbsp; 网关地址' <br>&nbsp;&nbsp;&nbsp;&nbsp; 每次开机自动启用配置 <br>&nbsp;<br>3.激活配置 <br>[root@nsd ~]# nmcli connection up 'System eth0' <br>[root@nsd ~]# ifconfig | head -2 <br>[root@nsd ~]# route&nbsp;&nbsp;&nbsp;&nbsp; #查看网关地址 <br>&nbsp;&nbsp; Gateway&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; 172.25.0.254&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>三&nbsp; DNS服务器的地址&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; 永久配置文件:/etc/resolv.conf <br>&nbsp;<br>]# echo 'nameserver 172.25.254.254' &gt; /etc/resolv.conf <br>&nbsp; <br>]# cat /etc/resolv.conf <br>nameserver 172.25.254.254 <br>&nbsp;<br>]# nslookup&nbsp; server0.example.com <br>&nbsp;<br># <br>IPv6地址的组成 <br>• IPv4 地址表示 <br>– 32个二进制位,点分隔的十进制数 <br>– 例如:172.25.0.11、127.0.0.1 <br>&nbsp;<br>• IPv6 地址表示 <br>– 128个二进制位,冒号分隔的十六进制数 <br>– 每段内连续的前置 0 可省略、连续的多个 : 可简化为 :: <br>– 例如: <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2003:ac18:0000:0000:0000:0000:0000:0305 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2003:ac18::305 <br>&nbsp;<br>[root@nsd ~]# nmcli connection modify 'System eth0' ipv6.method manual ipv6.addresses&nbsp; 2003:ac18::305/64 connection.autoconnect&nbsp;&nbsp; yes <br>&nbsp;<br>[root@nsd ~]# nmcli connection up 'System eth0' <br>successfully(成功) <br>&nbsp;<br>[root@nsd ~]# ifconfig | head -4 <br>[root@nsd ~]# ping6 2003:ac18::305 <br>&nbsp;<br> <br>聚合连接(链路聚合&nbsp; 网卡绑定) <br>&nbsp;<br>&nbsp;&nbsp; 作用:实现网卡的高可用 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eth1&nbsp;&nbsp;&nbsp;&nbsp; eth2&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 虚拟网卡:team0&nbsp; 192.168.1.1 <br>&nbsp;<br>1.生成虚拟的网卡team0&nbsp;&nbsp;&nbsp;&nbsp; 参考:man teamd.conf&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 全文搜索/example&nbsp; 按 n跳转匹配 <br>&nbsp;<br>]# nmcli connection add type team &nbsp;<br>&nbsp; con-name team0 ifname team0 autoconnect yes &nbsp;<br>&nbsp; config '{"runner": {"name": "activebackup"}}' <br>&nbsp;<br>]# nmcli connection 添加&nbsp; 类型&nbsp;&nbsp; 组队 <br>&nbsp;&nbsp;&nbsp;&nbsp; 配置文件名 team0&nbsp; 网卡名&nbsp; team0 开机自动启用 <br>&nbsp;&nbsp;&nbsp;&nbsp; 配置运行方式为&nbsp; 活跃备份方式 <br>&nbsp;<br>]# ifconfig&nbsp; team0 <br>&nbsp;<br>2.添加成员 <br>]# nmcli connection add type team-slave &nbsp;<br>con-name team0-1 ifname eth1 master team0 <br>&nbsp;<br>]# nmcli connection add type team-slave &nbsp;<br>con-name team0-2 ifname eth2 master team0 <br>&nbsp;<br>]# nmcli connection 添加&nbsp; 类型&nbsp; team-成员&nbsp; &nbsp;<br>&nbsp;配置文件名 team0-2&nbsp; 网卡名为&nbsp; eth2&nbsp; 主设备&nbsp; team0 <br>&nbsp;<br>3.team0配置IP地址 <br>]# nmcli connection modify team0 &nbsp;<br>&nbsp; ipv4.method manual ipv4.addresses 192.168.1.1/24&nbsp; &nbsp;<br>&nbsp; connection.autoconnect&nbsp; yes <br>&nbsp;<br>]# nmcli connection up team0 &nbsp;<br>&nbsp;<br>]# teamdctl team0 state&nbsp;&nbsp; #专用于查看team0信息 <br>]# ifconfig eth2 down <br>]# teamdctl team0 state <br>&nbsp;<br>如果有敲错,删除所有重新开始 <br>]# nmcli connection delete team0&nbsp;&nbsp;&nbsp; #删除配置文件 <br>]# nmcli connection delete team0-1&nbsp; #删除配置文件 <br>]# nmcli connection delete team0-2&nbsp; #删除配置文件 <br>&nbsp;<br># <br>基础邮件服务 <br>前提:修改IP地址,符合DNS解析结果 <br>[root@nsd ~]# nmcli connection modify 'System eth0'&nbsp; &nbsp;<br>&nbsp; ipv4.method manual &nbsp;<br>&nbsp; ipv4.addresses&nbsp; '172.25.0.11/24&nbsp; 172.25.0.254'&nbsp; &nbsp;<br>&nbsp; connection.autoconnect&nbsp; yes <br>&nbsp;<br>[root@nsd ~]# nmcli connection up 'System eth0' <br>&nbsp;<br>查看DNS服务器地址: <br>[root@nsd ~]# cat /etc/resolv.conf &nbsp;<br>nameserver 172.25.254.254 <br>[root@nsd ~]# nslookup server0.example.com #测试解析 <br>&nbsp;<br># <br>电子邮件通信 <br>• 电子邮件服务器的基本功能 <br>– 为用户提供电子邮箱存储空间(用户名@邮件域名) <br>– 处理用户发出的邮件 —— 传递给收件服务器 <br>– 处理用户收到的邮件 —— 投递到邮箱 <br>&nbsp;<br>DNS服务器:虚拟机classroom <br>&nbsp;&nbsp;&nbsp;&nbsp; yg@.com <br>&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; yg@server0.example.com <br>&nbsp;<br> <br>虚拟机server:构建邮件服务器 <br>1.安装postfix软件,实现邮件服务 <br>[root@nsd ~]# rpm -q postfix <br>postfix-2.10.1-6.el7.x86_64 <br>&nbsp;<br>2.修改配置文件 <br>[root@nsd ~]# vim /etc/postfix/main.cf <br>&nbsp;vim末行模式: set&nbsp; nu 开启行号 <br>&nbsp;<br>&nbsp;99 myorigin = server0.example.com&nbsp; #默认补全的域名后缀 <br>116 inet_interfaces = all&nbsp; #在本机所有网卡启用邮件功能 <br>164 mydestination = server0.example.com &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #判断为本域邮件的依据 <br>3.重启邮件服务 <br>[root@nsd ~]# systemctl restart postfix <br>&nbsp;<br>使用mail命令发信/收信 <br>• mail 发信操作 <br>– mail&nbsp; -s&nbsp;&nbsp; '邮件标题'&nbsp;&nbsp;&nbsp;&nbsp; -r&nbsp;&nbsp; 发件人&nbsp;&nbsp;&nbsp;&nbsp; 收件人 <br>[root@nsd ~]# useradd yg <br>[root@nsd ~]# useradd xln <br>[root@nsd ~]# mail -s 'test01' -r&nbsp; yg&nbsp;&nbsp; xln <br>hahaxixihehelele <br>. <br>EOT <br>[root@nsd ~]# mail -u xln&nbsp; #查看xln的邮件 <br>&gt;N&nbsp; 1 yg@server0.example.c&nbsp; Sat Jul 13 14:2118/569&nbsp;&nbsp; &nbsp;<br>&amp; 1&nbsp;&nbsp;&nbsp;&nbsp; #输入邮件编号1查看邮件内容 <br>&nbsp;<br>[root@nsd ~]# echo '123'&nbsp; | mail -s 'abc' -r&nbsp; yg&nbsp; xln <br>[root@nsd ~]# mail -u xln &nbsp;<br># <br>parted分区工具,进行GPT分区模式 <br>&nbsp;<br>&nbsp; MBR分区模式: fdisk分区工具 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最多有4个主分区,划分3个主分区,1个扩展分区,n个逻辑分区 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大的空间支持:2.2TB <br>&nbsp;<br>&nbsp; GPT分区模式:parted分区工具 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最多有128个主分区 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 最大的空间支持:18EB <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1EB=1024PB <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1PB=1024TB <br>&nbsp;<br>[root@nsd ~]# lsblk &nbsp;<br>[root@nsd ~]# parted&nbsp; /dev/vdb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>(parted) mktable&nbsp; gpt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #指定分区模式gpt <br>(parted) print&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #输出分区表信息 <br>(parted) mkpart&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #划分新的分区 <br>&nbsp;分区名称?&nbsp; []? nsd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #随意起名字 <br>&nbsp;文件系统类型?&nbsp; [ext2]? xfs&nbsp;&nbsp;&nbsp; #随意写不起决定性作用 <br>&nbsp;起始点? 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;结束点? 2G&nbsp; &nbsp;<br>忽略/Ignore/放弃/Cancel? Ignore&nbsp;&nbsp; #输入&nbsp; i 忽略 <br>(parted) unit GB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #使用GB作为单位显示 <br>(parted) print&nbsp; &nbsp;<br>(parted) mkpart &nbsp;<br>&nbsp;分区名称?&nbsp; []? nsd&nbsp; &nbsp;<br>&nbsp;文件系统类型?&nbsp; [ext2]? xfs <br>&nbsp;起始点? 2G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;结束点? 4G&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>(parted) print &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br> <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;构建新的教学环境 <br>&nbsp;<br>&nbsp;<br>构建新的教学环境 <br>1.构建两台虚拟机,操作系统为CentOS7.5 <br>[student@room9pc01 ~]$ clone-vm7 &nbsp;<br>Enter VM number: 8 <br>Creating Virtual Machine disk image......&nbsp;&nbsp; &nbsp;[OK] <br>Defining new virtual machine......&nbsp;&nbsp; &nbsp;[OK] <br>[student@room9pc01 ~]$ clone-vm7 &nbsp;<br>Enter VM number: 9 <br>Creating Virtual Machine disk image......&nbsp;&nbsp; &nbsp;[OK] <br>Defining new virtual machine......&nbsp;&nbsp; &nbsp;[OK] <br>&nbsp;<br>#修改两台虚拟机名为A与B <br>&nbsp;<br>2.利用root进入两台虚拟机,密码为:123456 <br>&nbsp;<br>3.配置永久主机名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; 虚拟机A:svr7.tedu.cn <br>&nbsp;&nbsp;&nbsp; 虚拟机B:pc207.tedu.cn <br>&nbsp;<br>4.配置IP地址 <br>&nbsp;&nbsp;&nbsp; 虚拟机A:为eth0配置 192.168.4.7/24 <br>&nbsp;&nbsp;&nbsp; 虚拟机B:为eth0配置 192.168.4.207/24 <br>&nbsp;<br>5.利用真机进行远程管理两台虚拟机 <br>[student@room9pc01 ~]$ ping 192.168.4.7 <br>[student@room9pc01 ~]$ ping 192.168.4.207 <br>&nbsp;<br>[student@room9pc01 ~]$ ssh -X root@192.168.4.7 <br>[student@room9pc01 ~]$ ssh -X root@192.168.4.207 <br>&nbsp;<br>6.为真机上设置永久别名 <br>[student@room9pc01 ~]$ vim /home/student/.bashrc &nbsp;<br>&nbsp;alias goa='ssh&nbsp; -X&nbsp; root@192.168.4.7' <br>&nbsp;alias gob='ssh&nbsp; -X&nbsp; root@192.168.4.207' <br>&nbsp;<br>&nbsp;新开一个终端验证 <br>&nbsp;<br>7.构建Yum仓库 <br>&nbsp;<br>服务端:真机构建FTP服务器,共享光盘所有内容 <br>&nbsp;1)真机检测软件包vsftpd的安装 <br>&nbsp;[student@room9pc01 ~]$ rpm -q vsftpd <br>&nbsp;vsftpd-3.0.2-22.el7.x86_64 <br>&nbsp;[student@room9pc01 ~]$ systemctl status vsftpd <br>&nbsp;2)共享光盘所有内容 <br>&nbsp;&nbsp;&nbsp; 默认共享的路径:/var/ftp <br>&nbsp;]$ mkdir /var/ftp/centos-1804/ <br>&nbsp;]$ mount /iso/CentOS7-1804.iso&nbsp;&nbsp; /var/ftp/centos-1804/ <br>&nbsp;]$ ls /var/ftp/centos-1804/ <br>&nbsp;]$ vim /etc/fstab &nbsp;<br>/var/lib/libvirt/images/iso/CentOS7-1804.iso&nbsp; /var/ftp/centos-1804 iso9660 defaults 0 0 <br>&nbsp;]$ firefox ftp://192.168.4.254/centos-1804 <br>&nbsp;<br>客户端:两台虚拟机 <br>[root@svr7 ~]# vim /etc/yum.repos.d/local.repo <br>[local_repo] <br>name=CentOS-$releasever - Base <br>baseurl="ftp://192.168.4.254/centos-1804" <br>enabled=1 <br>gpgcheck=0 <br>[root@svr7 ~]# yum -y install httpd <br>&nbsp;<br> <br>虚拟机C <br>&nbsp;1.配置主机名为:svr10.tedu.cn <br>&nbsp;2.配置eth0的IP地址:192.168.4.10/24 <br>&nbsp;3.配置Yum仓库,指向服务端为真机的FTP服务 <br>&nbsp;<br>虚拟机D <br>&nbsp;1.配置主机名为:pc20.tedu.cn <br>&nbsp;2.配置eth0的IP地址:192.168.4.20/24 <br>&nbsp;3.配置Yum仓库,指向服务端为真机的FTP服务 <br>&nbsp;<br># <br>扩展的几个应用 <br>目录结构 <br>• 认识Linux的目录层次:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>– man hier <br>&nbsp;<br>• 常见一级目录的用途 <br>&nbsp;&nbsp; &nbsp;/boot 存放系统引导必需的文件,包括内核、启动配置 <br>&nbsp;&nbsp; &nbsp;/bin、/sbin 存放各种命令程序 <br>&nbsp;&nbsp; &nbsp;/dev 存放硬盘、键盘、鼠标、光驱等各种设备文件 <br>&nbsp;&nbsp; &nbsp;/etc 存放Linux系统及各种程序的配置文件 <br>&nbsp;&nbsp; &nbsp;/root、/home/用户名 分别是管理员root、普通用户的默认家目录 <br>&nbsp;&nbsp; &nbsp;/var 存放日志文件、邮箱目录等经常变化的文件 <br>&nbsp;&nbsp; &nbsp;/proc 存放内存中的映射数据,不占用磁盘 <br>&nbsp;&nbsp; &nbsp;/tmp 存放系统运行过程中使用的一些临时文件 <br>[root@svr7 ~]# ls -ld /tmp <br>drwxrwxrwt. 8 root root 172 7月&nbsp; 15 10:34 /tmp <br>&nbsp;<br>权限的数值表示 <br>• 权限的数值化 <br>– 基本权限:r = 4,w = 2,x = 1 <br>– 附加权限:SUID = 4,SGID = 2,Sticky Bit = 1 &nbsp;<br>&nbsp;<br>[root@svr7 ~]# mkdir /nsd01 <br>[root@svr7 ~]# ls -ld /nsd01 <br>[root@svr7 ~]# chmod 750 /nsd01 <br>[root@svr7 ~]# ls -ld /nsd01 <br>&nbsp;<br>[root@svr7 ~]# chmod 700 /nsd01 <br>[root@svr7 ~]# ls -ld /nsd01 <br>&nbsp;<br>[root@svr7 ~]# chmod 007 /nsd01 <br>[root@svr7 ~]# ls -ld /nsd01 <br>&nbsp;<br>[root@svr7 ~]# chmod 755 /nsd01 <br>[root@svr7 ~]# ls -ld /nsd01 <br>&nbsp;<br>&nbsp;<br>历史命令 <br>• 管理/调用曾经执行过的命令 <br>– history:查看历史命令列表 <br>– history -c:清空历史命令 <br>– !n:执行命令历史中的第n条命令 <br>– !str:执行最近一次以str开头的历史命令 <br>&nbsp;<br>• 调整历史命令的数量 <br>[root@svr7 ~]# vim /etc/profile <br>HISTSIZE=1000&nbsp; //默认记录1000条 <br>&nbsp;<br>[root@svr7 ~]# history&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #显示历史命令列表 <br>[root@svr7 ~]# history -c&nbsp;&nbsp;&nbsp;&nbsp; #清空所有的历史命令 <br>[root@svr7 ~]# history &nbsp;<br>&nbsp;&nbsp;&nbsp; 1&nbsp; history &nbsp;<br>[root@svr7 ~]# cat -n /etc/redhat-release&nbsp; &nbsp;<br>[root@svr7 ~]# ls /root/ <br>[root@svr7 ~]# cat /etc/hosts <br>&nbsp;<br>[root@svr7 ~]# history &nbsp;<br>[root@svr7 ~]# !cat&nbsp;&nbsp;&nbsp; #执行临时命令中最近以cat开头的命令 <br>[root@svr7 ~]# !ls <br>&nbsp;<br>&nbsp;<br>实用小命令工具 <br>• du,统计文件的占用空间 <br>– du [选项]... [目录或文件]... <br>– -s:只统计每个参数所占用的总空间大小 <br>– -h:提供易读容量单位(K、M等) <br>&nbsp;<br>[root@svr7 ~]# du&nbsp;&nbsp; -sh&nbsp; /root <br>[root@svr7 ~]# du&nbsp;&nbsp; -sh&nbsp; /root/&nbsp; /etc/&nbsp; /boot/ <br>[root@svr7 ~]# du&nbsp;&nbsp; -sh&nbsp; / <br>&nbsp;<br>[root@svr7 ~]# du&nbsp;&nbsp; -sh&nbsp; /var <br>&nbsp;<br>[root@svr7 ~]# du&nbsp;&nbsp; -sh&nbsp; /home <br>[root@svr7 ~]# du&nbsp;&nbsp; -sh&nbsp; /tmp <br>&nbsp;<br>&nbsp;<br>• date,查看/调整系统日期时间 <br>– date +%F、date +%R <br>– date +"%Y-%m-%d %H:%M:%S" <br>– date -s "yyyy-mm-dd HH:MM:SS" <br>&nbsp;<br>[root@svr7 ~]# date +%F&nbsp;&nbsp; #显示&nbsp; 年-月-日 <br>2019-07-15 <br>[root@svr7 ~]# date +%Y&nbsp;&nbsp; #显示 年 <br>2019 <br>[root@svr7 ~]# date +%m&nbsp;&nbsp; #显示 月 <br>07 <br>[root@svr7 ~]# date +%d&nbsp;&nbsp; #显示 日期 <br>15 <br>[root@svr7 ~]# date +%H&nbsp;&nbsp; #显示 时 <br>11 <br>[root@svr7 ~]# date +%M&nbsp;&nbsp; #显示 分 <br>42 <br>[root@svr7 ~]# date +%S&nbsp;&nbsp; #显示 秒 <br> <br>&nbsp;<br>制作快捷方式&nbsp;&nbsp;&nbsp; 制作连接(链接)文件 <br>&nbsp;<br>制作软连接 <br>格式: ln&nbsp; -s&nbsp; /路径/源文件&nbsp;&nbsp; /路径/快捷方式名&nbsp;&nbsp;&nbsp;&nbsp; #必须时绝对路径 <br>&nbsp;<br>]# cat /etc/sysconfig/network-scripts/ifcfg-eth0 <br>]# ln -s /etc/sysconfig/network-scripts/ifcfg-eth0&nbsp;&nbsp; /etc/net0 <br>&nbsp;<br>]# ls /etc/net0 &nbsp;<br>]# cat /etc/net0 <br>]# ls -l /etc/net0 <br>&nbsp;<br>]# ln -s /etc/passwd&nbsp; /opt/ <br>]# ls /opt/ <br>]# ls -l /opt/passwd &nbsp;<br>&nbsp;<br>软连接特点: <br>若原始文件或目录被删除,连接文件将失效 <br>软连接可存放在不同分区/文件系统 <br>&nbsp;<br>硬连接特点: <br>若原始文件被删除,连接文件仍可用 <br>硬连接与原始文件必须在同一分区/文件系统 <br>&nbsp;<br>[root@svr7 ~]# rm -rf /opt/* <br>[root@svr7 ~]# echo 123456 &gt; /opt/A <br>[root@svr7 ~]# cat /opt/A <br>&nbsp;<br>[root@svr7 ~]# ln -s&nbsp; /opt/A&nbsp; /opt/B&nbsp;&nbsp; #制作软连接 <br>[root@svr7 ~]# ls /opt/ <br>[root@svr7 ~]# cat /opt/B <br>&nbsp;<br>[root@svr7 ~]# ln&nbsp; /opt/A&nbsp;&nbsp; /opt/C&nbsp; #制作硬连接 <br>[root@svr7 ~]# ls&nbsp; /opt/ <br>&nbsp;<br>[root@svr7 ~]# rm -rf /opt/A <br>[root@svr7 ~]# ls /opt/ <br>[root@svr7 ~]# cat /opt/B&nbsp;&nbsp; #软连接不可用 <br>[root@svr7 ~]# cat /opt/C&nbsp;&nbsp; #硬连接可以使用 <br>&nbsp;<br># <br>获取命令帮助 <br>&nbsp;<br>[root@svr7 ~]# man 5 passwd&nbsp; #5代表配置文件类型帮助信息 <br>&nbsp;<br> <br>zip归档工具,跨平台的压缩格式 <br>• 归档+压缩操作 <br>– zip [-r] 备份文件.zip 被归档的文档... <br>[root@svr7 ~]# yum -y install zip <br>[root@svr7 ~]# zip -r /opt/file.zip&nbsp; /root/ /etc/passwd <br>[root@svr7 ~]# ls /opt <br>&nbsp;<br>[root@svr7 ~]# zip -r /opt/nsd.zip&nbsp; /boot/ <br>[root@svr7 ~]# ls /opt <br>• 释放归档+解压操作 <br>– unzip 备份文件.zip [-d 目标文件夹] <br>[root@svr7 ~]# yum -y install unzip &nbsp;<br>[root@svr7 ~]# unzip /opt/nsd.zip -d /mnt/ <br>[root@svr7 ~]# ls /mnt/ <br>[root@svr7 ~]# ls /mnt/boot/ <br>&nbsp;<br> <br>自定义Yum源 <br>&nbsp;<br>1.具备从互联网下载一些软件包 <br>[student@room9pc01 ~]$ ls /linux-soft/01/ <br>&nbsp;<br>2.将tools.tar.gz传递到虚拟机A &nbsp;<br>[student@room9pc01 ~]$ scp /linux-soft/01/tools.tar.gz&nbsp; root@192.168.4.7:/root/ <br>&nbsp;<br>3.在虚拟机A查看&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>]# ls&nbsp; /root <br>]# tar -xf /root/tools.tar.gz&nbsp; -C&nbsp; / <br>]# ls / <br>]# ls /tools/ <br>]# ls /tools/other/ <br>&nbsp;<br>4.在虚拟机A生成仓库数据文件 <br>[root@svr7 ~]# yum -y install createrepo <br>[root@svr7 ~]# createrepo /tools/other/ <br>&nbsp;<br>[root@svr7 ~]# ls /tools/other/ <br>[root@svr7 ~]# ls /tools/other/repodata <br>&nbsp;<br>5.书写客户端配置文件 <br>[root@svr7 ~]# vim /etc/yum.repos.d/local.repo &nbsp;<br>[local_repo] <br>name=CentOS-$releasever - Base <br>baseurl="ftp://192.168.4.254/centos-1804" <br>enabled=1 <br>gpgcheck=0 <br>[myrpm] <br>name=other rpm <br>baseurl=file:///tools/other&nbsp; #指定为本机为Yum服务端 <br>enabled=1 <br>gpgcheck=0 <br>[root@svr7 ~]# yum repolist &nbsp;<br>&nbsp;<br>[root@svr7 ~]# yum -y install cmatrix <br>[root@svr7 ~]# cmatrix <br>[root@svr7 ~]# cmatrix -C red <br>&nbsp;<br>[root@svr7 ~]# yum -y install sl <br>[root@svr7 ~]# sl <br>&nbsp;<br>[root@svr7 ~]# yum -y install oneko <br>[root@svr7 ~]# oneko <br>[root@svr7 ~]# oneko &amp;&nbsp;&nbsp; #将程序放入后台 <br>&nbsp;<br> <br>vim编辑技巧 <br>命令模式操作 <br>[root@svr7 ~]# cp /etc/passwd&nbsp; /opt/a.txt&nbsp; &nbsp;<br>[root@svr7 ~]# vim /opt/a.txt &nbsp;<br>光标跳转 <br>&nbsp;&nbsp; &nbsp;Home 键 或 ^、数字 0 &nbsp;&nbsp; &nbsp;跳转到行首 <br>&nbsp;&nbsp; &nbsp;End 键 或“$”键 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;跳转到行尾 <br>&nbsp;&nbsp; &nbsp;PgUp 键、PgDn 键 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;向上翻页、向下翻页 <br>&nbsp;&nbsp; &nbsp;1G 或 gg &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;跳转到文件的首行 <br>&nbsp;&nbsp; &nbsp;G &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;跳转到文件的末尾行 <br>复制/粘贴/删除 <br>&nbsp;&nbsp; &nbsp;复制 yy、3yy &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;复制光标处的一行、3行 <br>&nbsp;&nbsp; &nbsp;粘贴 p、P &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;粘贴到光标处之后、之前 <br>&nbsp;&nbsp; &nbsp;x 或 Delete键 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;删除光标处的单个字符 <br>&nbsp;&nbsp; &nbsp;dd、#dd &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;删除光标处的一行、#行 <br>&nbsp;&nbsp; &nbsp;d^ &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;从光标处之前删除至行首 <br>&nbsp;&nbsp; &nbsp;d$或D(大写) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;从光标处删除到行尾 <br>&nbsp;&nbsp; &nbsp;C(大写) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;从光标处删除到行尾,进入插入模式 <br>&nbsp;<br>查找/撤销/保存 <br>&nbsp;&nbsp; &nbsp;/word &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;向后查找字符串“word” <br>&nbsp;&nbsp; &nbsp;n、N &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;跳至后/前一个结果 <br>&nbsp;&nbsp; &nbsp;u &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;撤销最近的一次操作 <br>&nbsp;&nbsp; &nbsp;U(大写) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;撤销对当前行的所有修改 <br>&nbsp;&nbsp; &nbsp;Ctrl + r &nbsp;&nbsp; &nbsp;取消前一次撤销操作 <br>&nbsp;&nbsp; &nbsp;ZZ(大写) &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;保存修改并退出 <br># <br>末行模式操作 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; :r /etc/filesystems 读入其他文件内容 <br>&nbsp;<br>[root@svr7 ~]# echo 123456 &gt; /opt/2.txt <br>[root@svr7 ~]# echo hahaxixi &gt; /opt/3.txt <br>[root@svr7 ~]# vim /opt/3.txt <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :r&nbsp; /opt/2.txt&nbsp;&nbsp;&nbsp; #读入/opt/2.txt到当前文件 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :r&nbsp; /etc/passwd&nbsp;&nbsp; #读入/etc/passwd到当前文件 <br>&nbsp;<br>&nbsp;<br>字符串替换 <br>&nbsp;&nbsp; &nbsp;:s/root/admin&nbsp;&nbsp; &nbsp;替换当前行第一个“root” <br>&nbsp;&nbsp; &nbsp;:s/root/admin/g &nbsp;&nbsp; &nbsp;替换当前行所有的“root” <br>&nbsp;&nbsp; &nbsp;:1,10 s/root/admin/g &nbsp;&nbsp; &nbsp;替换第1-10行所有的“root” <br>&nbsp;&nbsp; &nbsp;:% s/root/admin/g &nbsp;&nbsp; &nbsp;替换文件内所有的“root <br>[root@svr7 ~]# cat /etc/passwd &gt; /opt/a.txt &nbsp;<br>[root@svr7 ~]# vim /opt/a.txt <br>&nbsp;<br>&nbsp;<br>开关参数的控制 <br>&nbsp;<br>&nbsp;&nbsp; &nbsp;:set nu或nonu&nbsp; 显示/不显示行号 <br>&nbsp;&nbsp; &nbsp;:set ai或noai&nbsp; 启用/关闭自动缩进 <br> <br>源码编译安装 <br>&nbsp;<br>RPM包: rpm -ivh&nbsp; yum -y install <br>&nbsp;<br>源码包----gcc make----&gt;可以执行的程序--------&gt;运行安装 <br>&nbsp;<br>• 主要优点 <br>– 获得软件的最新版,及时修复bug <br>– 软件功能可按需选择/定制,有更多软件可供选择&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>– 源码包适用各种平台 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>步骤一:安装gcc与make开发工具 <br>[root@svr7 ~]# yum -y install gcc <br>[root@svr7 ~]# yum -y install make <br>步骤二:进行tar解包 <br>]# tar -xf /tools/inotify-tools-3.13.tar.gz -C /s <br>]# ls / <br>]# cd /inotify-tools-3.13/ <br>]# ls <br>步骤三:运行configure脚本 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作用1:检测是否安装gcc <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 作用2:可以选择软件的功能,也可以指定软件安装的路径 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; --prefix=指定安装的位置 <br>]# cd /inotify-tools-3.13/ <br>]# https://www.cnblogs.com/liujiab/p/configure&nbsp;&nbsp; --prefix=/opt/myrpm <br>&nbsp;<br>&nbsp;<br>常见提示:没有安装gcc <br>checking for gcc... no <br>checking for cc... no <br>checking for cl.exe... no <br>configure: error: no acceptable C compiler found in $PATH <br>See `config.log' for more details. <br>&nbsp;<br>步骤四:make编译生成可以执行的程序 <br>]# cd /inotify-tools-3.13/ <br>]# make <br>&nbsp;<br>步骤五:make install将可以执行的程序运行安装 <br>]# cd /inotify-tools-3.13/ <br>]# make&nbsp; install <br>]# ls /opt/ <br>]# ls /opt/myrpm/ <br>]# ls /opt/myrpm/bin/ <br>&nbsp;<br> <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;虚拟化概述 <br>&nbsp; <br>virtualization <br>-x个物理资源 -y个逻辑资源 <br>实现程序 完全,部分,硬件辅助(cpu) <br>&nbsp;<br>cpu支持虚拟化所有指令集(vmx) <br>&nbsp; lscpu | grep vmx <br>&nbsp;<br> <br>安装软件 <br>&nbsp;qemu-kvm :为提供底层仿真支持 <br>&nbsp;libvirt-daemon :libvirtd 守护进程,管理虚拟机 <br>&nbsp;libvirt-client :用户端软件 挺供客户端管理软件 <br>&nbsp;libvirt-daemon-drier-qemu : libvirt 连接qemu的驱动 <br>&nbsp;virt-manager :图形管理工具 <br>&nbsp;<br>虚拟化服务:libvirtd <br>&nbsp;systemctl status libvirtd <br> <br>&nbsp;通过指令管理虚拟机 <br>&nbsp;<br>virsh&nbsp;&nbsp; &nbsp;控制工具 <br>virsh 控制指令 [虚拟机名称] [参数] <br>查看kvm节点 查看安装虚拟机的电脑的信息 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virsh nodeinfo <br>查看运行中的 [查看所有] <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; virsh list [--all] &nbsp;<br>列出虚拟网络 &nbsp;<br>&nbsp;&nbsp; &nbsp;virsh net-list &nbsp;<br>查看虚拟机信息 &nbsp;<br>&nbsp;&nbsp; &nbsp;virsh dominfo 虚拟机名 &nbsp;<br>设置开机随机启动 <br>&nbsp;&nbsp; &nbsp;virsh autostart 虚拟机名字 <br>&nbsp; &nbsp;&nbsp; &nbsp;virsh autostart --disable 名字 <br>开机/重启/关机 <br>&nbsp;&nbsp; &nbsp;virsh start|reboot|shutdown &nbsp;<br>强制关闭指定的虚拟机 <br>&nbsp;&nbsp; &nbsp;virsh destroy 虚拟机名字 &nbsp;<br>删除虚拟机 &nbsp;<br>&nbsp;&nbsp;&nbsp; 1 virsh destony 名字&nbsp;&nbsp; &nbsp; #关机 <br>&nbsp;&nbsp; &nbsp;virsh undefine 名字 #取消定义域 /只是删除xml文件 不删除qcow2文件 <br>&nbsp;&nbsp; &nbsp;virsh list --all #查看 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2&nbsp; 但是没有删除磁盘文件 <br>&nbsp;&nbsp;&nbsp; &nbsp; rm -rf /var/lib/libvirt/qemu/磁盘文件名字 <br>一台kvm虚拟机的组成 <br>&nbsp; 一 xml配置文件:定义虚拟机名称,UUID,CPU,内存,虚拟磁盘,网卡等各种参数设置 <br>&nbsp;&nbsp; (xml代表一种格式) <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 路径:/etc/libvirt/qemu/*.xml <br>&nbsp; 二 磁盘镜像文件 :保存虚拟机的操作系统及文档数据 <br>镜像路径取决于xml配置文件中的定义 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 路径:/var/lib/libvirt/images <br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; 查看虚拟机配置文件 xml <br>&nbsp;&nbsp;&nbsp; &nbsp;virsh dumpxml C <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用&gt;把内容重定向到新的文件 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 虚拟机名称 &lt;name&gt;E&lt;/name&gt; <br>&nbsp;&nbsp; &nbsp;虚拟机的UUID唯一标识 方法:使用uuidgen 方法2 删除这行 &nbsp;<br>&nbsp;&nbsp; &nbsp;虚拟机磁盘文件路径 &lt;source file='/var/lib/libvirt/images/E.qcow2'/&gt; <br>&nbsp;&nbsp; &nbsp;修改虚拟机的磁盘mac地址 删除这行 <br>&nbsp;&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;导入文件 <br>&nbsp;&nbsp; &nbsp;virsh define /ect/libvirt/qemu/新文件 <br>&nbsp;&nbsp;&nbsp; &nbsp;virsh list --all <br> <br>在命令行手动创建虚拟机 <br>1 建新一个磁盘文件 <br>cp /虚拟机磁盘文件路径 &lt;source file='/var/lib/libvirt/images/E.pcow2'/&gt; /tmp/F.qcow2 #拷贝一个原有的 然后改个名字 <br>du -sh /tmp/F.qcow2&nbsp;&nbsp;&nbsp;&nbsp; #验证查看大小 <br>2 创建xml配置文件 <br>&nbsp;<br>三合一命令 导出 修改 导入 <br>一 建立磁盘文件 &nbsp;<br>&nbsp;<br>三 virsh edit nsd01 交互快捷 <br>&nbsp;<br>查看磁盘镜像文件信息 &nbsp;<br>&nbsp;qemu-img info /var/lib/libvirt/images/nsd01.后缀谁便起专业最好用(.qcow2) <br>&nbsp;<br> <br>cow 技术原理 <br>&nbsp;copy on write 写时复制 <br>直接映射原始盘的数据内容 <br>&nbsp;qemu-img create -f gcow2 -b 原始盘 前端盘 大小 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>一 手动图形安装虚拟机名为nsd01 <br>&nbsp;&nbsp;&nbsp; 利用光盘镜像安装 <br>&nbsp;&nbsp;&nbsp; 内存2048M &nbsp;<br>&nbsp;&nbsp;&nbsp; 虚拟机名为:nsd01 <br>&nbsp;&nbsp;&nbsp; 网络类型选择为:private1 <br>&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; 软件包:带GUI的服务器 <br>&nbsp;&nbsp;&nbsp; 分区:自动分区 <br>&nbsp;&nbsp;&nbsp; 设置root的密码为1,建立lisi用户设置密码1 <br>&nbsp;<br>&nbsp;<br>虚拟化概述 <br>• virtualization 资源管理 <br>– x个物理资源 --&gt; y个逻辑资源 <br>– 实现程度:完全、部分、硬件辅助(CPU) <br>&nbsp;<br>CPU支持虚拟化所有的指令集(vmx) <br>[student@room9pc01 ~]$ lscpu&nbsp; | grep vmx <br>&nbsp;<br>&nbsp;<br>• 虚拟化主要厂商及产品 <br>&nbsp; VMware&nbsp; VMware Workstation、vSphere <br>&nbsp; Microsoft VirtualPC、Hyper-V <br>&nbsp; RedHat&nbsp; KVM、RHEV <br>&nbsp; Citrix&nbsp; Xen <br>&nbsp; Oracle&nbsp; Oracle VM VirtualBox <br>&nbsp;<br> <br>二 虚拟机nsd01进行配置&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>1.配置永久主机名:kvm.tedu.cn <br>[root@localhost ~]# echo kvm.tedu.cn &gt; /etc/hostname <br>[root@localhost ~]# hostname kvm.tedu.cn <br>&nbsp;<br>2.配置永久IP地址:192.168.4.30/24 <br>[root@localhost ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.30/24 connection.autoconnect yes <br>&nbsp;<br>[root@localhost ~]# nmcli connection up eth0 &nbsp;<br>[root@localhost ~]# ifconfig <br>&nbsp;<br>3.修改防火墙默认区域与SELinux <br>[root@kvm ~]# firewall-cmd --set-default-zone=trusted &nbsp;<br>&nbsp;<br>[root@kvm ~]# setenforce 0 <br>[root@kvm ~]# getenforce &nbsp;<br>Permissive <br>[root@kvm ~]# vim /etc/selinux/config <br>SELINUX=permissive <br>&nbsp;<br>4.构建Yum仓库 <br>]# cd /etc/yum.repos.d/ <br>]# mkdir repo <br>]# ls <br>]# mv *.repo&nbsp; repo <br>]# ls <br>]# vim dvd.repo <br>&nbsp;[dvd] <br>&nbsp;name=centos7 <br>&nbsp;baseurl=ftp://192.168.4.254/centos-1804 <br>&nbsp;enabled=1 <br>&nbsp;gpgcheck=0 <br>]#&nbsp; yum&nbsp; repolist <br>]#&nbsp; yum -y install xeyes <br>&nbsp;<br># <br>安装虚拟化服务器平台 <br>• 主要软件包 <br>– qemu-kvm :为 kvm 提供底层仿真支持 <br>– libvirt-daemon :libvirtd 守护进程,管理虚拟机 <br>– libvirt-client :用户端软件,提供客户端管理命令 <br>– libvirt-daemon-driver-qemu :libvirtd 连接 qemu 的驱动 <br>– virt-manager :图形管理工具 <br>&nbsp;<br>]#&nbsp; yum -y install qemu-kvm <br>]#&nbsp; yum -y install libvirt-daemon <br>]#&nbsp; yum -y install libvirt-client <br>]#&nbsp; yum -y install libvirt-daemon-driver-qemu <br>]#&nbsp; yum -y install virt-manager <br>&nbsp;<br>虚拟化服务: libvirtd <br>[root@kvm /]# systemctl status libvirtd&nbsp; #查看服务的状态 <br> <br>三 通过命令管理虚拟机 <br>virsh命令工具介绍 <br>• 提供管理各虚拟机的命令接口 <br>– 支持交互模式,查看/创建/停止/关闭 .. .. <br>– 格式:virsh 控制指令 [虚拟机名称] [参数] <br>&nbsp;<br>• 查看KVM节点(服务器)信息 <br>]$ virsh nodeinfo <br>• 列出虚拟机 <br>]$ virsh list [--all]&nbsp;&nbsp;&nbsp; #重点 <br>• 列出虚拟网络 <br>]$ virsh net-list [--all] <br>• 查看指定虚拟机的信息 <br>]$ virsh dominfo 虚拟机名称&nbsp;&nbsp;&nbsp;&nbsp; #重点 <br>]$ virsh autostart nsd01&nbsp;&nbsp;&nbsp; #设置虚拟机开机自启动 <br>]$ virsh dominfo&nbsp; nsd01 <br>]$ virsh autostart --disable nsd01&nbsp; #禁止虚拟机开机自启动 <br>]$ virsh dominfo&nbsp; nsd01 <br>• 开关机操作 <br>]$ virsh start或reboot或shutdown 虚拟机名称&nbsp;&nbsp;&nbsp; #重点 <br>• 强制关闭指定的虚拟机 <br>]$ virsh destroy 虚拟机名称&nbsp;&nbsp;&nbsp; #重点 <br>&nbsp;<br> <br>• 一台KVM虚拟机的组成&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>– xml配置文件(虚拟机描述文件):定义虚拟机的名称、UUID、CPU、内 <br>存、虚拟磁盘、网卡等各种参数设置 <br>[student@room9pc01 ~]$ ls /etc/libvirt/qemu/ <br>&nbsp;<br>– 磁盘镜像文件:保存虚拟机的操作系统及文档数据, <br>镜像路径取决于xml配置文件中的定义 <br>[student@room9pc01 ~]$ ls /var/lib/libvirt/images/ <br>&nbsp;<br>&nbsp;<br># <br>查看虚拟机xml文件内容 <br>[student@room9pc01 /]$ virsh dumpxml nsd01 <br>&nbsp; 虚拟机名称 &nbsp;<br>&nbsp; 虚拟机的UUID唯一标识 <br>&nbsp; 虚拟机磁盘文件路径 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;source file='/var/lib/libvirt/images/nsd01.qcow2'/&gt; <br>&nbsp; 虚拟机网卡信息 <br>&lt;interface type='network'&gt; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mac address='52:54:00:d4:fe:59'/&gt; <br>&nbsp;<br>[student@room9pc01 /]$ virsh dumpxml nsd01 | less <br># <br>在命令行手动制作一台虚拟机 <br>1.磁盘镜像文件 <br>]$ cd /var/lib/libvirt/images/ <br>]$ du -sh .node_base.qcow2 <br>&nbsp;<br>]$ cp&nbsp; .node_base.qcow2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nsd02.qcow2 <br>]$ du -sh nsd02.qcow2 &nbsp;<br>&nbsp;<br>2.建立新的xml配置文件, uuidgen可以生成随机的UUID值 <br>]$ cd /etc/libvirt/qemu/ <br>]$ virsh dumpxml nsd01 &gt; /etc/libvirt/qemu/nsd02.xml <br>&nbsp;<br>]$ vim&nbsp; /etc/libvirt/qemu/nsd02.xml <br>&nbsp; 1)虚拟机名称&nbsp;&nbsp; &lt;name&gt;nsd02&lt;/name&gt; <br>&nbsp; 2)虚拟机的UUID唯一标识&nbsp;&nbsp; 删除整行内容&nbsp; UUID <br>&nbsp; 3)虚拟机磁盘文件路径&nbsp;&nbsp; &lt;source file='/var/lib/libvirt/images/nsd02.qcow2'/&gt; <br>&nbsp; 4)虚拟机网卡信息 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mac address='52:54:00:d4:fe:59'/&gt; 删除整行内容 <br>3.导入虚拟机配置信息 <br>]$ virsh&nbsp; define /etc/libvirt/qemu/nsd02.xml &nbsp;<br>]$ virsh&nbsp; list --all <br>]$ virsh&nbsp; start&nbsp; nsd02 <br> <br>命令行删除虚拟机 <br>]$ virsh list --all <br>]$ virsh destroy nsd02&nbsp;&nbsp;&nbsp; #强制关闭虚拟机 <br>域 nsd02 被删除 <br>&nbsp;<br>]$ virsh list --all <br>]$ virsh undefine nsd02&nbsp;&nbsp; #删除虚拟机xml配置文件 <br>域 nsd02 已经被取消定义 <br>&nbsp;<br>]$ virsh list --all <br>]$ rm -rf /var/lib/libvirt/images/nsd02.qcow2&nbsp; #手动删除 <br>&nbsp;<br># <br>在命令行手动创建虚拟机 <br>1.建立新的磁盘文件 <br>]$ cp&nbsp; /var/lib/libvirt/images/.node_base.qcow2&nbsp; /tmp/nsd03.qcow2 <br>&nbsp;<br>]$ du -sh /tmp/nsd03.qcow2 <br>&nbsp;<br>2.建立xml配置文件 <br>]$ virsh dumpxml nsd01 &gt; /home/student/nsd03.xml <br>]$ ls /home/student/nsd03.xml &nbsp;<br>&nbsp;<br>]$ vim&nbsp; /home/student/nsd03.xml <br>&nbsp; 1)虚拟机名称&nbsp;&nbsp; &lt;name&gt;nsd03&lt;/name&gt; <br>&nbsp; 2)虚拟机的UUID唯一标识&nbsp;&nbsp; 删除整行内容&nbsp; UUID <br>&nbsp; 3)虚拟机磁盘文件路径&nbsp; &lt;source file='/tmp/nsd03.qcow2'/&gt; <br>&nbsp; 4)虚拟机网卡信息 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mac address='52:54:00:d4:fe:59'/&gt; 删除整行内容 <br>3.导入虚拟机配置信息 <br>]$ ls /etc/libvirt/qemu <br>]$ virsh&nbsp; define /home/student/nsd03.xml&nbsp; #导入虚拟机信息 <br>]$ ls /etc/libvirt/qemu <br>]$ virsh&nbsp; start&nbsp; nsd03 <br>]$ virsh&nbsp; list <br> <br>三合一:导出 修改 导入 <br>• 对虚拟机的配置进行调整 <br>– 编辑:virsh edit 虚拟机名 <br>1.建立磁盘文件 <br>]$ cp /var/lib/libvirt/images/.node_base.qcow2&nbsp; /var/lib/libvirt/images/nsd04.qcow2 <br>&nbsp;<br>]$ du -sh /var/lib/libvirt/images/nsd04.qcow2 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>2.建立xml配置文件 <br>[student@room9pc01 /]$ virsh edit nsd01 <br>&nbsp; 1)虚拟机名称&nbsp;&nbsp; &lt;name&gt;nsd04&lt;/name&gt; <br>&nbsp; 2)虚拟机的UUID唯一标识&nbsp;&nbsp; 删除整行内容&nbsp; UUID <br>&nbsp; 3)虚拟机磁盘文件路径&nbsp; &lt;source file='/var/libvirt/images/nsd04.qcow2'/&gt; <br>&nbsp; 4)虚拟机网卡信息&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;mac address='52:54:00:d4:fe:59'/&gt; 删除整行内容 <br>&nbsp;<br>[student@room9pc01 /]$ virsh list --all <br> <br>常用镜像盘类型&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>• 虚拟机的磁盘镜像文件格式&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;特点类型&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; RAW &nbsp;&nbsp; &nbsp;QCOW2 <br>&nbsp;&nbsp; &nbsp;KVM默认 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 否 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;是 <br>&nbsp;&nbsp; &nbsp;I/O效率 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 高 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;较高 <br>&nbsp;&nbsp; &nbsp;占用空间 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 大 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;小 <br>&nbsp;&nbsp; &nbsp;压缩&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; 不支持 &nbsp;&nbsp; &nbsp;支持 <br>&nbsp;&nbsp; &nbsp;后端盘复用 &nbsp;&nbsp; &nbsp; 不支持 &nbsp;&nbsp; &nbsp;支持 <br>&nbsp;&nbsp; &nbsp;快照 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 不支持 &nbsp;&nbsp; &nbsp;支持 <br>&nbsp;<br>查看磁盘镜像文件信息 <br>]$ qemu-img info /var/lib/libvirt/images/nsd04.qcow2 &nbsp;<br>&nbsp;virtual size: 2.0G (2147483648 bytes)&nbsp; #虚拟大小 <br>&nbsp;disk size: 633M&nbsp;&nbsp; #实际占用空间 <br>&nbsp;<br> <br>COW技术原理 <br>• Copy On Write,写时复制 <br>– 直接映射原始盘的数据内容 <br>– 当原始盘的旧数据有修改时,在修改之前自动将旧数据存入前端盘 <br>– 对前端盘的修改不回写到原始盘 <br>– 原始盘的数据不能做修改 <br>&nbsp;<br>快速创建qcow前端盘 <br>• qemu-img 通过 -b&nbsp; 选项复用指定原始盘 <br>– qemu-img create -f&nbsp; qcow2&nbsp; -b 原始盘&nbsp;&nbsp; 前端盘&nbsp;&nbsp; 大小 <br>&nbsp;<br>1.命令手动创建虚拟机磁盘文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>]$ cd /var/lib/libvirt/images/ <br>]$ qemu-img create&nbsp; -f&nbsp; qcow2&nbsp; -b .node_base.qcow2&nbsp; nsd05.qcow2 5G&nbsp;&nbsp;&nbsp; #通过原始盘产生前端盘 <br>&nbsp;<br>]$ qemu-img info nsd05.qcow2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #查看虚拟磁盘文件信息 <br>virtual size: 5.0G (5368709120 bytes) #虚拟大小 <br>disk size: 196K&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #实际占用空间大小 <br>backing file: .node_base.qcow2&nbsp;&nbsp; #原始盘 <br>&nbsp;<br>2.建立xml文件 <br>&nbsp;]$ virsh dumpxml nsd01 &gt; /tmp/nsd05.xml #导出虚拟机信息 <br>]$ vim /tmp/nsd05.xml #修改 虚拟机名&nbsp; UUID&nbsp; 磁盘路径&nbsp;&nbsp; 网卡MAC <br>]$ virsh define&nbsp; /tmp/nsd05.xml <br>&nbsp;<br># <br>离线访问虚拟机 <br>• 使用 guestmount 工具 <br>– 支持离线挂载 raw、qcow2 格式虚拟机磁盘 <br>– 可以在虚拟机关机的情况下,直接修改磁盘中的文档 <br>– 方便对虚拟机定制、修复、脚本维护 <br>&nbsp; &nbsp;<br>]$ virsh destroy nsd01 <br>]$ guestmount -a /var/lib/libvirt/images/nsd01.qcow2 -i&nbsp;&nbsp; /mnt/ <br>&nbsp;<br># <br>&nbsp;<br>&nbsp;<br>• DNS服务器的功能 <br>– 正向解析:根据注册的域名查找其对应的IP地址 <br>– 反向解析:根据IP地址查找对应的注册域名,不常用 <br>&nbsp;<br>&nbsp;<br>域名结构:&nbsp; 树型结构 <br>&nbsp;&nbsp; 所有的域名都必须以点结尾 <br>&nbsp;&nbsp;&nbsp; www..com.&nbsp;&nbsp; www.baidu.com. <br>&nbsp;<br>根域名:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . <br>&nbsp;<br>&nbsp;<br>一级域名:&nbsp;&nbsp;&nbsp; .cn&nbsp;&nbsp;&nbsp; .us&nbsp;&nbsp;&nbsp; .kr&nbsp;&nbsp; .tw&nbsp;&nbsp; .hk&nbsp; .jp&nbsp; ....... <br>&nbsp;<br>&nbsp;<br>二级域名:&nbsp; .com.cn&nbsp;&nbsp;&nbsp; .tedu.cn&nbsp;&nbsp; .net.cn&nbsp; .org.cn ...... <br>&nbsp;<br>&nbsp;<br>三级域名:&nbsp; nb.com.cn&nbsp;&nbsp; dc.com.cn&nbsp;&nbsp; tc.com.cn ........ <br>&nbsp;<br>&nbsp;<br>完全合格的域名(FQDN)=主机头部+注册的域名 <br>Full Qualified Domain Name,完全合格主机名 <br> <br>– 系统服务:named <br>– 默认端口:TCP/UDP 53 <br>– 运行时的虚拟根环境:/var/named/chroot/ <br>&nbsp;<br>• 主配置文件:/etc/named.conf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #本机负责解析的域名 &nbsp;<br>• 地址库文件存放路径:/var/named/&nbsp;&nbsp; #域名的解析结果 <br>&nbsp; <br>构建基本DNS服务 <br>虚拟机A: <br>1.安装软件包 <br>[root@svr7 ~]# yum -y install&nbsp; bind-chroot&nbsp;&nbsp; bind <br>&nbsp;bind-9.9.4-29.el7.x86_64&nbsp; //域名服务包 <br>&nbsp;bind-chroot-9.9.4-29.el7.x86_64&nbsp; //提供虚拟根支持,牢笼 <br>&nbsp; <br>2.修改主配置文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>[root@svr7 ~]# cp&nbsp; /etc/named.conf&nbsp; /etc/named.bak <br>[root@svr7 ~]# vim&nbsp; /etc/named.conf <br>&nbsp;options { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/var/named";&nbsp; #指定地址库文件位置 <br>&nbsp;}; <br>&nbsp;zone "tedu.cn" IN {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #设置本机负责的域名 <br>&nbsp;&nbsp; &nbsp;type master;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #设置本机为权威主DNS服务器 <br>&nbsp;&nbsp; &nbsp;file "tedu.cn.zone";&nbsp; #设置地址库文件名称 <br>&nbsp;}; <br>3.建立地址库文件tedu.cn.zone <br>]# cd /var/named/ <br>]# cp -p named.localhost tedu.cn.zone&nbsp; #-p保持权限不变 <br>]# ls -l tedu.cn.zone <br>]# vim tedu.cn.zone&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;所有的域名在地址库文件必须以点结尾 <br>&nbsp;当没有以点结尾时,自动补全地址库负责的域名 <br>&nbsp;<br>&nbsp;tedu.cn.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svr7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #声明区域DNS服务器 <br>&nbsp;svr7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 #声明DNS服务器IP地址 <br>&nbsp;www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.1.1.1&nbsp;&nbsp;&nbsp; #常规DNS正向解析 <br>&nbsp;ftp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.2 <br>[root@svr7 /]# systemctl restart named <br>虚拟机B:客户端验证 <br>]# echo nameserver 192.168.4.7&nbsp; &gt;&nbsp; /etc/resolv.conf &nbsp;<br>]# cat /etc/resolv.conf <br>&nbsp;<br>]# nslookup&nbsp; www.tedu.cn <br>]# nslookup&nbsp; ftp.tedu.cn <br> <br>多域名的DNS服务器,负责解析.com域名 <br>虚拟机A: <br>1.修改主配置文件 <br>[root@svr7 /]# vim&nbsp; /etc/named.conf &nbsp;<br>options { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/var/named"; <br>}; <br>zone "tedu.cn" IN { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type master; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file "tedu.cn.zone"; <br>}; <br>zone ".com" IN { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type &nbsp;<br>• DNS服务器的功能 <br>– 正向解析:根据注册的域名查找其对应的IP地址 <br>– 反向解析:根据IP地址查找对应的注册域名,不常用 <br>&nbsp;<br>&nbsp;<br>域名结构:&nbsp; 树型结构 <br>&nbsp;&nbsp; 所有的域名都必须以点结尾 <br>&nbsp;&nbsp;&nbsp; www..com.&nbsp;&nbsp; www.baidu.com. <br>&nbsp;<br>根域名:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; . <br>&nbsp;<br>&nbsp;<br>一级域名:&nbsp;&nbsp;&nbsp; .cn&nbsp;&nbsp;&nbsp; .us&nbsp;&nbsp;&nbsp; .kr&nbsp;&nbsp; .tw&nbsp;&nbsp; .hk&nbsp; .jp&nbsp; ....... <br>&nbsp;<br>&nbsp;<br>二级域名:&nbsp; .com.cn&nbsp;&nbsp;&nbsp; .tedu.cn&nbsp;&nbsp; .net.cn&nbsp; .org.cn ...... <br>&nbsp;<br>&nbsp;<br>三级域名:&nbsp; nb.com.cn&nbsp;&nbsp; dc.com.cn&nbsp;&nbsp; tc.com.cn ........ <br>&nbsp;<br>&nbsp;<br>完全合格的域名(FQDN)=主机头部+注册的域名 <br>Full Qualified Domain Name,完全合格主机名 <br> <br>– 系统服务:named <br>– 默认端口:TCP/UDP 53 <br>– 运行时的虚拟根环境:/var/named/chroot/ <br>&nbsp;<br>• 主配置文件:/etc/named.conf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #本机负责解析的域名 &nbsp;<br>• 地址库文件存放路径:/var/named/&nbsp;&nbsp; #域名的解析结果 <br>&nbsp; <br>构建基本DNS服务 <br>虚拟机A: <br>1.安装软件包 <br>[root@svr7 ~]# yum -y install&nbsp; bind-chroot&nbsp;&nbsp; bind <br>&nbsp;bind-9.9.4-29.el7.x86_64&nbsp; //域名服务包 <br>&nbsp;bind-chroot-9.9.4-29.el7.x86_64&nbsp; //提供虚拟根支持,牢笼 <br>&nbsp; <br>2.修改主配置文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>[root@svr7 ~]# cp&nbsp; /etc/named.conf&nbsp; /etc/named.bak <br>[root@svr7 ~]# vim&nbsp; /etc/named.conf <br>&nbsp;options { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/var/named";&nbsp; #指定地址库文件位置 <br>&nbsp;}; <br>&nbsp;zone "tedu.cn" IN {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #设置本机负责的域名 <br>&nbsp;&nbsp; &nbsp;type master;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #设置本机为权威主DNS服务器 <br>&nbsp;&nbsp; &nbsp;file "tedu.cn.zone";&nbsp; #设置地址库文件名称 <br>&nbsp;}; <br>3.建立地址库文件tedu.cn.zone <br>]# cd /var/named/ <br>]# cp -p named.localhost tedu.cn.zone&nbsp; #-p保持权限不变 <br>]# ls -l tedu.cn.zone <br>]# vim tedu.cn.zone&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;所有的域名在地址库文件必须以点结尾 <br>&nbsp;当没有以点结尾时,自动补全地址库负责的域名 <br>&nbsp;<br>&nbsp;tedu.cn.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svr7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #声明区域DNS服务器 <br>&nbsp;svr7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 #声明DNS服务器IP地址 <br>&nbsp;www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.1.1.1&nbsp;&nbsp;&nbsp; #常规DNS正向解析 <br>&nbsp;ftp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.2 <br>[root@svr7 /]# systemctl restart named <br>虚拟机B:客户端验证 <br>]# echo nameserver 192.168.4.7&nbsp; &gt;&nbsp; /etc/resolv.conf &nbsp;<br>]# cat /etc/resolv.conf <br>&nbsp;<br>]# nslookup&nbsp; www.tedu.cn <br>]# nslookup&nbsp; ftp.tedu.cn <br> <br>多域名的DNS服务器,负责解析.com域名 <br>虚拟机A: <br>1.修改主配置文件 <br>[root@svr7 /]# vim&nbsp; /etc/named.conf &nbsp;<br>options { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/var/named"; <br>}; <br>zone "tedu.cn" IN { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type master; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file "tedu.cn.zone"; <br>}; <br>zone ".com" IN { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type master; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file ".com.zone"; <br>}; <br>[root@svr7 /]# cd /var/named/ <br>[root@svr7 named]# cp -p tedu.cn.zone .com.zone <br>[root@svr7 named]# vim .com.zone <br>&nbsp;.com. &nbsp;&nbsp; &nbsp;NS&nbsp;&nbsp; &nbsp; svr7 <br>&nbsp;svr7&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;A&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>&nbsp;www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp; 3.3.3.3 <br>[root@svr7 named]# systemctl&nbsp; restart&nbsp; named <br>&nbsp;<br> <br>特殊解析记录 <br>1.基于DNS解析记录负载均衡 <br>[root@svr7 /]# vim /var/named/tedu.cn.zone&nbsp; &nbsp;<br>tedu.cn.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svr7 <br>svr7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.10 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.20 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.30 <br>ftp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.2 <br>[root@svr7 /]# systemctl restart named <br>&nbsp;<br>2.泛域名解析 <br>虚拟机A <br>[root@svr7 /]# vim /var/named/tedu.cn.zone &nbsp;<br>tedu.cn.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svr7 <br>svr7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.10 <br>ftp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.2 <br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.2.3.4 <br>[root@svr7 /]# systemctl&nbsp; restart&nbsp; named <br>&nbsp;<br>虚拟机B:测试&nbsp; nslookup&nbsp; haha.tedu.cn <br>&nbsp;<br>3.解析记录的别名 <br>虚拟机A: <br>[root@svr7 /]# vim /var/named/tedu.cn.zone <br>tedu.cn.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svr7 <br>svr7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.10 <br>ftp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.2 <br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.2.3.4 <br>mail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CNAME&nbsp;&nbsp; ftp <br>&nbsp;<br>[root@svr7 /]# systemctl restart named <br>&nbsp;<br>虚拟机B测试: <br>[root@pc207 ~]# nslookup mail.tedu.cn <br>&nbsp;<br>4.有规律的泛域名解析 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc1.tedu.cn -----&gt; 192.168.10.1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc2.tedu.cn -----&gt; 192.168.10.2 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc3.tedu.cn -----&gt; 192.168.10.3 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc4.tedu.cn -----&gt; 192.168.10.4 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ....... <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc50.tedu.cn -----&gt; 192.168.10.50 <br>&nbsp;<br>&nbsp;内置函数:$GENERATE&nbsp; 制造连续范围的数字 <br>虚拟机A <br>[root@svr7 ~]# vim /var/named/tedu.cn.zone&nbsp; &nbsp;<br>&nbsp;<br>&nbsp;$GENERATE 1-50&nbsp;&nbsp; pc$&nbsp;&nbsp; A&nbsp;&nbsp; 192.168.10.$ <br>[root@svr7 ~]# !sys <br>systemctl restart named <br>[root@svr7 ~]# &nbsp;<br>&nbsp;<br>虚拟机B测试: <br>[root@pc207 ~]# nslookup pc1.tedu.cn <br>[root@pc207 ~]# nslookup pc2.tedu.cn <br>[root@pc207 ~]# nslookup pc3.tedu.cn <br>&nbsp;<br># <br>DNS资源解析记录有哪些? <br>&nbsp; 正向解析记录(A记录) <br>&nbsp;DNS声明记录(NS记录) <br>&nbsp; 解析记录的别名(CNAME记录) <br> <br>DNS子域授权 <br>&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; 父域:.com 由虚拟机A进行解析 <br>&nbsp;&nbsp;&nbsp;&nbsp; 子域:bj..com 由虚拟机B进行解析 <br>&nbsp;<br>虚拟机B,构建DNS服务器,负责解析bj..com <br>[root@pc207 ~]# yum -y install bind bind-chroot <br>[root@pc207 ~]# cp /etc/named.conf /etc/named.bak <br>[root@pc207 ~]# vim /etc/named.conf &nbsp;<br>options { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/var/named"; <br>}; <br>zone "bj..com" IN { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type master; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file "bj..com.zone"; <br>}; <br>[root@pc207 ~]# cd /var/named/ <br>[root@pc207 named]# cp -p named.localhost bj..com.zone <br>[root@pc207 named]# vim bj..com.zone <br>bj..com. NS&nbsp;&nbsp; pc207 <br>pc207&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp; 192.168.4.207 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp; 50.60.70.80 <br>[root@pc207 /]# systemctl restart named <br>[root@pc207 /]# nslookup www.bj..com 192.168.4.207 <br>[root@pc207 /]# nslookup www..com 192.168.4.7 <br>&nbsp;<br> <br>子域授权: 让父域的DNS服务器知晓子域DNS服务器 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 让父域的DNS服务器可以解析子域的域名 <br>&nbsp;<br>虚拟机A:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>[root@svr7 ~]# vim /var/named/.com.zone &nbsp;<br>.com.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svr7 <br>bj..com.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc207 <br>svr7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>pc207&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.207 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.3.3.3 <br>[root@svr7 ~]# systemctl restart named <br>&nbsp;<br>[root@pc207 /]# nslookup www.bj..com 192.168.4.7 <br>Server:&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;192.168.4.7 <br>Address:&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7#53 <br>&nbsp;<br>Non-authoritative answer:&nbsp;&nbsp; #非权威解答 <br>Name:&nbsp;&nbsp; &nbsp;www.bj..com <br>Address: 50.60.70.80 <br>&nbsp;<br># <br>递归解析: &nbsp;<br>&nbsp;&nbsp; 由客户端发出请求,首选DNS服务器接受请求,将解析结果带回过程 <br>[root@svr7 ~]# vim /etc/named.conf &nbsp;<br>options { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/var/named"; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recursion no;&nbsp;&nbsp;&nbsp; #禁止递归解析: <br>}; <br>&nbsp;<br>迭代解析:首选DNS服务器与其他DNS服务器交互过程 <br>专业测试DNS工具 <br>[root@pc207 /]# dig www.bj..com 192.168.4.7 <br>&nbsp;<br> <br>&nbsp;主机名映射文件:/etc/hosts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 没有DNS服务器前提下,解析域名,只能为本机做域名解析 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>[root@svr7 ~]# vim&nbsp; /etc/hosts <br>192.168.4.110&nbsp;&nbsp; www.nb.com <br>&nbsp;<br>[root@svr7 ~]# ping www.nb.com <br>&nbsp;<br>域名解析过程中最高优先级为/etc/hosts&nbsp;&nbsp; 匹配即停止 <br>然后在读取/etc/resolv.conf <br> <br>缓存DNS,缓存解析结果,加快解析过程&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>三个角色:客户端&nbsp;&nbsp;&nbsp; 缓存DNS服务&nbsp;&nbsp;&nbsp; 真DNS服务器 <br>&nbsp;<br>虚拟机A:真DNS服务器 <br>虚拟机B:缓存DNS服务 <br>虚拟机C:客户端 &nbsp;<br>1.建立虚拟机C <br>&nbsp;&nbsp; 配置IP地址192.168.4.10/24,主机名为svr10.tedu.cn <br>虚拟机B:缓存DNS服务 <br>[root@pc207 /]# vim /etc/named.conf &nbsp;<br>options { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/var/named"; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; forwarders { 192.168.4.7; }; #转发给虚拟机A的IP地址 <br>}; <br>[root@pc207 /]# systemctl restart named <br>虚拟机C上验证: <br>[root@svr10 ~]# nslookup www.tedu.cn 192.168.4.207 <br>&nbsp;<br># <br>; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file ".com.zone"; <br>}; <br>[root@svr7 /]# cd /var/named/ <br>[root@svr7 named]# cp -p tedu.cn.zone .com.zone <br>[root@svr7 named]# vim .com.zone <br>&nbsp;.com. &nbsp;&nbsp; &nbsp;NS&nbsp;&nbsp; &nbsp; svr7 <br>&nbsp;svr7&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;A&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>&nbsp;www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp; 3.3.3.3 <br>[root@svr7 named]# systemctl&nbsp; restart&nbsp; named <br>&nbsp;<br> <br>特殊解析记录 <br>1.基于DNS解析记录负载均衡 <br>[root@svr7 /]# vim /var/named/tedu.cn.zone&nbsp; &nbsp;<br>tedu.cn.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svr7 <br>svr7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.10 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.20 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.30 <br>ftp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.2 <br>[root@svr7 /]# systemctl restart named <br>&nbsp;<br>2.泛域名解析 <br>虚拟机A <br>[root@svr7 /]# vim /var/named/tedu.cn.zone &nbsp;<br>tedu.cn.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svr7 <br>svr7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.10 <br>ftp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.2 <br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.2.3.4 <br>[root@svr7 /]# systemctl&nbsp; restart&nbsp; named <br>&nbsp;<br>虚拟机B:测试&nbsp; nslookup&nbsp; haha.tedu.cn <br>&nbsp;<br>3.解析记录的别名 <br>虚拟机A: <br>[root@svr7 /]# vim /var/named/tedu.cn.zone <br>tedu.cn.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svr7 <br>svr7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.10 <br>ftp&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2.2.2.2 <br>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1.2.3.4 <br>mail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; CNAME&nbsp;&nbsp; ftp <br>&nbsp;<br>[root@svr7 /]# systemctl restart named <br>&nbsp;<br>虚拟机B测试: <br>[root@pc207 ~]# nslookup mail.tedu.cn <br>&nbsp;<br>4.有规律的泛域名解析 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc1.tedu.cn -----&gt; 192.168.10.1 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc2.tedu.cn -----&gt; 192.168.10.2 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc3.tedu.cn -----&gt; 192.168.10.3 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc4.tedu.cn -----&gt; 192.168.10.4 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ....... <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc50.tedu.cn -----&gt; 192.168.10.50 <br>&nbsp;<br>&nbsp;内置函数:$GENERATE&nbsp; 制造连续范围的数字 <br>虚拟机A <br>[root@svr7 ~]# vim /var/named/tedu.cn.zone&nbsp; &nbsp;<br>&nbsp;<br>&nbsp;$GENERATE 1-50&nbsp;&nbsp; pc$&nbsp;&nbsp; A&nbsp;&nbsp; 192.168.10.$ <br>[root@svr7 ~]# !sys <br>systemctl restart named <br>[root@svr7 ~]# &nbsp;<br>&nbsp;<br>虚拟机B测试: <br>[root@pc207 ~]# nslookup pc1.tedu.cn <br>[root@pc207 ~]# nslookup pc2.tedu.cn <br>[root@pc207 ~]# nslookup pc3.tedu.cn <br>&nbsp;<br># <br>DNS资源解析记录有哪些? <br>&nbsp; 正向解析记录(A记录) <br>&nbsp;DNS声明记录(NS记录) <br>&nbsp; 解析记录的别名(CNAME记录) <br> <br>DNS子域授权 <br>&nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; 父域:.com 由虚拟机A进行解析 <br>&nbsp;&nbsp;&nbsp;&nbsp; 子域:bj..com 由虚拟机B进行解析 <br>&nbsp;<br>虚拟机B,构建DNS服务器,负责解析bj..com <br>[root@pc207 ~]# yum -y install bind bind-chroot <br>[root@pc207 ~]# cp /etc/named.conf /etc/named.bak <br>[root@pc207 ~]# vim /etc/named.conf &nbsp;<br>options { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/var/named"; <br>}; <br>zone "bj..com" IN { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type master; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file "bj..com.zone"; <br>}; <br>[root@pc207 ~]# cd /var/named/ <br>[root@pc207 named]# cp -p named.localhost bj..com.zone <br>[root@pc207 named]# vim bj..com.zone <br>bj..com. NS&nbsp;&nbsp; pc207 <br>pc207&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp; 192.168.4.207 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp; 50.60.70.80 <br>[root@pc207 /]# systemctl restart named <br>[root@pc207 /]# nslookup www.bj..com 192.168.4.207 <br>[root@pc207 /]# nslookup www..com 192.168.4.7 <br>&nbsp;<br> <br>子域授权: 让父域的DNS服务器知晓子域DNS服务器 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 让父域的DNS服务器可以解析子域的域名 <br>&nbsp;<br>虚拟机A:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>[root@svr7 ~]# vim /var/named/.com.zone &nbsp;<br>.com.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; svr7 <br>bj..com.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; NS&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; pc207 <br>svr7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>pc207&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.207 <br>www&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3.3.3.3 <br>[root@svr7 ~]# systemctl restart named <br>&nbsp;<br>[root@pc207 /]# nslookup www.bj..com 192.168.4.7 <br>Server:&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;192.168.4.7 <br>Address:&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7#53 <br>&nbsp;<br>Non-authoritative answer:&nbsp;&nbsp; #非权威解答 <br>Name:&nbsp;&nbsp; &nbsp;www.bj..com <br>Address: 50.60.70.80 <br>&nbsp;<br># <br>递归解析: &nbsp;<br>&nbsp;&nbsp; 由客户端发出请求,首选DNS服务器接受请求,将解析结果带回过程 <br>[root@svr7 ~]# vim /etc/named.conf &nbsp;<br>options { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/var/named"; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; recursion no;&nbsp;&nbsp;&nbsp; #禁止递归解析: <br>}; <br>&nbsp;<br>迭代解析:首选DNS服务器与其他DNS服务器交互过程 <br>专业测试DNS工具 <br>[root@pc207 /]# dig www.bj..com 192.168.4.7 <br>&nbsp;<br> <br>&nbsp;主机名映射文件:/etc/hosts&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 没有DNS服务器前提下,解析域名,只能为本机做域名解析 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>[root@svr7 ~]# vim&nbsp; /etc/hosts <br>192.168.4.110&nbsp;&nbsp; www.nb.com <br>&nbsp;<br>[root@svr7 ~]# ping www.nb.com <br>&nbsp;<br>域名解析过程中最高优先级为/etc/hosts&nbsp;&nbsp; 匹配即停止 <br>然后在读取/etc/resolv.conf <br> <br>缓存DNS,缓存解析结果,加快解析过程&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>三个角色:客户端&nbsp;&nbsp;&nbsp; 缓存DNS服务&nbsp;&nbsp;&nbsp; 真DNS服务器 <br>&nbsp;<br>虚拟机A:真DNS服务器 <br>虚拟机B:缓存DNS服务 <br>虚拟机C:客户端 &nbsp;<br>1.建立虚拟机C <br>&nbsp;&nbsp; 配置IP地址192.168.4.10/24,主机名为svr10.tedu.cn <br>虚拟机B:缓存DNS服务 <br>[root@pc207 /]# vim /etc/named.conf &nbsp;<br>options { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; directory&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "/var/named"; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; forwarders { 192.168.4.7; }; #转发给虚拟机A的IP地址 <br>}; <br>[root@pc207 /]# systemctl restart named <br>虚拟机C上验证: <br>[root@svr10 ~]# nslookup www.tedu.cn 192.168.4.207 <br>&nbsp;<br># <br>&nbsp;<br>&nbsp;<br>&nbsp;<br> <br>Split 分离解析(视图解析) <br>当收到客户机的DNS查询请求的时候 <br>&nbsp;&nbsp;&nbsp;&nbsp; (1)能够区分客户机的来源地址 <br>&nbsp;&nbsp;&nbsp;&nbsp; (2)为不同类型的客户机提供不同的解析结果 <br>&nbsp;&nbsp;&nbsp;&nbsp; (3)不同的客户端解析同一个域名,解析结果不同 <br>&nbsp;<br>作用:&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;为客户端就近提供服务器 <br>&nbsp;<br>BIND的view视图 <br>&nbsp;根据原地址集合将用户分离 <br>所有的zone都必须在view中 <br>&nbsp;<br>&nbsp;<br>匹配原则: <br>由上到下,匹配即停止 所有客户端都要找到自己的分类 <br>&nbsp;<br>#配置方法 <br>&nbsp;<br>view '名字' { <br>match-clients {来源地址;........;} #匹配客户机来源地址Split 分离解析(视图解析) <br>zone 'xxx.com'&nbsp; IN {&nbsp;&nbsp;&nbsp;&nbsp; #设置域名 <br>.....地址库1;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#地址库的名字 <br>};};&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br>&nbsp;<br>view '名字2' { <br>match-clients {来源地址;........;} #匹配客户机来源地址 <br>zone 'xxx.com'&nbsp; IN {&nbsp;&nbsp;&nbsp;&nbsp; #设置域名 <br>.....地址库2;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#地址库的名字 <br>};};Split 分离解析(视图解析) <br>&nbsp; <br>最后一类: 以上没有匹配的以 <br>view 'other' { <br>match-clients {any;} #匹配客户机来源地址 <br>zone 'xxx.com'&nbsp; IN {&nbsp;&nbsp;&nbsp;&nbsp; #设置域名 <br>.....地址库3;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#地址库的名字 <br>};}; <br>&nbsp;<br>案例需求及要求 <br>&nbsp;<br>配置主配置文件:/etc/named.conf <br>&nbsp;<br>view 'jx1'{ <br>&nbsp;&nbsp; &nbsp;match-clients { 192.168.4.207; }; <br>&nbsp;&nbsp; &nbsp;zone "sina.com" IN { <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;type master; <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;file "sina.com.zone"; ------&gt;解析ip为192.168.1.1 <br>&nbsp;&nbsp; &nbsp;}; <br>'}; <br>&nbsp;<br>view "jx2"{ <br>&nbsp;&nbsp; &nbsp;match-clients { 192.168.4.10; }; <br>&nbsp;&nbsp; &nbsp;zone "sina.com" IN { <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;type master; <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;file "sina.com.zone1"; ------&gt;解析IP为192.168.2.1 <br>&nbsp;&nbsp; &nbsp;}; <br>'}; <br>&nbsp;<br>view "other"{ <br>&nbsp;&nbsp; &nbsp;match-clients { any; }; <br>&nbsp;&nbsp; &nbsp;zone "sina.com" IN { <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;type master; <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;file "sina.com.other"; ------解析IP为192.168.3.1 <br>&nbsp;&nbsp; &nbsp;}; <br>&nbsp;<br>}; <br>建立地址库 sina.com.zone&nbsp; #&nbsp; sina.com.zone1&nbsp; #&nbsp; sina.com.other写入不同的解析效果 <br>&nbsp; <br>实现B,C,D 客户机访问www.sina.com分别为#1.1.1.1 #2.2.2.2 #3.3.3.3 和 访问www.tedu.com 分别为 <br>10.10.10.10 #&nbsp; &nbsp;<br>options { <br>&nbsp;&nbsp; &nbsp;directory &nbsp;&nbsp; &nbsp;"/var/named"; <br>}; <br>view "jx1"{&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;match-clients { 192.168.4.207; };&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#指定客户端ip地址 <br>&nbsp;&nbsp; &nbsp;zone "sina.com"&nbsp;&nbsp; &nbsp;IN {&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#设置第一个域名 <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;type master; <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;file "sina.com.zone";&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; &nbsp;#指定仓库文件 <br>&nbsp;&nbsp; &nbsp;}; <br>&nbsp;&nbsp; &nbsp; zone "tedu.com" IN {&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#设置第二个域名 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type master; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file "tedu.com.zone";&nbsp;&nbsp; #指定第二个仓库文件 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }; <br>}; <br>other必须在最后 匹配及停止 <br>view "jx2"{ <br>&nbsp;&nbsp; &nbsp;match-clients { 192.168.4.10; };&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#设置第二个客户端的IP地址 <br>&nbsp;&nbsp; &nbsp;zone "sina.com" IN {&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#设置此IP的一个域名 <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;type master;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;file "sina.com.zone1";&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#指定仓库 <br>&nbsp;&nbsp; &nbsp;}; <br>&nbsp;&nbsp; &nbsp;zone "tedu.com" IN {&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#设置此IP第二个域名 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type master; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file "tedu.com.zone1";&nbsp;&nbsp; &nbsp;#指定第二个仓库文件 <br>&nbsp;&nbsp; &nbsp;}; <br>}; <br>&nbsp;<br>view "other"{&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#设置其他客户端的访问 <br>&nbsp;&nbsp; &nbsp;match-clients { any; };&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;zone "sina.com" IN {&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#设置第一个域名 <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;type master; <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;file "sina.com.other";&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#指定仓库 <br>&nbsp;&nbsp; &nbsp;}; <br>&nbsp;&nbsp; &nbsp;zone "tedu.com" IN {&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#设置第二个域名 <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;type master;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;file "tedu.com.other";&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#指定第二个仓库 <br>&nbsp;&nbsp; &nbsp;}; <br>}; <br>步骤详情 : 1,设置第一个客户端 IP 然后 设置域名sina.com 设置仓库 sina.com.zone&nbsp; 在同一个view下设置第二个 域名tedu.com&nbsp;&nbsp; &nbsp; 第二个仓库 tedu.zone&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 2. 设置第二个客户端IP地址 然后 设置域名 sina.com&nbsp; (域名不变 ) 设置仓库 sina.com.zone1 (仓库变)&nbsp;&nbsp; 在同一个view下设置 刚刚设置的第二域名 tedu.com 设置第二个仓库tedu.com.zone1 <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 3&nbsp; 设置最后一个,为其他客户端域名解析&nbsp; view 为'other' 设置 设置IP为 any 域名为sina.com 仓库为sina.com.other&nbsp; 在同一个view下设置 刚刚设置的第二域名 tedu.com 设置第二个仓库tedu.com.other <br>&nbsp;<br> <br>分离解析 <br>acl访问控制 <br>acl "xxx" { 192.168.4.10; }; #定义一个acl函数 <br>view "jx2"{ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; match-clients { xxx; }; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zone "sina.com" IN { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type master; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file "sina.com.zone1"; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; zone "tedu.com" IN { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; type master; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; file "tedu.com.zone1"; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }; <br>}; <br>&nbsp;<br>&nbsp;<br># <br>RAID 阵列实现方式 <br>RAID磁盘阵列 <br>&nbsp;<br>• 廉价冗余磁盘阵列 <br>– 通过硬件/软件技术,将多个较小/低速的磁盘整合成一个大磁盘 <br>– 阵列的价值:提升I/O效率、硬件级别的数据冗余 <br>– 不同RAID级别的功能、特性各不相同 <br>&nbsp;<br>• RAID 0,条带模式 <br>– 同一个文档分散存放在不同磁盘 <br>– 并行写入以提高效率 <br>– 至少需要两块磁盘组成 <br>&nbsp;<br>• RAID 1,镜像模式 <br>– 一个文档复制成多份,分别写入不同磁盘 <br>– 多份拷贝提高可靠性,效率无提升 <br>– 至少需要两块磁盘组成 <br>&nbsp;<br>• RAID5,高性价比模式 <br>– 相当于RAID0和RAID1的折中方案 <br>– 需要至少一块磁盘的容量来存放校验数据 <br>– 至少需要三块磁盘组成 <br>&nbsp;<br>• RAID6,高性价比/可靠模式 <br>– 相当于扩展的RAID5阵列,提供2份独立校验方案 <br>– 需要至少两块磁盘的容量来存放校验数据 <br>– 至少需要四块磁盘组成 <br>&nbsp;<br>• RAID 0+1/RAID 1+0 <br>– 整合RAID 0、RAID 1的优势 <br>– 并行存取提高效率、镜像写入提高可靠性 <br>– 至少需要四块磁盘组成 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br># <br>进程管理 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; 程序: 静态的代码&nbsp;&nbsp; 占用磁盘空间 <br>&nbsp; <br>&nbsp;&nbsp;&nbsp; 进程: 动态执行的代码&nbsp;&nbsp; 占用CPU 内存 <br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; 父进程/子进程&nbsp;&nbsp; 树型结构&nbsp;&nbsp;&nbsp; 僵尸进程&nbsp;&nbsp; 孤儿进程 <br>&nbsp;&nbsp;&nbsp;&nbsp; 进程唯一标识: PID 进程的编号 <br>&nbsp;<br>&nbsp;&nbsp; systemd:上帝进程,所有进程的父进程 <br>&nbsp;<br>查看进程树 <br>• pstree — Processes Tree&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 15:15上课 <br>– 格式:pstree [选项] [PID或用户名] <br>• 常用命令选项 <br>– -a:显示完整的命令行 <br>– -p:列出对应PID编号 <br>&nbsp;<br>[root@svr7 /]# pstree <br>[root@svr7 /]# useradd lisi <br>[root@svr7 /]# pstree&nbsp; lisi <br>bash───vim <br>[root@svr7 /]# pstree -a lisi <br>bash <br>&nbsp; └─vim a.txt <br>[root@svr7 /]# pstree -ap lisi <br>&nbsp;<br>&nbsp;<br>• ps aux 操作,信息全面 <br>– 列出正在运行的所有进程 <br>用户 进程ID %CPU %内存 虚拟内存 固定内存 终端 状态 起始时间 CPU时间 程序指令 <br>&nbsp;<br>• ps -elf 操作,有进程的父进程的PID值 <br>– 列出正在运行的所有进程 <br>&nbsp;&nbsp; PPID:父进程的PID号 <br>&nbsp;<br>统计正在运行的进程有多少? <br>[root@svr7 /]# ps aux <br>&nbsp;<br>[root@svr7 /]# ps aux | wc -l <br>[root@svr7 /]# ps -elf | wc -l <br>&nbsp;<br>&nbsp;<br>进程动态排名 <br>• top 交互式工具 <br>– 格式:top [-d 刷新秒数] [-U 用户名] <br>[root@svr7 /]# top -d 1 <br>&nbsp; 按P(大写)可以进行CPU的排序 <br>&nbsp; 按M(大写)可以进行内存的排序 <br>&nbsp;load average: 0.00, 0.01, 0.05&nbsp; #CPU负载量&nbsp;&nbsp; 1分&nbsp; 5分钟&nbsp; 15 分钟 <br>&nbsp;<br>检索进程 <br>• pgrep — Process Grep <br>– 用途:pgrep [选项]... 查询条件 <br>• 常用命令选项 <br>– -l:输出进程名,而不仅仅是 PID <br>– -U:检索指定用户的进程 <br>– -x:精确匹配完整的进程名 <br>[root@svr7 /]# pgrep -l a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #检索所有进程名带a的 <br>[root@svr7 /]# pgrep -lU lisi&nbsp;&nbsp; #检索lisi的所有进程 <br>[root@svr7 /]# pstree -ap lisi&nbsp; #检索lisi的所有进程 <br>&nbsp;<br>进程的前后台调度 <br>&nbsp;<br>• 后台启动,正在运行放入后台 <br>– 在命令行末尾添加“&amp;”符号,不占用当前终端 <br>• Ctrl + z 组合键 <br>– 挂起当前进程(暂停并转入后台) <br>• jobs 命令 <br>– 查看后台任务列表 <br>• fg 命令 <br>– 将后台任务恢复到前台运行 <br>• bg 命令 <br>– 激活后台被挂起的任务 <br>[root@svr7 /]# sleep 9000 &amp;&nbsp;&nbsp; #正在运行放入后台&nbsp;&nbsp;&nbsp; &nbsp;<br>[root@svr7 /]# jobs&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #查看后台运行的进程 <br>[root@svr7 /]# sleep 8000 <br>^Z&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #输入Ctrl+z 暂停放入后台 <br>[2]+&nbsp; 已停止&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sleep 8000 <br>[root@svr7 /]# jobs <br>[root@svr7 /]# bg 2&nbsp;&nbsp;&nbsp; #将后台编号为2的进程继续运行 <br>&nbsp;<br>[root@svr7 /]# jobs &nbsp;<br>[root@svr7 /]# fg 1&nbsp; #将后台编号为1的进程恢复到前台 <br>sleep 9000 &nbsp;<br>^C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #输入Ctrl+C 结束 <br>[root@svr7 /]# jobs <br>[root@svr7 /]# fg 2&nbsp;&nbsp; #将后台编号为2的进程恢复到前台 <br>sleep 8000 &nbsp;<br>^C&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #输入Ctrl+C 结束 <br>[root@svr7 /]# jobs <br>&nbsp;<br> <br>杀死进程 <br>• 干掉进程的不同方法 <br>– Ctrl+c 组合键,中断当前命令程序 <br>– kill [-9] PID... 、kill [-9] %后台任务编号 <br>– killall [-9] 进程名... <br>– pkill 查找条件 <br>&nbsp;<br>[root@svr7 /]# sleep 1000 &amp; <br>[root@svr7 /]# jobs -l <br>[root@svr7 /]# kill 4013&nbsp;&nbsp;&nbsp; #按照PID进行杀死 <br>&nbsp;<br>[root@svr7 /]# sleep 1000 &amp; <br>[root@svr7 /]# jobs -l <br>[root@svr7 /]# kill -9 4015&nbsp; #按照PID强制杀死 <br>[root@svr7 /]# jobs -l <br>&nbsp;<br>[root@svr7 /]# sleep 1000 &amp; <br>[root@svr7 /]# sleep 1000 &amp; <br>[root@svr7 /]# sleep 1000 &amp; <br>[root@svr7 /]# jobs &nbsp;<br>&nbsp;<br>[root@svr7 /]# killall sleep&nbsp;&nbsp; #杀死所有sleep进程&nbsp; &nbsp;<br>&nbsp;<br>杀死一个用户开启的所有进程(强制踢出一个用户) <br>[root@svr7 /]# killall&nbsp; -9&nbsp; -u&nbsp; 用户名 <br>&nbsp;<br> <br>日志管理 <br>日志的功能 <br>• 系统和程序的“日记本” <br>– 记录系统、程序运行中发生的各种事件 <br>– 通过查看日志,了解及排除故障 <br>– 信息安全控制的&nbsp; 依据 <br>&nbsp;<br>• 由系统服务rsyslog统一记录/管理 <br>– 日志消息采用文本格式 <br>– 主要记录事件发生的时间、主机、进程、内容 <br>&nbsp;<br>• 常见的日志文件 <br>&nbsp;&nbsp;&nbsp; &nbsp;/var/log/messages 记录内核消息、各种服务的公共消息 <br>&nbsp;&nbsp; &nbsp;/var/log/dmesg 记录系统启动过程的各种消息 <br>&nbsp;&nbsp; &nbsp;/var/log/cron 记录与cron计划任务相关的消息 <br>&nbsp;&nbsp; &nbsp;/var/log/maillog 记录邮件收发相关的消息 <br>&nbsp;&nbsp; &nbsp;/var/log/secure 记录与访问限制相关的安全消息 <br>&nbsp;<br>日志分析 <br>• 通用分析工具 <br>– tail、tailf、less、grep等文本浏览/检索命令 <br>– awk、sed等格式化过滤工具 <br>&nbsp;<br>tailf:实时跟踪日志消息 <br>[root@svr7 /]# echo 123 &gt; /opt/1.txt <br>[root@svr7 /]# cat /opt/1.txt <br>123 <br>[root@svr7 /]# tailf /opt/1.txt <br>123 <br> <br>用户登录分析&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>• users、who、w 命令 <br>– 查看已登录的用户信息,详细度不同 <br>&nbsp;<br>&nbsp;pts:图形命令行终端 <br>&nbsp;<br>• last、lastb 命令 <br>– 查看最近登录成功/失败的用户信息 <br>[root@svr7 /]# last&nbsp; -2&nbsp; #最近登录的2条成功信息 <br>[root@svr7 /]# lastb -2&nbsp; #最近登录的2条失败信息 <br>&nbsp;<br>[root@svr7 /]# users&nbsp; #查看已登录的用户信息 <br>[root@svr7 /]# who&nbsp;&nbsp; #查看已登录的用户信息 <br>[root@svr7 /]# w&nbsp;&nbsp; #查看已登录的用户信息 <br> <br>日志消息的优先级 <br>• Linux内核定义的事件紧急程度 <br>– 分为 0~7 共8种优先级别 <br>– 其数值越小,表示对应事件越紧急/重要 <br>&nbsp;<br>&nbsp; 0&nbsp; EMERG(紧急)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 会导致主机系统不可用的情况 <br>&nbsp; 1&nbsp; ALERT(警告)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 必须马上采取措施解决的问题 <br>&nbsp; 2&nbsp; CRIT(严重)&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 比较严重的情况 <br>&nbsp; 3&nbsp; ERR(错误)&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 运行出现错误 <br>&nbsp; 4&nbsp; WARNING(提醒)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可能会影响系统功能的事件 <br>&nbsp; 5&nbsp; NOTICE(注意)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 不会影响系统但值得注意 <br>&nbsp; 6&nbsp; INFO(信息)&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 一般信息 <br>&nbsp; 7&nbsp; DEBUG(调试)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 程序或系统调试信息等 <br>&nbsp;<br>使用journalctl工具 <br>• 提取由 systemd-journal 服务搜集的日志 <br>– 主要包括内核/系统日志、服务日志 <br>&nbsp;<br>• 常见用法 <br>– journalctl | grep 关键词 <br>– journalctl -u 服务名&nbsp;&nbsp; [-p 优先级] <br>– journalctl -n 消息条数 <br>– journalctl --since="yyyy-mm-dd HH:MM:SS" -- <br>until="yyyy-mm-dd HH:MM:SS" <br>&nbsp;<br># <br>systemctl控制 <br>&nbsp;<br>• Linux系统和服务管理器 <br>– systemd是内核引导之后加载的第一个初始化进程(PID=1) <br>– 负责掌控整个Linux的运行/服务资源组合 <br>&nbsp;<br>systemd <br>• 一个更高效的系统&amp;服务管理器 <br>– 开机服务并行启动,各系统服务间的精确依赖 <br>– 配置目录:/etc/systemd/system/ <br>– 服务目录:/lib/systemd/system/ <br>– 主要管理工具:systemctl <br>&nbsp;<br>对于服务的管理 <br>&nbsp;systemctl restart&nbsp; 服务名&nbsp;&nbsp;&nbsp; #重起服务 <br>&nbsp;systemctl start&nbsp;&nbsp;&nbsp; 服务名&nbsp;&nbsp;&nbsp; #开启服务 <br>&nbsp;systemctl stop&nbsp;&nbsp;&nbsp;&nbsp; 服务名&nbsp;&nbsp;&nbsp; #停止服务 <br>&nbsp;systemctl status&nbsp;&nbsp; 服务名&nbsp;&nbsp;&nbsp; #查看服务当前的状态 <br>&nbsp; <br>&nbsp;systemctl enable&nbsp;&nbsp; 服务名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #设置服务开机自启动 <br>&nbsp;systemctl disable&nbsp; 服务名&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #设置服务不开机自启动 <br>&nbsp;systemctl is-enabled&nbsp; 服务名&nbsp;&nbsp; #查看是否为开机自启 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>RHEL6 运行级别&nbsp;&nbsp;&nbsp; 不同级别,开启的服务不同 <br>&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0:关机&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1:单用户模式(基本功能的实现,激活成功教程Linux密码) <br>&nbsp;&nbsp; &nbsp; 2:多用户字符界面(不支持网络)&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; 3:多用户字符界面(支持网络)服务器默认的运行级别&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; 4:未定义 <br>&nbsp;&nbsp; &nbsp; 5:图形界面&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp; 6:重起 &nbsp;<br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; 切换运行级别:init&nbsp; 5&nbsp; &nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>RHEL7 运行模式 &nbsp;<br>&nbsp;<br>&nbsp;&nbsp; 字符模式:multi-user.target <br>&nbsp;&nbsp; 图形模式:graphical.target <br>&nbsp;<br>[student@room9pc01 ~]$ rht-vmctl reset classroom <br>classroom [OK] <br>域 classroom 已开始 <br>&nbsp;<br>[student@room9pc01 ~]$ rht-vmctl reset server <br>server [OK] <br>域 server 已开始 <br>&nbsp;<br>[root@svr7 /]# ls -l /lib/systemd/system/ <br>&nbsp;<br>当前直接切换到字符模式 <br>]# systemctl isolate multi-user.target&nbsp;&nbsp; = init 3 <br>当前直接切换到图形模式 <br>]# systemctl isolate graphical.target&nbsp;&nbsp; = init 5 <br>&nbsp;<br>查看每次开机默认进入模式 <br>[root@svr7 /]# systemctl get-default <br>multi-user.target <br>&nbsp;<br>设置永久策略,每次开机自动进入graphical.target <br># systemctl set-default graphical.target <br># reboot &nbsp;<br>&nbsp;<br> <br>DNS分离解析与Web结合 <br>虚拟机C:构建Web服务 <br>[root@svr10 ~]# yum -y install httpd <br>[root@svr10 ~]# cat /etc/httpd/conf.d/nsd01.conf &nbsp;<br>&lt;VirtualHost *:80&gt; <br>&nbsp; ServerName www..com <br>&nbsp; DocumentRoot /var/www/ <br>&lt;/VirtualHost&gt; <br>&lt;VirtualHost *:80&gt; <br>&nbsp; ServerName www.163.com <br>&nbsp; DocumentRoot /var/www/163 <br>&lt;/VirtualHost&gt; <br>[root@svr10 ~]# <br>[root@svr10 ~]# mkdir /var/www/ /var/www/163 <br>[root@svr10 ~]# echo '&lt;h1&gt;Web1 ' &gt; /var/www//index.html <br>[root@svr10 ~]# echo '&lt;h1&gt;Web1 163' &gt; /var/www/163/index.html <br>&nbsp;<br>[root@svr10 ~]# systemctl restart httpd <br># <br>虚拟机D构建Web服务 <br>[root@pc20 ~]# yum -y install httpd <br>[root@pc20 ~]# cat /etc/httpd/conf.d/nsd01.conf &nbsp;<br>&lt;VirtualHost *:80&gt; <br>&nbsp; ServerName www..com <br>&nbsp; DocumentRoot /var/www/ <br>&lt;/VirtualHost&gt; <br>&lt;VirtualHost *:80&gt; <br>&nbsp; ServerName www.163.com <br>&nbsp; DocumentRoot /var/www/163 <br>&lt;/VirtualHost&gt; <br>[root@pc20 ~]# mkdir /var/www/ /var/www/163 <br>[root@pc20 ~]# echo '&lt;h1&gt;Web2 ' &gt; /var/www//index.html <br>[root@pc20 ~]# echo '&lt;h1&gt;Web2 163' &gt; /var/www/163/index.html <br>[root@pc20 ~]# systemctl restart httpd <br>[root@pc20 ~]# &nbsp;<br> <br>虚拟机A实现DNS分离解析 <br>[root@svr7 /]# yum -y install bind bind-chroot <br>&nbsp;[root@svr7 /]# cat /etc/named.conf &nbsp;<br>options { <br>&nbsp;&nbsp; &nbsp;directory &nbsp;&nbsp; &nbsp;"/var/named"; <br>}; <br>view "nsd" { <br>&nbsp; match-clients&nbsp; { 192.168.4.7;&nbsp; }; <br>&nbsp; zone ".com" IN { <br>&nbsp;&nbsp; &nbsp;type master; <br>&nbsp;&nbsp; &nbsp;file ".com.zone"; <br>&nbsp; }; <br>&nbsp; zone "163.com" IN { <br>&nbsp;&nbsp; &nbsp;type master; <br>&nbsp;&nbsp; &nbsp;file "163.com.zone"; <br>&nbsp; }; <br>}; <br>view "other" { <br>&nbsp; match-clients&nbsp; { any;&nbsp; }; <br>&nbsp; zone ".com" IN { <br>&nbsp;&nbsp; &nbsp;type master; <br>&nbsp;&nbsp; &nbsp;file ".com.other"; <br>&nbsp; }; <br>&nbsp; zone "163.com" IN { <br>&nbsp;&nbsp; &nbsp;type master; <br>&nbsp;&nbsp; &nbsp;file "163.com.other"; <br>&nbsp; }; <br>}; <br>[root@svr7 /]# cat /var/named/.com.zone &nbsp;<br>&nbsp;&nbsp; &nbsp;.com. &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;NS&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;svr7 <br>&nbsp;&nbsp; &nbsp;svr7&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>&nbsp;&nbsp; &nbsp;www &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.10 <br>[root@svr7 /]# cat /var/named/163.com.zone &nbsp;<br>&nbsp;&nbsp; &nbsp;163.com. &nbsp;&nbsp; &nbsp;NS&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;svr7 <br>&nbsp;&nbsp; &nbsp;svr7&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>&nbsp;&nbsp; &nbsp;www&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.10 <br>[root@svr7 /]# cat /var/named/.com.other <br>&nbsp;&nbsp; &nbsp;.com. &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;NS&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;svr7 <br>&nbsp;&nbsp; &nbsp;svr7&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>&nbsp;&nbsp; &nbsp;www&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.20 <br>[root@svr7 /]# cat /var/named/163.com.other <br>&nbsp;&nbsp; &nbsp;163.com. &nbsp;&nbsp; &nbsp;NS&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;svr7 <br>&nbsp;&nbsp; &nbsp;svr7&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.7 <br>&nbsp;&nbsp; &nbsp;www&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.4.20 <br>[root@svr7 /]# systemctl restart named <br>&nbsp;<br>为四台虚拟机指定DNS服务器地址 <br>[root@svr7 /]# echo nameserver 192.168.4.7 &gt; /etc/resolv.conf &nbsp;<br>&nbsp;<br>[root@pc207 ~]#&nbsp; echo nameserver 192.168.4.7 &gt; /etc/resolv.conf <br>&nbsp;<br>[root@svr10 ~]#&nbsp; echo nameserver 192.168.4.7 &gt; /etc/resolv.conf <br>&nbsp;<br>[root@pc20 ~]#&nbsp; echo nameserver 192.168.4.7 &gt; /etc/resolv.conf <br>&nbsp;<br> <br>部署DHCP服务器 <br>• Dynamic Host Configuration Protocol <br>– 动态主机配置协议,由 IETF(Internet 网络工程师任 <br>务小组)组织制定,用来简化主机地址分配管理 <br>&nbsp;<br>• 主要分配以下入网参数 <br>– IP地址/子网掩码/广播地址 <br>– 默认网关地址、DNS服务器地址 <br>&nbsp;<br>• DHCP地址分配的四次会话,以广播进行,先到先得 <br>– DISCOVERY --&gt; OFFER --&gt; REQUEST --&gt;ACK <br>&nbsp;<br>&nbsp; 一个网络中,只能有一台DHCP服务器 <br>&nbsp;<br>• 服务端基本概念 <br>– 租期:允许客户机租用IP地址的时间期限,单位为秒 <br>– 作用域:分配给客户机的IP地址所在的网段 <br>– 地址池:用来动态分配的IP地址的范围 <br>&nbsp;<br>虚拟机A: <br>1.安装软件包dhcp <br>[root@svr7 /]# yum -y install dhcp <br>2.修改配置文件 <br>[root@svr7 /]# vim /etc/dhcp/dhcpd.conf &nbsp;<br>&nbsp;&nbsp; :r&nbsp; /usr/share/doc/dhcp*/dhcpd.conf.example <br>&nbsp;<br>&nbsp;subnet 192.168.4.0 netmask 255.255.255.0 { #分配网段 <br>&nbsp; range 192.168.4.100 192.168.4.200;&nbsp;&nbsp;&nbsp;&nbsp; #分配IP地址范围 <br>&nbsp; option domain-name-servers 192.168.4.7;&nbsp; #分配DNS地址 <br>&nbsp; option routers 192.168.4.254;&nbsp;&nbsp;&nbsp; #网关地址 <br>&nbsp; default-lease-time 600; <br>&nbsp; max-lease-time 7200; <br>&nbsp;} <br>3.重启服务 <br>[root@svr7 /]# systemctl restart dhcpd <br>&nbsp;<br> <br>网络装机概述 <br>&nbsp;<br>网络装机的优势 <br>• 规模化:同时装配多台主机 <br>• 自动化:装系统、配置各种服务 <br>• 远程实现:不需要光盘、U盘等物理安装介质 <br>&nbsp;<br>什么是PXE网络 <br>• PXE,Pre-boot eXecution Environment <br>– 预启动执行环境,在操作系统之前运行 <br>– 可用于远程安装 <br>&nbsp;<br>• 工作模式 <br>– PXE client 集成在网卡的启动芯片中 <br>– 当计算机引导时,从网卡芯片中把PXE client调入内存 <br>执行,获取PXE server配置、显示菜单,根据用户选 <br>择将远程引导程序下载到本机运行 <br>&nbsp;<br>&nbsp;<br>PXE组件及过程分析 <br>• 需要哪些服务组件? <br>– DHCP服务,分配IP地址、定位引导程序 <br>– TFTP服务,提供引导程序下载 <br>– HTTP服务(或FTP/NFS),提供yum安装源 <br>&nbsp;<br>• 客户机应具备的条件 <br>– 网卡芯片必须支持PXE协议 <br>– 主板支持从网卡启动 <br># <br>一 构建DHCP服务,指定tftp服务器地址以及网卡引导文件名称 <br>[root@svr7 /]# vim /etc/dhcp/dhcpd.conf &nbsp;<br>subnet 192.168.4.0 netmask 255.255.255.0 { <br>&nbsp; range 192.168.4.100 192.168.4.200; <br>&nbsp; option domain-name-servers 192.168.4.7; <br>&nbsp; option routers 192.168.4.254; <br>&nbsp; default-lease-time 600; <br>&nbsp; max-lease-time 7200; <br>&nbsp; next-server&nbsp; 192.168.4.7;&nbsp; #指定下一个服务器tftp服务器地址 <br>&nbsp; filename&nbsp; "pxelinux.0";&nbsp;&nbsp;&nbsp; #指定网卡引导文件名称 <br>} <br>[root@svr7 /]# systemctl restart dhcpd <br>&nbsp;<br>&nbsp;pxelinux.0:网卡引导文件(网络装机说明书) 二进制文件 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 安装一个软件即可获得该文件 <br> <br>二&nbsp; 构建tftp服务,提供众多的引导文件&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; tftp:简单的文件传输协议&nbsp;&nbsp; 默认端口 69 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 默认共享路径:/var/lib/tftpboot/ <br>&nbsp;<br>1.安装软件tftp-server <br>[root@svr7 /]# yum -y install tftp-server <br>[root@svr7 /]# systemctl restart tftp <br>&nbsp;<br>2.部署pxelinux.0文件 <br>]# yum provides */pxelinux.0&nbsp; #查询那个软件包产生该文件 <br>]# yum -y install syslinux <br>]# rpm -ql syslinux | grep pxelinux.0&nbsp; #查询软件安装清单 <br>&nbsp;<br>]# cp /usr/share/syslinux/pxelinux.0&nbsp; /var/lib/tftpboot/ <br>]# ls /var/lib/tftpboot/ <br>&nbsp;<br>&nbsp;<br>&nbsp;pxelinux.0--&gt;读取菜单文件 &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /var/lib/tftpboot/pxelinux.cfg/default <br>&nbsp;<br>3.部署菜单文件 <br>]# poweroff&nbsp;&nbsp; #关闭机器,图形添加光驱设备,放入光盘文件 <br>]# mount /dev/cdrom&nbsp; /mnt/ <br>]# ls /mnt/ <br>&nbsp;<br>]# mkdir /var/lib/tftpboot/pxelinux.cfg <br>]# cp /mnt/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default <br>&nbsp;<br>]# ls /var/lib/tftpboot/ <br>&nbsp;<br>]# ls /var/lib/tftpboot/pxelinux.cfg/ <br>&nbsp;<br>4.部署图形模块与背景图片 <br>&nbsp; vesamenu.c32(图形模块) <br>&nbsp; splash.png(背景图片) <br>&nbsp;<br>[root@svr7 ~]# cp /mnt/isolinux/vesamenu.c32 /mnt/isolinux/splash.png /var/lib/tftpboot/ <br>&nbsp;<br>[root@svr7 ~]# ls /var/lib/tftpboot/ <br>pxelinux.0&nbsp; pxelinux.cfg&nbsp; splash.png&nbsp; vesamenu.c32 <br>&nbsp;<br>5.部署启动内核与驱动程序 <br>&nbsp; vmlinuz(启动内核) <br>&nbsp; initrd.img(驱动程序) <br>&nbsp;<br>[root@svr7 ~]# cp /mnt/isolinux/vmlinuz /mnt/isolinux/initrd.img /var/lib/tftpboot/ <br>&nbsp;<br>[root@svr7 ~]# ls /var/lib/tftpboot/ <br>initrd.img&nbsp; pxelinux.cfg&nbsp; vesamenu.c32 <br>pxelinux.0&nbsp; splash.png&nbsp;&nbsp;&nbsp; vmlinuz <br>&nbsp;<br>6.修改菜单文件 <br>]# vim&nbsp; /var/lib/tftpboot/pxelinux.cfg/default <br>&nbsp;&nbsp;&nbsp;&nbsp; 末行模式 开启行号&nbsp; :set nu <br>&nbsp;<br>&nbsp; 1 default vesamenu.c32&nbsp;&nbsp; #默认加载图形的模块 <br>&nbsp; 2 timeout 600&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #读秒时间&nbsp;&nbsp; 1/10秒 <br>&nbsp;<br>&nbsp; 10 menu background splash.png&nbsp; #背景图片 <br>&nbsp; 11 menu title NSD1906 PXE Server&nbsp;&nbsp; #标题 <br>&nbsp;<br>&nbsp;61 label linux <br>&nbsp;62&nbsp;&nbsp; menu label ^Install CentOS 7&nbsp;&nbsp; #菜单的显示内容 <br>&nbsp;63&nbsp;&nbsp; menu default&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #读秒结束后默认选择 <br>&nbsp;64&nbsp;&nbsp; kernel vmlinuz&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #加载启动内核 <br>&nbsp;65&nbsp;&nbsp; append initrd=initrd.img&nbsp;&nbsp; #加载驱动程序 <br># <br>总结: <br>&nbsp;&nbsp; 1.DHCP---&gt; IP地址&nbsp; next-server filename&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; 2.tftp---&gt; pxelinux.0 <br>&nbsp;&nbsp; 3.pxelinux.0---&gt; 访问菜单文件 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /var/lib/tftpboot/pxelinux.cfg/default <br>&nbsp;&nbsp; 4.default---&gt;图形的模块&nbsp; 背景图片&nbsp; 启动内核&nbsp; 驱动程序 <br>&nbsp;<br>测试验证: <br>[root@svr7 ~]# systemctl restart dhcpd <br>[root@svr7 ~]# systemctl restart tftp <br>&nbsp;<br>创建一台新的虚拟机进行测试验证 <br>&nbsp; 1.安装方式: 网络引导安装(PXE) <br>&nbsp; 2.内存需要: 2048M <br>&nbsp; 3.网络类型:&nbsp; private1 <br> <br>构建Web服务器,共享众多的软件包 <br>&nbsp;<br>1.安装软件包 <br>[root@svr7 ~]# yum -y install httpd <br>2.重启httpd服务 <br>[root@svr7 ~]# systemctl&nbsp; restart httpd <br>3.挂载光驱设备 <br>[root@svr7 ~]# mkdir /var/www/html/centos <br>[root@svr7 ~]# mount /dev/cdrom&nbsp; /var/www/html/centos <br>mount: /dev/sr0 写保护,将以只读方式挂载 <br>[root@svr7 ~]# ls /var/www/html/centos <br>[root@svr7 ~]# systemctl restart httpd <br>&nbsp;<br>[root@svr7 ~]# firefox 192.168.4.7/centos <br> <br>实现无人值守安装,生成应答文件 <br>&nbsp;<br>1.安装可以生成应答文件的软件包 <br>[root@svr7 ~]# yum -y install system-config-kickstart &nbsp;<br>&nbsp;<br>2.运行system-config-kickstart&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>]# LANG=en&nbsp; system-config-kickstart&nbsp; #英文进行运行 <br>点击 "软件包选择(Package Selection)" 查看是否可以进行选择 <br>需要Yum仓库的支持:指向光盘的内容仓库,标识必须为[development] <br>&nbsp;<br>[root@svr7 ~]# vim /etc/yum.repos.d/local.repo &nbsp;<br>[development] <br>name=CentOS-$releasever - Base <br>baseurl=ftp://192.168.4.254/centos-1804 <br>enabled=1 <br>gpgcheck=0 <br>&nbsp;<br>[root@svr7 ~]# LANG=en&nbsp; system-config-kickstart <br>&nbsp;点击 "软件包选择(Package Selection)" 查看是否可以进行选择 <br>&nbsp;<br>[root@svr7 ~]# ls /root/ks.cfg &nbsp;<br>/root/ks.cfg <br>[root@svr7 ~]# vim /root/ks.cfg &nbsp;<br>&nbsp;<br>3.利用Web服务器将ks.cfg进行共享 <br>[root@svr7 ~]# cp /root/ks.cfg&nbsp; /var/www/html/ <br>[root@svr7 ~]# ls /var/www/html/ <br>&nbsp;<br>4.修改菜单文件,指定应答文件位置 <br>]# vim /var/lib/tftpboot/pxelinux.cfg/default &nbsp;<br>label linux <br>&nbsp; menu label ^Install CentOS 7 <br>&nbsp; menu default <br>&nbsp; kernel vmlinuz <br>&nbsp; append initrd=initrd.img ks=http://192.168.4.7/ks.cfg <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br> <br>rsync 同步控制 <br>&nbsp;-n 测试同步 不做修改 &nbsp;<br>&nbsp;--delete 删除目标文件夹内多余的文档 <br>&nbsp;-a 把目录和文件保持原封不动的同步 <br>&nbsp;-z 同步时压缩 <br>&nbsp;-v&nbsp; 显示传输过程&nbsp; &nbsp;<br>&nbsp;rsyc -av /nsd/&nbsp; /opt/ # <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #/ 加/是把源目录数据同步到目标目录下 不同步源目录本身 <br>&nbsp;<br> <br>运程同步 &nbsp;<br>rsync+ssh (远程同步) <br>列出 &nbsp;<br>格式: &nbsp;<br>&nbsp;下行 (下载):rsync [...] user@host :远程目录&nbsp; 本地目录 <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;rsync -av /etc root@192.168.4.207:/etc/passwd&nbsp; /opt/ <br>上行(上传)&nbsp; rsync [参数] 本地目录&nbsp; user@host&nbsp; 远程目录 <br>&nbsp;&nbsp;&nbsp; &nbsp;rsync -av /etc/passwd root@192.168.4.207:/opt/ <br> <br>实时远程同步 <br>-通过公私钥,实现无密码验证 <br>&nbsp; ssh-keygen&nbsp; 全部回车 <br> ssh-copy-id root@192.168.4.207 传递公钥  <br>二 监控目录 <br>安装软件 &nbsp;<br>&nbsp;&nbsp;&nbsp; 步骤一:安装gcc与make开发工具 <br>[root@svr7 ~]# yum -y install gcc <br>[root@svr7 ~]# yum -y install make <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; 步骤二:进行tar解包 <br>]# tar -xf /tools/inotify-tools-3.13.tar.gz <br>]# cd /inotify-tools-3.13/ <br>&nbsp;<br>&nbsp;&nbsp; 步骤三:运行configure脚本 <br>]# cd /inotify-tools-3.13/ <br>]# https://www.cnblogs.com/liujiab/p/configure &nbsp;<br>&nbsp;<br>&nbsp;&nbsp; 步骤四:make编译生成可以执行的程序 <br>]# cd /inotify-tools-3.13/ <br>]# make install <br>&nbsp;<br> 步骤五:检查软件安装 <br>]# ls /usr/local/bin/inotifywait <br>&nbsp;<br>inotifywait   <br>&nbsp;&nbsp; &nbsp;-m 持续监控(捕捉事件后不退出) <br>&nbsp;&nbsp; &nbsp;-r 递归监控,包括子目录文件 <br>&nbsp;&nbsp; &nbsp;-q 减少屏幕输出信息 <br>&nbsp;&nbsp; &nbsp;-e 指定监控的 modify move create delete attrib 等事件类别 <br>&nbsp;&nbsp; &nbsp;## 默认全部监控 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;(权限变化) <br>&nbsp;<br>创建一个脚本 实现同步 rsync.sh <br>&nbsp;&nbsp; &nbsp;循环:for循环适合写有次数的循环 <br>&nbsp;&nbsp; &nbsp;死循环:while循环适合写无线次数的循环 <br>&nbsp;<br>格式: while [条件] <br>&nbsp;&nbsp;  do? <br>&nbsp;&nbsp; &nbsp; 要重复的代码 <br>   done <br>vim /rsync.sh&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br>#!/bin/bash <br>while inotifywait -r /lj/&nbsp;&nbsp; &nbsp;<br>  #while会自动运行命令 当命令有输出时执行do和done之间的命令 <br>do <br>&nbsp;&nbsp;&nbsp; rsync -a --delete /lj root@192.168.4.207:/lj <br>done <br>sh /rsync.sh &amp;  #后台运行 同步 <br>###################################### <br>&nbsp;<br>Cobbler &nbsp;<br>概念 :  <br>  -cobbler是一款快速的网络系统部署工具 <br>  -集中管理所需要的服务,如DHCP,DNS,TFTP,Web  <br>  -Cobbler内容集成了一个镜像版本仓库 <br>  -Cobbler内部集成一个ks应答文件仓库 <br>  -Cobbler还提供了包括yum源管理,web界面管理,API接口,电脑管理等功能 <br>&nbsp;<br>利用rsync 从真机下载cobbler <br>&nbsp;rsync -av student@192.168.4.254:/home/student/桌面/cobbler.zip /cobbler <br>&nbsp;<br>&nbsp;<br>安装 cobbler主程序,工具包 <br>yum -y install dhcp httpd mod_ssl  #安装服务程序 <br>yum -y install /cobbler/*rpm     #利用yum安装目录下所有rpm包 <br>rpm -q cobbler &nbsp;&nbsp; &nbsp;           #检测安装结果 <br>cobbler-2.8.2-1.el7.x86_64 <br>&nbsp;<br>2配置cobbler <br>vim /etc/cobbler/wettings &nbsp;<br>&nbsp;next_server:192.168.4.33 &nbsp;&nbsp; &nbsp;#设置下一个服务还为本机 <br>&nbsp;server :192.168.4.33 &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#设置本机为cobler的服务器 <br>&nbsp;manage_decp :1&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#设置cobbler管理dhcp服务器 <br>&nbsp;pxe_just_once&nbsp; :1 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#防止客户端重复安装操作系统 <br>&nbsp;<br>&nbsp;开机启动项 : 匹配及停止 <br>&nbsp;&nbsp; &nbsp;1 硬盘启动&nbsp;&nbsp; 2光驱设备&nbsp; 3U盘&nbsp; 4网络引导 <br>&nbsp;<br>3 配置cobbler的dhcp服务 <br>vim /etc/cobbler/dhcp.template <br>格式: &nbsp;&nbsp;&nbsp; &nbsp;:%s /新.https://www.cnblogs.com/liujiab/旧.https://www.cnblogs.com/liujiab/g <br>&nbsp;&nbsp; &nbsp;:%s /192.168.1/192.168.4/g #替换字符 <br>5 次替换,共 4 行 <br>&nbsp;<br>4 绝对路径解压 cobbler_boot.tar.gz &nbsp;&nbsp; &nbsp;#众多引导文件 <br>压缩包如果压缩时用-P选项,解压时会以绝对路径解压到目录下,不需要指定目录 <br>&nbsp;<br>- tar -tf /cobbler/cobbler_boot.tar.gz&nbsp; #查看压缩的默认绝对路径 <br>- tar -xPf /cobbler/cobbler_boot.tar.gz&nbsp; #-P是以绝对路径解压   <br>&nbsp;&nbsp;&nbsp; tar: 从成员名中删除开头的“/”&nbsp;   <br>- ls /var/lib/cobbler/loaders/&nbsp;&nbsp; #查看解压结果 <br>COPYING.elilo&nbsp;&nbsp;&nbsp;&nbsp; COPYING.yaboot&nbsp; grub-x86_64.efi&nbsp; menu.c32&nbsp;&nbsp;&nbsp; README <br>COPYING.syslinux&nbsp; elilo-ia64.efi&nbsp; grub-x86.efi&nbsp;&nbsp;&nbsp;&nbsp; pxelinux.0&nbsp; yaboot <br>&nbsp;<br>3 重启cobbler服务 开机自启 <br>&nbsp; &nbsp;&nbsp; &nbsp;systemctl restart cobbler &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; #启动cobbler <br>&nbsp;&nbsp; &nbsp;systemctl enable cobbler &nbsp;<br>&nbsp;<br>&nbsp;&nbsp;&nbsp; &nbsp;systemctl restart httpd&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; #启动httpd服务 <br>&nbsp;&nbsp; &nbsp;systemctl enable <br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp; &nbsp;systemctl restart tftp  &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; #启动tftp服务 <br>&nbsp;&nbsp; &nbsp;systemctl enable  &nbsp;<br>&nbsp;<br>&nbsp;&nbsp; &nbsp;systemctl restart rsyncd&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; #启动rsyncd同步服务 <br>&nbsp;&nbsp; &nbsp;systemctl enable <br>&nbsp;<br>4同步刷新cobbler配置 <br>cobbler sync&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;#检测所有配置是否正确 <br>..... <br>* TASK COMPLETE * <br>5访问测试 <br>firefox https://192.168.4.33/cobbler_web <br>&nbsp;<br>###################################3 <br>cobbler应用 <br>mkdir /dvd <br>挂载光盘到 /dvd <br>mount /dev/cdrom /dvd <br>ls /dvd <br>   <br>  cobbler import --path=挂载点 --name=菜单名字 <br># cobbler import --path=/dvd --name=CentOS7#光盘镜像导入 <br>&nbsp;<br>cobbler导入的镜像放在:/var/www/cobbler/ks_mirror <br> <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br> <br>环境变量PATH <br>&nbsp;<br>&nbsp;&nbsp; &nbsp;PATH:存放执行命令程序的搜寻路径 <br>&nbsp;<br>echo $PATH <br>/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin <br>&nbsp;<br>可以将自己编写的脚本变为一条可以tab的命令 <br>echo $PATH <br>vim /opt/xxx.sh <br>&nbsp;#!/bin/bash <br>&nbsp; echo 'haha' <br>cp /opt/xxx.sh /usr/bin <br>~]#xxx.sh <br> haha &nbsp;<br>                  <br>&nbsp;<br>&nbsp;<br>##################################### <br>权限掩码 umask值 <br>root创建目录的默认权限 <br>[root@localhost ~]# umask <br>0022 <br>[root@localhost ~]# mkdir /ljx <br>[root@localhost ~]# ls -ld /ljx <br>drwxr-xr-x. 2 root root 6 7月&nbsp; 22 17:35 /ljx <br>&nbsp;<br>&nbsp;<br>[root@localhost ~]# umask 777 <br>[root@localhost~]#mkdir&nbsp;&nbsp; ljxx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>[root@localhost ~]# ls -ld /ljxx <br>d---------. 2 root root 6 7月&nbsp; 22 17:36 /ljxx <br>&nbsp;<br>[root@localhost ~]# umask 000 &nbsp;<br>[root@localhost ~]# mkdir /ljxxx <br>[root@localhost ~]# ls -ld /ljxxx <br>drwxrwxrwx. 2 root root 6 7月&nbsp; 22 17:37 /ljxxx <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br> <br>网络的功能 <br>信息传递,资源共享,提高可靠性,增加系统处理性能 <br>&nbsp;<br>60年代&nbsp;&nbsp; 分组交换 提高传输效率 <br>70~80年代&nbsp;&nbsp; tcp/ip&nbsp; 统一标准 <br>90年代&nbsp;&nbsp; web <br>&nbsp;<br>wan 广域网&nbsp;&nbsp; 几十~几千千米 &nbsp;<br>lan 局域网&nbsp; 1千米以内&nbsp; 办公室, 教室, 机房,宿舍 <br>&nbsp;<br>cisco 思科 &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; 华为 <br>路由器&nbsp;&nbsp; 交换机 <br>&nbsp;<br>拓扑结构: <br>点对点&nbsp; 广域网 <br>星形&nbsp; 局域网&nbsp; 易于实现,易于扩展,易于故障排查 <br>网状&nbsp; 局域网&nbsp; 增加可靠,提供容错 <br>&nbsp;<br>iso 国际标准化组织&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>osi 七层参考模型,理论框架 <br>tcp/ip 五层&nbsp; 实际应用 <br>&nbsp;<br>1000Mbit <br>&nbsp;<br>1000=1k <br>1000k=1M <br>&nbsp;<br>1000000000 <br>&nbsp;<br>传输层&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 数据段 <br>网络层&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 数据包 <br>数据链路层&nbsp;&nbsp; 数据帧 <br>物理层 &nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; 比特流 <br>&nbsp;<br>视图 <br>用户视图 保存 <br>系统视图 &nbsp;<br>接口视图 <br>协议视图 <br>&nbsp;<br>ctrl+z 等于 return <br>&nbsp;<br>&nbsp;<br>[Huawei]sysname SW1&nbsp;&nbsp;&nbsp;&nbsp; //修改主机名 <br>[Huawei]display version&nbsp;&nbsp;&nbsp;&nbsp; //查看软硬件版本 <br>[Huawei]display current-configuration&nbsp;&nbsp;&nbsp; //查看正在运行的配置,按空格翻页 <br>&nbsp;<br>aaa模式,负责授权认证审计,可以在此模式创建账户和密码 <br>&nbsp;<br>ctrl + ]&nbsp;&nbsp; 彻底退出系统 <br>&nbsp;<br>&lt;Huawei&gt;save&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //保存设置 <br>&lt;Huawei&gt;reboot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //重启设备 <br>&nbsp;<br>&lt;Huawei&gt;reset saved-configuration&nbsp; //重置配置文件(恢复出厂) <br>&lt;Huawei&gt;reboot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //重启设备 <br>&nbsp;<br>ip &nbsp;<br>mac 硬件地址&nbsp; 物理地址 ,全球唯一不重复&nbsp; 48bit <br>&nbsp;<br>&nbsp;<br>0123456789ABCDEF <br>&nbsp;<br>关闭各种信息提示(控制台超时后失效) <br>undo terminal debugging <br>undo terminal monitor &nbsp;<br>undo terminal logging &nbsp;<br>undo terminal trapping &nbsp;<br>&nbsp;<br>设置控制台永不超时 <br>sys <br>user-interface console 0 <br>idle-timeout 0 <br>&nbsp;<br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ <br>1.计算机网络有哪两种实现方式? <br>&nbsp;<br>2.计算机网络的功能是哪四种? <br>资源共享,信息传递,增加可靠性,提高系统处理能力 <br>4.0Si七层模型以及tcp/ip五层模型分别是? <br>应用层&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;应用层 <br>传输层&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;表示层&nbsp;&nbsp; &nbsp; <br>网络层&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;会话层 <br>数据链路层&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;传输层 <br>物理层&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;网络层 <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;数据链路层 <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;物理层 <br>5.设备与层的对应关系分别是?对应的单位分别是? <br>应用层 :计算机 pdu <br>传输层&nbsp;&nbsp; &nbsp; :防火墙  数据端 <br>网络层&nbsp;&nbsp; &nbsp; :路由器  数据包 <br>数据链路层:交换机&nbsp;&nbsp; &nbsp;数据帧 <br>物理层  :网卡&nbsp;&nbsp; &nbsp;比特流 <br>&nbsp;<br>6.网络设备生产厂商? <br> 思科 华为 <br>7.交换机的命令行视图有哪些?以及如何转变? <br>用户视图  sys到系统  &nbsp;&nbsp; &nbsp; <br>系统视图&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; quit 到用户 cilt z 到用户 <br>接口视图  inter+tab gix/x/x <br>协议视图&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ospf <br>8.0/0/1分别代表什么? <br>第一个0表示槽位号 <br>第二个0表示子卡号 <br>1表示接口号 <br>9.在那个视图下改主机名?如何改? <br>sysname 主机名 <br>10.如何查看交换机配置? <br>display current-configuration <br>11.如何保存交换机的配置? <br>save <br>12.交换机的工作原理? <br>学习 广播 接收回应 实现单播通信  <br>13.如何查看MAC地址表? <br>display mac-address <br>14.MA地址长度,前24位和后24位分别代表什么? <br>供应商标识 供应商对网卡的唯一编号 <br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ <br>&nbsp;<br># <br>网络的功能 <br>信息传递&nbsp; 资源共享&nbsp; 提高可靠 增加系统处理性能 <br>&nbsp;<br>60年代&nbsp; 分组交换 <br>70~80&nbsp; tcp/ip <br>&nbsp;<br>拓扑结构 <br>点对点&nbsp; wan <br>星形&nbsp; lan&nbsp;&nbsp; &nbsp;<br>网状&nbsp; lan&nbsp; &nbsp;<br>&nbsp;<br>osi七层参考模型 <br>tcp/ip五层参考模型 <br>&nbsp;<br>应用层&nbsp;&nbsp;&nbsp; &nbsp;<br>传输层&nbsp; 防火墙 <br>网络层&nbsp; 路由器 <br>数据链路层&nbsp; 交换机 <br>物理层&nbsp; 网卡 <br>&nbsp;<br>用户视图 <br>系统视图 <br>接口视图 <br>协议视图 <br>&nbsp;<br>交换机工作原理 <br>学习,广播,转发,更新 <br>&nbsp;<br>广播泛滥 <br>&nbsp;<br>广播域 <br>vlan&nbsp; 虚拟局域网 &nbsp;<br>virtual &nbsp;<br>控制广播 <br>增加安全 <br>提高带宽的利用率 <br>降低数据传递的延迟 <br>50~60ms&nbsp;&nbsp; 100ms <br>20ms <br>1s=1000ms <br>&nbsp;<br>vlan 最大数量4096个 <br>&nbsp;<br>vlan1&nbsp; 默认vlan,无需创建,不能删除 <br>&nbsp;<br>1, 创建vlan <br>进入系统视图&nbsp; &nbsp;<br>vlan 2&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//创建vlan2 <br>undo vlan 2&nbsp;&nbsp; //删除vlan 2 <br>2, 将接口加入相关vlan&nbsp; &nbsp;<br>in e0/0/3&nbsp;&nbsp;&nbsp; //进入接口3 <br>port link-type access&nbsp;&nbsp;&nbsp; //接口类型更改为接入,表示即将为某一个vlan传输数据 <br>port default vlan 2&nbsp;&nbsp; //修改接口服务的vlan <br>&nbsp;<br>display vlan&nbsp;&nbsp; 查看vlan列表验证之前的操作 <br>&nbsp;<br>vlan batch 10 20 30&nbsp;&nbsp;&nbsp; &nbsp;<br>undo vlan batch 10 20 30 <br>&nbsp;<br>[Huawei]vlan batch 2 3&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//创建VLAN2、3 <br>[Huawei]port-group 1&nbsp;&nbsp;&nbsp; //建组,组号是1 <br>[Huawei-port-group-1]group-member Ethernet0/0/3 Ethernet0/0/4&nbsp;&nbsp;&nbsp; //组中加入3口和4口 <br>[Huawei-port-group-1]port link-type access&nbsp;&nbsp; //在组1中所敲的命令,等于对该组中所有接口敲 <br>[Huawei-port-group-1]port default vlan 2&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br>&nbsp;<br>网段 <br>vlan1 <br>192.168.1.1 <br>192.168.1.2 <br>vlan2 <br>192.168.2.1 <br>192.168.2.2 <br>vlan3 <br>192.168.3.1 <br>192.168.3.2 <br>&nbsp;<br>&nbsp;<br>access 接入链路&nbsp; 承载1个vlan <br>trunk&nbsp; 中继链路&nbsp; 承载多个vlan&nbsp; 打vlan标记 <br>&nbsp;<br>in e0/0/7 <br>port default vlan 1&nbsp;&nbsp;&nbsp; //恢复默认vlan <br>port link-type trunk&nbsp;&nbsp;&nbsp; //修改为中继链路 <br>port trunk allow-pass vlan all&nbsp;&nbsp;&nbsp; //允许通过所有vlan <br>&nbsp;<br>链路聚合,增加可靠,增加带宽 <br>&nbsp;<br>进入系统视图 <br>clear configuration interface ethernet0/0/7&nbsp;&nbsp;&nbsp; //清空所有配置,恢复默认,此时接口会自动关闭 <br>[Huawei]interface ethernet0/0/7 <br>undo shutdown&nbsp;&nbsp;&nbsp;&nbsp; //打开接口 <br>&nbsp;<br>[Huawei]interface Eth-trunk 1&nbsp;&nbsp; //进入(创建)链路聚合接口1 <br>[Huawei- Eth-trunk1]trunkport e 0/0/7&nbsp; 0/0/8&nbsp; //捆绑7口和8口,此步骤如果接口不是默认状态,会提示报错,要求恢复默认. <br>port link-type trunk&nbsp;&nbsp;&nbsp; //将链路聚合接口修改为中继链路 <br>port trunk allow-pass vlan all&nbsp;&nbsp;&nbsp; //放行所有vlan <br>&nbsp;<br>&nbsp;<br>网络层&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 路由器&nbsp;&nbsp; ip <br>数据链路层&nbsp; 交换机&nbsp;&nbsp; mac <br>&nbsp;<br>不同部门=不同vlan=不同网段=不同广播域 <br>&nbsp;<br>2的n次方-2 <br>&nbsp;<br>A&nbsp; 1~127&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1677万+ <br>255.0.0.0 <br>B&nbsp; 128~191&nbsp;&nbsp;&nbsp;&nbsp; 65534 <br>255.255.0.0 <br>C&nbsp; 192~223&nbsp;&nbsp;&nbsp;&nbsp; 254 <br>255.255.255.0 <br>&nbsp;<br>192.168.0.1~192.168.0.254 <br>每个网段第一个地址是网络id,最后一个地址是广播地址 <br>&nbsp;<br>192.168.0.1 <br>&nbsp;<br>172.16.0.0&nbsp;&nbsp;&nbsp;&nbsp; 172.16.255.255 <br>172.16.0.1~172.16.255.254 <br>&nbsp;<br>icmp 英特网控制报文协议&nbsp; 可以查询网络状态并反馈相应数据 <br>&nbsp;<br>undo ip add&nbsp;&nbsp; 进入接口,删除ip <br>在接口中使用 display this 查看配置的ip地址 <br>&nbsp;<br>路由表 <br>直连路由&nbsp; 路由器接口配置ip,并开启之后自动产生 <br>静态路由&nbsp; 由管理员手工配置,小规模网络适用 <br>&nbsp;<br>R1 <br>ip route-static 192.168.3.0 24 192.168.2.2 <br>ip route-static 192.168.4.0 24 192.168.2.2 <br>&nbsp;<br>R2 <br>undo ip route-static 192.168.1.0 24 192.168.2.3 <br>ip route-static 192.168.1.0 24 192.168.2.1 <br>&nbsp;<br>display ip routing-table | include /24&nbsp;&nbsp;&nbsp; 查看路由表包含/24的行 <br>&nbsp;<br> <br>交换机&nbsp;&nbsp; 二层 <br>vlan <br>控制广播,增加安全,带宽利用率提高,降低数据传递的延迟 <br>&nbsp;<br>路由器 实现不同网段的链接 ,在物理接口配置ip <br>&nbsp;<br>三层交换机=二层交换+三层路由 ,在虚拟接口配置ip <br>使用三层交换机搭建网络: <br>&nbsp;<br>1,三层交换机创建vlan 2 3 <br>&nbsp;&nbsp; vlan batch 2 3 <br>2,将接口加入对应vlan <br>in g0/0/2 <br>port link-type access <br>port default vlan 2 <br>dis vlan <br>3,进入vlan接口(虚拟接口)配置ip地址,此ip将作为 <br>终端设备的网关 <br>in vlan 1 <br>ip add 192.168.1.254 24 <br>&nbsp;<br>dis cur <br>&nbsp;<br>添加S3700交换机, 达到更合理利用三层交换机的目的 <br>&nbsp;<br>1,在S3700创建vlan2 3 <br>2,在S3700将pc所链接的接口加入相应vlan <br>3,将2台交换机之间的链路配置为中继链路 <br>port link-type trunk <br>port trunk allow-pass vlan all <br>&nbsp;<br>排错 <br>1,查ip,网关 <br>2,所属vlan <br>3,测试与网关的链接 <br>&nbsp;<br>网段 , vlan <br>&nbsp;<br>为三层交换机接口配置ip的思路: <br>&nbsp;<br>1,S5700创建vlan4 <br>2,进入vlan4虚拟接口配置ip <br>in vlan 4 <br>ip add 192.168.4.1 24 <br>3,将g0/0/2口加入vlan4 <br>&nbsp;<br>动态路由 是由某种动态路由协议实现全网互通的目的,适用于大型网络 <br>&nbsp;<br>rip,isis,eigrp,bgp,ospf <br>&nbsp;<br>宣告 &nbsp;<br>&nbsp;<br>&nbsp;<br>三层交换机配置: <br>ospf&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//开启动态路由ospf <br>area 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //进入第一个区域,一般超大型网络才需要多个区域,中小规模只使用第一个也就是0区域即可 <br>network 192.168.1.0 0.0.0.255&nbsp;&nbsp; //宣告设备自身所链接的网段 <br>network 192.168.2.0 0.0.0.255 <br>network 192.168.3.0 0.0.0.255 <br>network 192.168.4.0 0.0.0.255 <br>路由器: <br>ospf <br>area 0 &nbsp;<br>network 192.168.4.0 0.0.0.255 <br>network 192.168.5.0 0.0.0.255 <br>display ip routing-table | include /24&nbsp;&nbsp;&nbsp; 查看最终结果 <br>&nbsp;<br>&nbsp;<br>直连路由 配置ip,并开启接口自动生成 <br>静态路由 手工配置&nbsp;&nbsp; 192.168.1.0 24 192.168.1.X <br>动态路由 <br>默认路由 是特殊的静态路由,能够匹配任意网段,当路由表中无法查询到目标网段时使用,通常用在内部设备访问公网时使用. <br>&nbsp;<br>三层交换机 <br>ip route-static 0.0.0.0 0 192.168.4.2&nbsp;&nbsp;&nbsp; //可以匹配任意网络 <br>路由器 <br>ip route-static 0.0.0.0 0 192.168.5.1 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>传输层&nbsp;&nbsp;&nbsp;&nbsp; 端口号&nbsp; 端到端 <br>网络层&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 路由器&nbsp; ip&nbsp; 点到点 <br>数据链路层&nbsp; 交换机 vlan trunk&nbsp; mac <br>&nbsp;<br>http&nbsp; 80&nbsp;&nbsp;&nbsp; tcp <br>https 443 <br>&nbsp;<br>mysql&nbsp; 3306 tcp <br>&nbsp;<br>tcp&nbsp;&nbsp; 传输控制协议 <br>可靠性高,效率低,面向链接 <br>&nbsp;<br>syn 打算与对方建立链接 <br>ack 确认 <br>fin 打算与对方断开链接 <br>&nbsp;<br>三次握手&nbsp; syn--&gt;ack,syn--&gt;ack <br>四次断开&nbsp; fin--&gt;ack--&gt;&nbsp;&nbsp; fin--&gt;ack <br>&nbsp;<br>udp&nbsp;&nbsp; 用户数据报协议 <br>可靠性低,效率高,无链接 <br>&nbsp;<br>acl&nbsp; 访问控制列表,对匹配的数据进行限制. <br>&nbsp;<br>基本acl&nbsp; 2000~2999&nbsp;&nbsp; 可以对源ip限制 <br>高级acl&nbsp; 3000~3999&nbsp;&nbsp; 可以对源ip,目标ip,协议,端口限制 <br>&nbsp;<br>acl练习1: <br>[Huawei]interface GigabitEthernet 0/0/0 <br>[Huawei-GigabitEthernet0/0/0] ip address&nbsp; 192.168.1.254 24 <br>[Huawei]acl 2000&nbsp;&nbsp; //创建acl,列表号是2000,表示即将使用基本acl <br>[Huawei-acl-basic-2000]rule deny source 192.168.2.1 0&nbsp;&nbsp; //创建规则,拒绝源ip是192.168.2.1的数据通过 <br>[Huawei]interface GigabitEthernet 0/0/1 <br>[Huawei-GigabitEthernet0/0/1]ip address&nbsp; 192.168.2.254 24 <br>[Huawei-GigabitEthernet0/0/1]traffic-filter inbound acl 2000 <br>&nbsp;&nbsp; //进入g0/0/1接口后,放置acl 2000,用来过滤即将进入路由器的数据. <br>&nbsp;<br>acl练习2: <br>acl 2000&nbsp;&nbsp;&nbsp; //重新进入列表2000 <br>display this&nbsp;&nbsp; //查看4 <br>undo rule 5&nbsp;&nbsp; //删除之前的条目,根据序号删除 <br>rule permit source 192.168.2.1 0&nbsp;&nbsp; //创建新条目,允许2.1通过 <br>rule deny&nbsp;&nbsp; //拒绝所有人通过 <br>&nbsp;<br>在同接口的同方向,只能放一条acl <br>&nbsp;<br> <br>nat 网络地址转换 <br>1,节约公网ip地址 <br>2,增加安全 <br>&nbsp;<br>A 1~127 <br>B 128~191 <br>C 192~223 <br>&nbsp;<br>内部私有地址 <br>A 10.0.0.0~10.255.255.255 <br>B 172.16.0.0~172.31.255.255 <br>C 192.168.0.0~192.168.255.255 <br>&nbsp;<br>ipv4版本地址总数42亿+ <br>ipv6 <br>&nbsp;<br>192.168.0.1&nbsp;&nbsp;&nbsp;&nbsp; 200.0.0.1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 200.0.0.2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.0.1 <br>192.168.0.2 <br>192.168.0.3 <br>&nbsp;<br>服务器搭建服务&nbsp;&nbsp;&nbsp;&nbsp; nat&nbsp; 静态转换&nbsp; 1对1 <br>仅仅访问外部网络&nbsp; nat&nbsp; easy ip&nbsp; 多对1 <br>&nbsp;<br>acl <br>&nbsp;<br>配置静态nat,实现1对1的内外通讯 <br>[Huawei]interface G 0/0/1&nbsp;&nbsp;&nbsp; //进入路由器外网接口 <br>[Huawei-GigabitEthernet0/0/1] ip address&nbsp; 100.0.0.1 8 <br>[Huawei-GigabitEthernet0/0/1]nat static global 100.0.0.2 inside 192.168.2.1&nbsp;&nbsp; //开启静态nat转换, 使内部主机2.1出门时将源ip转换为100.0.0.2 <br>&nbsp;<br>思考: <br>1,外部设备如何找到内部设备? <br>2,2.2也想出门如何做到? <br>&nbsp;<br>[Huawei-GigabitEthernet0/0/1]nat static global 100.0.0.3 inside 192.168.2.2&nbsp;&nbsp; //开启静态nat转换, 使内部主机2.2出门时将源ip转换为100.0.0.3 <br>&nbsp;<br>配错的转换列表要及时删除&nbsp;&nbsp; &nbsp;<br>undo&nbsp; nat static global 100.0.0.3 inside 192.168.2.2 &nbsp;<br>&nbsp;<br>使用easy ip达到节约公网ip的目的 <br>[Huawei]acl 2000&nbsp;&nbsp; &nbsp; <br>[Huawei-acl-basic-2000]rule permit source any&nbsp;&nbsp;&nbsp;&nbsp; //使用acl定义任何内部地址 <br>&nbsp;<br>或者 <br>[Huawei-acl-basic-2000]rule permit source 192.168.2.0 0.0.0.255&nbsp;&nbsp; //仅允许192.168.2.0网段的主机 <br>[Huawei-acl-basic-2000]rule deny <br>&nbsp;<br>[Huawei]interface g0/0/1 <br>[Huawei-GigabitEthernet0/0/1]nat outbound 2000&nbsp;&nbsp;&nbsp; //可以利用g0/0/1的ip访问外网,acl列表2000中定义了谁能通过就允许谁可以访问外网 <br>&nbsp;<br>stp 生成树协议 <br>广播风暴,提供链路备份的功能 <br>&nbsp;<br>vrrp&nbsp; 虚拟路由冗余协议 <br>网关备份,自动切换 <br>&nbsp;<br>SW1 <br>in vlan 1 <br>ip add 192.168.1.252 24 <br>vlan 2 <br>in vlan 2 <br>ip add 192.168.2.2 24 <br>in g0/0/2 <br>port link-type access <br>port default vlan 2 <br>ospf <br>area 0 <br>network 192.168.1.0 0.0.0.255 <br>network 192.168.2.0 0.0.0.255 <br>&nbsp;<br>SW2 <br>in vlan 1 <br>ip add 192.168.1.253 24 <br>vlan 3 <br>in vlan 3 <br>ip add 192.168.3.2 24 <br>in g0/0/2 <br>port link-type access <br>port default vlan 3 <br>ospf <br>area 0 <br>network 192.168.1.0 0.0.0.255 <br>network 192.168.3.0 0.0.0.255 <br>路由器 <br>ospf <br>area 0 <br>network 192.168.2.0 0.0.0.255 <br>network 192.168.3.0 0.0.0.255 <br>network 192.168.4.0 0.0.0.255 <br>display ip routing-table | include /24 <br>排错 <br>&nbsp;<br>在两台三层交换机配置vrrp <br>in vlan 1 <br>vrrp vrid 1 virtual-ip 192.168.1.254 <br>&nbsp;<br>display vrrp brief <br>&nbsp;<br>主路由器&nbsp;&nbsp;&nbsp;&nbsp; master <br>备份路由器&nbsp; backup <br>&nbsp;<br>通过多vlan的配置实现vrrp负载均衡 <br>&nbsp;<br>所有交换机创建vlan 10 20 <br>vlan batch 10 20 <br>&nbsp;<br>S5700 <br>port-group 1 <br>group-member g0/0/1 to g0/0/3 <br>port link-type trunk <br>port trunk allow-pass vlan all <br>&nbsp;<br>S3700 <br>port-group 1 <br>group-member e0/0/1 e0/0/2 <br>port link-type trunk <br>port trunk allow-pass vlan all <br>&nbsp;<br>两台S5700配置vrrp <br>in vlan 10 <br>vrrp vrid 10 virtual-ip 192.168.10.254 <br>in vlan 20 <br>vrrp vrid 20 virtual-ip 192.168.20.254 <br>&nbsp;<br>进入第1台5700 <br>in vlan 10 <br>vrrp vrid 10 priority 105 <br>进入第2台5700 <br>in vlan 20 <br>vrrp vrid 20 priority 105 <br>&nbsp;<br>display vrrp brief&nbsp; //最后检查结果,第1台5700是vlan10的主,vlan20的备份, 第2台5700是vlan20的主,vlan10的备则正确 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br> <br>1,所有交换机创建vlan 10 20 <br>2,所有交换机之间的链路设置trunk <br>3,SW1配置虚拟接口ip <br>&nbsp;&nbsp; &nbsp;vlan 10&nbsp; 192.168.10.252 <br>&nbsp;&nbsp; &nbsp;vlan 20&nbsp; 192.168.20.252 <br>&nbsp; SW2配置虚拟接口ip <br>&nbsp;&nbsp; &nbsp;vlan 10&nbsp; 192.168.10.253 <br>&nbsp;&nbsp; &nbsp;vlan 20&nbsp; 192.168.20.253 <br>4,配置vrrp <br>SW1&nbsp; vlan 10&nbsp; 主路由器&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 105 <br>&nbsp;&nbsp;&nbsp;&nbsp; vlan 20&nbsp; 备份路由器 <br>SW2&nbsp; vlan 20&nbsp; 主路由器&nbsp;&nbsp; &nbsp;&nbsp; 105 <br>&nbsp;&nbsp;&nbsp;&nbsp; vlan 10&nbsp; 备份路由器 <br>&nbsp;<br>=========================================== <br>组建大型企业网络: <br>&nbsp;<br>1,所有交换机创建vlan 10 20 30 40 <br>&nbsp;&nbsp; &nbsp;vlan batch 10 20 30 40 <br>&nbsp;&nbsp; &nbsp;display vlan <br>2,所有交换机之间的链路设置trunk <br>S5700 <br>port-group 1 <br>group-member g0/0/4 g0/0/5 <br>port link-type trunk <br>port trunk allow-pass vlan all <br>S3700 <br>port-group 1 <br>group-member e0/0/1 e0/0/2 <br>port link-type trunk <br>port trunk allow-pass vlan all <br>&nbsp;<br>3,修改设备名称 SW1~SW6 <br>4,配置SW1与SW2的虚拟接口地址 <br>SW1 <br>in vlan 30 <br>ip add 192.168.30.252 24 <br>in vlan 40 <br>ip add 192.168.40.252 24 <br>SW2 <br>in vlan 30 <br>ip add 192.168.30.253 24 <br>in vlan 40 <br>ip add 192.168.40.253 24 <br>&nbsp;<br>5,配置vrrp <br>SW1&nbsp; &nbsp;<br>vlan 10&nbsp; 主路由器 : <br>&nbsp;&nbsp; &nbsp;in vlan 10 <br>&nbsp;&nbsp; &nbsp;vrrp vrid 10 virtual-ip 192.168.10.254&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;vrrp vrid 10 priority 105 <br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>vlan 20&nbsp; 备份路由器 : <br>&nbsp;&nbsp; &nbsp;in vlan 20 <br>&nbsp;&nbsp; &nbsp;vrrp vrid 20 virtual-ip 192.168.20.254 <br>&nbsp;<br>vlan 30&nbsp; 主路由器 : <br>&nbsp;&nbsp; &nbsp;in vlan 30 <br>&nbsp;&nbsp; &nbsp;vrrp vrid 30 virtual-ip 192.168.30.254&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;vrrp vrid 30 priority 105 <br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>vlan 40&nbsp; 备份路由器 : <br>&nbsp;&nbsp; &nbsp;in vlan 40 <br>&nbsp;&nbsp; &nbsp;vrrp vrid 40 virtual-ip 192.168.40.254 <br>&nbsp; &nbsp;<br>SW2&nbsp; &nbsp;<br>vlan 10&nbsp; 备份路由器 : <br>&nbsp;&nbsp; &nbsp;in vlan 10 <br>&nbsp;&nbsp; &nbsp;vrrp vrid 10 virtual-ip 192.168.10.254&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>vlan 20&nbsp; 主路由器 : <br>&nbsp;&nbsp; &nbsp;in vlan 20 <br>&nbsp;&nbsp; &nbsp;vrrp vrid 20 virtual-ip 192.168.20.254 <br>&nbsp;&nbsp; &nbsp;vrrp vrid 20 priority 105 <br>&nbsp;<br>vlan 30&nbsp; 备份路由器 : <br>&nbsp;&nbsp; &nbsp;in vlan 30 <br>&nbsp;&nbsp; &nbsp;vrrp vrid 30 virtual-ip 192.168.30.254&nbsp;&nbsp; &nbsp; <br>&nbsp;<br>vlan 40&nbsp; 主路由器 : <br>&nbsp;&nbsp; &nbsp;in vlan 40 <br>&nbsp;&nbsp; &nbsp;vrrp vrid 40 virtual-ip 192.168.40.254 <br>&nbsp;&nbsp; &nbsp;vrrp vrid 40 priority 105 <br>&nbsp;<br>display vrrp brief&nbsp;&nbsp;&nbsp; 查看结果 <br>为pc配置对应vlan的网关(192.168.X.254),测试是否全网互通 <br>&nbsp;<br>6,添加路由器并配置ip与三层交换机互联 <br>&nbsp;<br>7,在三层交换机与路由器开启ospf实现全网互通 <br>&nbsp;<br>10.0.0.0~10.255.255.255 <br>172.16.0.0~172.31.255.255 <br>192.168.0.0~192.168.255.255 <br>&nbsp;<br>8,路由器连接外网的接口配置ip地址, <br>另外外网的交换机在vlan1配置ip地 <br>址100.0.0.10 <br>&nbsp;<br>9,两台路由器配置 nat &nbsp;<br>1, acl 放行所有人 <br>acl 2000 <br>rule permit source any <br>2, 在接口开启nat <br>in g0/0/2 <br>nat outbound 2000 <br>&nbsp;<br>10,两台路由器配置默认路由 <br>ip route-static 0.0.0.0 0 100.0.0.10 <br>&nbsp;&nbsp; 在ospf中宣告默认路由 <br>[Huawei]ospf <br>[Huawei-ospf-1]default-route-advertise &nbsp;<br>&nbsp;<br>&nbsp;<br> <br>shells 脚本 <br>Shell是在Linux内核与用户之间的解释器程序,通常指的是bash,负责向内核翻译及传达用户/程序指令 <br>是liunx系统中的翻译管,解释器类型: <br>~]#cat /etc/shells &nbsp;<br>&nbsp;/bin/sh <br>&nbsp;/bin/bash <br>&nbsp;/sbin/nologin <br>&nbsp;/usr/bin/sh <br>&nbsp;/usr/bin/bash <br>&nbsp;/usr/sbin/nologin <br>&nbsp;/bin/tcsh <br>&nbsp;/bin/csh <br>&nbsp;<br>例: <br>添加解释器:ksh <br>&nbsp;&nbsp;&nbsp; 安装: <br>yum -y install ksh.x86_64 <br>&nbsp;&nbsp;&nbsp; 调用解释器ksh <br>[root@server0 ~]# ksh <br># &nbsp;<br>不支持tab <br> <br>bash优点 <br>&nbsp;1)支持tab <br>&nbsp;2)历史记录 <br>&nbsp;3)快捷键 <br>&nbsp;4)内置别名 <br>&nbsp;5)管道 分号 重定向 &nbsp;<br>&nbsp;<br>工作方式 <br>1)首先由init启动Linux系统,加载好系列的文件 <br>2)用户输入命令,终端捕获到. <br>3)进行字符串解析. <br>4)找到对应的/bin/bash <br>5)将对应的bash通过fork复制到内存当中 <br>6)bash通常由很多system call接口构成,按其顺序压入栈中,而将数据存入堆中. <br>7)由内核一个一个调用. <br>&nbsp;<br> <br>bash--&gt;sh--&gt;ksh <br>&nbsp;<br>一个规范的脚本格式 <br>1,声明解释器 , 作者信息 <br>#!/bin/bash&nbsp; &nbsp;<br>#作者: <br>2,编写注释,解释脚本功能,步骤,变量含义等等... <br>#XXXX <br>3,编写代码 <br>echo 123 <br>&nbsp;<br>#!/bin/bash <br>#这是一个测试脚本 <br>echo "hello world" <br>&nbsp;<br>chmod u+x test1.sh <br>执行脚本的方式 <br>1,添加x权限 <br>2,调用新解释器执行脚本 <br>bash test1.sh&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开启子进程 <br>3,使用当前解释器 <br>source test1.sh&nbsp;&nbsp;&nbsp; //不开启子进程,可以简写为 . <br>. test1.sh &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //效果同上 <br>&nbsp;<br>编写脚本,在/opt中创建目录abc,然后进入目录abc <br>&nbsp;<br>#!/bin/bash <br>mkdir /opt/abc <br>cd /opt/abc <br>&nbsp;<br>&nbsp;<br>#!/bin/bash <br>echo 123 <br>exit <br>&nbsp;<br>/etc/yum.repos.d/XXX.repo <br>&nbsp;<br>编写一键部署yum仓库的脚本: <br>#!/bin/bash <br>rm -rf /etc/yum.repos.d/*.repo <br>echo "[abc] <br>name=test <br>baseurl=http://172.25.254.254/content/rhel7.0/x86_64/dvd/ <br>enabled=1 <br>gpgcheck=0"&nbsp; &gt;&nbsp; /etc/yum.repos.d/abc.repo <br>脚本编写完后,可以用bash test.sh执行 <br>然后使用yum repolist检查结果 <br>编写,一键部署ftp服务的脚本: <br>#!/bin/bash <br>yum -y install vsftpd&nbsp; &amp;&gt; /dev/null <br>systemctl restart vsftpd <br>systemctl enable vsftpd <br>&nbsp;<br>systemctl stop firewalld&nbsp;&nbsp; //为了测试脚本,可以临时关防火墙 <br>&nbsp;<br>常量 不会变化&nbsp; 脚本功能单一 <br>变量&nbsp; 灵活多变&nbsp; 增加脚本功能, 增加灵活,多用变量可使脚本更强大! <br>&nbsp;<br>变量的种类: <br>1, 自定义变量 <br>变量名称=变量的值,变量名可以使用大小写字母,数字,下划线,禁止使用特殊符号,不能以数字开头. <br>a=10&nbsp;&nbsp;&nbsp; //定义变量 <br>echo $a&nbsp;&nbsp; //查看变量 <br>unset a&nbsp;&nbsp;&nbsp; //取消变量 <br>123a=10&nbsp;&nbsp; //错误命名 <br>echo ${a}RMB <br>2, 环境变量 <br>UID USER HOME HOSTNAME SHELL PWD PS1 一级提示符&nbsp; PS2 &nbsp;<br>PATH 存放命令的路径 <br>&nbsp;<br>3, 位置变量 <br>$1 $2 $3 .... <br>4,预定义变量 <br>$$ $* $# $? $0 <br>&nbsp;<br>#!/bin/bash <br>echo $1&nbsp; 执行脚本后的第1个参数 <br>echo $2&nbsp; 执行脚本后的第2个参数 <br>echo $3&nbsp; 执行脚本后的第3个参数 <br>echo $0&nbsp; 执行的脚本名 <br>echo $$&nbsp; 执行脚本时的进程号 <br>echo $*&nbsp; 所有位置变量 <br>echo $#&nbsp; 所有位置变量的个数 <br>echo $?&nbsp; 判断上一条指令是否成功,0是成功,非0是失败 <br>&nbsp;<br>编写脚本,创建用户tom,配置密码789 <br>#!/bin/bash <br>useradd tom <br>echo 789 | passwd --stdin tom <br>&nbsp;<br>升级版本 <br>#!/bin/bash <br>useradd $1 <br>echo $2 | passwd --stdin $1 <br>&nbsp;<br>bash test.sh abcd 1234&nbsp;&nbsp;&nbsp; //使用脚本创建用户abcd并配置密码1234 <br>&nbsp;<br>env&nbsp;&nbsp; 查看所有环境变量 <br>set&nbsp;&nbsp; 查看所有变量 <br>&nbsp;<br>&nbsp;<br>""&nbsp; 双引号 界定范围 <br>&nbsp;&nbsp; &nbsp;touch "a b"&nbsp;&nbsp; //创建1个文件,不加引号则创建2个 <br>&nbsp;&nbsp; &nbsp;a=10 <br>&nbsp;&nbsp; &nbsp;echo "$a"&nbsp;&nbsp; //效果不变 <br>''&nbsp;&nbsp; 单引号 界定范围&nbsp; ,且具有屏蔽特殊符号的作用 <br>&nbsp;&nbsp; &nbsp;touch 'x y' <br>&nbsp;&nbsp; &nbsp;echo '$a'&nbsp;&nbsp; //$符号调用变量的值失效 <br>&nbsp;&nbsp;&nbsp; 反撇号 或 \((&nbsp; )&nbsp;&nbsp;&nbsp; 获取命令输出的结果 <br>&nbsp;&nbsp; &nbsp;a=ls <br>&nbsp;&nbsp; &nbsp;echo \)a
&nbsp;&nbsp; &nbsp;a=ls&nbsp;&nbsp;&nbsp; 或&nbsp;&nbsp; a=\((ls) <br>&nbsp;&nbsp; &nbsp;echo \)a
&nbsp;
&nbsp;
#!/bin/bash
read -p “请输入用户名”&nbsp; u
useradd \(u <br>stty -echo <br>read -p "请输入密码"&nbsp; p <br>stty echo <br>echo \)p | passwd –stdin \(u <br>&nbsp;<br>stty -echo&nbsp; 屏蔽回显 <br>stty echo&nbsp;&nbsp; 恢复回显 <br>&nbsp;<br>export&nbsp; 发布全局变量,可以使子进程使用父进程定义的变量 <br>&nbsp;<br>export a=10&nbsp;&nbsp; //定义+发布全局变量 <br>export a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果变量存在,则直接发布全局变量 <br>bash&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //进入子进程 <br>echo \)a&nbsp; //可以使用父进程定义的变量,以为已经发布为全局变量
&nbsp;
vim /etc/profile
&nbsp;
unset 变量名&nbsp;&nbsp;&nbsp;&nbsp; //取消变量
export -n&nbsp; 变量名&nbsp;&nbsp;&nbsp;&nbsp; // 取消全局效果,恢复局部
&nbsp;
&nbsp;
&nbsp;&nbsp;&nbsp; 转义符号
&nbsp;
求模&nbsp;&nbsp; 取余数
&nbsp;
shell中的运算
方法一:
expr 1 + 1&nbsp;&nbsp;&nbsp;&nbsp; 加
expr 2 - 1&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 减
expr 2 * 2&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; 乘
expr 4 / 2&nbsp;&nbsp;&nbsp;&nbsp; 除
expr 10 % 3&nbsp;&nbsp;&nbsp; 取余
a=10
expr \(a + \)a&nbsp; //也支持变量
方法二:
echo \([1+1] <br>echo \)[1-1]
echo \([a+a]&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; //调用变量不用多次添加\)符号
echo \([1*1]&nbsp;&nbsp;&nbsp; //乘法无需转义 <br>&nbsp;<br>方法三: <br>let 不输出结果,可以方便的修改变量的值 <br>&nbsp;<br>创建新变量 : <br>let c=1+1&nbsp;&nbsp; //通过运算新创建变量c <br>let c=a+1&nbsp;&nbsp; //常量变量均可使用 <br>&nbsp;<br>修改现有变量 : <br>let a=a+1&nbsp;&nbsp; //常规思路,将a本身加1 <br>let a++&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//主流写法,将a本身加1 <br>&nbsp;<br>let a=a-1&nbsp;&nbsp; //常规思路,将a本身减1 <br>let a--&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//主流写法,将a本身减1 <br>&nbsp;<br>let a=a+2&nbsp;&nbsp; //常规思路,将a本身加2 <br>let a+=2&nbsp;&nbsp;&nbsp; //主流写法 <br>&nbsp;<br>let a*=100&nbsp; //修改变量本身,将a乘以100 <br>&nbsp;<br> <br>规范的脚本格式 <br>1,声明解释器 <br>2,注释 <br>3,代码 <br>&nbsp;<br>变量的种类 <br>1,自定义&nbsp; &nbsp;<br>2,环境 USER UID HOME HOSTNAME SHELL PWD PATH PS1 PS2 <br>3,位置&nbsp; \)1 \(2 \)3….
4,预定义 $\( \)* \(# \)? \(0 <br>&nbsp;<br>""&nbsp;&nbsp; ''&nbsp;&nbsp; ``&nbsp; \)( )
read -p “XXXX” 变量名
stty -echo
stty echo
局部&nbsp; –&gt;&nbsp; 全局&nbsp; export
&nbsp;
expr 1 + 1
expr 1 * 1
echo \([1+1] <br>echo \)[11]
echo \(((1+1)) <br>&nbsp;<br>let c=1+1 <br>let c=x+y <br>&nbsp;<br>a=10 <br>&nbsp;<br>let a++ <br>let a-- <br>let a+=2 <br>&nbsp;<br>bc&nbsp;&nbsp; //计算器,可以计算小数 <br>1.1+1 <br>10/3 <br>scale=3&nbsp;&nbsp;&nbsp; //定义小数点后位数 <br>10/3 <br>quit&nbsp;&nbsp;&nbsp;&nbsp; //退出 <br>&nbsp;<br>非交互式计算 <br>echo "1.1+1" | bc <br>echo "10/3" | bc <br>echo "scale=3;10/3" | bc <br>&nbsp;<br>&nbsp;<br>useradd &nbsp;<br>&nbsp;<br>&nbsp;<br>条件测试&nbsp; [&nbsp;&nbsp; ]&nbsp;&nbsp;&nbsp;&nbsp; test&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //能够使脚本更智能的工具 <br>1,字符串 <br>== 判断是否相等&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !=&nbsp; 判断是否不相等 <br>-z&nbsp; 判断是否为空&nbsp;&nbsp; !&nbsp; -z <br>[ a == b ] 或者&nbsp; test a == b&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //判断a是否等于b <br>echo \)?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //0是判断成功,非0是失败
[ a == a ]
echo \(? <br>[ a != a ]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //判断a是否不等于a <br>echo \)?
[ \(USER == root ]&nbsp;&nbsp; //判断当前用户是否为root <br>echo \)?
&nbsp;
a=10
[ -z \(a ]&nbsp;&nbsp; //判断变量a是否为空 <br>echo \)?&nbsp;&nbsp;&nbsp; //如果不是空,返回值是非0
a=&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//a等于空
[ -z \(a ]&nbsp;&nbsp; &nbsp;<br>echo \)?&nbsp;&nbsp;&nbsp;&nbsp; //判断结果为0
&nbsp;
2,数字
-eq&nbsp; 等于
-ne&nbsp; 不等于
-gt&nbsp; 大于
-ge&nbsp; 大于等于
-lt&nbsp; 小于
-le&nbsp; 小于等于
&nbsp;
X=20 &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//定义一个测试变量
[ \(X -eq 20 ] &amp;&amp; echo "相等" || echo "不相等" <br>相等 <br>&nbsp;[ \)X -ne 30 ] && echo “不等于” || echo “等于”
不等于
[ \(X -gt 20 ] &amp;&amp; echo "大于" || echo "否" <br>否 <br>[ \)X -ge 10 ] && echo “大于或等于” || echo “否”
大于或等于
&nbsp;[ \(X -lt 30 ] &amp;&amp; echo "小于" || echo "否" <br>小于 <br>[ \)X -le 20 ] && echo “小于或等于” || echo “否”
小于或等于
&nbsp;
3,文件 , &nbsp;
-e&nbsp;&nbsp; 判断文件是否存在,不关心文件类型
-f&nbsp;&nbsp; 判断文件是否存在,且类型必须是普通文件
-d&nbsp;&nbsp; 判断文件是否存在,且类型必须是目录
判断当前用户是否拥有相关权限: &nbsp;
-r&nbsp;&nbsp; 是否有读 对管理员判断无效
-w&nbsp;&nbsp; 是否有写 对管理员判断无效
-x&nbsp;&nbsp; 是否能执行
&nbsp;
4,逻辑判断
&&&nbsp;&nbsp; 并且&nbsp;&nbsp; 之前任务成功,才执行之后任务 &nbsp;
||&nbsp;&nbsp;&nbsp; 或者&nbsp;&nbsp;&nbsp;&nbsp; 之前任务失败,才执行之后任务
;&nbsp;&nbsp;&nbsp; 前后无逻辑关系, 执行完前面任务,继续执行后面的
&nbsp;
[ a == a ] && echo ok || echo no
[ a == b ] && echo ok || echo no
[ a == b ] || echo ok && echo no
[ a == b ] || echo ok || echo no
[ a == b ] && echo ok && echo no
&nbsp;
[ -z \(1 ] &amp;&amp; echo no &amp;&amp; exit <br>&nbsp;<br>&nbsp;<br>编写脚本实现以下需求: <br>每隔2分钟检查登录服务器的账户,如果超过3人,则发邮件给管理员报警 <br>&nbsp;<br>非交互式发邮件的两种方法 <br>echo 123 |mail -s test root <br>mail -s test root &lt; a.txt&nbsp;&nbsp;&nbsp; //输入重定向,需要先准备好a.txt <br>&nbsp;<br>#!/bin/bash <br>n=`who |wc -l` <br>[ \)n -gt 3 ] && echo “有$n个人入侵服务器啦!隔壁老王来啦” | mail -s test root
&nbsp;
chmod u+x test1.sh
crontab -e
/2 * * * &nbsp; /opt/test1.sh
&nbsp;
rm -rf /var/spool/mail/root&nbsp;&nbsp; //测试前可以先删除所有邮件
&nbsp;
==&nbsp;&nbsp; !=&nbsp;&nbsp; -z&nbsp;&nbsp; ! -z
&nbsp;
&&&nbsp;&nbsp; ||&nbsp; &nbsp;
&nbsp;
&nbsp;
&nbsp;
挂载本地yum源文件&nbsp; &&&nbsp; 编写yum仓库文件&nbsp; && 安装ftp服务&nbsp; &&&nbsp; 开启ftp服务&nbsp; && &nbsp;
&nbsp;
&nbsp;
if 单分支
&nbsp;
if 条件测试 ;then
&nbsp;&nbsp; &nbsp;命令序列
fi
&nbsp;
&nbsp;
if 双分支
&nbsp;
if 条件测试 ;then
&nbsp;&nbsp; &nbsp;命令序列1
else
&nbsp;&nbsp; &nbsp;命令序列2
fi
&nbsp;
if 多分支 &nbsp;
&nbsp;
#!/bin/bash
x=\([RANDOM%10] <br>read -p "请输入一个数字(0-9)"&nbsp; n <br>if [ \)x -eq \(n ] ;then <br>&nbsp;&nbsp; &nbsp;echo "恭喜猜对了" <br>elif [ \)n -gt \(x ] ;then <br>&nbsp;&nbsp; &nbsp;echo "猜大了" <br>else <br>&nbsp;&nbsp; &nbsp;echo "猜小了" <br>fi <br>&nbsp;<br>ping&nbsp; -c 定义ping次数&nbsp;&nbsp; -i 定义ping间隔时间,单位秒&nbsp;&nbsp; -W 1 加快反馈时间,单位秒 <br>&nbsp;<br>\)?
&nbsp;
测试一个ip地址,如果成功则返回”ok”,如果失败返回”no”
&nbsp;
for 循环 ,关心2个点
1, 循环次数
2, 循环过程中调用的变量
&nbsp;
for 变量名 in 值1 值2 值3……
do
&nbsp;&nbsp; &nbsp;循环任务
done
&nbsp;
for i in a b c
do
&nbsp;&nbsp; &nbsp;echo \(i <br>done <br>&nbsp;<br>#!/bin/bash <br>for i in {1..5}&nbsp;&nbsp;&nbsp;&nbsp; //花括号里不能放变量再交给for循环 <br>do <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo \)i
done
&nbsp;
#!/bin/bash
a=5
for i in seq $a&nbsp;&nbsp; //seq可以使用变量
do
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; echo \(i <br>done <br>&nbsp;<br>编写脚本,测试172.25.0.1~172.25.0.15是否能ping通 <br>&nbsp;<br>#!/bin/bash <br>x=0 <br>y=0 <br>for i in {1..15} <br>do <br>&nbsp;&nbsp; &nbsp;ping -c 3 -i 0.2 -W 1 172.25.0.\)i&nbsp; &&gt; /dev/null
&nbsp;&nbsp; &nbsp;if [ \(? -eq 0 ];then <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;echo "172.25.0.\)i 通了”
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;let x++
&nbsp;&nbsp; &nbsp;else
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;echo “172.25.0.\(i 不通" <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;let y++ <br>&nbsp;&nbsp; &nbsp;fi <br>done <br>echo "\)x台通了,$y台不通”
&nbsp;
&nbsp;
&nbsp;
&nbsp;

条件测试
test 测试内容&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; [&nbsp; 测试内容&nbsp; ]
1,字符串
==&nbsp; !=&nbsp;&nbsp; -z&nbsp;&nbsp;&nbsp; ! -z
2,数字
-eq&nbsp; -ne&nbsp; -gt&nbsp; -ge&nbsp;&nbsp; -lt&nbsp; -le
3,文件
-e&nbsp;&nbsp; -f&nbsp;&nbsp; -d&nbsp;&nbsp;&nbsp; -r&nbsp;&nbsp; -w&nbsp;&nbsp; -x
4,逻辑
&&&nbsp;&nbsp; ||&nbsp;&nbsp;&nbsp; ;
&nbsp;
单分支
if 条件测试;then
&nbsp;&nbsp; &nbsp;命令序列
fi
双分支
if 条件测试;then
&nbsp;&nbsp; &nbsp;命令序列1
else
&nbsp;&nbsp; &nbsp;命令序列2
fi
多分支
if 条件测试;then
&nbsp;&nbsp; &nbsp;命令序列1
elif 条件测试;then
&nbsp;&nbsp; &nbsp;命令序列2
else
&nbsp;&nbsp; &nbsp;命令序列3
fi
&nbsp;
循环
for 变量名&nbsp; in&nbsp; 值1&nbsp; 值2 值3…
do
&nbsp;&nbsp; &nbsp;执行指令
done
&nbsp;
while 条件测试
do
&nbsp;&nbsp; &nbsp;执行指令
done
&nbsp;
case分支,功能类似if,代码比if要精简,但功能没有if强大,是简化版本的if
&nbsp;
case&nbsp; 变量&nbsp; in
模式1)
&nbsp;&nbsp;&nbsp; 命令序列1 ;;
模式2)
&nbsp;&nbsp;&nbsp; 命令序列2 ;;
&nbsp;&nbsp;&nbsp; .. ..
)
&nbsp;&nbsp;&nbsp; 默认命令序列
esac
&nbsp;
在真机操作
cd /linux-soft/02
scp lnmp_soft.tar.gz root@172.25.0.10:/
回到虚拟机
cd /
tar xf /lnmp_soft.tar.gz
cd /lnmp_soft
scp nginx-1.10.3.tar.gz /opt
&nbsp;
编写脚本,实现一键源代码编译安装nginx服务&nbsp; &nbsp;
#!/bin/bash
tar xf nginx-1.10.3.tar.gz
cd nginx-1.10.3
yum -y install gcc openssl-devel pcre-devel &&gt; /dev/null
https://www.cnblogs.com/liujiab/p/configure
make
make install
&nbsp;
systemctl stop firewalld&nbsp; //关闭防火墙
cd /usr/local/nginx&nbsp;&nbsp; //最后进到这个目录测试软件是否已经安装
/usr/local/nginx/sbin/nginx&nbsp;&nbsp;&nbsp; //开启服务
/usr/local/nginx/sbin/nginx -s stop&nbsp;&nbsp; //关闭服务
netstat -ntulp | grep nginx&nbsp;&nbsp;&nbsp; //查询nginx服务状态
netstat -ntulp | grep :80&nbsp;&nbsp;&nbsp; //查询80端口被哪个服务占用
&nbsp;
&nbsp;
shell函数,相当于增强版别名,可以利用一个函数名称,存储多个命令
&nbsp;
方法一
abc(){
&gt; echo 123
&gt; ls
&gt; }
调用函数,直接输abc即可
方法二
function xyz {
&gt; echo xyz
&gt; ls
&gt; }
&nbsp;
&nbsp;
#!/bin/bash
cecho(){
echo -e “033[\(1m\)2033[0m”
}
cecho 31 ABCDEF
cecho 32 ABCDEF
cecho 33 ABCDEF
cecho 34 ABCDEF
cecho 35 ABCDEF
cecho 36 ABCDEF
&nbsp;
while :
do
&nbsp;&nbsp; &nbsp;exit
&nbsp;&nbsp; &nbsp;
done
echo XXXXX
&nbsp;
对循环的控制
1, exit&nbsp;&nbsp;&nbsp; 直接退出脚本
2, break&nbsp;&nbsp; 终止循环,继续循环之后的任务
3, continue&nbsp;&nbsp; 终止当前循环,继续下一次循环
&nbsp;
编写脚本,使用户输入的数字求和,用户输入0时,结束计算并输出之前所有数字之和
#!/bin/bash
x=0
while :
do
&nbsp;&nbsp; &nbsp;read -p “请输入一个数字”&nbsp; n
&nbsp;&nbsp; &nbsp;[ \(n -eq 0 ] &amp;&amp; break <br>&nbsp;&nbsp; &nbsp;let x+=n <br>done <br>echo \)x
&nbsp;
从数字1~20中查找6的倍数,找到之后输出到屏幕
&nbsp;
#!/bin/bash
for i in {1..20}
do
&nbsp;&nbsp; &nbsp;x=\([i%6] <br>&nbsp;&nbsp; &nbsp;[ \)x -ne 0 ]&nbsp; && continue
&nbsp;&nbsp; &nbsp;echo \(i &nbsp;<br>done <br>&nbsp;<br>&nbsp;<br>字符串 <br>&nbsp;<br>1,字串截取 <br>a=abcdef&nbsp;&nbsp;&nbsp;&nbsp; //定义变量 <br>&nbsp;<br>echo \){a:1:2}&nbsp;&nbsp;&nbsp; //从第2位开始截取2位
echo \({a:4:2}&nbsp;&nbsp;&nbsp; //从第5位开始截取2位 <br>echo \){a:2:4}&nbsp;&nbsp;&nbsp; &nbsp;
echo \({a:0:3}&nbsp;&nbsp;&nbsp; //从第1位开始截取3位 <br>echo \){a::3}&nbsp;&nbsp;&nbsp;&nbsp; //效果同上
&nbsp;
编写脚本,从所有的字母大写,小写,数字中找一个随机字符显示在屏幕
&nbsp;
编写脚本, 获取8位随机字符的密码
#!/bin/bash
x=abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0
pass=
for i in {1..8}
do
n=\([RANDOM%62] <br>pass1=\){x:n:1}
pass=\(pass\)pass1
done
echo \(pass <br>&nbsp;<br>&nbsp;<br>2,字串替换 <br>a= <br>echo \){a/1/X}&nbsp;&nbsp;&nbsp;&nbsp; //将第一个1替换成X
echo \({a//1/X}&nbsp;&nbsp;&nbsp; //将所有1替换成X <br>echo \){a/2/}&nbsp;&nbsp;&nbsp;&nbsp; //将第一个2替换成空,等于删除第一个2
echo \({a//2/}&nbsp;&nbsp;&nbsp; //将所有2替换成空,删除所有2 <br>&nbsp;<br>a= <br>如何得到替换结果&nbsp;&nbsp; XX2333 <br>&nbsp;<br>3,字串删除 <br>#&nbsp;&nbsp;&nbsp; 从左至右删除&nbsp;&nbsp; 掐头 <br>a=`head -1 /etc/passwd` <br>echo \){a#root}&nbsp;&nbsp;&nbsp;&nbsp; //从左至右删除第一个root
echo \({a#root:x:}&nbsp; //从左至右删除到root:x: <br>&nbsp;<br>echo \){a#root:x:0:0:root:/root}&nbsp; //从左至右删除到root:x:0:0:root:/root
&nbsp;
echo \({a*root}&nbsp; //上述目的可以简写, 删除到最后一个root,以及root左边所有内容 <br>&nbsp;<br>从右往左删除&nbsp;&nbsp; 去尾 <br>echo \){a%/bin/bash}&nbsp;&nbsp;&nbsp; //从右往左删除到/bin/bash
echo \({a%root*}&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//从右往左删除到第一个root,以及root右边所有内容 <br>echo \){a%%root}&nbsp;&nbsp; //从右往左删除到最后一个root,以及root右边所有内容,相当于删除整行
&nbsp;
通过字串删除功能,编写脚本,实现批量修改文件扩展名
touch abc{1..8}.txt&nbsp;&nbsp;&nbsp;&nbsp; //先制作素材
&nbsp;
#!/bin/bash
for i in&nbsp; ls *.txt
do
&nbsp;&nbsp; &nbsp;x=${i%.
}&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;//通过去尾功能,获取没有扩展名的文件名
&nbsp;&nbsp; &nbsp;mv \(i&nbsp; \)x.doc&nbsp;&nbsp; //将原来的文件,修改为文件名.doc
done
&nbsp;
升级版
#!/bin/bash
for i in&nbsp; ls *.$1&nbsp;&nbsp; //使用位置变量
do
&nbsp;&nbsp; &nbsp;x=\({i%.*}&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;mv \)i&nbsp; \(x.\)2&nbsp;&nbsp; &nbsp;
done
&nbsp;

&nbsp;
&nbsp;
设置变量初值(备用值)
\({a:-XXX}&nbsp;&nbsp; //当变量a有值时,使用自身的值,是空时使用XXX <br>&nbsp;<br>case 变量 in <br>模式1) <br>&nbsp;&nbsp; &nbsp;命令序列1 ;; <br>模式2) <br>&nbsp;&nbsp; &nbsp;命令序列2 ;; <br>*) <br>&nbsp;&nbsp; &nbsp;命令序列3 <br>esac <br>&nbsp;<br>函数 <br>&nbsp;<br>函数名(){ <br>&nbsp;&nbsp; &nbsp;命令序列 <br>} <br>&nbsp;<br>function 函数名 { <br>&nbsp;&nbsp; &nbsp;命令序列 <br>} <br>&nbsp;<br>echo -e "033[31mABCD033[0m" <br>&nbsp;<br>循环的中断 <br>1,exit <br>2,break <br>3,continue <br>&nbsp;<br>字串处理 <br>1,字串截取 <br>\){a:}
2,字串替换
\({a/} <br>3,字串删除 <br>掐头 \){a#}
去尾 \({a%} <br>&nbsp;<br>设置初值 <br>\){a:-}
&nbsp;
正则表达式,可以对文本匹配查找,配合很多工具实现丰富的功能
基本正则:
&nbsp;
grep ^\( user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //搜索空行 <br>grep "^ " user&nbsp;&nbsp;&nbsp; //搜以空格开头的行 <br>grep " \)” user&nbsp;&nbsp;&nbsp; //搜以空格结尾的行
&nbsp;
grep “[bin]” user&nbsp;&nbsp; //搜索字母b或者i或者n
grep “roo[tdg]” user&nbsp; //搜索root或者rood或者roog
&nbsp;
grep “[a-z]” user&nbsp;&nbsp;&nbsp; //找所有小写字母
grep “[0-9]” user&nbsp;&nbsp;&nbsp; //找所有数字
grep “[A-Z]” user&nbsp;&nbsp;&nbsp; //找所有大写字母
grep “[rot]” user&nbsp;&nbsp;&nbsp; //找r或o或t
grep “[^rot]” user&nbsp;&nbsp; //找除了r或o或t之外的字符
grep “[^0-9]” user&nbsp;&nbsp; //不找数字
grep “[^a-z]” user&nbsp;&nbsp; //不找小写字母
grep “[^a-zA-Z]” user&nbsp;&nbsp; //不找字母
&nbsp;
grep “.” user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //找任意字符
grep “roo.” user&nbsp;&nbsp;&nbsp; //找roo后面追加1个任意字符
grep “ro..” user&nbsp;&nbsp;&nbsp; //找ro后面追加2个任意字符
grep “^.” user&nbsp;&nbsp;&nbsp;&nbsp; //找以任意字符开头的行
grep “.\(" user&nbsp;&nbsp;&nbsp; //找以任意字符结尾的行 <br>grep ".*" user&nbsp;&nbsp;&nbsp;&nbsp; //找任意 &nbsp;<br>grep "*" user&nbsp;&nbsp;&nbsp;&nbsp; //不能单独使用 <br>grep "a*" user&nbsp;&nbsp;&nbsp; //找有a的行,a可以出现任意次,包括0次 <br>&nbsp;<br>grep "o{1,2}" user&nbsp;&nbsp; //搜索o出现了1到2次 <br>grep "o{2}" user&nbsp;&nbsp;&nbsp; //搜索o出现了2次 <br>grep "o{1,}" user&nbsp;&nbsp;&nbsp; //搜索o出现了1次以及1次以上 <br>grep "o{2,}" user&nbsp;&nbsp; //搜索o出现了2次以及2次以上 <br>grep "o{3,}" user&nbsp;&nbsp; //搜索o出现了3次以及3次以上 <br>grep "(0:){2}" user &nbsp;<br>&nbsp;<br>扩展正则 <br>{}&nbsp; 可以 省略为 { } <br>()&nbsp; 可以 省略为 () <br>egrep "(0:){2}" user&nbsp;&nbsp; //搜索2个0:连在一起的行 <br>grep -E "(0:){2}" user&nbsp;&nbsp; //效果同上 <br>&nbsp;<br>+&nbsp;&nbsp; 相当于&nbsp;&nbsp; {1,}&nbsp;&nbsp;&nbsp;&nbsp; //匹配前一个字符1次以及1次以上 <br>?&nbsp;&nbsp; 相当于&nbsp;&nbsp; {0,1}&nbsp;&nbsp; //匹配前一个字符0次或1次 <br>&nbsp;<br>&nbsp;<br>172.40.50.115 <br>/var/ftp/pub <br>&nbsp;<br>vim&nbsp; 交互式 <br>sed&nbsp; 流式编辑器, 非交互式, 增删改查, 逐行处理 <br>使用方式 <br>1,&nbsp; 前置命令 | sed 选项&nbsp; 定址符 指令 <br>2, sed 选项&nbsp; 定址符 指令&nbsp; 操作的文件 <br>选项: <br>1, -n&nbsp; 屏蔽默认输出 <br>2, -r&nbsp; 支持扩展正则表达式 <br>3, -i&nbsp; 写入文件 <br>指令 <br>p&nbsp; 输出文档内容 <br>sed -n '1p' user&nbsp;&nbsp;&nbsp; //输出第1行 <br>sed -n '2,4p' user&nbsp; //输出2~4行 <br>sed -n '3p;5p' user&nbsp;&nbsp;&nbsp;&nbsp; //输出3行和5行 <br>sed -n '2,+2p' user&nbsp;&nbsp; //输出第2行,以及后面2行 <br>sed -n '1~2p' user&nbsp; //查看奇数行 <br>sed -n '2~2p' user&nbsp; //查看偶数行 <br>sed的定址符可以使用正则表达式, 在&nbsp; /&nbsp; /&nbsp; 中间填写 <br>sed -n '/root/p'&nbsp; user&nbsp;&nbsp; //查看有root的行 <br>sed -n '/^root/p'&nbsp; user&nbsp;&nbsp; //查看以root开头的行 <br>sed -n '='&nbsp; user&nbsp;&nbsp; //看所有行的行号 <br>sed -n '\)=’ user&nbsp;&nbsp; //看最后一行的行号
&nbsp;
d&nbsp; 删除行,使用方式和指令p基本一致,注意无需加 -n选项
sed ‘1d’ user&nbsp;&nbsp;&nbsp; //删除第1行
&nbsp;
s 替换
s/old/new/
s///
&nbsp;
&nbsp;
sed ’s/2017/XXXX/’ test&nbsp;&nbsp;&nbsp;&nbsp; //替换文档中所有行的第1个2017
sed ‘2s/2017/XXXX/’ test&nbsp;&nbsp;&nbsp; //替换第2行的第1个2017
sed ‘2s/2017/XXXX/2’ test&nbsp;&nbsp; //替换第2行的第2个2017
&nbsp;
sed ‘3s/2017/XXXX/3;3s/2017/XXXX/2’ test&nbsp; //替换第3行的第三个2017, 再替换第3行的第2个2017
&nbsp;
sed ’s/2017/XXXX/g’ test&nbsp;&nbsp;&nbsp; //替换所有2017
sed ’s/2017//’ test&nbsp;&nbsp;&nbsp; //将所有行的第1个2017替换为空,等于删除
sed -n ’s/root//p’ /etc/passwd&nbsp;&nbsp; //替换passwd文件中所有行的第一个root为空,并显示替换的行
&nbsp;
尝试使用sed替换功能将 /bin/bash 替换为 /sbin/sh
&nbsp;
sed ’s//bin/bash//sbin/sh/’ user&nbsp;&nbsp;&nbsp; //常规方式更换,报错
sed ’s//bin/bash//sbin/sh/’ user&nbsp;&nbsp; //使用转义符号屏蔽冲突的斜杠, 可以成功,但麻烦
sed ’s!/bin/bash!/sbin/sh!’ user&nbsp; //更改替换符号为! &nbsp;
sed ’s(/bin/bash(/sbin/sh(’ user&nbsp; //或用( &nbsp;
&nbsp;
&nbsp;
删除文件中每行的第二个、最后一个字符
sed ’s/https://www.cnblogs.com/liujiab/p//2;s/.$//’ test
&nbsp;
&nbsp;
将文件中每行的第1个、第2个字符互换
abc
sed -r ’s/(.)(.)(.)/213/’ abc
&nbsp;
&nbsp;
sed -r ’s/(.)(.)(.
)/213/’ test
&nbsp;
将文件中每行的第1个、最后1个字符互换
&nbsp;
sed -r ’s/^(.)(.*)(.)\(/321/' test <br>&nbsp;<br>&nbsp;<br>删除文件中所有的数字 <br>sed 's/[0-9]//g'&nbsp;&nbsp; test&nbsp; //找到所有数字,替换成空 <br>&nbsp;<br>为文件中每个大写字母添加括号 <br>sed -r 's/([A-Z])/(1)/' test&nbsp; //找到所有大写字母,并复制,然后在后面粘贴时,添加括号 <br>&nbsp;<br>&nbsp;<br>编写脚本,一键部署ftp服务,并实现匿名上传普通文件功能 <br>#!/bin/bash <br>yum -y install vsftpd&nbsp; &amp;&gt; /dev/null <br>sed -i 's/^#anon_u/anon_u/'&nbsp;&nbsp; /etc/vsftpd/vsftpd.conf <br>systemctl restart vsftpd <br>systemctl enable vsftpd <br>systemctl stop firewalld&nbsp;&nbsp;&nbsp;&nbsp; //临时关闭防火墙 <br>chmod 777 /var/ftp/pub&nbsp;&nbsp;&nbsp;&nbsp; //给pub目录权限 <br>setenforce 0&nbsp;&nbsp;&nbsp; //关闭selinux <br>&nbsp;<br>脚本运行后,用真机访问虚拟机的ftp,可以拖拽普通文件到pub目录中 <br>&nbsp;<br> <br>正则表达式 <br>基本正则 <br>^&nbsp;&nbsp;&nbsp; \)&nbsp;&nbsp;&nbsp; [&nbsp; ]&nbsp;&nbsp; [^]&nbsp;&nbsp; .&nbsp;&nbsp; *&nbsp;&nbsp; &nbsp;
{n,m}&nbsp;&nbsp; {n,}&nbsp;&nbsp;&nbsp; (ro){2}&nbsp;&nbsp; ()&nbsp; &nbsp;
扩展正则
egrep
grep -E
+&nbsp;&nbsp;&nbsp;&nbsp; ?&nbsp;&nbsp;&nbsp;&nbsp; {n,m}&nbsp;&nbsp;&nbsp; |&nbsp;&nbsp; ()&nbsp;&nbsp;&nbsp; &nbsp;
&nbsp;
b
&nbsp;
&nbsp;athey
&nbsp;
btheb
&nbsp;
&nbsp;
前置指令 |&nbsp; sed 选项&nbsp; 定址符 指令 &nbsp;
sed 选项&nbsp; 定址符 指令&nbsp;&nbsp;&nbsp; 文件
逐行执行
-n&nbsp; -r&nbsp;&nbsp; -i&nbsp;&nbsp; &nbsp;
/ /p&nbsp;&nbsp; / /d&nbsp;&nbsp; /&nbsp; /s///
&nbsp;
a 在行下面追加&nbsp;&nbsp;&nbsp; i 在行上面添加&nbsp;&nbsp;&nbsp; c替换整行
&nbsp;
sed ‘a 666’ user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //所有行下面追加666
sed ‘1a 666’ user&nbsp;&nbsp;&nbsp;&nbsp; //第1行下面追加666
sed ‘/bash\(/a 666' user&nbsp;&nbsp;&nbsp; //以bash结尾的行下面追加666 <br>sed 'i 666' user&nbsp;&nbsp;&nbsp;&nbsp; //所有行上面添加666 <br>sed '1i 666' user&nbsp;&nbsp;&nbsp;&nbsp; //第1行上面添加666 <br>&nbsp;<br>sed '2c 666' user&nbsp;&nbsp;&nbsp; //将第2行替换为666 <br>sed 'c 666' user&nbsp;&nbsp;&nbsp; //将所有行替换为666 <br>&nbsp;<br>&nbsp;<br>sed&nbsp; 修改文本 <br>awk&nbsp; 精确定位查找&nbsp; 逐行执行 <br>&nbsp;<br>前置指令 |&nbsp; awk 选项&nbsp; 条件 指令 &nbsp;<br>awk 选项&nbsp; 条件 指令&nbsp;&nbsp;&nbsp;&nbsp; 文件 <br>&nbsp;<br>选项 <br>-F&nbsp; 指定分隔符 <br>指令 <br>print&nbsp; 输出内容到屏幕 <br>&nbsp;<br>列&nbsp; \)1 第一列&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \(2 第二列 <br>&nbsp;<br>awk '{print}' hello&nbsp;&nbsp;&nbsp; //输出文档所有内容 <br>awk '{print \)2}’ hello&nbsp;&nbsp;&nbsp; //输出文档每行第2列
awk ‘{print \(2 , \)3}’ hello&nbsp;&nbsp; //输出文档每行第2列和第3列
awk ‘{print \(3,\)2}’ hello &nbsp;
awk ‘{print \(1,\)2,\(3}' hello &nbsp;<br>awk '{print \)0}’ hello&nbsp;&nbsp;&nbsp;&nbsp; //输出文档每行所有列
awk ‘{print \(0,\)3}’ hello&nbsp;&nbsp; //输出文档每行所有列和第3列
&nbsp;
awk -F: ‘{print \(6}' user&nbsp;&nbsp; //修改分隔符为冒号,显示第6列 <br>&nbsp;<br>awk -F[:/] '{print \)9}’ user&nbsp;&nbsp; //修改分隔符为冒号或者斜杠,显示第9列
awk -Fo ‘{print \(2}' hello&nbsp;&nbsp;&nbsp; //修改分隔符为字母o,显示第2列 <br>&nbsp;<br>awk 常用内置变量 <br>\)0所有列&nbsp;&nbsp;&nbsp; \(1 \)2 \(3...&nbsp; NR 行号&nbsp;&nbsp;&nbsp; NF 列号 <br>&nbsp;<br>awk '{print NR}' hello&nbsp;&nbsp;&nbsp;&nbsp; //查看行号 <br>awk '{print NF}' hello&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看有几列 <br>awk '{print NR,NF}' hello&nbsp;&nbsp;&nbsp; //查看行号和列 <br>awk -Fbin/ '{print \)2}’&nbsp; user&nbsp;&nbsp;&nbsp; //定义分隔符为bin/,显示第2列
df -h / | awk ‘{print \(4}'&nbsp;&nbsp; //显示所有行第4列 <br>df -h / | awk '/vda1/{print \)4}’&nbsp;&nbsp; //显示有vda1的行的第4列
df -h / | awk ‘/vda1/{print “根分区剩余容量是:”\(4}'&nbsp;&nbsp; //显示有vda1的行的第4列,并在前面追加常量, 常量要用双引号 <br>&nbsp;<br>使用awk过滤显示网卡流量信息: <br>ifconfig eth0 |awk '/RX p/{print \)5}’
&nbsp;
ifconfig eth0 |awk ‘/RX p/{print “eth0网卡接收的流量是” \(5"字节"}' <br>ifconfig eth0 |awk '/TX p/{print "eth0网卡发送的流量是" \)5”字节”}’
&nbsp;
使用awk筛选安全日志中登录密码输错的主机
&nbsp;
1,在desktop中输入tail -5 /var/log/secure 可以查看安全日志最新的5行记录
2,使用server远程登录desktop,故意输错密码,然后再次查看desktop日志发现最后一行多出记录了
3,使用真机远程登录desktop,也故意输入错误密码(需要提前在desktop中家目录的.ssh中把认证秘钥文件改名)
&nbsp;
4,在desktop中使用命令过滤日志,查找密码输入失败的行的第11列
awk ‘/Failed/{print \(11}' /var/log/secure <br>&nbsp;<br>使用awk筛选输出用户相应信息 <br>XXX的解释器路径是XXXX,家目录是XXXX <br>awk -F: '{print \)1,“的解释器路径是”\(7}' user &nbsp;<br>&nbsp;<br>控制awk的工作流程 <br>BEGIN{???}&nbsp;&nbsp; 执行1次 <br>{print}&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; 执行n次 <br>END{???}&nbsp;&nbsp;&nbsp;&nbsp; 执行1次 <br>&nbsp;<br>制表符&nbsp;&nbsp; &nbsp;&nbsp; tab键 <br>&nbsp;<br>使用awk按流程输出信息: <br>awk -F: 'BEGIN{print "User UID Home"}{print \)1” “\(3" "\)6}END{print “总计 “NR” 行”}’ user &nbsp;
&nbsp;
&nbsp;
&nbsp;awk处理条件
1,&nbsp;&nbsp; 正则&nbsp;&nbsp;&nbsp;&nbsp; ~ 包含&nbsp;&nbsp;&nbsp; !不包含
&nbsp;
awk -F: ‘$1
/root/{print}’ user&nbsp;&nbsp;&nbsp;&nbsp; //找第1列包含root的行
awk -F: ‘/bin/’ user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //找有bin的行
awk -F: ‘\(6~/bin/' user&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //找第6列包含bin的行 <br>&nbsp;<br>awk -F: '\)6//bin/’ user&nbsp;&nbsp;&nbsp; //找第6列包含/bin的行
awk -F: ‘$6!
//bin/’ user&nbsp;&nbsp; //找第6列不包含/bin的行
&nbsp;
2,使用数值/字符串比较设置条件
比较符号:==(等于) !=(不等于) &gt;(大于)
&gt;=(大于等于) &lt;(小于) &lt;=(小于等于)
&nbsp;
awk -F: ‘\(1=="root"' user&nbsp;&nbsp; //找第1列等于root的行 <br>awk -F: '\)1==“roo”’ user&nbsp;&nbsp; //找第1列等于roo的行
awk -F: ‘\(1~/roo/' user&nbsp;&nbsp;&nbsp; //找第1列包含roo的行 <br>awk -F: 'NR==3' user&nbsp;&nbsp;&nbsp;&nbsp; //找第3行 <br>&nbsp;<br>awk -F: '\)3==0’ /etc/passwd&nbsp;&nbsp; //找管理员
awk -F: ‘\(3&lt;10' /etc/passwd&nbsp;&nbsp; //找uid小于10的账户 <br>awk -F: '\)3&lt;10{print \(1}' /etc/passwd&nbsp;&nbsp; //找uid小于10的账户,并显示账户名 <br>awk -F: '\)3&gt;=1000{print \(1}' /etc/passwd&nbsp;&nbsp; //找普通账户,并显示账户名 <br>&nbsp;<br>3,逻辑符号 <br>&amp;&amp;&nbsp; 并且 &nbsp;<br>||&nbsp;&nbsp;&nbsp;&nbsp; 或者 <br>&nbsp;<br>awk 'NR&gt;=3 &amp;&amp; NR&lt;=5' user&nbsp;&nbsp;&nbsp; //找3~5行 <br>awk -F: '\)3&gt;=100 && \(3&lt;=1000' /etc/passwd&nbsp;&nbsp;&nbsp; //找udi大于等于100,并且小于等于1000的行 <br>awk 'NR&gt;3 &amp;&amp; NR&lt;5' user&nbsp;&nbsp;&nbsp;&nbsp; //找大于3且小于5的行 <br>awk 'NR&gt;3 || NR&lt;5' user&nbsp;&nbsp;&nbsp; //找大于3或者小于5的行 <br>awk 'NR&gt;5 &amp;&amp; NR&lt;3' user&nbsp;&nbsp;&nbsp; //找大于5且小于3的行,逻辑错误 <br>&nbsp;<br>&nbsp;<br>awk中数学运算 <br>awk 'BEGIN{x=10;y=20;print x*y}'&nbsp; //定义变量,然后相乘并输出结果 <br>awk 'BEGIN{x=10;y=20;print y%x}'&nbsp;&nbsp; //取余 <br>awk 'BEGIN{x=10;y=20;print x+=y}'&nbsp; //x的自增, 支持主流写法 <br>awk 'BEGIN{x=10;y=20;print x++}'&nbsp;&nbsp; //将x+1,但不输出 <br>awk 'BEGIN{x=10;y=20;print x++;print x}'&nbsp;&nbsp; //将x+1,然后输出x <br>awk 'BEGIN{x=10;y=20;print x+=1}'&nbsp; //将x+1,同时输出 <br>&nbsp;<br>seq 20 | awk '\)1%3==0’&nbsp;&nbsp;&nbsp; //找1~20以内谁是3的倍数
&nbsp;
&nbsp;
&nbsp;
使用awk按照 用户名 –&gt; 密码 的格式输出使用bash的账户信息
&nbsp;
#!/bin/bash
u=awk -F: '/bash$/{print $1}' /etc/passwd
for i in \(u <br>do <br>grep \)i: /etc/shadow | awk -F: ‘{print \(1" --&gt; " \)2}’
done
&nbsp;

&nbsp;
vim&nbsp; 交互式&nbsp; 增删改查
grep 模糊查找
sed&nbsp; 非交互式&nbsp; 增删改查
awk&nbsp; 精确查找
&nbsp;
前置指令 | awk 选项&nbsp; 条件 指令
awk 选项&nbsp; 条件 指令&nbsp;&nbsp; 文件
&nbsp;
-F&nbsp; 修改分隔符
print
&nbsp;
条件
1, 使用正则&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; !
2, 字符串与数字&nbsp; ==&nbsp; !=&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp; &gt;=&nbsp;&nbsp; &lt;&nbsp; &lt;=
3,逻辑符号&nbsp; &&&nbsp;&nbsp; ||
&nbsp;
BEGIN{}&nbsp; 执行1次
{&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 执行n次
END{}&nbsp;&nbsp; &nbsp; 执行1次
&nbsp;
&nbsp;
awk的if判断
&nbsp;
单分支
{if(条件){执行指令}}
计算系统中普通账户的数量:
awk -F: ‘{if(\(3&gt;=1000){x++}}END{print x}' /etc/passwd <br>&nbsp;<br>awk '{ }END{ }' <br>&nbsp;<br>双分支 <br>{if(条件){执行指令1}else{执行指令2}} <br>计算系统中普通账户和系统账户的数量: <br>awk -F: '{if(\)3&gt;=1000){x++}else{y++}}END{print x,y}’ /etc/passwd
&nbsp;
多分支
{if(条件1){执行指令1}else if(条件2){执行指令2}else{执行指令3}}
&nbsp;
&nbsp;
awk 数组
变量 可以存储1个值
数组 可以存储多个值
&nbsp;
变量名=值
数组名[下标]=值
&nbsp;
a[1]=10
a[2]=20
&nbsp;
awk ‘BEGIN{a[1]=10;a[2]=20;print a[2],a[1]}’
&nbsp;
for(变量名称&nbsp; in 值){执行指令}
&nbsp;
awk数组+for循环基本用法:
awk ‘BEGIN{a[0]=0;a[1]=11;a[2]=22; for(i in a){print i,a[i]}}’&nbsp;&nbsp;&nbsp; //定义一个数组a, 有3个下标,分别对应3个值, 然后交给for循环,循环显示&nbsp; 下标&nbsp; 和&nbsp; 值
&nbsp;
awk数组+for循环扩展应用 :
准备文档包含3行内容 &nbsp;
abc
abc
xyz
&nbsp;
awk ‘{a[\(1]++}END{for(i in a){print i,a[i]}}'&nbsp; abc <br>&nbsp;<br>a[abc]++&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[abc]=2 <br>a[xyz]++&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; a[xyz]=1 <br>&nbsp;<br>abc 2 <br>xyz 1 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>ip[192.168.0.1]=2 <br>ip[192.168.0.2]=1 <br>ip[192.168.0.3]=3 <br>&nbsp;<br>使用awk统计网站访问量: <br>1,yum -y install httpd <br>2,systemctl restart httpd&nbsp;&nbsp;&nbsp;&nbsp; 开启服务 <br>3,使用其他主机访问该网站,多访问几次 <br>&nbsp;&nbsp;&nbsp; 防火墙需要临时关闭&nbsp;&nbsp; systemctl stop firewalld <br>4, 使用awk对日志分析, sort可以排序, -n对数字排序, -r降序 <br>awk '{ip[\)1]++}END{for(i in ip){print ip[i],i}}’ access_log&nbsp; | sort -nr
5, 可以使用ab工具测试网站后在交给awk分析(安装httpd之后自动安装ab工具)
ab -n 10000 -c 1 172.25.0.10/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1个用户访问1万次网站
&nbsp;
&nbsp;
&nbsp;
#!/bin/bash
while :
do
uptime | awk ‘{print “cpu平均负载是”\(10,\)11,\(12}' <br>ifconfig eth0 | awk '/RX p/{print "网卡接收的数据量 是" \)5”字节”}’
ifconfig eth0 | awk ‘/TX p/{print “网卡发送的数据量 是” \(5"字节"}' <br>free -m | awk '/Mem/{print "剩余内存容量是"\)4”M”}’
df -h | awk ‘/vda1/{print “根分区剩余容量是”\(4}' <br>user=`cat /etc/passwd | wc -l` <br>echo "服务器拥有账户数量是\)user个”
u=who | wc -l
echo “当前服务器登录用户的数量是\(u个" <br>p=`ps aux | wc -l` <br>echo "当前主机运行的进程数量是\)p个”
ins=rpm -qa |wc -l
echo “当前主机安装软件包数量是\(ins个" <br>sleep 3 <br>clear <br>done <br>&nbsp;<br>编写脚本,监控服务器,如果发现有人尝试登录失败5次则发邮件给管理员 <br>&nbsp;<br>#!/bin/bash <br>x=`awk '/Failed/{ip[\)11]++}END{for(i in ip){print ip[i]”,“i}}’ /var/log/secure<br>for i in $x <br>do <br>&nbsp;&nbsp; &nbsp;n=${i%,*} <br>&nbsp;&nbsp; &nbsp;p=${i#*,} <br>&nbsp;&nbsp; &nbsp;[ $n -ge 5 ] &amp;&amp; echo "$p访问失败了$n次" | mail -s test root <br>done <br>&nbsp;<br>测试前可以先删除邮件 <br>rm -rf /var/spool/mail/root <br>&nbsp;<br> <br>NGINX web服务搭建 <br>&nbsp;<br>Web 服务器 <br>unix和linux <br>-Apache Nginx Tengine Lighttpd <br>-Tomcat IBM WebSphere Jboos <br>微软: <br>IIS <br>&nbsp;<br>NGinx简介 <br>Nginx <br>是一个高性能的HTTP和反向代理服务器,同时也是一一个IMAp/POP3/SMTP 代理服务器 <br>&nbsp;<br>&nbsp;<br>安装 <br>依赖软件包 <br>gcc 源码编译工具 <br>porc-devel&nbsp; 依赖包 <br>OPENssl-devel ssl加密工具 <br>&nbsp;<br>进入目录 &nbsp;<br>利用tar解开软件压缩 <br>进入软件主目录 <br>1 使用源码包自带脚本进行检测程序 并指定程序路径 <br>https://www.cnblogs.com/liujiab/p/configure&nbsp; <br>--prefox=/usr/loacl/nginx&nbsp;&nbsp; #指定安装的路径 <br>--user=nginx &nbsp;&nbsp; &nbsp;#指定用户 <br>--group=nginx &nbsp;&nbsp; &nbsp;#指定组 <br>--with-http_ssl_modlue <br>&nbsp;<br>2使用make工具进行编译和生成程序 <br>yum -y install make <br>进入软件所在目录 <br>make ; make install&nbsp; #进行程序生成 <br>&nbsp;<br>安装完成 <br>&nbsp;<br>默认路径在 /usr/local/nginx/sbin/nginx&nbsp; #程序路径 <br>&nbsp;<br>!!!!!!!!需要创建之前定义的用户 启动服务不可以由root启动会导致数据泄露 <br>&nbsp;<br>&nbsp;<br>/usr/local/nginx/sbin/nginx #启动程序 <br>/usr/local/nginx/sbin/nginx -s stop 关闭程序 <br>/usr/local/nginx/sbin/nginx -s reload 重新载入配置文件 <br>/usr/local/nginx/sbin/nginx -V&nbsp; 查看软件的版本信息 <br>&nbsp;<br>可以使用软链接的方法方便后期使用 <br>ln -s /usr/local/nginx/sbin/nginx&nbsp;&nbsp; /sbin/ <br>&nbsp;<br>&nbsp;<br>netsta 工具 可以查看系统的端口信息 常用的目录选项 &nbsp;<br>&nbsp;<br>-a显示所有端口的信息 <br>&nbsp;<br>-n以数字格式显示端口号 <br>&nbsp;<br>-t显示TCP连接的端口 <br>&nbsp;<br>-u显示UDP连接的端口 <br>&nbsp;<br>-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口 <br>&nbsp;<br>-p显示监听端口的服务名称是什么(也就是程序名称) <br>&nbsp;<br>&nbsp;netstat&nbsp; -anptu&nbsp; |&nbsp; grep nginx <br>&nbsp;<br>&nbsp;<br>进行主页文件测试 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@client ~]# curl http://192.168.4.5 <br>&nbsp;&nbsp;&nbsp; &lt;html&gt; <br>&nbsp;&nbsp;&nbsp; &lt;head&gt; <br>&nbsp;&nbsp;&nbsp; &lt;title&gt;Welcome to nginx!&lt;/title&gt; <br>&nbsp;&nbsp;&nbsp; &lt;/head&gt; <br>&nbsp;&nbsp;&nbsp; &lt;body bgcolor="white" text="black"&gt; <br>&nbsp;&nbsp;&nbsp; &lt;center&gt;&lt;h1&gt;Welcome to nginx!&lt;/h1&gt;&lt;/center&gt; <br>&nbsp;&nbsp;&nbsp; &lt;/body&gt; <br>&nbsp;&nbsp;&nbsp; &lt;/html&gt; <br>&nbsp;<br>Nginx升级步骤和注意事项 <br>&nbsp;<br>将要升级的源码包解包编译指定路径 <br>&nbsp;<br>将源文件进行移动备份 <br>&nbsp;mv /usr/local/nginx/sbin/nginx&nbsp; /usr/local/nginx/sbin/nginxold <br>&nbsp;<br>将新版本的程序拷贝到路径下 &nbsp;<br>cp objs/nginx&nbsp; /usr/local/nginx/sbin/&nbsp; &nbsp;<br>&nbsp;<br>make upgrade 或 关闭服务 强行关闭killall nginx &nbsp;<br>&nbsp;<br>进行升级 也就是关闭服务重新启动 <br>&nbsp;<br>如果报错:可能是因为用户没有创建 还有是服务没有开启 <br>&nbsp;<br>用户认证配置修改 <br>&nbsp;<br>进入配置文件/usr/local/nginx/conf/nginx.conf修改 <br>........... <br>不需要删除 <br>也可以自行创建一个虚拟主机 <br>需要添加分号在每行结尾处 <br>注意花括号个数 {} 必须成对 http {这里的括号需和结尾处呼应 也可以自行创建 <br>server { <br>&nbsp;&nbsp; &nbsp;linten 80; 端口指定 <br>&nbsp;&nbsp; &nbsp;servername localhost; #这里是域名 &nbsp;<br>&nbsp;&nbsp; &nbsp;auth_basic "input password"; 登录时的提示 &nbsp;<br>&nbsp;&nbsp; &nbsp;auth_basic_user_file "/usr/local/nginx/pass";&nbsp;&nbsp; &nbsp;#认证的密码文件&nbsp;&nbsp; &nbsp; <br>localtion / { <br>&nbsp;&nbsp; &nbsp;root html; <br>&nbsp;&nbsp; &nbsp;index index.html index.html; <br>} <br>} <br>生成密码文件 <br>安装httpd-tools <br>yum -y install httpd-tools &nbsp;<br>htpasswd -c /usr/local/nignx/pass 创建 #用户名 <br>htpasswd /usr/local/nignx/pass&nbsp;&nbsp; 追加时不需要写-c选项不然会把之前的替换 <br>&nbsp;<br>echo '测试用户认证网页' &gt; /usr/local/nginx/html/index.html <br>&nbsp;<br>&nbsp;<br>/usr/local/nginx/sbin/nginx -s reload&nbsp;&nbsp;&nbsp; //重新加载配置文件&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>进行测试 <br>&nbsp;<br>firefox 192.168.4.5 <br>curl -u 用户名;密码&nbsp; 192.168.4.5 <br>&nbsp;<br>&nbsp;<br>配置基于域名的虚拟主机 <br>&nbsp;<br>进行配置文件修改 /usr/local/nginx/conf/nginx.conf <br>&nbsp;<br>易错: {}添加问题 配置后需重新加载配置文件 &nbsp;<br>server { <br>&nbsp;&nbsp; &nbsp;listen 80 <br>&nbsp;&nbsp; &nbsp;servername www.a.com; 域名 <br>&nbsp;&nbsp; &nbsp;aoth_basic; "提示" <br>&nbsp;&nbsp; &nbsp;aoth_basic_user_file; "/usr/local/nginx/pass" <br>location / { <br>&nbsp;&nbsp; &nbsp;root www; <br>&nbsp;&nbsp; &nbsp;index index.html index.html; <br>&nbsp;&nbsp; &nbsp;} <br>} <br>&nbsp;<br>server { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp; 80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //端口 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; www.b.com;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //域名 <br>location / { &nbsp;<br>&nbsp;&nbsp; &nbsp;root&nbsp;&nbsp; www;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //指定网站根路径 <br>&nbsp;&nbsp; &nbsp;index&nbsp; index.html index.htm; <br>&nbsp;&nbsp; &nbsp;} <br>} <br>&nbsp;<br>创建网站根目录及对应首页文件 <br>&nbsp;<br>&nbsp;mkdir /usr/local/nginx/www <br>&nbsp;<br>echo "基于域名的虚拟主机" &gt; /usr/local/nginx/www/index.html <br>&nbsp;<br>测试 <br>curl -u 用户名;密码&nbsp; www.a.com <br>curl&nbsp; www.b.com <br>firefox http://www.a.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输入密码后可以访问 <br>firefox http://www.b.com&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //直接访问 <br>&nbsp;<br>&nbsp;<br>基于端口的虚拟主机(参考模板) <br>&nbsp;<br>server { <br>&nbsp;&nbsp; &nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8080;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //端口 <br>&nbsp;&nbsp; &nbsp;server_name&nbsp; web1.example.com;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //域名 <br>} <br>&nbsp;&nbsp; &nbsp;........... <br>server { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 8000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //端口 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; web1.example.com;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //域名 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ....... <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;<br>基于ip的虚拟主机 <br>server { <br>&nbsp;&nbsp; &nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.0.1:80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //IP地址与端口 <br>&nbsp;&nbsp; &nbsp;server_name&nbsp; web1.example.com;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //域名 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ... ... <br>} <br>server { <br>&nbsp;&nbsp; &nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 192.168.0.2:80;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //IP地址与端口&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp; &nbsp;server_name&nbsp; web1.example.com; <br>&nbsp;&nbsp;&nbsp; ... ... <br>} <br>&nbsp;<br>SSL虚拟主机 <br>cd /usr/local/nginx/conf &nbsp;&nbsp; &nbsp;#进入配置目录 <br>opensll genursa &gt; cert.key&nbsp;&nbsp; #生成密钥 <br>opensll req -new -x509 -key cer.key &gt; cert.pem&nbsp;&nbsp; &nbsp;#生成公钥 <br>&nbsp;<br>server <br>&nbsp;&nbsp; &nbsp;listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 443 ssl; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; www.c.com; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ssl_certificate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cert.pem;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #这里是证书文件 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ssl_certificate_key&nbsp; cert.key;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #这里是私钥文件 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ssl_session_cache&nbsp;&nbsp;&nbsp; shared:SSL:1m; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ssl_session_timeout&nbsp; 5m; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ssl_ciphers&nbsp; HIGH:!aNULL:!MD5; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ssl_prefer_server_ciphers&nbsp; on; <br>&nbsp;&nbsp; &nbsp;erewrite /http/www.c.html&nbsp; https/www.c.html; &nbsp;<br>location / { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp; html; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index&nbsp; index.html index.htm; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>} <br>一般在最后有模板把注释打开修改即可 <br>&nbsp;<br>载入配置 <br>[root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload <br>&nbsp;<br>测试 <br>curl&nbsp; https:/www.c.com <br>firefox https://www.c.com &nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>部署LNMP环境 <br>&nbsp;<br>!安装软件 <br>&nbsp;<br>yum -y install gcc openssl-devel pcre-devel <br>&nbsp;<br>源码安装Nginx(如果前面课程中已经安装Nginx,则忽略这一步) <br>&nbsp;<br>useradd -s /sbin/nologin&nbsp; nginx <br>tar -xvf nginx-1.12.2.tar.gz <br>cd nginx-1.12.2 <br>https://www.cnblogs.com/liujiab/p/configure&nbsp;&nbsp; <br>&nbsp;&gt; --user=nginx&nbsp;&nbsp; --group=nginx <br>&nbsp;&gt; --with-http_ssl_module <br>&nbsp;make &amp;&amp; make install <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;<br>安装MariaDB <br>Mariadb在新版RHEL7光盘中包含有该软件,配置yum源后可以直接使用yum安装: <br>yum -y install&nbsp;&nbsp; mariadb&nbsp;&nbsp; mariadb-server&nbsp;&nbsp; mariadb-devel <br>&nbsp;<br>安装 php和php-fpm <br>yum -y&nbsp; install&nbsp; php&nbsp;&nbsp; php-mysql <br>yum -y&nbsp; install&nbsp; php-fpm <br>&nbsp;<br>!启动服务 <br>systemctl stop httpd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果该服务存在则关闭该服务 <br>/usr/local/nginx/sbin/nginx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //启动Nginx服务 <br>netstat -utnlp | grep :80 <br>tcp&nbsp; 0&nbsp; 0 0.0.0.0:80&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:*&nbsp;&nbsp; LISTEN&nbsp;&nbsp;&nbsp; 32428/nginx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>2)启动MySQL服务 <br>&nbsp;<br>systemctl start&nbsp; mariadb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //启动服务器 <br>systemctl status mariadb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看服务状态 <br>systemctl enable mariadb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置开机启动 <br>&nbsp;<br>3)启动PHP-FPM服务 <br>systemctl start php-fpm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //启动服务 <br>systemctl status php-fpm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看服务状态 <br>systemctl enable php-fpm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置开机启动 <br>&nbsp;<br>&nbsp;<br>步骤一: php-fpm配置文件 <br>&nbsp;<br>1)查看php-fpm配置文件(实验中不需要修改该文件) <br>&nbsp;<br>vim /etc/php-fpm.d/www.conf <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [www] <br>&nbsp;&nbsp;&nbsp; listen = 127.0.0.1:9000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //PHP端口号 <br>&nbsp;&nbsp;&nbsp; pm.max_children = 32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //最大进程数量 <br>&nbsp;&nbsp;&nbsp; pm.start_servers = 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //最小进程数量 <br>&nbsp;&nbsp;&nbsp; pm.min_spare_servers = 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //最少需要几个空闲着的进程 <br>&nbsp;&nbsp;&nbsp; pm.max_spare_servers = 32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //最多允许几个进程处于空闲状态 <br>&nbsp;<br>&nbsp;<br>步骤二:修改Nginx配置文件并启动服务 <br>&nbsp;<br>&nbsp;vim /usr/local/nginx/conf/nginx.conf <br>&nbsp;<br>使用域名配置 <br>&nbsp;<br>server { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; www.xxx.com; <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location / { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp; www; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index&nbsp; index.php index.html index.htm; <br>&nbsp;<br>&nbsp; } <br>location ~ .php$ { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fastcgi_pass&nbsp;&nbsp; 127.0.0.1:9000; 将请求转发给本机9000端口,PHP解释器 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fastcgi_index&nbsp; index.php;&nbsp;&nbsp; &nbsp; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #&nbsp;&nbsp;&nbsp; fastcgi_param&nbsp; SCRIPT_FILENAME&nbsp; /scripts$fastcgi_script_name; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fastcgi.conf; #加载其他配置文件/也可将配置导入 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>} <br>易错 : 上面http{到最下面 <br>&nbsp;&nbsp; &nbsp;上面server {到虚拟域名主机的server上面 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>步骤三:创建PHP页面,测试LNMP架构能否解析PHP页面 <br>vim /usr/local/nginx/html/test.php <br>&nbsp;&nbsp;&nbsp; &lt;?php <br>&nbsp;&nbsp;&nbsp; $i="This is a test Page"; <br>&nbsp;&nbsp;&nbsp; echo $i; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ?&gt; <br>&nbsp;<br>2)创建PHP测试页面,连接并查询MariaDB数据库。 <br>vim /usr/local/nginx/html/mysql.php <br>&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp; &lt;?php <br>&nbsp;&nbsp;&nbsp; $mysqli = new mysqli('localhost','root','密码','mysql'); <br>&nbsp;&nbsp;&nbsp; //注意:root为mysql数据库的账户名称,密码需要修改为实际mysql密码,无密码则留空即可 <br>&nbsp;&nbsp;&nbsp; //localhost是数据库的域名或IP,mysql是数据库的名称 <br>&nbsp;&nbsp;&nbsp; if (mysqli_connect_errno()){ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; die('Unable to connect!'). mysqli_connect_error(); <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; $sql = "select * from user"; <br>&nbsp;&nbsp;&nbsp; $result = $mysqli-&gt;query($sql); <br>&nbsp;&nbsp;&nbsp; while($row = $result-&gt;fetch_array()){ <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Host:%s",$row[0]); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("&lt;/br&gt;"); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("Name:%s",$row[1]); <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; printf("&lt;/br&gt;"); <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; ?&gt; <br> <br>&nbsp;<br>3)客户端使用浏览器访问服务器PHP首页文档,检验是否成功: <br>&nbsp;firefox http://192.168.4.5/test.php <br>&nbsp;firefox http://192.168.4.5/mysql.php <br>&nbsp;<br>&nbsp;<br>4)LNMP常见问题 <br>&nbsp;<br>Nginx的默认访问日志文件为/usr/local/nginx/logs/access.log <br>&nbsp;<br>Nginx的默认错误日志文件为/usr/local/nginx/logs/error.log <br>&nbsp;<br>PHP默认错误日志文件为/var/log/php-fpm/www-error.log <br>&nbsp;<br>如果动态网站访问失败,可用参考错误日志,查找错误信息。 <br>&nbsp;<br> <br>地址重写 &nbsp;<br> <br>(访问a.html重定向到b.html) <br>rewrite /a.html&nbsp; /b.html;&nbsp; #用户访问 /a.html 会直接被转发到 /b.html&nbsp; &nbsp;<br>3)客户端测试(仔细观察浏览器地址栏的变化) <br> <br>访问a.html重定向到b.html(跳转地址栏) <br>rewrite /a.html&nbsp; /b.html&nbsp; redirect;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>3)客户端测试(仔细观察浏览器地址栏的变化) <br># <br>&nbsp;<br>修改配置文件(访问192.168.4.5/下面子页面,重定向至www.tmooc.cn/下相同的页面) <br>rewrite ^/(.*)$&nbsp; http://www.tmooc.cn/$1; <br> <br>&nbsp;<br>客户端测试(真实机测试,真实机才可以连接tmooc) <br>firefox&nbsp; http://192.168.4.5 <br>irefox&nbsp; http://192.168.4.5/test <br>&nbsp;<br> <br>&nbsp;<br>修改配置文件(实现curl和火狐访问相同链接返回的页面不同) <br>&nbsp;<br>&nbsp;创建网页目录以及对应的页面文件: <br>&nbsp;<br>echo "I am Normal page" &gt; /usr/local/nginx/html/test.html <br>&nbsp;<br>mkdir&nbsp; -p&nbsp; /usr/local/nginx/html/firefox/ <br>&nbsp;<br>echo "firefox page" &gt; /usr/local/nginx/html/firefox/test.html <br>&nbsp;<br>#这里,~符号代表正则匹配,*符号代表不区分大小写 <br>&nbsp;<br>if ($http_user_agent ~* firefox) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //识别客户端firefox浏览器 <br>&nbsp;<br>rewrite ^(.*)$&nbsp; /firefox/$1; <br>&nbsp;<br>3)重新加载配置文件 <br>&nbsp;<br>/usr/local/nginx/sbin/nginx&nbsp; -s&nbsp; reload <br>&nbsp;<br>4)客户端测试 <br>firefox&nbsp; http://192.168.4.5/test.html <br>curl&nbsp;&nbsp;&nbsp;&nbsp; http://192.168.4.5/test.html <br>&nbsp;<br>&nbsp;<br>Nginx地址重写 <br>&nbsp;<br>步骤一:修改配置文件(将页面www.A.com 重定向到www.B.com) <br>配置文件路径 /usr/local/nginx/conf/nginx.conf <br>&nbsp;<br>server { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; localhost; <br>rewrite /a.html&nbsp; /b.html [redirect](跳转地址栏); #要在网页中的server中添加一个rewute&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>location / { <br>&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp; html; <br>index&nbsp; index.html index.htm; <br>} <br>} <br>&nbsp;<br>echo "AA" &gt; /usr/local/nginx/html/A.html <br>echo "BB" &gt; /usr/local/nginx/html/B.html <br>&nbsp;<br>&nbsp;<br>2)重新加载配置文件 <br>/usr/local/nginx/sbin/nginx&nbsp; -s&nbsp; reload <br>&nbsp;<br>&nbsp;<br>步骤三:修改配置文件(访问192.168.4.5的请求重定向至www.tmooc.cn) <br>&nbsp;<br>1) 修改Nginx服务配置 <br>vim /usr/local/nginx/conf/nginx.conf <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; server { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; localhost; <br>&nbsp;&nbsp;&nbsp; rewrite ^/(.*)$&nbsp; http://www.tmooc.cn/$1; (访问192.168.4.5/下面子页面,重定向至www.tmooc.cn/下相同的页面 可以谁便写网站) <br>&nbsp;&nbsp;&nbsp; location / { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp; html; <br>&nbsp;&nbsp;&nbsp; index&nbsp; index.html index.htm; <br>&nbsp;&nbsp;&nbsp; # rewrite /a.html&nbsp; /b.html&nbsp; redirect; <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;<br>&nbsp;<br>2)重新加载配置文件 <br>/usr/local/nginx/sbin/nginx&nbsp; -s&nbsp; reload <br>&nbsp;<br>3)客户端测试 <br>firefox&nbsp; http://192.168.4.5 <br>firefox&nbsp; http://192.168.4.5/test <br>&nbsp;<br>步骤五:修改配置文件(实现curl和火狐访问相同链接返回的页面不同) <br>&nbsp;<br>&nbsp;<br>1) 创建网页目录以及对应的页面文件: <br>echo "I am Normal page" &gt; /usr/local/nginx/html/test.html <br>mkdir&nbsp; -p&nbsp; /usr/local/nginx/html/firefox/ <br>echo "firefox page" &gt; /usr/local/nginx/html/firefox/test.htm <br>&nbsp;<br>&nbsp;<br>2) 修改Nginx服务配置 <br>vim /usr/local/nginx/conf/nginx.conf <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; server { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; localhost; <br>&nbsp;&nbsp;&nbsp; location / { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp; html; <br>&nbsp;&nbsp;&nbsp; index&nbsp; index.html index.htm; <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; #这里,~符号代表正则匹配,*符号代表不区分大小写 <br>&nbsp;&nbsp;&nbsp; if ($http_user_agent ~* firefox) {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //识别客户端firefox浏览器 <br>&nbsp;&nbsp;&nbsp; rewrite ^(.*)$&nbsp; /firefox/$1; <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;<br>解析 : &nbsp;&nbsp; &nbsp;$http_user_agent ~* firefox &nbsp;<br>&nbsp;#判断浏览器是不是火狐 $http_user_agent ~(包含)*(所有) <br>&nbsp;<br>* <br>5)地址重写格式【总结】 <br>&nbsp;<br>rewrite 旧地址 新地址 [选项]; <br>&nbsp;<br>last 不再读其他rewrite <br>&nbsp;<br>break 不再读其他语句,结束请求 <br>&nbsp;<br>redirect 临时重定向 <br>&nbsp;<br>permament 永久重定向 <br>&nbsp;<br> <br>&nbsp;<br># <br>&nbsp;<br>Nginx 反向代理 <br>&nbsp;<br>步骤一 &nbsp;<br>部署模拟两台后端WEB服务器 <br>WEB 一 <br> <br>yum&nbsp; -y&nbsp; install&nbsp; httpd <br>echo "192.168.2.100" &gt; /var/www/html/index.html <br>systemctl restart httpd <br>firewall-cmd --set-default-zone=trusted <br>setenforce 0 <br> <br>WEB 二 <br> <br>yum&nbsp; -y&nbsp; install&nbsp; httpd <br>echo "192.168.2.100" &gt; /var/www/html/index.html <br>systemctl restart httpd <br>firewall-cmd --set-default-zone=trusted <br>setenforce 0 <br> <br>Nginx代理服务器 <br>1)使用yum安装基础依赖包 <br>yum -y install gcc openssl-devel pcre-devel <br>&nbsp;<br>下载Nginx安装包 <br>&nbsp;<br>源码编译 <br>useradd -s /sbin/nologin&nbsp; nginx <br>tar -xvf nginx-1.12.2.tar.gz&nbsp;&nbsp; &nbsp; tar 解包 <br>cd nginx-1.12.2&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br>[root@proxy nginx-1.12.2]# https://www.cnblogs.com/liujiab/p/configure&nbsp; 检测GCC&nbsp;&nbsp; &nbsp;<br>make &amp;&amp; make install &nbsp;&nbsp; &nbsp;#生成程序 <br>&nbsp;<br>3)安装MariaDB <br>Mariadb在新版RHEL7光盘中包含有该软件,配置yum源后可以直接使用yum安装: <br>yum -y install&nbsp;&nbsp; mariadb&nbsp;&nbsp; mariadb-server&nbsp;&nbsp; mariadb-devel &nbsp;<br>安装mariadb mariadb-server mariadb-devl <br>&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; <br>4)php和php-fpm <br>yum -y&nbsp; install&nbsp; php&nbsp;&nbsp; php-mysql&nbsp; #安装PHP的拓建包 (mysql服务默认不携带) <br>yum -y&nbsp; install&nbsp; php-fpm&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp; #安装PHP <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>步骤二:启动服务 <br>&nbsp;<br>1)启动Nginx服务(如果已经启动nginx,则可以忽略这一步) <br>这里需要注意的是,如果服务器上已经启动了其他监听80端口的服务软件(如httpd),则需要先关闭该服务,否则会出现冲突。 <br>systemctl stop httpd&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //如果该服务存在则关闭该服务 <br>/usr/local/nginx/sbin/nginx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //启动Nginx服务 <br>netstat -utnlp | grep :80 <br>&nbsp;&nbsp;&nbsp; tcp&nbsp;&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp; 0 0.0.0.0:80&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0.0.0.0:*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; LISTEN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 32428/nginx&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>2)启动MySQL服务 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# systemctl start&nbsp; mariadb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //启动服务器 <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# systemctl status mariadb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看服务状态 <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# systemctl enable mariadb&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置开机启动 <br>&nbsp;<br>3)启动PHP-FPM服务 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# systemctl start php-fpm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //启动服务 <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# systemctl status php-fpm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看服务状态 <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# systemctl enable php-fpm&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置开机启动 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>构建LNMP平台 <br>步骤一: php-fpm配置文件 <br>&nbsp;<br>1)查看php-fpm配置文件 /etc/php-fpm.d/www.conf <br>vim /etc/php-fpm.d/www.conf <br>&nbsp;&nbsp;&nbsp; [www] <br>&nbsp;&nbsp;&nbsp; listen = 127.0.0.1:9000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //PHP端口号 <br>&nbsp;&nbsp;&nbsp; pm.max_children = 32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //最大进程数量 <br>&nbsp;&nbsp;&nbsp; pm.start_servers = 15&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //最小进程数量 <br>&nbsp;&nbsp;&nbsp; pm.min_spare_servers = 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //最少需要几个空闲着的进程 <br>&nbsp;&nbsp;&nbsp; pm.max_spare_servers = 32&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //最多允许几个进程处于空闲状态 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>步骤二:修改Nginx配置文件并启动服务 <br>vim /usr/local/nginx/conf/nginx.conf <br>&nbsp;&nbsp;&nbsp; location / { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp; html; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index&nbsp; index.php&nbsp; index.html&nbsp;&nbsp; index.htm; <br>&nbsp;&nbsp;&nbsp; #设置默认首页为index.php,当用户在浏览器地址栏中只写域名或IP,不说访问什么页面时,服务器会把默认首页index.php返回给用户 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp;&nbsp; location&nbsp; ~&nbsp; .php$&nbsp; { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; html; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fastcgi_pass&nbsp;&nbsp; 127.0.0.1:9000;&nbsp;&nbsp;&nbsp; #将请求转发给本机9000端口,PHP解释器 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fastcgi_index&nbsp; index.php; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #fastcgi_param&nbsp;&nbsp; SCRIPT_FILENAME&nbsp; $document_root$fastcgi_script_name; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fastcgi.conf;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #加载其他配置文件 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload <br>&nbsp;&nbsp;&nbsp; #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下: <br>&nbsp;&nbsp;&nbsp; #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) <br>&nbsp;<br>&nbsp;<br>步骤二:配置Nginx服务器,添加服务器池,实现反向代理功能 <br>&nbsp;<br>1)修改/usr/local/nginx/conf/nginx.conf配置文件 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; http { <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; #使用upstream定义后端服务器集群,集群名称任意(如webserver) <br>&nbsp;&nbsp;&nbsp; #使用server定义集群中的具体服务器和端口 <br>&nbsp;&nbsp;&nbsp; upstream webserver { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.2.100:80; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.2.200:80; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; server { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; localhost; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location / { <br>&nbsp;&nbsp;&nbsp; #通过proxy_pass将用户的请求转发给webserver集群 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_pass http://webserver; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>2)重新加载配置 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload <br>&nbsp;&nbsp;&nbsp; #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下: <br>&nbsp;&nbsp;&nbsp; #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) <br>&nbsp;<br>3)客户端使用浏览器访问代理服务器测试轮询效果 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@client ~]# curl http://192.168.4.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用该命令多次访问查看效果 <br>&nbsp;&nbsp;&nbsp; [root@client ~]# curl http://192.168.4.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用该命令多次访问查看效果 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>步骤二:配置upstream服务器集群池属性 <br>&nbsp;<br>1)设置失败次数,超时时间,权重 <br>&nbsp;<br>weight可以设置后台服务器的权重,max_fails可以设置后台服务器的失败次数,fail_timeout可以设置后台服务器的失败超时时间。 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; http { <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; upstream webserver { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.2.100 weight=1 max_fails=1 fail_timeout=30; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.2.200 weight=2 max_fails=2 fail_timeout=30; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.2.101 down; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; #weight设置服务器权重值,默认值为1 <br>&nbsp;&nbsp;&nbsp; #max_fails设置最大失败次数 <br>&nbsp;&nbsp;&nbsp; #fail_timeout设置失败超时时间,单位为秒 <br>&nbsp;&nbsp;&nbsp; #down标记服务器已关机,不参与集群调度 <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; server { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; localhost; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location / { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_pass http://webserver; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;<br>2)重新加载配置 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload <br>&nbsp;&nbsp;&nbsp; #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下: <br>&nbsp;&nbsp;&nbsp; #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) <br>&nbsp;<br>3)关闭一台后端服务器(如web1) <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@web1 ~]# systemctl stop httpd <br>&nbsp;<br>4)客户端使用浏览器访问代理服务器测试轮询效果 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@client ~]# curl http://192.168.4.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用该命令多次访问查看效果 <br>&nbsp;<br>5)再次启动后端服务器的httpd(如web1) <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@web1 ~]# systemctl start httpd <br>&nbsp;<br>6)客户端再次使用浏览器访问代理服务器测试轮询效果 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@client ~]# curl http://192.168.4.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用该命令多次访问查看效果 <br>&nbsp;<br>步骤三:配置upstream服务器集群的调度算法 <br>&nbsp;<br>1)设置相同客户端访问相同Web服务器 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; http { <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; upstream webserver { <br>&nbsp;&nbsp;&nbsp; #通过ip_hash设置调度规则为:相同客户端访问相同服务器 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ip_hash; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.2.100 weight=1 max_fails=2 fail_timeout=10; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.2.200 weight=2 max_fails=2 fail_timeout=10; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; server { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; www.tarena.com; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location / { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_pass http://webserver; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;<br>2)重新加载配置 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload <br>&nbsp;&nbsp;&nbsp; #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下: <br>&nbsp;&nbsp;&nbsp; #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) <br>&nbsp;<br>3)客户端使用浏览器访问代理服务器测试轮询效果 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@client ~]# curl http://192.168.4.5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用该命令多次访问查看效果 <br>&nbsp;<br>2 案例2:Nginx的TCP/UDP调度器 <br>2.1 问题 <br>&nbsp;<br>使用Nginx实现TCP/UDP调度器功能,实现如下功能: <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; 后端SSH服务器两台 <br>&nbsp;&nbsp;&nbsp; Nginx编译安装时需要使用--with-stream,开启ngx_stream_core_module模块 <br>&nbsp;&nbsp;&nbsp; Nginx采用轮询的方式调用后端SSH服务器 <br>&nbsp;<br>2.2 方案 <br>&nbsp;<br>使用4台RHEL7虚拟机,其中一台作为Nginx代理服务器,该服务器需要配置两块网卡,IP地址分别为192.168.4.5和192.168.2.5,两台SSH服务器IP地址分别为192.168.2.100和192.168.2.200。客户端测试主机IP地址为192.168.4.10。如图-2所示。 <br>&nbsp;<br>图-2 <br>2.3 步骤 <br>&nbsp;<br>实现此案例需要按照如下步骤进行。 <br>&nbsp;<br>步骤一:部署支持4层TCP/UDP代理的Nginx服务器 <br>&nbsp;<br>1)部署nginx服务器 <br>&nbsp;<br>编译安装必须要使用--with-stream参数开启4层代理模块。 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# yum -y install gcc pcre-devel openssl-devel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //安装依赖包 <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# tar&nbsp; -xf&nbsp;&nbsp; nginx-1.12.2.tar.gz <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# cd&nbsp; nginx-1.12.2 <br>&nbsp;&nbsp;&nbsp; [root@proxy nginx-1.12.2]# https://www.cnblogs.com/liujiab/p/configure&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &gt; --with-http_ssl_module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开启SSL加密功能 <br>&nbsp;&nbsp;&nbsp; &gt; --with-stream&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开启4层反向代理功能 <br>&nbsp;&nbsp;&nbsp; [root@proxy nginx-1.12.2]# make &amp;&amp; make install&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //编译并安装 <br>&nbsp;<br>步骤二:配置Nginx服务器,添加服务器池,实现TCP/UDP反向代理功能 <br>&nbsp;<br>1)修改/usr/local/nginx/conf/nginx.conf配置文件 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf <br>&nbsp;&nbsp;&nbsp; stream { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; upstream backend { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.2.100:22;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //后端SSH服务器的IP和端口 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server 192.168.2.200:22; <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen 12345;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //Nginx监听的端口 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_connect_timeout 1s;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //连接的超时时间,可选配置 <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_timeout 3s; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; proxy_pass backend; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; http { <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;<br>2)重新加载配置 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload <br>&nbsp;&nbsp;&nbsp; #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下: <br>&nbsp;&nbsp;&nbsp; #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) <br>&nbsp;<br>3)客户端使用访问代理服务器测试轮询效果 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@client ~]# ssh 192.168.4.5 -p 12345&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //使用该命令多次访问查看效果 <br>&nbsp;<br>&nbsp;<br>!!!!!!!!!!!!优化!!!!!!!!!!!!!!!!!! <br>3Nginx常见问题处理 <br>&nbsp;<br>&nbsp;<br>@@ 如何自定义返回给客户端的404错误页面 @@ <br>&nbsp;<br>修改Nginx配置文件,自定义报错页面 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; charset utf-8;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //仅需要中文时需要改选项,可选项 <br>&nbsp;&nbsp;&nbsp; error_page&nbsp;&nbsp; 404&nbsp; /404.html;&nbsp;&nbsp;&nbsp; //自定义错误页面 <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /usr/local/nginx/html/404.html&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //生成错误页面 <br>&nbsp;&nbsp;&nbsp; Oops,No NO no page … <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# nginx -s reload <br>@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ <br>&nbsp; @@&nbsp; 如何查看服务器状态信息@@ <br>200 一切正常 <br>301永久重定向 <br>302临时重定向 <br>401用户名或密码错误 <br>403 拒绝访问 <br>404 文件不存在 <br>414 请求URL包头过长 <br>500 服务器内部错误 <br>502 Bad Gateway <br>&nbsp;<br>步骤二:如何查看服务器状态信息(非常重要的功能) <br>&nbsp;<br>1)编译安装时使用--with-http_stub_status_module开启状态页面模块 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# tar&nbsp; -zxvf&nbsp;&nbsp; nginx-1.12.2.tar.gz <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# cd&nbsp; nginx-1.12.2 <br>&nbsp;&nbsp;&nbsp; [root@proxy nginx-1.12.2]# https://www.cnblogs.com/liujiab/p/configure&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &gt; --with-http_ssl_module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开启SSL加密功能 <br>&nbsp;&nbsp;&nbsp; &gt; --with-stream&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开启TCP/UDP代理模块 <br>&nbsp;&nbsp;&nbsp; &gt; --with-http_stub_status_module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开启status状态页面 <br>&nbsp;&nbsp;&nbsp; [root@proxy nginx-1.12.2]# make &amp;&amp; make install&nbsp;&nbsp;&nbsp; //编译并安装 <br>&nbsp;<br>2)启用Nginx服务并查看监听端口状态 <br>&nbsp;<br>ss命令可以查看系统中启动的端口信息,该命令常用选项如下: <br>&nbsp;<br>-a显示所有端口的信息 <br>&nbsp;<br>-n以数字格式显示端口号 <br>&nbsp;<br>-t显示TCP连接的端口 <br>&nbsp;<br>-u显示UDP连接的端口 <br>&nbsp;<br>-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口 <br>&nbsp;<br>-p显示监听端口的服务名称是什么(也就是程序名称) <br>&nbsp;<br>注意:在RHEL7系统中可以使用ss命令替代netstat命令,功能一样,选项一样 <br>@@@ <br>步骤二:如何查看服务器状态信息(非常重要的功能) <br>&nbsp;<br>1)编译安装时使用--with-http_stub_status_module开启状态页面模块 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# tar&nbsp; -zxvf&nbsp;&nbsp; nginx-1.12.2.tar.gz <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# cd&nbsp; nginx-1.12.2 <br>&nbsp;&nbsp;&nbsp; [root@proxy nginx-1.12.2]# https://www.cnblogs.com/liujiab/p/configure&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &gt; --with-http_ssl_module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开启SSL加密功能 <br>&nbsp;&nbsp;&nbsp; &gt; --with-stream&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开启TCP/UDP代理模块 <br>&nbsp;&nbsp;&nbsp; &gt; --with-http_stub_status_module&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开启status状态页面 <br>&nbsp;&nbsp;&nbsp; [root@proxy nginx-1.12.2]# make &amp;&amp; make install&nbsp;&nbsp;&nbsp; //编译并安装 <br>&nbsp;&nbsp; &nbsp; Active connections:当前活动的连接数量。 <br>&nbsp;<br>Accepts:已经接受客户端的连接总数量。 <br>&nbsp;<br>Handled:已经处理客户端的连接总数量。 <br>&nbsp;<br>(一般与accepts一致,除非服务器限制了连接数量)。 <br>&nbsp;<br>Requests:客户端发送的请求数量。 <br>&nbsp;<br>Reading:当前服务器正在读取客户端请求头的数量。 <br>&nbsp;<br>Writing:当前服务器正在写响应信息的数量。 <br>&nbsp;<br>Waiting:当前多少客户端在等待服务器的响应。 <br>&nbsp;<br>&nbsp;<br>@@@@&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; 如果客户端访问服务器提示“Too many open files”如何解决 <br>&nbsp;&nbsp; &nbsp; <br>&nbsp;<br>步骤三:优化Nginx并发量 <br>&nbsp;<br>1)优化前使用ab高并发测试 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# ab -n 2000 -c 2000 http://192.168.4.5/ <br>&nbsp;&nbsp;&nbsp; Benchmarking 192.168.4.5 (be patient) <br>&nbsp;&nbsp;&nbsp; socket: Too many open files (24)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //提示打开文件数量过多 <br>&nbsp;<br>2)修改Nginx配置文件,增加并发量 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; worker_processes&nbsp; 2;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //与CPU核心数量一致 <br>&nbsp;&nbsp;&nbsp; events { <br>&nbsp;&nbsp;&nbsp; worker_connections 65535;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //每个worker最大并发连接数 <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# nginx -s reload <br>&nbsp;<br>3)优化Linux内核参数(最大文件数量) <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# ulimit -a&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看所有属性值 <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# ulimit -Hn 100000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置硬限制(临时规则) <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# ulimit -Sn 100000&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //设置软限制(临时规则) <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /etc/security/limits.conf <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; soft&nbsp;&nbsp;&nbsp; nofile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100000 <br>&nbsp;&nbsp;&nbsp; *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hard&nbsp;&nbsp;&nbsp; nofile&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 100000 <br>&nbsp;&nbsp;&nbsp; #该配置文件分4列,分别如下: <br>&nbsp;&nbsp;&nbsp; #用户或组&nbsp;&nbsp;&nbsp; 硬限制或软限制&nbsp;&nbsp;&nbsp; 需要限制的项目&nbsp;&nbsp; 限制的值 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>4)优化后测试服务器并发量(因为客户端没调内核参数,所以在proxy测试) <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# ab -n 2000 -c 2000 http://192.168.4.5 <br>&nbsp;<br>步骤四:优化Nginx数据包头缓存 <br>&nbsp;<br>2)修改Nginx配置文件,增加数据包头部缓存大小 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; http { <br>&nbsp;&nbsp;&nbsp; client_header_buffer_size&nbsp;&nbsp;&nbsp; 1k;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //默认请求包头信息的缓存&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;&nbsp;&nbsp; large_client_header_buffers&nbsp; 4 4k;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //大请求包头部信息的缓存个数与容量 <br>&nbsp;&nbsp;&nbsp; .. .. <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# nginx -s reload <br>&nbsp;<br>&nbsp;<br>步骤五:浏览器本地缓存静态数据 <br>&nbsp;<br>1)使用Firefox浏览器查看缓存 <br>&nbsp;<br>以Firefox浏览器为例,在Firefox地址栏内输入about:cache将显示Firefox浏览器的缓存信息,如图-3所示,点击List Cache Entries可以查看详细信息。 <br>&nbsp;<br>图-3 <br>&nbsp;<br>2)清空firefox本地缓存数据,如图-4所示。 <br>&nbsp;<br>图-4 <br>&nbsp;<br>3)修改Nginx配置文件,定义对静态页面的缓存时间 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf <br>&nbsp;&nbsp;&nbsp; server { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 80; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; server_name&nbsp; localhost; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; location / { <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; root&nbsp;&nbsp; html; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; index&nbsp; index.html index.htm; <br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; location ~* .(jpg|jpeg|gif|png|css|js|ico|xml)$ { <br>&nbsp;&nbsp;&nbsp; expires&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 30d;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义客户端缓存时间为30天 <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; } <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# cp /usr/share/backgrounds/day.jpg /usr/local/nginx/html <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# nginx -s reload <br>&nbsp;&nbsp;&nbsp; #请先确保nginx是启动状态,否则运行该命令会报错,报错信息如下: <br>&nbsp;&nbsp;&nbsp; #[error] open() "/usr/local/nginx/logs/nginx.pid" failed (2: No such file or directory) <br>&nbsp;<br>4)优化后,使用Firefox浏览器访问图片,再次查看缓存信息 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@client ~]# firefox http://192.168.4.5/day.jpg <br>&nbsp;<br>在firefox地址栏内输入about:cache,查看本地缓存数据,查看是否有图片以及过期时间是否正确。 <br>&nbsp;<br>&nbsp;<br>&nbsp;<br>&nbsp;<br>步骤六:日志切割 <br>&nbsp;<br>日志文件越来越大怎么办?单个文件10G? 如何切割?(非常常见的面试题) <br>&nbsp;<br>步骤:1. 把旧的日志重命名 <br>&nbsp;<br>2. kill USR1 PID(nginx的进程PID号) <br>&nbsp;<br>1)手动执行 <br>&nbsp;<br>备注:/usr/local/nginx/logs/nginx.pid文件中存放的是nginx的进程PID号。 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]#&nbsp; mv access.log access2.log <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid) <br>&nbsp;<br>2)自动完成 <br>&nbsp;<br>每周5的03点03分自动执行脚本完成日志切割工作。 <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /usr/local/nginx/logbak.sh <br>&nbsp;&nbsp;&nbsp; #!/bin/bash <br>&nbsp;&nbsp;&nbsp; date=date +%Y%m%d`
&nbsp;&nbsp;&nbsp; logpath=/usr/local/nginx/logs
&nbsp;&nbsp;&nbsp; mv \(logpath/access.log \)logpath/access-\(date.log <br>&nbsp;&nbsp;&nbsp; mv \)logpath/error.log \(logpath/error-\)date.log
&nbsp;&nbsp;&nbsp; kill -USR1 \((cat \)logpath/nginx.pid)
&nbsp;&nbsp;&nbsp; [root@proxy ~]# crontab -e
&nbsp;&nbsp;&nbsp; 03 03 * * 5&nbsp; /usr/local/nginx/logbak.sh
&nbsp;
&nbsp;
&nbsp;
&nbsp;
步骤七:对页面进行压缩处理
&nbsp;
1)修改Nginx配置文件
&nbsp;
&nbsp;&nbsp;&nbsp; [root@proxy ~]# cat /usr/local/nginx/conf/nginx.conf
&nbsp;&nbsp;&nbsp; http {
&nbsp;&nbsp;&nbsp; .. ..
&nbsp;&nbsp;&nbsp; gzip on;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //开启压缩
&nbsp;&nbsp;&nbsp; gzip_min_length 1000;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //小文件不压缩
&nbsp;&nbsp;&nbsp; gzip_comp_level 4;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //压缩比率
&nbsp;&nbsp;&nbsp; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //对特定文件压缩,类型参考mime.types
&nbsp;&nbsp;&nbsp; .. ..
&nbsp;&nbsp;&nbsp; }
&nbsp;
步骤八:服务器内存缓存
&nbsp;
1)如果需要处理大量静态文件,可以将文件缓存在内存,下次访问会更快。
&nbsp;
&nbsp;&nbsp;&nbsp; http { &nbsp;
&nbsp;&nbsp;&nbsp; open_file_cache&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; max=2000&nbsp; inactive=20s;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open_file_cache_valid&nbsp;&nbsp;&nbsp; 60s;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open_file_cache_min_uses 5;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; open_file_cache_errors&nbsp;&nbsp; off;
&nbsp;&nbsp;&nbsp; //设置服务器最大缓存2000个文件句柄,关闭20秒内无请求的文件句柄
&nbsp;&nbsp;&nbsp; //文件句柄的有效时间是60秒,60秒后过期
&nbsp;&nbsp;&nbsp; //只有访问次数超过5次会被缓存
&nbsp;&nbsp;&nbsp; } &nbsp;
&nbsp;
构建memcached服务
验证时需要客户端主机安装telnet,远程memcached来验证服务器的功能:
&nbsp;
&nbsp;&nbsp;&nbsp; add name 0 180 10 //变量不存在则添加
&nbsp;&nbsp;&nbsp; set name 0 180 10 //添加或替换变量
&nbsp;&nbsp;&nbsp; replace name 0 180 10 //替换
&nbsp;&nbsp;&nbsp; get name //读取变量
&nbsp;&nbsp;&nbsp; append name 0 180 10 //向变量中追加数据
&nbsp;&nbsp;&nbsp; delete name //删除变量
&nbsp;&nbsp;&nbsp; flush_all //清空所有
&nbsp;&nbsp;&nbsp; 提示:0表示不压缩,180为数据缓存时间,10为需要存储的数据字节数量。
&nbsp;
步骤一:构建memcached服务
&nbsp;
1)使用yum安装软件包memcached
&nbsp;
&nbsp;&nbsp;&nbsp; [root@proxy ~]# yum -y&nbsp; install&nbsp;&nbsp; memcached
&nbsp;&nbsp;&nbsp; [root@proxy ~]# rpm -qa memcached
&nbsp;&nbsp;&nbsp; memcached-1.4.15-10.el7_3.1.x86_64
&nbsp;
2) memcached配置文件(查看即可,不需要修改)
&nbsp;
&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /usr/lib/systemd/system/memcached.service
&nbsp;&nbsp;&nbsp; ExecStart=/usr/bin/memcached -u \(USER -p \)PORT -m \(CACHESIZE -c \)MAXCONN \(OPTIONS <br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# vim /etc/sysconfig/memcached <br>&nbsp;&nbsp;&nbsp; PORT="11211" <br>&nbsp;&nbsp;&nbsp; USER="memcached" <br>&nbsp;&nbsp;&nbsp; MAXCONN="1024" <br>&nbsp;&nbsp;&nbsp; CACHESIZE="64" <br>&nbsp;&nbsp;&nbsp; OPTIONS="" <br>&nbsp;<br>使用telnet访问memcached服务器 <br>&nbsp;<br>1)使用yum安装telnet <br>&nbsp;<br>&nbsp;&nbsp;&nbsp; [root@proxy ~]# yum -y install telnet <br>telnet&nbsp; 192.168.4.5&nbsp; 11211&nbsp; 运行软件 <br>set&nbsp; name 0 180 3 //定义变量,变量名称为name <br>提示:0表示不压缩,180为数据缓存时间,3为需要存储的数据字节数量。 <br>&nbsp;<br>plj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //输入变量的值,值为plj&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>get name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取变量的值 <br>&nbsp;<br>add myname 0 180 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //新建,myname不存在则添加,存在则报错 <br>set myname 0 180 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //添加或替换变量 <br>replace myname 0 180 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //替换,如果myname不存在则报错 <br>get myname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //读取变量 <br>append myname 0 180 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //向变量中追加数据 <br>delete myname&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //删除变量 <br>flush_all&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //清空所有 <br>quit&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //退出登录&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;<br>&nbsp;<br>&nbsp;<br>LNMP+memcached <br>&nbsp;<br>PHP安装memcache扩展 <br>创建PHP页面,并编写PHP代码,实现对memcached的数据操作 &nbsp;<br>步骤一:创建PHP页面,使用PHP语言测试memcached服务 <br>1)部署测试页面 <br>&nbsp;<br>创建PHP首页文档/usr/local/nginx/html/mem.php,测试页面可以参考lnmp_soft/php_scripts/mem.php。 <br>&nbsp;<br>注意:192.168.2.5是memcached数据库。 <br>vim /usr/local/nginx/html/mem.php <br>&nbsp;&nbsp;&nbsp; &lt;?php <br>&nbsp;&nbsp;&nbsp; \)memcache=new Memcache;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //创建memcache对象
&nbsp;&nbsp;&nbsp; \(memcache-&gt;connect('192.168.2.5',11211) or die ('could not connect!!'); <br>&nbsp;&nbsp;&nbsp; \)memcache-&gt;set(‘key’,‘test’);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //定义变量
&nbsp;&nbsp;&nbsp; \(get_values=\)memcache-&gt;get(‘key’);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //获取变量值
&nbsp;&nbsp;&nbsp; echo $get_values;
&nbsp;&nbsp;&nbsp; ?&gt;
&nbsp;
&nbsp;
为PHP添加memcache扩展
yum -y install&nbsp; php-pecl-memcache
systemctl restart php-fpm
&nbsp;
4)客户端再次测试(结果会成功显示数据结果)
firefox http://192.168.2.100/mem.php
&nbsp;
&nbsp;
&nbsp;
PHP实现session共享
&nbsp;
为PHP添加memcache扩展
安装扩展
yum -y install&nbsp; php-pecl-memcache
&nbsp;
&nbsp;
&nbsp;
2)修改PHP-FPM配置文件,并重启服务
vim&nbsp; /etc/php-fpm.d/www.conf&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //修改该配置文件的两个参数
&nbsp;&nbsp;&nbsp; //文件的最后2行
&nbsp;&nbsp;&nbsp; 修改前效果如下:
&nbsp;&nbsp;&nbsp; php_value[session.save_handler] = files
&nbsp;&nbsp;&nbsp; php_value[session.save_path] = /var/lib/php/session
&nbsp;&nbsp;&nbsp; //原始文件,默认定义Sessoin会话信息本地计算机(默认在/var/lib/php/session)
&nbsp;&nbsp;&nbsp; +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
&nbsp;&nbsp;&nbsp; 修改后效果如下:
&nbsp;&nbsp;&nbsp; php_value[session.save_handler] = memcache
&nbsp;&nbsp;&nbsp; php_value[session.save_path] = “tcp://192.168.2.5:11211”
&nbsp;&nbsp;&nbsp; //定义Session信息存储在公共的memcached服务器上,主机参数中为memcache(没有d)
&nbsp;&nbsp;&nbsp; //通过path参数定义公共的memcached服务器在哪(服务器的IP和端口)
&nbsp;
重起服务
systemctl&nbsp; restart&nbsp; php-fpm
&nbsp;
步骤三:客户端测试
&nbsp;
客户端使用浏览器访问两台不同的Web服务器。
&nbsp;
操作步骤参考练习一,最终可以获得相关的Session ID信息。
&nbsp;
&nbsp;
安装部署Tomcat服务器
&nbsp;
步骤一:部署Tomcat服务器软件(192.168.2.10024)
&nbsp;
1)使用RPM安装JDK环境
&nbsp;
&nbsp;&nbsp;&nbsp; [root@web1 ~]# yum -y install&nbsp; java-1.8.0-openjdk&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //安装JDK
&nbsp;&nbsp;&nbsp; [root@web1 ~]# yum -y install java-1.8.0-openjdk-headless&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //安装JDK
&nbsp;&nbsp;&nbsp; [root@web1 ~]# java -version&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; //查看JAVA版本
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
-MO9 NH0R46
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
#GIT
git 软件包
服务器git
基于WEB http gitweb
git 配置文件
vim /usr/lib/systemd/system/git@.service
vim +11 /etc/gitweb.conf &nbsp;
&nbsp;
git命令
git status 查看工作区和当前的分支
git add . 将当前的工作上传缓存区
git commit -m ‘注释’ 提交到本地厂库
git branch&nbsp; 对分支进行操作
git reflog 查看版本信息
git checkout 进入分支
git merge 进行合并分支
git push 上传到服务器
git init 路径+名字 -bare 创建空仓库
git –base 路径+名字 &nbsp;&nbsp;&nbsp; &nbsp;创建仓库
&nbsp;
www.Github.com
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;keepalived 热备
概述 keepalived高可用集群
&nbsp;&nbsp;&nbsp; &nbsp;keepalived最初是为了LVS的,因为LVS无法进行自动检测服务器的节点状态(可以自动部署LVS)
&nbsp;&nbsp; &nbsp;keeplived后来加入VRRP给功能,还可以防止单点故障
&nbsp;
Keepalives运行
keepalived检测每个服务器节点状态
服务器节点异常出现故障时,keepalived将故障节点从集群系统中剔除
故障节点恢复后,keepalived再会自动将修复好的节点加入到服务器集群中
所有故障自动完成,不需要人工干预
&nbsp;
&nbsp;
&nbsp;
keepalived 配置文件
/etc/keepalived/keepalived.conf
&nbsp;
state 主服务器为MASTER,辅助服务器为BACKUP
priority 100 服务器优先级
interface eth0 指定网络接口
auth_pass 123 服务器密码 主服务器和辅服务区必须一样
&nbsp;
&nbsp;
keepalived 重启服务后会自动打开iptables防火墙默认拒绝一切
清空命令
iptabled -F
&nbsp;
需查看 ip a s eth0
&nbsp;
keepalived 日志文件
/etc/log/messages
&nbsp;
&nbsp;
&nbsp;
keepalived + lvs
&nbsp;
两台调度
调度需要添加一个网卡 eth0:0
配置文件 /etc/
&nbsp;
&nbsp;
两台服务器
&nbsp;
一台客户端
&nbsp;
&nbsp;
&nbsp;
&nbsp;
&nbsp;
集群调度对比
nginx &nbsp;
&nbsp;优点:
&nbsp;&nbsp; &nbsp;工作在七层,可以针对http做风流策略
&nbsp;&nbsp; &nbsp;1.9版本开始支持4层代理
&nbsp;&nbsp; &nbsp;正则表达式比HAProxy强大
&nbsp;&nbsp; &nbsp;安装,配置,测试简单,通过日志可以解决多数问题
&nbsp;&nbsp; &nbsp;并发量可以达到几万次
&nbsp;&nbsp; &nbsp;nginx还可以作为web服务器使用
&nbsp;缺点
&nbsp;&nbsp; &nbsp;七层代理仅支持http,https,mali协议应用面比较小
&nbsp;&nbsp; &nbsp;监控端口仅通过端口,无法使用url(网页)检查
LVS &nbsp;
&nbsp;优点 &nbsp;
&nbsp;&nbsp; &nbsp;负载能力强大,工作在四层,对内存,cpu消耗低
&nbsp;&nbsp; &nbsp;配置性低,没有太多的可配置性,减少人为错误
&nbsp;&nbsp; &nbsp;应用面广,几乎可以为所有的应用提供负载均衡
&nbsp;缺点
&nbsp;&nbsp; &nbsp;不支持正则表达式结构,不能实现静动态分离
&nbsp;&nbsp; &nbsp;如果网络结构庞大,LVS_DR配置比较繁琐
&nbsp;
HAPorxy
&nbsp;优点
&nbsp;&nbsp; &nbsp;支持session,coolie功能
&nbsp;&nbsp;&nbsp; &nbsp;可以通过url进行负载均衡
&nbsp;&nbsp; &nbsp;效率,负载均衡速度高,高于NGinx,低于LVS
&nbsp;&nbsp; &nbsp;HAProxy支持TCP,可以对Mysql进行负载均衡
&nbsp;&nbsp; &nbsp;调度算法丰富
&nbsp;缺点
&nbsp;&nbsp; &nbsp;正则弱于nginx
&nbsp;&nbsp; &nbsp;日志依赖软件syslogd
&nbsp;
&nbsp;


讯享网

小讯
上一篇 2025-04-15 07:36
下一篇 2025-04-23 10:05

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/172615.html