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

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

posted on 2019-08-26 11:30  希顿  阅读(854)  评论(0编辑  收藏  举报