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

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