Linux基本知识
培训开班第一天 3
课程平台 3
学习方法: 4
二、TCP/IP协议简介 7
3.什么是IP地址 7
5.子网掩码 9
6.网关 10
三、基本环境配置 10
培训开班第二天 14
一、Linux系统简介 14
1.什么是Linux? 14
3.RedHat系列版本 14
二、安装Linux系统 14
三、命令行基本操作 16
培训开班第三天 21
一、命令行基础 21
二、目录和文件管理 25
4.别名的定义:简化复杂命令 27
7.复制 30
8.rm 删除 31
9.mv 移动/改名 32
培训第四天 35
vim文本编辑器 35
管理用户和组 37
设置登录密码 40
删除用户 43
管理组账号 44
删除组 45
tar备份与恢复 46
cron计划任务 49
培训开班第五天 52
真机使用rht-vmctl辅助工具 52
远程管理的命令:ssh 52
权限和归属 53
设置基本权限 54
Linux判断用户权限: 55
设置文档归属 56
附加权限(特殊权限) 57
Sticky Bit 58
acl访问控制列表 59
家目录的补救 60
培训开班第八天 61
重定向输出 62
定义/赋值变量 65
变量的种类 66
条件测试 69
if选择结构 71
for循环结构:重复性的操作 75
案例4:编写一个判断脚本 77
培训开班第九天 79
• 切换运行模式 82
虚拟机desktop 82
防火墙策略管理 84
1.安装vsftpd软件 85
Linux的防火墙体系 86
虚拟机server: 87
添加永久的规则: 88
培训开班第十二天 91
数据库服务基础 100
一 、部署mariadb数据库服务器 101
培训开班第十三天 109
配置NFS共享 109
虚拟机desktop: 110
Web通信基本概念 113
虚拟Web主机(软件级虚拟化) 116
培训开班第十四天 122
案例1:配置网页内容访问 124
5.在虚拟机desktop上测试 125
部署动态网站 127
案例3:部署并测试WSGI站点 128
PKI公钥基础设施 131
构建安全的Web服务 132
培训开班第十五天 134
网络参数的配置 134
配置聚合连接(链路聚合)提高网卡的高可用性 137
parted分区工具 139
基础邮件服务 141
构建基本邮件服务器 142
虚拟机server:实现Samba共享 144
虚拟机desktop:访问Samba共享 145
培训开班第十七天 147
搭建新的教学环境 147
权限的数值表示 149
实用小命令工具 150
5.构建Yum仓库 157
一台KVM虚拟机的构成 158
COW技术原理:可以快速产生虚拟机磁盘镜像文件 161
培训开班第二十天 162
DNS服务基础 162
特殊解析记录 165
DNS子域授权 166
培训开班第二十一天 170
构建DNS服务器 170
缓存DNS,缓存解析结果,加速解析 170
什么是分离解析 171
多区域的分离解析 172
RAID磁盘阵列 174
查看进程 175
控制进程 176
杀死进程 177
日志管理 178
日志分析 178
• Linux内核定义的事件紧急程度 179
RHEL7 运行模式 180
培训开班第二十二天 182
部署DHCP服务器 184
什么是PXE网络 185
一 构建DHCP服务器 185
培训开班第二十三天 190
rsync同步操作 190
Cobbler简介 194
四、搭建Cobbler装机平台 195
6.同步刷新cobbler配置 197
培训开班第一天
课程平台
a)云计算基础:云计算系统管理.云计算应用管理.企业及网络架构.系统与服务器构建进阶
b)云计算运维:物理服务器.云服务器. 集群与存储.高可用web服务器架构项目实战…shell编程 . 服务器运维技术.
c)数据库管理:DBA进阶.数据库项目实战.
d)云计算架构:架构管理.架构的演变. 云平台的部署.
教学环境
1.真机是Linux 账户:student 密码:
2.虚拟化软件: 虚拟众多的硬件。虚拟机被损坏,与真机无关
一、服务器架构
二、TCP/IP协议简介
1.什么是协议
协议就是一组规则
TCP/IP协议就是一组通信协议的集合
2.计算机通信三要素
IP地址
子网掩码
网关
3.什么是IP地址
标识网络中某一个节点的地址
ipv4 32位二进数
ip地址每一个字段最大范围255
172.60.50.150
10101100.00111100.00110010.10010110
00000000.00000000.00000000.00000000~ 0.0.0.0
11111111.11111111.11111111.11111111~ 255.255.255.255
4. IP地址分类
A 1 ~ 127
B 128 ~ 191
C 192 ~ 223
D 组播 224 ~ 239
E 科研 240 ~ 254
IP地址:网络位+主机位
网络位 = 电话号码的区号:标识一个网络
主机位 = 具体的电话号码:标识具体的一个主机
电话号码:区号+座机号
北京:010-63527788
广州:020-63527788
A 网络+主机+主机+主机 10.1.1.10
B 网络+网络+主机+主机 173.5.5.10
C 网络+网络+网络+主机 192.168.10.10
相同网络位的主机可以直接通信
192.168.10.10 192.168.10.0
192.168.10.20 192.168.10.0
5.子网掩码
设置IP时必须有子网掩码
作用:判断IP地址的网络位,相同网络位的主机可以直接通信
默认子网掩码
A类地址 255.0.0.0
B类地址 255.255.0.0
C类地址 255.255.255.0
192.168.10.10 11000000.10101000.00001010.00001010
255.255.255.0 11111111.11111111.11111111.00000000
11000000.10101000.00001010.00000000
192.168.10.0
192.168.10.20 11000000.10101000.00001010.00010100
255.255.255.0
6.网关
在同一个网络里面通信不需要网关
和另外网络中的计算机通信需要网关
网关:从你当前网络去往对方网络的出口
网关一定和你当前IP在同一网段
在实际生产环境中一般网关是路由器或者防火墙
三、基本环境配置
1.为虚拟机win2008配置IP地址。利用管理员进行登录,密码为:tedu
配置IP地址: 192.168.1.1 子网掩码:255.255.255.0
– 右击桌面网络 -->属性 -->更改适配器设置
– 双击“本地连接” --> 属性
– 双击“Internet协议版本4(TCP/IPv4)”
– 配置完成后,单击“确定”完成
查看IP地址:
– 右击桌面网络 -->属性 -->更改适配器设置
– 双击“本地连接” --> 详细信息
采用ipconfig命令的方式,查看IP地址:
windows键 + r= 开始+运行
输入cmd–>敲回车–>输入 ipconfig–>敲回车
-->输入 exit 关闭命令行界面
案例一:配置win2008网络参数,确保连通性
克隆虚拟机win2008
1.双击桌面windows还原,打开桌面虚拟系统管理器,双击win2008,选择查看,详情,把内存4096修改成2048,应用.
2.进行虚拟机克隆
双击"虚拟系统管理器"–>右击"win2008"–>克隆–>克隆
3. 配置二台win2008的网络参数
配置win2008的IP地址 192.168.1.10
子网掩码 255.255.255.0
网关 192.168.1.254
dns 202.106.0.20
– 右击桌面网络 -->属性 -->更改适配器设置
– 双击“本地连接” --> 属性
– 双击“Internet协议版本4(TCP/IPv4)”
– 配置完成后,单击“确定”完成
配置win2008-clone的IP地址:192.168.1.20
子网掩码 255.255.255.0
网关 192.168.1.254
dns 202.106.0.20
– 右击桌面网络 -->属性 -->更改适配器设置
– 双击“本地连接” --> 属性
– 双击“Internet协议版本4(TCP/IPv4)”
– 配置完成后,单击“确定”完成
采用ipconfig命令的方式,查看IP地址:
windows键 + r= 开始+运行
输入cmd–>敲回车–>输入 ipconfig–>敲回车
-->输入 exit 关闭命令行界面
采用命令方式,测试网络联通性:
ping 命令
ping 对方IP地址 ping命令是双向,有去有回
ping 192.168.1.20
ping 192.168.1.2
DNS服务器:将网站的域名解析为,对应的IP地址
www.qq.com------->腾讯的服务器
www.baidu.com------->百度的服务器
培训开班第二天
一、Linux系统简介
1.什么是Linux?
Linux是一种操作系统,主要用在企业服务器上面
2.Linux系统内核
版本号:主版本.次版本.修订号
3.RedHat系列版本
– Red Hat Enterprise Linux(RHEL) 5/6/7/8
– CentOS
– Fedora Core社区版
二、安装Linux系统
1.Linux 一切皆文件
Linux严格区分大小写
2.建议内存2G以上
3.Linux磁盘表示
/dev/xdy
/dev 表示/dev目录
xd hd ide接口硬盘
sd 非ide接口硬盘(SATA、SCSI)
vd 虚拟机磁盘
y a 第一块硬盘
b 第二块硬盘
c 第三块硬盘
…
/dev/hdb 第二块IDE接口的硬盘
/dev/vda3 第一块虚拟磁盘第三个分区
/dev/sdd1 第四块非IDE接口的第一个分区
4.Linux管理员 root
5.Ctrl + Alt = 鼠标回到真机
6.目录结构
/ Linux文件系统的起点,所有Linux数据全部存放在/下
/dev 存放设备相关的
/root 管理员的家目录
/home 普通用户的家目录
三、命令行基本操作
1.Linux虚拟控制台
tty1 ~ tty6
tty1 图形
tty2~tty6 字符
切换:
图形切换到字符 ctrl+alt+(F2~F6)
字符之间切换 alt+(F2~F6)
字符到图形 alt+F1
2.Linux命令行提示符
[登录用户@主机名 工作目录] 身份标识
$ 代表普通用户
3.Linux基本命令
绝对路径:以/开始的路径
相对路径:不以/开始的路径
eg:
[student@room9pc01 home]$ cd
[student@room9pc01 ~]$ pwd
/home/student
[student@room9pc01 ~]$ cd .
[student@room9pc01 ~]$ pwd
/home/student
[student@room9pc01 ~]$ cd …
[student@room9pc01 home]$ pwd
/home
[student@room9pc01 home]$ cd -
/home/student
[student@room9pc01 ~]$ pwd
/home/student
[student@room9pc01 ~]$ cd …/…
[student@room9pc01 /]$ pwd
/
eg:
[student@room9pc01 /]$ cd
[student@room9pc01 ~]$ pwd
/home/student
[student@room9pc01 ~]$ ls
[student@room9pc01 ~]$ cd /etc/redhat-release
-bash: cd: /etc/redhat-release: 不是目录
[student@room9pc01 ~]$ cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
eg:
[student@room9pc01 ~]$ lscpu
[student@room9pc01 ~]$ cat /proc/meminfo
16:10 - 16:30
eg:
[student@room9pc01 ~]$ hostname
[student@room9pc01 ~]$ ifconfig
[student@room9pc01 ~]$ ls /tmp/
[student@room9pc01 ~]$ mkdir /tmp/vod
[student@room9pc01 ~]$ ls /tmp/
vod
[student@room9pc01 ~]$ ls /tmp/
vod
[student@room9pc01 ~]$ touch /tmp/nsd1907.txt
[student@room9pc01 ~]$ ls /tmp/
nsd1907.txt vod
5.编辑命令或路径的技巧: Tab可以进行补全
if ifdown ifup
ifcfg ifenslave
ifconfig ifstat
CentOS Linux release 7.5.1804 (Core)
补充: Linux下的颜色
蓝色 --> 目录
红色 --> 压缩文件
绿色 --> 可执行文件
课外作业:
培训开班第三天
早自习默写
一、命令行基础
参数:命令的操作对象,如文档的存放路径、用户名等
2.快捷编辑
tab键功能:
命令或者路径的补齐,如果输入的内容唯一标识某一个命令或者路径,tab一次会自动补齐。如果不唯一则tab2次显示出以输入内容开头的所有的命令或者路径
排错
eg:
if ifdown ifup
ifcfg ifenslave
ifconfig ifstat
#cat/et(tab)/red(tab)=
[root@server0~]#cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
快捷键
Ctrl + l 清空整个屏幕
Ctrl + c 废弃当前编辑的命令行
Esc+. 粘贴上一个命令的参数
3.mount挂载操作
挂载
将光盘/U盘/分区/网络存储等设备装到某个Linux目录,通过访问这个目录来操作设备上的文档
mount 设备 挂载点(一定是目录)
卸载
umount 设备
umount 挂载点
Linux下的光驱设备
/dev/sr0
快捷方式/dev/cdrom
eg:访问centos7安装镜像文件内容
1.把centos7镜像放入光驱
点击虚拟机图形的查看/详情/,找到IDE CDROM1,选择连接。选择ISO映像位置,浏览/iso/CentOS7-1804.iso/选择卷/确定
2.mount命令挂载
[root@localhost ~]# ls /mnt/
[root@localhost ~]# mount /dev/cdrom /mnt/
3.验证是否挂载成功
[root@localhost ~]# ls /mnt/
4.umount命令卸载
[root@localhost ~]# umount /dev/cdrom
或者
[root@localhost ~]# umount /mnt
5.验证是否卸载成功
[root@localhost ~]# ls /mnt/
注意事项:
1.卸载不要在当前的挂载点(访问点)目录下
[root@localhost ~]# cd /mnt
[root@localhost mnt]# umount /mnt
umount: /dvd:目标忙。
2.挂载允许一个设备具备多个挂载点(访问点)
[root@chao ~]# ls /tmp/
[root@chao ~]# mkdir /tmp/huangchao
[root@chao ~]# mkdir /tmp/chao
[root@chao ~]# mount /dev/cdrom /tmp/huangchao/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@chao ~]# mount /dev/cdrom /tmp/chao/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@chao ~]# ls /tmp/huangchao/
[root@chao ~]# ls /tmp/chao/
3.不允许多个设备挂载到一个挂载点(访问点)
二、目录和文件管理
[a-z] 多个字符或连续范围中的一个,若无则忽略
{a,min,xy} 多组不同的字符串,全匹配
eg:
[root@localhost ~]# ls /dev/tty[3-8]
[root@localhost ~]# ls /dev/tty[0-9]
[root@localhost ~]# ls /dev/tty{1,3,5,7,9}
[root@localhost ~]# ls /dev/tty{1,3,5,7,9,23}
[root@localhost ~]# ls /dev/tty{1,3,S0,S1}
[root@localhost ~]# ls /dev/tty{1,3,S0,haha}
4.别名的定义:简化复杂命令
alias 查看已设置的别名
alias 别名名称=‘实际执行的命令行’ 定义新的别名
unalias [别名名称] 取消已设置的别名
16:10 - 16:25
eg:
[root@localhost ~]# hostname
localhost.localdomain
[root@localhost ~]# hn
bash: hn: 未找到命令…
[root@localhost ~]# alias hn=‘hostname’ //定义别名
[root@localhost ~]# hn //运行别名测试
[root@localhost ~]# alias //查看当前系统有效的别名
[root@localhost ~]# unalias hn //删除别名
[root@localhost ~]# hn
bash: hn: 未找到命令…
红帽考试题:
[root@localhost~]#alias qstat=’/bin/ps -Ao pig,tt,user,
fname,rsz’
[root@localhost ~]# qstat
5. mkdir 创建目录
-p 创建父目录
ls
-R 递归:目录本身以及目录下所有
[root@localhost ~]# ls /opt
[root@localhost ~]# mkdir /opt/nsd01
[root@localhost ~]# ls /opt/
[root@localhost ~]# mkdir /opt/nsd02 /opt/nsd03
[root@localhost ~]# ls /opt/
[root@localhost ~]# mkdir /vod/movie/cartoon
[root@localhost ~]# ls -R /vod
[root@localhost ~]# mkdir -p /vod/movie/cartoon
[root@localhost ~]# ls -R /vod
6.grep针对文本文件内容进行过滤,输出包含指定字符串的行
-v 取反匹配
-i 忽略大小写
eg:
[root@localhost /]# grep root /etc/passwd
[root@localhost /]# grep -v root /etc/passwd
[root@localhost /]# grep ROOT /etc/passwd
[root@localhost /]# grep -i ROOT /etc/passwd
word 包含字符串word
^word 以字符串word开头
word$ 以字符串word结尾
eg:
[root@localhost /]# grep ^root /etc/passwd
[root@localhost /]# grep root$ /etc/passwd
[root@localhost /]# grep bash$ /etc/passwd
7.复制
格式:
cp [选项]… 原文件… 目标路径
-r 递归,复制目录时必须有此选项
eg:
[root@localhost ~]# ls /tmp/bak
[root@localhost ~]# mkdir /tmp/bak
[root@localhost ~]# ls /tmp/bak
[root@localhost ~]# cp /etc/passwd /tmp/bak
[root@localhost ~]# ls /tmp/bak
[root@localhost ~]# cp /home/ /tmp/bak
[root@localhost ~]# ls /tmp/bak
[root@localhost ~]# cp -r /home/ /tmp/bak
[root@localhost ~]# ls /tmp/bak
//可以支持两个以上的参数,永远将最后一个参数做目标,其他所有参数作为源
[root@localhost ~]# ls /tmp/bak
[root@localhost ~]# cp -r /etc/hosts /etc/fstab /boot/ /tmp/bak
[root@localhost ~]# ls /tmp/bak
//cp经常与点 . 连用,将数据复制到当前路径下
. 当前目录
[root@localhost ~]# cd /tmp/bak
[root@localhost bak]# pwd
[root@localhost bak]# ls
[root@localhost bak]# cp /etc/shadow .
[root@localhost bak]# ls
//复制到目标路径下,可以重新命名
[root@localhost /]# ls /tmp/bak
[root@localhost /]# cp /etc/passwd /tmp/bak
[root@localhost /]# ls /tmp/bak
[root@localhost /]# cp /etc/passwd /tmp/bak/pd
[root@localhost /]# ls /tmp/bak
[root@localhost /]# cp -r /home/ /tmp/bak/abc
[root@localhost /]# ls /tmp/bak
8.rm 删除
格式:rm [选项]… 文件或目录…
-r 递归删除(含目录)CentOS_BuildTag GPL LiveOS RPM-GPG-KEY-CentOS-7
EFI images Packages RPM-GPG-KEY-CentOS-Testing-7
EULA isolinux repodata TRANS.TBL
-f 强制删除
[root@localhost ~]# rm /tmp/bak/abc
[root@localhost ~]# rm -r /tmp/bak/abc
//试了几次不耐烦可以ctrl+c
[root@localhost ~]# rm -rf /tmp/bak/abc
[root@localhost ~]# ls /tmp/bak
[root@localhost ~]# rm -rf /tmp/bak
[root@localhost ~]# ls /tmp/
9.mv 移动/改名
格式: mv [选项]… 原文件… 目标路径
[root@localhost ~]# ls /tmp/nsd01
[root@localhost ~]# mkdir /tmp/nsd01
[root@localhost ~]# ls /tmp/nsd01
[root@localhost ~]# touch /tmp/1.txt
[root@localhost ~]# ls /tmp/
[root@localhost ~]# mv /tmp/1.txt /tmp/nsd01/
[root@localhost ~]# ls /tmp/
[root@localhost ~]# ls /tmp/nsd01/
//重命名:路径不变的移动
[root@localhost ~]# mv /tmp/nsd01/ /tmp/haha01
[root@localhost ~]# ls /tmp/
[root@localhost ~]# mv /tmp/haha01/ /tmp/stu01
[root@localhost ~]# ls /tmp/
补充:
Linux下目录结构
/proc 虚拟目录
/tmp 临时目录,默认数据存放10天不做任何操作系统直接删除
/etc 配置文件存放目录
/mnt 系统提供的挂载点
/boot 启动相关的目录,内核文件存放这里
课外作业:
将/home目录复制到/opt/并且重命名为redhat
将/home目录复制到/opt/redhat目录下
培训第四天
vim文本编辑器
当文件不存在会自动创建该文件
当目录不存在不能新建
三个模式: 命令模式 插入模式(编辑模式 输入模式) 末行模式
[root@A ~]# vim /opt/haha.txt
命-------i键 或o键------>插入模式(Esc回到命令模式)
令
模
式------- :键 -------->末行模式(Esc回到命令模式)
末行模式 :wq #保存并退出 :q #另存为
:q! #强制不保存退出
[root@A ~]# cat /opt/haha.txt
##################################
重定向输出:将前面命令的输出,写入到后面文本文件
:覆盖重定向
:追加重定向
[root@A ~]# hostname
A.tedu.cn
[root@A ~]# hostname > /opt/ls.txt
[root@A ~]# cat /opt/ls.txt
A.tedu.cn
[root@A ~]# hostname >> /opt/ls.txt
[root@A ~]# cat /opt/ls.txt
[root@A ~]# head -2 /etc/passwd
[root@A ~]# head -2 /etc/passwd >> /opt/ls.txt
[root@A ~]# cat /opt/ls.txt
[root@A ~]# cat /opt/ls.txt
[root@A ~]# echo 123456
[root@A ~]# echo 123456 >> /opt/ls.txt
[root@A ~]# cat /opt/ls.txt
[root@A ~]# echo hello world >> /opt/ls.txt
[root@A ~]# cat /opt/ls.txt
###################################
管道操作 | :将前面命令的输出,传递给后面命令作为后面命令的参数
显示文件/etc/passwd文件的8-12行内容?
[root@A ~]# head -12 /etc/passwd | tail -5
[root@A ~]# head -12 /etc/passwd | tail -5 | cat -n
[root@A ~]# cat -n /etc/passwd | head -12 | tail -5
[root@A ~]# ifconfig | head -2
[root@A ~]# ifconfig | less
###################################
管理用户和组
系统用户: 1.安全提升 2.不同的身份拥有不同的权限 3.登录操作系统
组:方便管理用户
唯一标识: UID GID
管理员root的UID为0
组: 基本组 附加组(从属组)
一个用户至少属于一个组
[root@A ~]# useradd tom
组: tom
利用root身份创建组: 财务组 销售组 帅哥组 美女组
总结:一共属于5个组,其中tom组为tom用户基本组
财务组 销售组 帅哥组 美女组为为tom用户的附加组
添加用户
用户基本信息存放在 /etc/passwd 文件
[root@A ~]# head -1 /etc/passwd
root❌0:0:root:/root:/bin/bash
用户名:密码占位符:UID:基本组GID:用户描述信息:家目录:解释器程序
用户执行命令------->解释器------->内核---->硬件
• 使用 useradd 命令
– useradd [选项]… 用户名
• 常用命令选项
– -u 用户id、-d 家目录路径、-s 登录解释器、-G 附加组
[root@A ~]# useradd tom
[root@A ~]# id tom
[root@A ~]# id haha
[root@A ~]# useradd nsd01
[root@A ~]# id nsd01
[root@A ~]# useradd -u 1300 nsd02 #指定UID创建用户
[root@A ~]# id nsd02
[root@A ~]# useradd -d /opt/haxi haxi #指定家目录
[root@A ~]# id haxi
-s 登录解释器 /sbin/nologin:禁止用户登录系统
[root@A ~]# useradd -s /sbin/nologin nsd05
[root@A ~]# id nsd05
uid=1401(nsd05) gid=1401(nsd05) 组=1401(nsd05)
[root@A ~]# grep nsd05 /etc/passwd
-G 附加组
[root@A ~]# groupadd tedu
[root@A ~]# useradd -G tedu nsd06
[root@A ~]# id nsd06
[root@A ~]# useradd -G tedu nsd07
[root@A ~]# id nsd07
[root@A ~]# useradd -G tedu nsd08
[root@A ~]# id nsd08
###################################
设置登录密码
• 使用 passwd 命令
– passwd [用户名]
[root@A ~]# passwd nsd01
更改用户 nsd01 的密码 。
新的 密码:
无效的密码: 密码少于 8 个字符
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[root@A ~]# su - nsd01 #临时命令行切换身份
[nsd01@A ~]$ passwd
更改用户 nsd01 的密码 。
为 nsd01 更改 STRESS 密码。
(当前)UNIX 密码:
新的 密码:
重新输入新的 密码:
passwd:所有的身份验证令牌已经成功更新。
[nsd01@A ~]$ exit
非交互式设置密码
– echo ‘密码’ | passwd --stdin 用户名
[root@A ~]# echo 123 | passwd --stdin nsd01
[root@A ~]# echo redhat | passwd --stdin nsd02
[root@A ~]# echo 123456 | passwd --stdin tom
[root@A ~]# echo tarena | passwd --stdin nsd03
###################################用户密码信息存放在 /etc/shadow 文件
nsd07: 6 6 6S.i3F30.$J6Tp02BHAy61wyUECn94Nz8BR8x7pr.BhAVdsoEDLr2PzJA4Qv2vMCuwb/lZUZtf6NrbmJ8SM/sdJaX9eu6eG0:18111:0:99999:7:::
用户名:密码加密后的字符串:上一次修改密码的时间
自1970-1-1到上一次修改密码的时间,经历的天数
###################################修改用户属性
• 使用 usermod 命令
– usermod [选项]… 用户名
• 常用命令选项
– -u 用户id、-d 家目录路径、-s 登录解释器
– -G 附加组 -g 基本组GID修改
[root@A ~]# useradd nsd08
[root@A ~]# id nsd08
[root@A ~]# grep nsd08 /etc/passwd
[root@A ~]# usermod -u 1500 -d /opt/test -G tedu -s /sbin/nologin nsd08
[root@A ~]# id nsd08
[root@A ~]# grep nsd08 /etc/passwd
###################################
删除用户
• 使用 userdel 命令
– userdel 用户名
[-r]:递归删除,连同用户的家目录一并删除
[root@A ~]# ls /home/
[root@A ~]# userdel -r nsd01
[root@A ~]# id nsd01
[root@A ~]# ls /home/
[root@A ~]# userdel nsd02
[root@A ~]# id nsd02
[root@A ~]# ls /home/
###################################
管理组账号
添加组
组基本信息存放在 /etc/group 文件
[root@A ~]# grep tarena /etc/group
tarena❌1601:
组名:组的密码占位符:GID:组成员列表
• 使用 groupadd 命令
– groupadd [-g 组ID] 组名
[root@A ~]# groupadd tarena
[root@A ~]# grep tarena /etc/group
[root@A ~]# useradd nsd12
[root@A ~]# useradd kaka
[root@A ~]# useradd dc
[root@A ~]# useradd kenji
• 使用 gpasswd 命令
– gpasswd -a 用户名 组名 #添加用户到组中
– gpasswd -d 用户名 组名 #将用户从组中删除
[root@A ~]# gpasswd -a dc tarena
[root@A ~]# id dc
[root@A ~]# grep tarena /etc/group
[root@A ~]# gpasswd -a kenji tarena
[root@A ~]# grep tarena /etc/group
[root@A ~]# gpasswd -d dc tarena
[root@A ~]# grep tarena /etc/group
[root@A ~]# gpasswd -a kaka tarena
[root@A ~]# grep tarena /etc/group
删除组
• 使用 groupdel 命令
– groupdel 组名
用户的基本组不能删除
组的密码信息存放在 /etc/gshadow 文件
###################################
• 新建用户 alex,其用户ID为3456,密码是flectrag
[root@A ~]# useradd -u 3456 alex
[root@A ~]# echo flectrag | passwd --stdin alex
• 一个名为 adminuser 的组
[root@A ~]# groupadd adminuser #新建组
[root@A ~]# grep adminuser /etc/group #查看组
• 名为 natasha 的用户,其属于 adminuser组,这个组是该用户的从属组
[root@A ~]# useradd -G adminuser natasha
[root@A ~]# id natasha
• 名为 harry 的用户,其属于 adminuser 组,这个组是该用户的从属组
[root@A ~]# useradd -G adminuser harry
[root@A ~]# id harry
• 名为 sarah 的用户,其在系统中没有可交互的Shell
[root@A ~]# useradd -s /sbin/nologin sarah
[root@A ~]# grep sarah /etc/passwd
• natasha 、harry、sarah 的密码都要设置为 flectrag
###################################
tar备份与恢复
1.整合分散的数据 2.减小占用空间
Linux平台压缩格式:
gzip ----> .gz
bzip2 ----> .bz2
xz ----> .xz
• tar 集成备份工具
– -c:创建归档
– -x:释放归档
– -f:指定归档文件名称,必须放在所有选项的最后
– -z、-j、-J:调用 .gz、.bz2、.xz 格式的工具进行处理
– -t:显示归档中的文件清单
– -C(大写):指定释放路径
制作tar包的格式:
tar 选项 /路径/压缩包的名 被压缩的源数据
]# tar -zcf /opt/nsd.tar.gz /home/ /etc/passwd
]# ls /opt/
]# tar -jcf /opt/abc.tar.bz2 /home/ /etc/passwd
]# ls /opt/
]# tar -Jcf /opt/file.tar.xz /home/ /etc/passwd
]# ls /opt/
进行解包
[root@A ~]# mkdir /nsd10
[root@A ~]# tar -xf /opt/nsd.tar.gz -C /nsd10
[root@A ~]# ls /nsd10/
[root@A ~]# ls /nsd10/home/
[root@A ~]# ls /nsd10/etc/
[root@A ~]# mkdir /nsd11
[root@A ~]# tar -xf /opt/file.tar.xz -C /nsd11
[root@A ~]# ls /nsd11/
[root@A ~]# ls /nsd11/home/
[root@A ~]# ls /nsd11/etc/
###################################案例2:创建一个备份包
使用 tar 工具完成以下备份任务:
– 创建一个名为 /root/backup.tar.bz2 的归档文件
– 其中包含 /usr/local 目录中的内容
– tar 归档必须使用 bzip2 进行压缩
[root@A ~]# tar -jcf /root/backup.tar.bz2 /usr/local/
tar: 从成员名中删除开头的“/”
[root@A ~]# ls /root/
[root@A ~]# tar -tf /root/backup.tar.bz2 #查看tar包内容
###################################
cron计划任务
cron任务概述
• 用途:按照设置的时间间隔为用户反复执行某一项固定的系统任务
• 软件包:cronie、crontabs
• 系统服务:crond
• 日志文件:/var/log/crond
• 使用 crontab 命令
– 编辑:crontab -e [-u 用户名] #调用vim文本编辑器
– 查看:crontab -l [-u 用户名]
– 清除:crontab -r [-u 用户名]
计划任务的书写格式
– 分 时 日 月 周 任务命令行
每分钟都匹配
30 23 * * * 每天晚上的23:30
0 8 * * 5 每周的周五早上8点
0 8 * * 1-5 周一至周五早上8点
0 8 * * 1,5 周一和周五早上8点
0 8 1 * 5 每月1号早上8点和每周的周五早上8点都会执行
0 */2 * * * 每隔2小时运行一次
*:匹配范围内任意时间
,:分隔多个不连续的时间点
-:指定连续时间范围
/n:指定时间频率,每n …
每分钟记录当前的系统时间,写入到/opt/time.txt
[root@A ~]# date >> /opt/time.txt
[root@A ~]# cat /opt/time.txt
[root@A ~]# crontab -e #编辑计划任务
[root@A ~]# crontab -l #查看计划任务
[root@A ~]# cat /opt/time.txt
##################################
培训开班第五天
教学环境介绍
#Clone-vm7
使用教学虚拟机
• 每个学员机上有三台预先配置好的虚拟机
– server —— 作为练习用服务器
– desktop —— 作为练习用客户机
– classroom —— 提供网关/DNS/软件素材/dhcp服务器等资源
真机使用rht-vmctl辅助工具
• 控制教学用虚拟机
– 格式:rht-vmctl 控制指令 虚拟机名 #优先开机classroom
– 常用控制指令:
]# rht-vmctl reset classroom #先重置资源服务器
]# rht-vmctl reset server
]# rht-vmctl reset desktop #再重置答题虚拟机
虚拟机server:用户root的密码redhat
1.查看系统版本:RHEL 7.0
2.查看eth0的IP地址:172.25.0.11/24
3.查看系统的主机名:server0.example.com
虚拟机desktop:用户root的密码redhat
1.查看系统版本:RHEL 7.0
2.查看eth0的IP地址:172.25.0.10/24
3.查看系统的主机名:desktop0.example.com
#########################################
终端字体放大: Ctrl shift +
终端字体变小: Ctrl -
#########################################真机进行远程管理虚拟机server与虚拟机desktop
远程管理的命令:ssh 用户名@对方的主机IP地址
1.真机测试通信
[student@room9pc01 ~]$ ping 172.25.0.11
[student@room9pc01 ~]$ ping 172.25.0.10
2.真机远程管理
[student@room9pc01 ~]$ ssh [email protected]
[student@room9pc01 ~]$ ssh [email protected]
ctrl + shift + t : 新开一个终端
3.远程管理时开启对方的图形程序: -X
[root@server0 ~]# exit #退出远程管理
登出
Connection to 172.25.0.11 closed.
[student@room9pc01 ~]$ ssh -X [email protected]
[root@server0 ~]# firefox #火狐浏览器
[root@server0 ~]# firewall-config #防火墙图形程序
远程管理常见提示: dconf服务 图形桌面服务
(process:30418): dconf-WARNING **: failed to commit changes to dconf: 无法连接:拒绝连接
[root@desktop0 ~]#
#########################################
真机:定义永久别名 ~/.bashrc(永久别名的配置文件)新开一个终端生效
[student@room9pc01 ~]$ vim /home/student/.bashrc
alias gos=‘ssh -X [email protected]’
alias god=‘ssh -X [email protected]’
#########################################
权限和归属
基本权限
• 访问方式(权限)
– 读取:允许查看内容-read r
– 写入:允许修改内容-write w
– 可执行:允许运行和切换-execute x
对于文本文件:
r:cat less head tail grep
w:vim能够保存 > >>
x:Shell脚本 Pyhton脚本
• 权限适用对象(归属)
– 所有者(属主):拥有此文件/目录的用户-user u
– 所属组(属组):拥有此文件/目录的组-group g
– 其他用户:除所有者、所属组以外的用户-other o
zhangsan zhangsan组 1.txt
查看权限
• 使用 ls -l 命令
– ls -ld 文件或目录…
以-开头为文本文件
以d开头为目录
以l开头为快捷方式
[root@server0 ~]# ls -ld /etc/
[root@server0 ~]# ls -l /etc/passwd
[root@server0 ~]# ls -ld /root
[root@server0 ~]# ls -ld /tmp
[root@server0 ~]# ls -l /etc/shadow
[root@server0 ~]# ls -ld /home/student
设置基本权限
• 使用 chmod 命令
– chmod 归属关系+(添加权限)-(减少权限)=(直接给权限)类别 文档…
[-R]:递归设置权限
[root@server0 ~]# mkdir /nsd01
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# chmod u-w /nsd01 #用户nsd01设置不可写
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# chmod g+w /nsd01 #用户nsd01设置属组可写
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# chmod o=— /nsd01 #其他人禁止任何操作
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# chmod ugo=rwx /nsd01 #高权限
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# chmod u=rx,g=rwx,o=— /nsd01
#属主可读可执行 组可写可读可执行 其他人不给权限
[root@server0 ~]# ls -ld /nsd01
[root@server0 ~]# mkdir -p /opt/aa/bb/cc
[root@server0 ~]# ls -ld /opt/aa/
[root@server0 ~]# ls -ld /opt/aa/bb/
[root@server0 ~]# ls -ld /opt/aa/bb/cc/
[root@server0 ~]# chmod -R o=— /opt/aa
#########################################
Linux判断用户权限:
匹配及停止
1.判断用户针对该数据处于的角色 所有者>所属组>其他人
2.查看相应身份的权限位表示
Permission denied:权限不足
目录的 r 权限:能够 ls 浏览此目录内容
目录的 w 权限:能够执行 rm/mv/cp/mkdir/touch/等更改目录内容的操作
目录的 x 权限:能够 cd 切换到此目录
以root用户新建/nsddir目录,在此目录下新建readme.txt文件
并进一步完成下列操作
1)使用户lisi能够在此目录下创建子目录 切换用户 su - lisi
chmod o+w /nsddir/
2)使用户lisi不能够在此目录下创建子目录
chmod o-w /nsddir/
3)使用户lisi能够修改readme.txt文件内容
chmod o+w /nsddir/readme.txt
4)调整此目录的权限,使所有用户都不能cd进入此目录
chmod u-x,g-x,o-x /nsddir/
5)为此目录及其下所有文档设置权限 rwxr-x—
chmod -R u=rwx,g=rx,o=— /nsddir/
-R:递归设置权限,目录下及目录下所有
#########################################
设置文档归属
• 使用 chown 命令
– chown [-R] 属主 文档…
– chown [-R] :属组 文档…
#给一个目录设置-R实现目录下已创建的任何目录或文件都和主目录一个权限
– chown [-R] 属主:属组 文档…
[root@server0 ~]# mkdir /nsd03
[root@server0 ~]# ls -ld /nsd03
[root@server0 ~]# groupadd tedu
[root@server0 ~]# chown lisi:tedu /nsd03
[root@server0 ~]# ls -ld /nsd03
[root@server0 ~]# chown student /nsd03 #修改所有者
[root@server0 ~]# ls -ld /nsd03
[root@server0 ~]# chown :root /nsd03 #修改所属组
[root@server0 ~]# ls -ld /nsd03
#########################################
利用root用户新建/nsd06目录,并进一步完成下列操作
1)将属主设为gelin01,属组设为tarena组
[root@server0 /]# useradd gelin01
[root@server0 /]# useradd gelin02
[root@server0 /]# groupadd tarena
[root@server0 /]# chown gelin01:tarena /nsd06
2)使用户gelin01对此目录具有rwx权限
除属主与属组之外的人,对此目录无任何权限
[root@server0 /]# chmod o=— /nsd06
3)使用户gelin02能进入、查看此目录内容
[root@server0 /]# gpasswd -a gelin02 tarena
4)将gelin01加入tarena组, 将nsd06目录的权限设为rw-r-x—
再测试gelin01用户能否进入此目录
[root@server0 /]# gpasswd -a gelin01 tarena
[root@server0 /]# chmod u=rw,g=rx /nsd06
#########################################
设置/etc/shadow文件权限,使用户lisi具备读取权限,您有几种办法?
1.利用其他人进行权限设置
chmod o+r /etc/shadow
2.利用所属组进行权限设置
chown :lisi /etc/shadow
chmod g+r /etc/shadow
3.利用所有者进行权限设置
chown lisi /etc/shadow
chmod u+r /etc/shadow
4.利用acl访问控制列表
setfacl -m u:lisi:r /etc/shadow
#########################################
附加权限(特殊权限)
Set GID
• 附加在属组的 x 位上
– 属组的权限标识会变为 s
– 适用于目录,Set GID可以使目录下新增的文档自动设
置与父目录相同的属组
[root@server0 ~]# mkdir /nsd08
[root@server0 ~]# ls -ld /nsd08
[root@server0 ~]# chown :tedu /nsd08 #修改所属组
[root@server0 ~]# ls -ld /nsd08
[root@server0 ~]# mkdir /nsd08/abc01
[root@server0 ~]# ls -ld /nsd08/abc01
[root@server0 ~]# chmod g+s /nsd08/ #添加Set GID特殊权限
[root@server0 ~]# ls -ld /nsd08/
[root@server0 ~]# mkdir /nsd08/abc02
[root@server0 ~]# ls -ld /nsd08/abc02
#########################################
/tarena/2018-8-5.txt
/tarena/2018-8-6.txt
/tarena/2018-8-7.txt
chmod o=--- /tarena
groupadd caiwu
chown :caiwu /tarena
chmod g+s /tarena
#########################################
Set UID
• 附加在属主的 x 位上
– 属主的权限标识会变为 s
– 适用于可执行文件,Set UID可以让使用者具有文件属主的身份及部分权限
[root@server0 ~]# /usr/bin/mkdir /opt/xixi
[root@server0 ~]# ls /opt/
[root@server0 ~]# cp /usr/bin/mkdir /usr/bin/hahadir
[root@server0 ~]# /usr/bin/hahadir /opt/xixi02
[root@server0 ~]# ls /opt/
[root@server0 ~]# chmod u+s /usr/bin/hahadir
[root@server0 ~]# ls -l /usr/bin/hahadir
[root@server0 ~]# ls -l /usr/bin/mkdir
[root@server0 ~]# su - lisi
[lisi@server0 ~]$ /usr/bin/mkdir abc01
[lisi@server0 ~]$ ls -l
[lisi@server0 ~]$ /usr/bin/hahadir abc02
[lisi@server0 ~]$ ls -l
[lisi@server0 ~]$ exit
#########################################
Sticky Bit
• 附加在其他人的 x 位上
– 其他人的权限标识会变为 t
– 适用于开放w权限的目录,可以阻止用户滥用w写入权限(禁止操作别人的文档)
[root@server0 ~]# mkdir /home/public
[root@server0 ~]# chmod ugo=rwx /home/public
[root@server0 ~]# ls -ld /home/public
[root@server0 ~]# chmod o+t /home/public/
[root@server0 ~]# ls -ld /home/public
#########################################
案例2:配置附加权限
– 创建一个共用目录 /home/admins,要求如下:
[root@server0 ~]# mkdir /home/admins
[root@server0 ~]# groupadd adminuser
– 此目录的组所有权是 adminuser
[root@server0 ~]# chown :adminuser /home/admins/
[root@server0 ~]# ls -ld /home/admins/
– adminuser 组的成员对此目录有读写和执行的权限,
除此以外的其他所有用户没有任何权限(root用户能
够访问系统中的所有文件和目录)
[root@server0 ~]# chmod g=rwx,o=— /home/admins/
[root@server0 ~]# ls -ld /home/admins/
– 在此目录中创建的文件,其组的所有权会自动设置为属于 adminuser 组
[root@server0 ~]# chmod g+s /home/admins/
[root@server0 ~]# ls -ld /home/admins/
#########################################
acl访问控制列表
acl策略的作用:能够对个别用户、个别组设置独立的权限
• 文档归属的局限性
– 任何人只属于三种角色:属主、属组、其他人
– 无法实现更精细的控制
• acl访问策略
– 能够对个别用户、个别组设置独立的权限
– 大多数挂载的EXT3/4、XFS文件系统默认已支持
[root@server0 ~]# mkdir /nsd11
[root@server0 ~]# chmod o=— /nsd11
[root@server0 ~]# ls -ld /nsd11
[root@server0 ~]# su - lisi
[lisi@server0 ~]$ cd /nsd11
-bash: cd: /nsd11: Permission denied
[lisi@server0 ~]$ exit
[root@server0 ~]# setfacl -m u:lisi:rx /nsd11 #设置ACL
[root@server0 ~]# getfacl /nsd11 #查看ACL策略
[root@server0 ~]# su - lisi
[lisi@server0 ~]$ cd /nsd11 #测试切换成功
[lisi@server0 nsd11]$ pwd
[lisi@server0 nsd11]$ exit
[root@server0 ~]#
#########################################
• 使用 getfacl、setfacl 命令
– getfacl 文档…
– setfacl [-R] -m u:用户名:权限类别 文档…
– setfacl [-R] -m g:组名:权限类别 文档…
– setfacl [-R] -x u:用户名 文档… #删除指定的ACL
– setfacl [-R] -b 文档… #删除所有的ACL
[root@server0 ~]# mkdir /nsd12
[root@server0 ~]# setfacl -m u:lisi:rwx /nsd12
[root@server0 ~]# setfacl -m u:dc:rwx /nsd12
[root@server0 ~]# setfacl -m u:gelin01:rx /nsd12
[root@server0 ~]# setfacl -m u:gelin02:rwx /nsd12
[root@server0 ~]# getfacl /nsd12
[root@server0 ~]# setfacl -x u:lisi /nsd12 #删除指定ACL
[root@server0 ~]# getfacl /nsd12
[root@server0 ~]# setfacl -x u:dc /nsd12 #删除指定ACL
[root@server0 ~]# getfacl /nsd12
[root@server0 ~]# setfacl -b /nsd12 #删除所有的ACL
[root@server0 ~]# getfacl /nsd12
#########################################
单独的拒绝
[root@server0 ~]# mkdir /nsd13
[root@server0 ~]# chmod ugo=rwx /nsd13
[root@server0 ~]# ls -ld /nsd13
[root@server0 ~]# setfacl -m u:lisi:— /nsd13
[root@server0 ~]# getfacl /nsd13
#########################################
家目录的补救
]# useradd nsd20
]# grep nsd20 /etc/passwd
]# ls /home/
]# usermod -d /mnt/stu20 nsd20 #修改nsd20用户的家目录
]# grep nsd20 /etc/passwd
]# ls /mnt
]# cp -r /home/nsd20/ /mnt/stu20
]# ls -lA /mnt/stu20/
]# chown -R nsd20:nsd20 /mnt/stu20/ #递归修改归属关系
]# ls -lA /mnt/stu20/
#########################################
培训开班第八天
Shell脚本:可以执行的一个文件,可以实现某种功能
中文:创建用户dc Shell:useradd dc
案例1:书写hello.sh脚本
[root@server0 ~]# vim /root/hello.sh
echo hello world
[root@server0 ~]# /root/hello.sh
-bash: /root/hello.sh: 权限不够
[root@server0 ~]# chmod +x /root/hello.sh #赋予执行权限
[root@server0 ~]# ls -l /root/hello.sh
-rwxr-xr-x. 1 root root 17 8月 8 08:57 /root/hello.sh
[root@server0 ~]# /root/hello.sh
规范Shell脚本的一般组成
• #! 环境声明,下面所有代码由那个程序进行翻译
• # 注释文本
• 可执行代码
案例2:书写hello.sh脚本
1)输出当前红帽系统的版本信息
2)输出当前使用的内核版本
3)输出当前系统的主机名
[root@server0 ~]# vim /root/hello.sh
#!/bin/bash
echo hello world
cat /etc/redhat-release
uname -r
hostname
ifconfig | head -2
[root@server0 ~]# /root/hello.sh
重定向输出
>: 只收集前面命令的正确输出
2>: 只收集前面命令的错误输出
&>: 收集前面命令的正确与错误输出
]# echo 123 > /opt/1.txt
]# cat /opt/1.txt
]# cat /opt/1.txt /a
]# cat /opt/1.txt /a > /opt/nsd.txt #只收集正确信息
]# cat /opt/nsd.txt
]# cat /opt/1.txt /a 2> /opt/nsd.txt #只收集错误信息
]# cat /opt/nsd.txt
]# cat /opt/1.txt /a &> /opt/nsd.txt #收集正确与错误信息
]# cat /opt/nsd.txt
单引号 ’ ':取消所有字符的特殊意义,原样输出
[root@server0 ~]# echo ‘’
[root@server0 ~]# echo ’ | >? ^& $%’
案例3:书写创建用户的脚本,并且设置密码
/dev/null:黑洞设备,专用于收集不要的输出信息
[root@server0 ~]# vim /root/user.sh
#!/bin/bash
useradd nsd04 &> /dev/null
echo 用户nsd04创建成功
echo 123 | passwd --stdin nsd04 &> /dev/null
echo 用户nsd04密码设置成功
[root@server0 ~]# chmod +x /root/user.sh
[root@server0 ~]# /root/user.sh
为了提高脚本适应多变的环境与需求,所以引入了变量
变量类似于容器:以不变的名称,存储可以变化的值,方便重复运用某一个值
变量名=存储的值
[root@server0 ~]# vim /root/user.sh
#!/bin/bash
a=nsd08
useradd KaTeX parse error: Expected 'EOF', got '&' at position 3: a &̲> /dev/null ec…a创建成功
echo 123 | passwd --stdin KaTeX parse error: Expected 'EOF', got '&' at position 3: a &̲> /dev/null ec…a密码设置成功
为了降低脚本的使用难度,以及用户的体验,所以产生交互以及提示信息
read -p ‘屏幕的提示信息’
1.产生交互
2.记录用户在键盘上的输入
3.将记录的所有内容,最终赋值给一个变量储存
[root@server0 ~]# vim /root/user.sh
#!/bin/bash
read -p ‘请输入您要创建的用户名:’ a
useradd KaTeX parse error: Expected 'EOF', got '&' at position 3: a &̲> /dev/null ec…a创建成功
echo 123 | passwd --stdin KaTeX parse error: Expected 'EOF', got '&' at position 3: a &̲> /dev/null ec…a密码设置成功
##########################
定义/赋值变量
• 设置变量时的注意事项
– 等号两边不要有空格
– 变量名只能由字母/数字/下划线组成,区分大小写
– 变量名不能以数字开头,不要使用关键字和特殊字符
– 若指定的变量名已存在,相当于为此变量重新赋值
查看/引用变量
• 基本格式
– 引用变量值:$变量名
– 查看变量值:echo $变量名、echo ${变量名}
[root@server0 ~]# a=rhel
[root@server0 ~]# echo $a
rhel
[root@server0 ~]# echo $a7
[root@server0 ~]# echo ${a}7
[root@server0 ~]# b=8
[root@server0 ~]# echo a {a} a{b}
##########################
KaTeX parse error: Expected 'EOF', got '#' at position 50: …root@server0 ~]#̲ date [root@ser…(date +%F)
[root@server0 opt]# ls
[root@server0 opt]# mkdir ( h o s t n a m e ) − (hostname)- (hostname)−(date +%F)
[root@server0 opt]# ls
[root@server0 opt]# mkdir abc-hostname
[root@server0 opt]# ls
变量的种类
环境变量:变量名一般为大写字母,由系统定义并且赋值完成
USER=当前系统登陆的用户名
[root@server0 /]# echo KaTeX parse error: Expected 'EOF', got '#' at position 27: …root@server0 /]#̲ su - dc [dc@se… echo U S E R d c [ d c @ s e r v e r 0 ] USER dc [dc@server0 ~] USER dc[dc@server0 ] exit logout
[root@server0 /]# su - dcc
[dcc@server0 ~]$ echo U S E R d c c [ d c c @ s e r v e r 0 ] USER dcc [dcc@server0 ~] USER dcc[dcc@server0 ] exit logout
[root@server0 /]#
位置变量:由系统定义并且赋值完成
• 在执行脚本时提供的命令行参数
– 表示为 $n,n为序号
– $1、$2、$3、$4… … 10 、 {10}、 10、{11}、… …
[root@server0 /]# vim /root/2.sh
#!/bin/bash
cat -n $1 | head -$2
[root@server0 /]# chmod +x /root/2.sh
[root@server0 /]# /root/2.sh /etc/passwd 3
[root@server0 /]# vim /root/3.sh
#!/bin/bash
echo $1
echo $2
echo $3
[root@server0 /]# chmod +x /root/3.sh
[root@server0 /]# /root/3.sh harry tom zhangsan
[root@server0 /]# vim /root/user.sh
#!/bin/bash
#read -p ‘请输入您要创建的用户名:’ a #开头加上#注释
useradd $1 &> /dev/null
echo 用户$1创建成功
echo 123 | passwd --stdin $1 &> /dev/null
echo 用户$1密码设置成功
[root@server0 /]# /root/user.sh harry
用户harry创建成功
用户harry密码设置成功
###########################
预定义变量:由系统定义并且赋值完成
$# 已加载的位置变量的个数,专用于用户是否输入参数
[root@server0 /]# vim /root/3.sh
#!/bin/bash
echo $1
echo $2
echo $3
echo $#
[root@server0 /]# /root/3.sh aa bb cc dd
$? 程序退出后的状态值,0表示正常,其他值异常
###########################
条件测试
– [ 测试表达式 ] #每一部分都要有空格
常用的测试选项
• 检查文件状态
-e:存在为真
-d:存在,且必须为目录才为真
-f:存在,且必须为文件才为真
[root@server0 /]# [ -e /etc ] #判断/etc目录是否存在
[root@server0 /]# echo $?
0 #表示正常
[root@server0 /]# [ -e /ete ] #判断/ete目录是否存在
[root@server0 /]# echo $?
1 #非0都表示异常
[root@server0 /]# [ -d /etc/passwd ]
[root@server0 /]# echo $?
1
[root@server0 /]# [ -f /etc/passwd ]
[root@server0 /]# echo $?
0
• 比较整数大小
-gt:大于
-ge:大于等于
-eq:等于
-ne:不等于
-lt:小于
-le:小于等于
[root@server0 /]# [ 1 -eq 2 ] #判断是否相等
[root@server0 /]# echo $?
1
[root@server0 /]# [ 10 -gt 11 ] #判断10是否大于11
[root@server0 /]# echo $?
1
[root@server0 /]# [ 10 -ge 10 ] #判断10是否大于等于10
[root@server0 /]# echo $?
0
[root@server0 /]# [ 10 -gt 10 ] #判断10是否大于10
[root@server0 /]# echo $?
• 字符串比对
==:一致为真
!=:不一致为真
[root@server0 /]# [ dc == tc ]
[root@server0 /]# echo $?
1
[root@server0 /]# [ $USER == student ]
[root@server0 /]# echo $?
1
[root@server0 /]# [ $USER == root ]
[root@server0 /]# echo $?
0
[root@server0 /]# [ dc != tc ]
[root@server0 /]# echo $?
0
##########################
if选择结构
if双分支处理
if [条件测试];then
命令序列xx
else
命令序列yy
fi
[root@server0 /]# vim /root/if01.sh
#!/bin/bash
if [ $1 -eq 1 ];then
echo I Love Dc
else
echo Hello World
fi
[root@server0 /]# chmod +x /root/if01.sh
[root@server0 /]# /root/if01.sh 1
[root@server0 /]# /root/if01.sh 2
案例:判断用户是否输入参数
[root@server0 /]# vim /root/if02.sh
#!/bin/bash
if [ KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ -eq 0 ];the…#个参数
fi
[root@server0 /]# chmod +x /root/if02.sh
[root@server0 /]# /root/if02.sh
[root@server0 /]# /root/if02.sh harry
案例:利用 read进行获得用户,所输入的用户名
进行判断 如果当前系统有该用户,则输出用户已存在
如果当前系统没有该用户,则创建该用户
[root@server0 /]# vim /root/if03.sh
#!/bin/bash
read -p ‘请输入您要测试的用户名:’ a
id $a &> /dev/null
if [ ? − e q 0 ] ; t h e n e c h o 用 户 ? -eq 0 ];then echo 用户 ?−eq0];thenecho用户a已存在
else
useradd a e c h o 用 户 不 存 在 , 已 经 将 a echo 用户不存在,已经将 aecho用户不存在,已经将a创建成功
fi
[root@server0 /]# chmod +x /root/if03.sh
[root@server0 /]# /root/if03.sh
##########################
if多分支处理
if [条件测试1];then
命令序列xx
elif [条件测试2];then
命令序列yy
elif [条件测试3];then
命令序列aa
else
命令序列zz
fi
案例:利用read获取用户的成绩
进行判断 如果 成绩大于等于90,则输出 优秀
如果 成绩大于等于80,则输出 良好
如果 成绩大于等于70,则输出 一般
如果 成绩大于等于60,则输出 合格
以上条件均不满足,再牛的肖邦也谈不出哥的悲伤
[root@server0 /]# vim /root/if04.sh
#!/bin/bash
read -p ‘请输入您的成绩:’ num
if [ $num -ge 90 ];then #判断用户成绩是否大于等于90
echo 优秀
elif [ $num -ge 80 ];then #判断用户成绩是否大于等于80
echo 良好
elif [ $num -ge 70 ];then #判断用户成绩是否大于等于70
echo 一般
elif [ $num -ge 60 ];then #判断用户成绩是否大于等于60
echo 合格
else
echo 再牛的肖邦也弹不出哥的悲伤
fi
[root@server0 /]#
###########################
for循环结构:重复性的操作
for循环处理
• 遍历/列表式循环
– 根据变量的不同取值,重复执行xx处理
for 变量名 in 值列表
do
重复性执行的代码
done
for 献血车 in zhangsan lisi wangwu
do
抽血
done
[root@server0 /]# vim /root/for01.sh
#!/bin/bash
for a in zhangsan lisi wangwu haha
do
useradd $a &> /dev/null
echo $a创建成功
done
[root@server0 /]# chmod +x /root/for01.sh
[root@server0 /]# /root/for01.sh
列表值可以不参与循环执行的代码
造数工具:制造连续范围的数字
{起始值…结束值}
[root@server0 /]# vim /root/for01.sh
#!/bin/bash
for a in {1…1000}
do
echo I Love Dc $a
done
[root@server0 /]#
##########################
案例4:编写一个判断脚本
在 server0 上创建 /root/foo.sh 脚本
1)当运行/root/foo.sh redhat,输出为fedora
2)当运行/root/foo.sh fedora,输出为redhat
3)当没有任何参数或者参数不是 redhat 或者fedora时,
其错误输出产生以下信息: /root/foo.sh redhat|fedora
[root@server0 /]# vim /root/foo.sh
#!/bin/bash
if [ $# -eq 0 ];then #判断用户是否输入参数
echo ‘/root/foo.sh redhat|fedora’
elif [ $1 == redhat ];then #判断输入是否为redhat
echo fedora
elif [ $1 == fedora ];then #判断输入是否为fedora
echo redhat
else
echo ‘/root/foo.sh redhat|fedora’ #单引取消特殊字符含义
fi
###########################
案例5:编写一个批量添加用户脚本
在 server0 上创建 /root/batchusers 脚本
1)此脚本要求提供用户名列表文件作为参数
2)如果没有提供参数,此脚本应该给出提示
Usage: /root/batchusers,退出并返回相应值
3)如果提供一个不存在的文件,此脚本应该给出提
示 Input file not found,退出并返回相应值
4)新用户的登录Shell为 /bin/false,无需设置密码
5)用户列表测试文件:
http://classroom/pub/materials/userlist
培训开班第九天
案例4:编写一个判断脚本
在 server0 上创建 /root/foo.sh 脚本
1)当运行/root/foo.sh redhat,输出为fedora
2)当运行/root/foo.sh fedora,输出为redhat
3)当没有任何参数或者参数不是 redhat 或者fedora时,
其错误输出产生以下信息: /root/foo.sh redhat|fedora
[root@server0 /]# vim /root/foo.sh
#!/bin/bash
if [ $# -eq 0 ];then
echo ‘/root/foo.sh redhat|fedora’ >&2
exit 38
elif [ $1 == redhat ];then
echo fedora
elif [ $1 == fedora ];then
echo redhat
else
echo ‘/root/foo.sh redhat|fedora’ >&2
exit 39
fi
##################################
案例5:编写一个批量添加用户脚本
在 server0 上创建 /root/batchusers 脚本
1)此脚本要求提供用户名列表文件作为参数
2)如果没有提供参数,此脚本应该给出提示
Usage: /root/batchusers,退出并返回相应值
3)如果提供一个不存在的文件,此脚本应该给出提
示 Input file not found,退出并返回相应值
4)新用户的登录Shell为 /bin/false,无需设置密码
5)用户列表测试文件:
http://classroom/pub/materials/userlist
[root@server0 ~]# vim /root/batchusers
#!/bin/bash
if [ $# -eq 0 ];then
echo ‘Usage: /root/batchusers’ >&2
exit 1
elif [ -f $1 ];then #判断文件存在为真
for a in $(cat $1) #将命令的输出作为循环的列表值
do
useradd -s /bin/false $a &> /dev/null
echo $a用户创建成功
done
else
echo ‘Input file not found’ >&2
exit 2
fi
##################################
SELinux安全机制
SELinux概述
• Security-Enhanced Linux
– 美国NSA国家安全局主导开发,一套增强Linux系统安
全的强制访问控制体系
– 集成到Linux内核(2.6及以上)中运行
– RHEL7基于SELinux体系针对用户、进程、目录和文件
提供了预设的保护策略,以及管理工具
SELinux运行模式的切换
• SELinux的运行模式
– enforcing(强制)、permissive(宽松)
– disabled(彻底禁用)
任何模式切换到disabled都要经历重起系统
• 切换运行模式
– 临时切换:setenforce 1|0 #只影响当前系统此次开机
– 固定配置:/etc/selinux/config 文件 #永久配置文件,每次开机默认的状态
虚拟机server
[root@server0 ~]# getenforce #查看SELinux状态
Enforcing
[root@server0 ~]# setenforce 0 #临时修改SELinux状态
[root@server0 ~]# getenforce
[root@server0 ~]# vim /etc/selinux/config #每次开机默认
SELINUX=permissive
虚拟机desktop
[root@desktop0 ~]# getenforce #查看SELinux状态
Enforcing
[root@desktop0 ~]# setenforce 0 #临时修改SELinux状态
[root@desktop0 ~]# getenforce
[root@desktop0 ~]# vim /etc/selinux/config
SELINUX=permissive
配置用户环境
alias别名设置
• 查看已设置的别名
– alias [别名名称]
• 定义新的别名
– alias 别名名称= ‘实际执行的命令行’
• 取消已设置的别名
– unalias [别名名称]
• 影响指定用户的 bash 解释环境
– ~/.bashrc,每次开启 bash 终端时生效
• 影响所有用户的 bash 解释环境
– /etc/bashrc,每次开启 bash 终端时生效
[root@server0 ~]# vim /root/.bashrc
alias hello=‘echo hello’
[root@server0 ~]# vim /home/student/.bashrc
alias hi=‘echo hi’
[root@server0 ~]# vim /etc/bashrc
alias abc=‘echo abc’
防火墙策略管理
一 虚拟机server:构建Web服务器
Web服务:提供一个网页内容
http协议:超文本传输协议
实现Web服务的软件:httpd Nginx Tomcat
1.安装httpd软件
[root@server0 ~]# yum -y install httpd
2.重起httpd软件(httpd服务)
[root@server0 ~]# systemctl restart httpd
[root@server0 ~]# firefox 172.25.0.11 #本机测试访问
3.书写一个页面文件(html语言)
页面文件默认存放路径:/var/www/html
页面文件名称:index.html
[root@server0 ~]# vim /var/www/html/index.html
[root@server0 ~]# firefox 172.25.0.11 #本机测试访问
一 虚拟机server:构建FTP服务器
FTP协议:文件传输协议
软件:vsftpd
1.安装vsftpd软件
[root@server0 ~]# yum -y install vsftpd
2.重起vsftpd程序(vsftpd服务)
[root@server0 ~]# systemctl restart vsftpd
[root@server0 ~]# firefox ftp://172.25.0.11 #本机访问测试
3.默认共享数据的路径:/var/ftp
##################################
防火墙策略管理
作用:隔离 严格过滤入站,允许出站
硬件防火墙
软件防火墙
firewalld服务基础
Linux的防火墙体系
• 系统服务:firewalld
• 管理工具:firewall-cmd、firewall-config
预设安全区域
• 根据所在的网络场所区分,预设保护规则集
– public:仅允许访问本机的ssh dhcp ping少数几个服务
– trusted:允许任何访问
– block:阻塞任何来访请求(明确拒绝,给出客户端回应)
– drop:丢弃任何来访的数据包(不给出客户端回应,节省服务器资源)
数据包:源IP地址 目标IP地址 数据
防火墙进入区域的判断:
1.首先查看客户端请求数据包中,源IP地址然后检测自己所有区域中,那个区域有此源IP地址规则,则进入该区域
2.进入默认区域(默认为public)
##################################
防火墙默认区域的修改
虚拟机server:
]# firewall-cmd --get-default-zone #查看默认区域
虚拟机desktop:
]# ping 172.25.0.11 #可以通信
虚拟机server:
]# firewall-cmd --set-default-zone=block #修改默认区域
]# firewall-cmd --get-default-zone #查看默认区域
虚拟机desktop:
]# ping 172.25.0.11 #不可以通信,有回应
虚拟机server:
]# firewall-cmd --set-default-zone=drop #修改默认区域
]# firewall-cmd --get-default-zone #查看默认区域
虚拟机desktop:
]# ping 172.25.0.11 #不可以通信,没有回应
##################################
在public区域中添加允许的协议
虚拟机server:
]# firewall-cmd --set-default-zone=public #修改默认区域
]# firewall-cmd --zone=public --list-all #查看区域规则
虚拟机desktop
]# firefox 172.25.0.11 #失败
]# firefox ftp://172.25.0.11 #失败
虚拟机server:
虚拟机desktop
]# firefox 172.25.0.11 #成功
]# firefox ftp://172.25.0.11 #成功
##################################
添加永久的规则:永久( --permanent)
虚拟机server:
]# firewall-cmd --reload #重新加载防火墙所有配置规则
]# firewall-cmd --zone=public --list-all #查看区域规则
]#firewall-cmd --permanent --zone=public --add-service=http #永久添加防火墙的协议http
]# firewall-cmd --reload #重新加载防火墙所有配置规则
]# firewall-cmd --zone=public --list-all #查看区域规则
]# firewall-cmd --permanent --zone=public --add-service=ftp
]# firewall-cmd --reload #重新加载防火墙所有配置规则
]# firewall-cmd --zone=public --list-all #查看区域规则
##################################
利用源IP地址,单独拒绝一个主机进行访问
虚拟机server:
]# firewall-cmd --zone=block --add-source=172.25.0.10
]# firewall-cmd --zone=block --list-all
虚拟机desktop
]# firefox 172.25.0.11 #失败
]# firefox ftp://172.25.0.11 #失败
真机测试
]# firefox 172.25.0.11 #成功
]# firefox ftp://172.25.0.11 #成功
端口:程序或服务或协议编号
数据包:源IP地址 目标IP地址 数据 端口
http:默认端口为80
ftp:默认端口为21
实现本机的端口映射
• 本地应用的端口重定向(端口1 --> 端口2)
– 从desktop访问 5423端口 的请求,自动映射到本机 80端口
– 比如,访问以下两个地址可以看到相同的页面:
172.25.0.11:5423
172.25.0.11
虚拟机server
1.将拒绝的规则删除
]# firewall-cmd --zone=block --remove-source=172.25.0.10
2.添加端口转发的规则
]# firewall-cmd --zone=public
–add-forward-port=port=5423:proto=tcp:toport=80
#添加端口转发规则=目标端口为5423:协议为tcp协议:转发到80端口
3.查看public区域的规则
]# firewall-cmd --zone=public --list-all
虚拟机desktop
]# firefox 172.25.0.11:5423 #访问对方的编号为5423的程序
培训开班第十二天
前提准备:
1.虚拟机server:划分新的分区,一个5G的主分区
[root@server0 ~]# fdisk /dev/vdb
[root@server0 ~]# lsblk
2.两台虚拟机均设置防火墙默认区域
Server虚拟机:
]# firewall-cmd --set-default-zone=trusted
Desktop虚拟机:
]# firewall-cmd --set-default-zone=trusted
###########################
iSCSI网络磁盘
iSCSI磁盘的工作模式
• Internet SCSI,网际SCSI接口(默认端口:3260)
– 一种基于C/S架构的虚拟磁盘技术
– 服务器提供磁盘空间,客户机连接并当成本地磁盘使用
冰箱 -----》纸制的包装 ------》木质的包装
• backstore,后端存储( 冰箱 /dev/vdb1)
– 对应到服务端提供实际存储空间的设备,需要起一个管理名称
• target,磁盘组( 木质的包装 )
– 是客户端的访问目标,作为一个框架,由多个lun组成
• lun,逻辑单元 (动作 将 冰箱 放入 木质的箱子)
– 每一个lun需要关联到某一个后端存储设备,在客户端会视为一块虚拟硬盘
• ISCSI Qualified Name 名称规范
– iqn.yyyy-mm.倒序域名:自定义标识
– 用来识别 target 磁盘组,也用来识别客户机身份
名称示例
– iqn.2016-02.com.example:server0
– iqn.2016-02.com.example:desktop0
虚拟机server:服务端
一 安装targetcli软件包
[root@server0 ~]# yum -y install targetcli
[root@server0 ~]# rpm -q targetcli #检测软件包是否安装
服务端软件: httpd (提供服务)
客户端软件: firefox (访问服务)
二 运行targetcli进行配置
[root@server0 ~]# targetcli #进入iSCSI配置模式
/> ls
1.生成后端存储backstore,后端存储( 冰箱 /dev/vdb1)
/>backstores/block create name=nsd dev=/dev/vdb1
Created block storage object nsd using /dev/vdb1.
/> ls
2.生成target,磁盘组( 木质的包装 )
/> iscsi/ create iqn.2019-08.com.example:server
Created target iqn.2019-08.com.example:server.
Created TPG 1.
/> ls
/> exit
Created Node ACL for iqn.2019-08.com.example:desktop
Created mapped LUN 0.
/> ls
5.设置服务端在那个IP地址上提供服务,以及开放端口
/> iscsi/iqn.2019-08.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
一 安装iscsi-initiator-utils软件包
Yum仓库可以补全包名前提: 1.当前系统没有安装此软件 2.必须有缓存
[root@desktop0 ~]# yum repolist #生成Yum的缓存
[root@desktop0 ~]# yum -y install isc(tab)
[root@desktop0 ~]# rpm -q iscsi-initiator-utils
iscsi-initiator-utils-6.2.0.873-21.el7.x86_64
二 设置客户端声称的名字
[ro@desktop0~]#vim /etc/iscsi/initiatorname.iscsi
InitiatorName=iqn.2019-08.com.example:desktop
三 客户端刷新声称名字的服务
[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
iscsi(主)----》iscsid(子服务)
四 发现服务端共享存储:
Linux查看命令帮助的方法 : man iscsiadm
全文查找/example 按n项下跳转匹配,看到EXAMPLES
Ctrl - :减小字体
Ctrl Shift + :变大字体
[root@desktop0 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 172.25.0.11 --discover
172.25.0.11:3260,1 iqn.2019-08.com.example:server
五 重起iscsi服务,加载共享存储
[root@desktop0 ~]# lsblk
[root@desktop0 ~]# systemctl restart iscsi
[root@desktop0 ~]# lsblk
##############################
authorization :验证(认证)
##############################
总结:
iSCSI服务端:
1.防火墙默认区域设置为trusted
[root@server0~]#firewall-cmd --set-default- zone=
trusted
2.划分一个分区
[root@server0 ~]# fdisk /dev/vdb
[root@server0 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 10G 0 disk
└─vda1 253:1 0 10G 0 part /
vdb 253:16 0 10G 0 disk
└─vdb1 253:17 0 5G 0 part
3.安装软件包targetcli
[root@server0 ~]# yum repolist
[root@server0 ~]# yum -y install targetcli.noarch
4.运行targetcli进行配置
A:建立后端存储
/>/backstores/block create name=nsd1907 dev=/dev/vdb1
/> ls
B:建立target磁盘组
/> iscsi/ create iqn.2019-08.com.example:server
/> ls
C:lun进行关联
/> iscsi/iqn.2019-08.com.example:server/tpg1/luns create /backstores/block/nsd1907
D:设置客户端声称的名字
/> iscsi/iqn.2019-08.com.example:server/tpg1/acls create iqn.2019-08.com.example:desktop
E:设置本机那个IP地址提供服务
/> iscsi/iqn.2019-08.com.example:server/tpg1/
portals create ip_address=172.25.0.11
/> ls
5.重起target服务
[root@server0 ~]# systemctl restart target
[root@server0 ~]# systemctl enable target.service
客户端:
1.防火墙默认区域设置为trusted
[root@desktop0~]#firewall-cmd–set-default-zone=trusted
2.安装软件包iscsi-initiator-utils
[root@desktop0 ~]# yum repolist
[root@desktop0~]#yum -y install iscsi-initiator-utils.i686
3.设置客户端声称的名字/etc/iscsi/initiatorname.iscsi
[root@desktop0~]#vim /etc/iscsi/initiatorname.
Iscsi
改为服务器生成的名字
4.重起iscsid刷新客户端声称的名字
[root@desktop0 ~]# systemctl restart iscsid
[root@desktop0 ~]# systemctl daemon-reload
[root@desktop0 ~]# systemctl restart iscsid
5.发现共享存储
[root@desktop0 ~]# man iscsiadm
[root@desktop0 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 172.25.0.11 --discover
6.加载使用共享存储,重起iscsi服务
[root@desktop0 ~]# systemctl restart iscsi
[root@desktop0 ~]# lsblk
##############################
数据库服务基础
数据库:存放数据的仓库 管理数据的一个软件
结构:数据库里有很多的库,每一个库中有很多的表格
• 常见的关系型 数据库管理系统
– 微软的 SQL Server
– IBM的 DB2
– 甲骨文的 Oracle、MySQL
– 社区开源版 MariaDB
##############################
一 、部署mariadb数据库服务器
• RHEL7 中的 MariaDB 相关包
– mariadb-server:提供服务端有关的系统程序
– mariadb:提供客户端及管理工具
[root@server0 ~]# yum -y install mariadb-server
二、重起mariadb程序
[root@server0 ~]# systemctl restart mariadb
三、数据库的基本操作
[root@server0 ~]# mysql
show databases; #查看所有的库
create database nsd; #创建nsd库
show databases;
drop database nsd; #删除nsd库
MariaDB [(none)]> use mysql; #切换到 mysql库
MariaDB [mysql]> show tables; #查看当前库中的所有表格
MariaDB [mysql]> create database nsd1907;
MariaDB [mysql]> show databases;
MariaDB [test]> exit
Bye
四、在Linux命令行,设置数据库管理员密码
数据库管理员:root对数据最高权限,用户信息存放mysql库user表
系统管理员:root对系统最高权限,用户信息存放/etc/passwd
• 为数据库账号修改密码
mysqladmin [-u用户名] [-p[旧密码]] password ‘新密码’
]# mysqladmin -u root password ‘123456’
//没有密码状态设置密码
]# mysqladmin -u root -p123456 password ‘123’
//已知旧密码修改密码
[root@server0 ~]# mysql -u root -p #交互式进入数据库
Enter password:
[root@server0 ~]# mysql -u root -p123 #非交互式进入
##############################数据库MariaDB的主配置文件:/etc/my.cnf
#############################
五、导入数据
1.下载备份文件
[root@server0~]#wgethttp://classroom.example.com/pub/materials/users.sql
[root@server0 ~]# ls
2.导入数据
]# mysql -u root -p123 nsd1907 < /root/users.sql
]# mysql -u root -p123
MariaDB [(none)]> use nsd1907; #进入nsd1907库
MariaDB [nsd1907]> show tables; #显示当前库中有哪些表格
±------------------+
| Tables_in_nsd1907 |
±------------------+
| base |
| location |
±------------------+
#############################
六、表格的操作:
增(insert)删 (delete) 改(update) 查(select)
表记录
表字段
编号 姓名 联系方式 居住地址
1 dc 138..... 东村
2 tc 138..... 西村
查(select) 格式: select 表字段 from 库名.表名 ;
use nsd1907; #切换到nsd1907库中
select * from base; #查询base表中所有表字段、所有表记录
select * from nsd1907.base;
select * from location;
select id,name from base;
有条件的查询 where 表字段=‘值’
use nsd1907; #切换到nsd1907库中
select * from base;
select * from base where password=‘123’;
select * from base where id=‘5’;
select * from base where name=‘tom’;
select * from location;
select * from location where id=‘5’;
查询表结构:desc 表名;
MariaDB [nsd1907]> desc base;
MariaDB [nsd1907]> desc location;
MariaDB [nsd1907]> use mysql; #切换到mysql库
MariaDB [mysql]> desc user;
MariaDB [mysql]> select user,host,password from user;
#############################
七、数据库的授权
– 除了 root 用户,此nsd1907数据库只能被用户lisi查询,
此用户的密码为123
GRANT 权限列表 ON 数据库名.表名 TO 用户名@
客户机地址 IDENTIFIED BY ‘密码’;
MariaDB [mysql]> grant select on nsd1907.* to lisi@localhost identified by ‘123’;
当lisi通过localhost本地登陆,输入密码123。将会获得nsd1907库中所有表格的查询权限
MariaDB [mysql]> select user,host,password from user;
##############################
案例4:使用数据库查询
2. 在系统 server0 上使用数据库nsd1907,并使用相
应的 SQL 查询以回答下列问题:
1)密码是 solicitous 的人的名字?
use nsd1907;
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’,‘456789’); #插入记录
select * from base;
insert location values(‘6’,‘Sunnyvale’); #插入记录
select * from location;
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表所有记录
exit
[root@server0 ~]# mysql -u root -hserver0.example.com
-h:指定登陆方式
此方式登陆失败,为成功
培训开班第十三天
前提准备:
1.两台虚拟机均设置防火墙默认区域
]# firewall-cmd --set-default-zone=trusted
]# firewall-cmd --set-default-zone=trusted
##############################
配置NFS共享
NFS共享概述
• Network File System,网络文件系统
– 用途:为客户机提供共享使用的文件夹
– 协议:NFS(TCP/UDP 2049)、RPC(TCP/UDP 111)
• 所需软件包:nfs-utils
• 系统服务:nfs-server
虚拟机server:
1.检测软件包是否安装
[root@server0 ~]# rpm -q nfs-utils
nfs-utils-1.3.0-0.el7.x86_64
2.创建共享目录
[root@server0 ~]# mkdir /public
[root@server0 ~]# touch /public/{1…10}.txt
[root@server0 ~]# ls /public/
3.修改配置文件指定共享目录
[root@server0 ~]# vim /etc/exports
–文件夹路径 客户机地址(权限) 客户机地址(权限) … …
/public *(ro) #允许所有客户端以只读方式访问
4.重起nfs-server服务
[root@server0 ~]# systemctl restart nfs-server
虚拟机desktop:
1.挂载访问
[root@desktop0 ~]# mkdir /mnt/nsd
[desktop0~]#mount 172.25.0.11:/public /mnt/nsd
[root@desktop0 ~]# df -ah #显示所有正在挂在使用的设备
[root@desktop0 ~]# ls /mnt/nsd
##############################虚拟机server:
1.创建共享目录
[root@server0 ~]# mkdir /student
[root@server0 ~]# touch /student/{10…20}.txt
[root@server0 ~]# ls /student/
2.修改配置文件
[root@server0 ~]# vim /etc/exports
/public *(ro)
/student *(ro)
[root@server0 ~]# systemctl restart nfs-server
虚拟机desktop:
1.挂载访问
[root@desktop0 ~]# mkdir /mnt/test
[root@desktop0 ~]# mount 172.25.0.11:/student /mnt/test
[root@desktop0 ~]# df -ah
[root@desktop0 ~]# ls /mnt/test
2.开机自动挂载nfs共享
_netdev:声明网络设备
首先确保网络服务的启动,然后在挂载本设备
[root@desktop0 ~]# vim /etc/fstab
172.25.0.11:/student /mnt/test nfs defaults,_netdev 0 0
[root@desktop0 ~]# umount /mnt/test/
[root@desktop0 ~]# mount -a
[root@desktop0 ~]# df -ah
##############################
HTTP服务(Web服务):提供网页内容的服务
实现Web服务的软件:httpd Nginx Tomcat
虚拟机server:构建简单的Web服务器
1.安装httpd软件
[root@server0 ~]# yum -y install httpd
2.书写一个页面文件
[root@server0 ~]# vim /var/www/html/index.html
Web通信基本概念
• 基于 B/S (Browser/Server)架构的网页服务
– 服务端提供网页
– 浏览器下载并显示网页
• Hyper Text Markup Language(html),超文本标记语言
• Hyper Text Transfer Protocol(http),超文本传输协议
html(书写网页内容) http(传输页面内容)
Apache(软件基金会) httpd软件
##############################
/etc/httpd/conf/httpd.conf(主配置文件)
/etc/httpd/conf.d/*.conf(调用配置文件)
• 软件包:httpd
• 系统服务:httpd
• 提供的默认配置
– Listen:监听地址:端口(80)
– ServerName:本站点注册的DNS名称(空缺)
– DocumentRoot:网页文件的根目录(/var/www/html)
– DirectoryIndex:起始页/首页文件名(index.html)
DNS服务器:虚拟机classroom 将域名解析为IP地址
server0.example.com解析结果:172.25.0.11
www0.example.com解析结果:172.25.0.11
webapp0.example.com解析结果:172.25.0.11
验证DNS解析命令:nslookup
[root@server0 ~]# nslookup server0.example.com
[root@server0~]# nslookup webapp0.example.com
[root@server0 ~]# nslookup www0.example.com
DocumentRoot:网页文件的根目录(/var/www/html)
虚拟机server:
1.建立新的网页文件存放目录
]# mkdir /var/www/myweb
]# echo ‘
2.修改主配置文件
[root@server0 ~]# vim /etc/httpd/conf/httpd.conf
DocumentRoot “/var/www/myweb”
3.测试验证
[root@server0 ~]# systemctl restart httpd
[root@server0 ~]# firefox 172.25.0.11
客户端:firefox http://172.25.0.11:80—>服务端172.25.0.11---->httpd程序------》DocumentRoot /var/www/myweb---->index.html
网络路径(浏览器输入的路径) 与 实际路径(服务端存放页面的路径)
客户端:firefox 172.25.0.11=/var/www/myweb
服务端:/var/www/myweb
客户端:firefox 172.25.0.11/abc
服务端:/var/www/myweb/abc
客户端:firefox 172.25.0.11/abc/test
服务端:/var/www/myweb/abc/test
DocumentRoot /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 ‘
##############################
虚拟Web主机(软件级虚拟化)
• 虚拟Web主机
– 由同一台服务器提供多个不同的Web站点
• 区分方式
– 基于域名的虚拟主机
– 基于端口的虚拟主机
– 基于IP地址的虚拟主机
server0.example.com解析结果:172.250.11
www0.example.com解析结果:172.25.0.11
webapp0.example.com解析结果:172.25.0.11
• 为每个虚拟站点添加配置(容器类型的配置方式)
ServerName 此站点的DNS名称
DocumentRoot 此站点的网页根目录
ServerName 此站点的DNS名称
#指定网站的域名
DocumentRoot 此站点的网页根目录
虚拟机server:建立新的调用配置文件
[root@server0~]#vim /etc/httpd/conf.d/nsd01.conf
#本机所有IP地址都监听80端口
ServerName server0.example.com
#指定网站的域名
Documentroot /var/www/qq
#指定网站的网页存放目录
ServerName www0.example.com
#指定网站的域名
Documentroot /var/www/baidu
#指定网站的网页存放目录
]# mkdir /var/www/qq /var/www/baidu
]# echo ‘
注:一旦使用了虚拟Web主机的功能,所有的网站都必须利用虚拟Web主机实现
默认利用IP地址访问,服务端会返回第一个虚拟Web主机的内容
[root@server0~]#vim /etc/httpd/conf.d/nsd01.conf
ServerName server0.example.com
Documentroot /var/www/qq
ServerName www0.example.com
Documentroot /var/www/baidu
ServerName webapp0.example.com
Documentroot /var/www/myweb
[root@server0 ~]# systemctl restart httpd
##############################Web访问控制:针对网页文件存放目录
父目录定义访问控制,子目录自动继承
除非针对子目录有单独的访问控制设置
Require all denied #拒绝所有客户端访问
/webroot/abc #拒绝所有客户端访问
/webroot/abc/stu #拒绝所有客户端访问
Require all granted #允许所有客户端访问
##############################
虚拟机server:自定web服务根目录
1.建立新的Web网页文件根目录
]# mkdir /webroot
]# echo ‘
##############################
培训开班第十四天
前提准备:
1.两台虚拟机均设置防火墙默认区域
]# firewall-cmd --set-default-zone=trusted
]# firewall-cmd --set-default-zone=trusted
###################################
案例1:为虚拟机 server 配置以下虚拟Web主机
###################################
客户机地址限制
• 使用 配置区段
– 每个文件夹自动继承其父目录的ACL访问权限
– 除非针对子目录有明确设置
… …
Require all denied|granted
Require ip IP或网段地址 … …
– httpd 运行身份(用户/组):apache
案例1:配置网页内容访问
在 Web 网站 http://server0.example.com 的
DocumentRoot 目录下创建一个名为 private 的子目录,要求如下:
1.查看server0.example.com的DocumentRoot目录
]# cat /etc/httpd/conf.d/nsd01.conf
2.创建目录写入网页内容
]# mkdir /var/www/abc01/private
]# echo ‘
3.访问测试
]# firefox server0.example.com/private
4.从虚拟机server0 上,任何人都可以浏览 private 的内容
但是从其他系统不能访问这个目录的内容
[root@server0 ~]# vim /etc/httpd/conf/httpd.conf
[root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf
#针对private目录设置
Require ip 172.25.0.11 #仅允许172.25.0.11进行访问
[root@server0 ~]# systemctl restart httpd
5.在虚拟机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 ‘
3)修改访问控制
]# vim /etc/httpd/conf.d/nsd02.conf
Require all granted #允许所有人访问
]# systemctl restart httpd
4)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 /var/www/ #查看目录的上下文值
]# ls -Zd /webroot/ #查看目录的上下文值
]# setenforce 1 #修改SELinux状态为强制模式
]# getenforce #查看当前SELinux的状态
###################################
部署动态网站
静态网站的运行
• 服务端的原始网页 = 浏览器访问到的网页
– 由Web服务软件处理所有请求
– 文本(txt/html)、图片(jpg/png)等静态资源
动态网站的运行
• 服务端的原始网页 ≠ 浏览器访问到的网页
– 由Web服务软件接受请求,动态程序转后端模块处理
– PHP网页、Python网页、JSP网页…
案例3:部署并测试WSGI站点
为站点 webapp0.example.com 配置提供动态Web内容,要求如下:
1.下载Python的页面文件,到站点webapp0.example.com的网页文件目录
]# cat /etc/httpd/conf.d/nsd01.conf #查看DocumentRoot
]# cd /var/www/abc03/
]#wget http://classroom.example.com/pub/materials/
webinfo.wsgi
]# ls
]# cat webinfo.wsgi
2.方便用户进行访问动态页面,进行 页面跳转(页面别名 地址重写)
网络路径(浏览器输入)
实际路径(网页文件存放路径)
页面跳转代码: Alias 网络路径 实际路径
Alias /(网页文件根目录) /var/www/abc03/webinfo.wsgi
]# vim /etc/httpd/conf.d/nsd01.conf
ServerName webapp0.example.com
DocumentRoot /var/www/abc03
Alias / /var/www/abc03/webinfo.wsgi
#当客户端访问网页文件根目录的时候,呈现/var/www/abc03/webinfo.wsgi页面文件内容
[root@server0 /]# systemctl restart httpd
[root@server0 /]# firefox webapp0.example.com
3.安装mod_wsgi软件,专门用于翻译Python代码
[root@server0 /]# yum -y install mod_wsgi
[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf
ServerName webapp0.example.com
DocumentRoot /var/www/abc03
WsgiScriptAlias / /var/www/abc03/webinfo.wsgi
#调用mod_wsgi软件进行解释Python的代码
[root@server0 /]# systemctl restart httpd
unix时间戳:自1970-1-1 0:0:0到现在时间经历的秒数
[root@server0 /]# firefox webapp0.example.com
LAMP: Linux Apache MySQL/MariaDB Python/PHP
LNMP: Linux Nginx MySQL/MariaDB Python/PHP
4.此虚拟主机侦听在端口8909
[root@server0 /]# vim /etc/httpd/conf.d/nsd01.conf
Listen 8909 #设置httpd程序监听8909端口
ServerName webapp0.example.com
DocumentRoot /var/www/abc03
WsgiScriptAlias / /var/www/abc03/webinfo.wsgi
5.修改SELinux策略 非默认端口的开放
]# semanage port -l | grep http #查看允许的端口
]# semanage port -a -t http_port_t -p tcp 8909
-a:添加 -t:类型 -p:协议
]# systemctl restart httpd #确认服务是否可以重起成功
]# firefox webapp0.example.com:8909 #测试访问
###################################
httpd访问中端口的优先级最高
###################################安全Web服务,加密通信
https:安全的超文本传输协议 默认端口:443
PKI公钥基础设施
• Public Key Infrastructure,公钥基础设施
– 公钥:主要用来加密数据
– 私钥:主要用来解密数据(与相应的公钥匹配)
– 数字证书:证明拥有者的合法性/权威性(单位名称、
有效期、公钥、颁发机构及签名、…)
– Certificate Authority,数字证书授权中心:负责证书
的申请/审核/颁发/鉴定/撤销等管理工作
构建安全的Web服务
1.安装mod_ssl软件包,提供加密支持的功能
[root@server0 /]# yum -y install mod_ssl
[root@server0 /]# ls /etc/httpd/conf.d/
2.部署网站证书(营业执照)
]# cd /etc/pki/tls/certs/
]#wget http://classroom.example.com/pub/tls/certs/
server0.crt
]# ls
3.部署根证书(工商局信息)
]# cd /etc/pki/tls/certs/
]# wget http://classroom.example.com/pub/example-ca.crt
]# ls
4.部署私钥(用于解密数据)
]# cd /etc/pki/tls/private/
]#wget http://classroom.example.com/pub/tls/private/
server0.key
]# ls
5.修改配置文件
[root@server0 /]# vim /etc/httpd/conf.d/ssl.conf
末行模式下:set nu 开启行号功能
59 DocumentRoot “/var/www/abc02” #指定网站网页文件目录
60 ServerName www0.example.com:443 #安全Web网站的域名
指定网站证书位置
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@desktop0 ~]# firefox https://www0.example.com
点击—》我已了解可能的风险----》确认安全例外
培训开班第十五天
网络参数的配置
方式1:交互式
]# nmtui #永久的主机名 IP地址 子网掩码 网关地址 DNS地址
方式2:非交互式
一 永久的主机名,配置文件/etc/hostname
[root@server0 ~]# echo ‘A.tedu.cn’ > /etc/hostname
[root@server0 ~]# cat /etc/hostname
[root@server0 ~]# hostname
[root@server0 ~]# exit
登出
Connection to 172.25.0.11 closed.
[student@room9pc01 ~]$ gos
Last login: Thu Aug 15 08:36:17 2019 from 172.25.0.250
[root@A ~]#
二 配置 IP地址 子网掩码 网关地址
1.查看nmcli识别的网卡名称
[root@A ~]# nmcli connection show
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 连接网络设备 修改 ‘网卡名称’
ipv4.修改方法 手工设置
ipv4.地址 ‘IP地址/子网掩码 网关地址’
每次开机自动启用
[root@A ~]# ifconfig | head -2
3.激活配置
[root@A ~]# nmcli connection up ‘System eth0’
[root@A ~]# ifconfig | head -2
[root@A ~]# route -n #查看网关
Gateway 172.25.0.254
三 指定DNS服务器地址,配置/etc/resolv.conf
]# echo ‘nameserver 172.25.254.254’ > /etc/resolv.conf
]# cat /etc/resolv.conf
]# nslookup www0.example.com #测试域名解析
###################################
配置IPv6地址
IPv4地址:32个二进制组成 点分十进制表示
IPv6地址:128个二进制组成 用冒号进行分隔8个部分 转化成16进制数表示
– 每段内连续的前置 0 可省略、连续的多个 : 可简化为 ::
– 例如:
2003:ac18:0000:0000:0000:0000:0000:0305
2003:ac18::305
[root@A ~]# nmcli connection modify ‘System eth0’ ipv6.method manual ipv6.addresses ‘2003:ac18::305/64’ connection.autoconnect yes
#[root@A ~]# nmcli connection up ‘System eth0’
successfully
[root@A ~]# ifconfig | head -4
[root@A ~]# ping6 2003:ac18::305 #测试通信
###################################
配置聚合连接(链路聚合)提高网卡的高可用性
eth0 eth1
虚拟网卡: team0
192.168.1.1
链路聚合的优势
• team,聚合连接(也称为链路聚合)
– 由多块网卡(team-slave)一起组建而成的虚拟网卡,即“组队”
– 作用:热备份(activebackup)连接冗余
一 生成虚拟网卡team0 参考 man teamd.conf 全文查找/example
[root@A ~]# nmcli connection add type team
con-name team0 ifname team0 autoconnect yes
config ‘{“runner”: {“name”: “activebackup”}}’
[root@A ~]# nmcli 连接网络设备 添加 类型为 team(组队)
配置文件名 team0 网卡名 team0 每次开机自动连接
配置运行方式 活跃热备份工作方式
[root@A ~]# ifconfig
默认生成的配置文件:
二 添加成员
[root@A ~]# nmcli connection add type team-slave con-name team0-1 ifname eth1 autoconnect yes master team0
[root@A ~]# nmcli connection add type team-slave con-name team0-2 ifname eth2 autoconnect yes master team0
[root@A ~]# nmcli 连接设备 添加 类型 team-成员
配置文件名 team0-1 ifname 网卡名 每次开机自动启用
主设备为 team0
三 为虚拟网卡team0设置IP地址
[root@A ~]# nmcli connection modify team0
ipv4.method manual ipv4.addresses 192.168.1.1/24
connection.autoconnect yes
[root@A ~]# nmcli connection up team0 #激活配置
[root@A ~]# nmcli connection up team0-1 #激活配置
[root@A ~]# nmcli connection up team0-2 #激活配置
[root@A ~]# teamdctl team0 state #专用于查看team0信息
[root@A ~]# ifconfig eth1 down #关闭eth1 eth2活动
[root@A ~]# teamdctl team0 state
如果有报错,请删除所有重新配置
[root@A ~]# nmcli connection delete team0
[root@A ~]# nmcli connection delete team0-1
[root@A ~]# nmcli connection delete team0-2
###################################
parted分区工具
MBR分区模式:fdisk分区工具
主分区 扩展分区 逻辑分区
最多只能有4个主分区
支持空间大小2.2TB
GPT分区模式:parted分区工具
最多只能有128个主分区
支持空间大小18EB
[root@A ~]# parted /dev/vdb
(parted) mktable gpt #指定分区模式为gpt
(parted) print #输出分区表信息
(parted) mkpart #划分新的分区
分区名称? []? haha #随意写
文件系统类型? [ext2]? ext4 #随意写,不起实际作用
起始点? 0
结束点? 3G
忽略/Ignore/放弃/Cancel? Ignore #忽略
(parted) unit GB #使用GB作为单位进行显示
(parted) print #输出分区表信息
(parted) mkpart #划分新的分区
分区名称? []? haha #随意写
文件系统类型? [ext2]? ext4 #随意写,不起实际作用
起始点? 3G #在上边结束点基础上
结束点? 7G #在内存范围内
(parted)quit #退出
###################################前提:还原三台虚拟机
[student@room9pc01 ~]$ rht-vmctl reset classroom
[student@room9pc01 ~]$ rht-vmctl reset server
[student@room9pc01 ~]$ rht-vmctl reset desktop
设置两台虚拟机防火墙区域为trusted
[root@server0 ~]# firewall-cmd --set-default-zone=trusted
[root@desktop0 ~]# firewall-cmd --set-default-zone=trusted
基础邮件服务
DNS服务器:虚拟机classroom
邮箱帐号:[email protected]
电子邮件通信
• 电子邮件服务器的基本功能
– 为用户提供电子邮箱存储空间(用户名@邮件域名)
– 处理用户发出的邮件 —— 传递给收件服务器
– 处理用户收到的邮件 —— 投递到邮箱
构建基本邮件服务器
1.安装postfix软件包
[root@server0 ~]# yum -y install postfix
[root@server0 ~]# rpm -q postfix
2.修改主配置文件
[root@server0 ~]# vim /etc/postfix/main.cf
末行模式:set nu
99 myorigin = server0.example.com #默认补全的域名后缀
116 inet_interfaces = all #本机所有网卡均提供邮件服务
164 mydestination = server0.example.com
#利用本字段的值,判断为本域邮件
3.重起postfix服务
[root@server0 ~]# systemctl restart postfix
• 创建本地用户作为邮箱的帐号
[root@server0 ~]# useradd yg
[root@server0 ~]# useradd xln
• mail 发信操作:mail -s ‘邮件标题’ -r 发件人 收件人
[root@server0 ~]# mail -s ‘test01’ -r yg xln
Hahaxixi #邮件发送的内容
. #只有一个点,代表提交
EOT
• 非交互式发邮件
[root@server0 ~]# echo ‘已练成’ | mail -s ‘葵花宝典’ -r yg xln
• mail 收信操作:mail [-u 用户名]
[root@server0 ~]# mail -u xln
N 1 [email protected] Thu Aug 15 15:33 18/577
& 1 #输入邮件的编号
###################################
补充内容:Samba共享(Windows与Linux之间的共享目录)
反向编译 smb协议(Windows与Linux之间共享协议)
虚拟机server:实现Samba共享
1.安装samba软件包
[root@server0 ~]# yum -y install samba
2.创建专门用于samba共享验证的用户:samba帐户
1)基于本地用户 2)密码由samba程序独立管理
[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帐户
3.创建共享的目录
[root@server0 ~]# mkdir /public
[root@server0 ~]# echo haha > /public/xixi.txt
[root@server0 ~]# ls /public/
4.修改samba主配置文件
[root@server0 ~]# vim /etc/samba/smb.conf
命令模式 G(大写)到全文的末行
[abc] #设置共享名
path = /public #设置实际共享的路径
5.重起smb服务
[root@server0 ~]# systemctl restart smb
6.SELinux 布尔值策略(功能的开关 )
]# getsebool -a | grep samba #查看所有SELinux布尔值
]# setsebool samba_export_all_ro on #修改SELinux布尔值
]# getsebool -a | grep samba
虚拟机desktop:访问Samba共享
1.安装客户端软件,支持Samba共享挂载(支持cifs文件系统)
[root@desktop0 ~]# yum -y install cifs-utils
2.挂载访问
格式:
mount -o user=用户,pass=密码 //对方的IP地址/共享名 挂载点
]# mount -o user=harry,pass=123 //172.25.0.11/abc /mnt
]# df -h
3.修改/etc/fstab文件实现开机自动挂载
[root@desktop0 /]# vim /etc/fstab
//172.25.0.11/abc /mnt cifs
defaults,user=harry,pass=123,_netdev 0 0
[root@desktop0 /]# umount /mnt/
[root@desktop0 /]# df -h
[root@desktop0 /]# mount -a
[root@desktop0 /]# df -h
##################################
培训开班第十七天
搭建新的教学环境
一 构建两台新的虚拟机
1.真机上运行,生成两台新的虚拟机
[student@room9pc01 ~]$ clone-vm7
Enter VM number: 4
[student@room9pc01 ~]$ clone-vm7
Enter VM number: 5
2.新生成的虚拟机,root的密码为123456
1)查看系统版本为:CentOS 7.5
虚拟机A:
1.配置永久主机名为:svr7.tedu.cn
[root@localhost ~]# echo ‘svr7.tedu.cn’ > /etc/hostname
[root@localhost ~]# hostname svr7.tedu.cn
[root@localhost ~]# hostname
[root@localhost ~]# exit
2.配置eth0的IP地址:192.168.4.7/24
[root@svr7 ~]# nmcli connection modify eth0
ipv4.method manual ipv4.addresses 192.168.4.7/24
connection.autoconnect yes
[root@svr7 ~]# nmcli connection up eth0
虚拟机B:
1.配置永久主机名为:pc207.tedu.cn
2.配置eth0的IP地址:192.168.4.207/24
二 实现真机远程管理虚拟机A与虚拟机B
为真机设置远程管理的别名
[student@room9pc01 ~]$ vim /home/student/.bashrc
alias goa=‘ssh -X [email protected]’
alias gob=‘ssh -X [email protected]’
真机在开一个新的终端,进行测试
三 为虚拟机A与虚拟机B搭建Yum仓库
发布网络Yum源
服务端:真机构建FTP服务,共享光盘所有内容
1.安装vsftpd软件包
]$ rpm -q vsftpd
]$ systemctl status vsftpd #查看服务状态
默认共享数据路径:/var/ftp
]$ mkdir /var/ftp/centos-1804/
]$ mount /iso/CentOS7-1804.iso /var/ftp/centos-1804/
]$ ls /var/ftp/centos-1804/ #查看是否有光盘所有的内容
2.开机自动挂载/etc/fstab
[student@room9pc01 ~]$ ls -l /iso #查看快捷方式的详细信息
[student@room9pc01 ~]$ 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
####################################################
客户端:虚拟机A与虚拟机B
[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 #测试安装软件包
##################################################
目录结构
[root@svr7 ~]# man hier
• 常见一级目录的用途
/boot 存放系统引导必需的文件,包括内核、启动配置
/bin、/sbin 存放各种命令程序
/dev 存放硬盘、键盘、鼠标、光驱等各种设备文件
/etc 存放Linux系统及各种程序的配置文件
/root、/home/用户名 分别是管理员root、普通用户的默认家目录
/var 存放日志文件、邮箱目录等经常变化的文件
/proc 存放内存中的映射数据,不占用磁盘
/tmp 存放系统运行过程中使用的一些临时文件
权限的数值表示
• 权限的数值化
– 基本权限:r = 4,w = 2,x = 1
– 附加权限:SUID = 4,SGID = 2,Sticky Bit = 1
• 采用数值形式设置权限
– chmod [-R] nnn 文档…
– chmod [-R] xnnn 文档…
[root@svr7 ~]# mkdir /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 750 /nsd01
[root@svr7 ~]# ls -ld /nsd01
[root@svr7 ~]# chmod 755 /nsd01
[root@svr7 ~]# ls -ld /nsd01
[root@svr7 ~]# chmod 755 /nsd01
[root@svr7 ~]# ls -ld /nsd01
drwxr-xr-x 2 root root 6 8月 16 11:17 /nsd01
[root@svr7 ~]# chmod 2755 /nsd01
[root@svr7 ~]# ls -ld /nsd01
drwxr-sr-x 2 root root 6 8月 16 11:17 /nsd01
[root@svr7 ~]# chmod 3755 /nsd01
[root@svr7 ~]# ls -ld /nsd01
##################################################
历史命令
• 管理/调用曾经执行过的命令
– history:查看历史命令列表
– history -c:清空历史命令
– !n:执行命令历史中的第n条命令
– !str:执行最近一次以str开头的历史命令
• 调整历史命令的数量
[root@svr7 ~]# vim /etc/profile
HISTSIZE=1000 //默认记录1000条
[root@svr7 ~]# history -c #清除所有历史命令
[root@svr7 ~]# history #显示所有历史命令
1 history
[root@svr7 ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
[root@svr7 ~]# ls /root/
Desktop
[root@svr7 ~]# ls /opt/
[root@svr7 ~]# cat /etc/hosts
[root@svr7 ~]# history
[root@svr7 ~]# !cat #执行最近一条以cat开头的历史命令
实用小命令工具
• du,统计文件的占用空间
– du [选项]… [目录或文件]…
– -s:只统计每个参数所占用的总空间大小
– -h:提供易读容量单位(K、M等)
[root@svr7 ~]# du -sh /root/
[root@svr7 ~]# du -sh /etc/
[root@svr7 ~]# du -sh /boot/ /opt/ /var
[root@svr7 ~]# du -sh /
• 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-08-16
[root@svr7 ~]# date +%Y #只显示年
[root@svr7 ~]# date +%m #只显示月
[root@svr7 ~]# date +%d #只显示日
[root@svr7 ~]# date +%R #只显示 时:分
[root@svr7 ~]# date +%H #只显示 时
[root@svr7 ~]# date +%M #只显示 分
###############################################制作快捷方式:软连接
若原始文件或目录被删除,连接文件将失效
软连接可存放在不同分区/文件系统
格式: ln -s /路径/源数据 /路径/快捷方式名称
[root@svr7 ~]# cat /etc/redhat-release
[root@svr7 ~]# ln -s /etc/redhat-release /
[root@svr7 ~]# ls /
[root@svr7 ~]# ls -l /redhat-release
[root@svr7 ~]# cat /redhat-release
[root@svr7 ~]# ln -s /etc/redhat-release /abc
[root@svr7 ~]# ls /
[root@svr7 ~]# ls -l /abc
[root@svr7 ~]# cat /abc
制作快捷方式:硬连接
若原始文件被删除,连接文件仍可用
硬连接与原始文件必须在同一分区/文件系统
格式: ln /路径/源数据 /路径/快捷方式名称
[root@svr7 ~]# echo 123 > /opt/A
[root@svr7 ~]# cat /opt/A
[root@svr7 ~]# ln -s /opt/A /opt/B #制作软连接
[root@svr7 ~]# ls /opt/
[root@svr7 ~]# ln /opt/A /opt/C #制作硬连接
[root@svr7 ~]# ls /opt/
[root@svr7 ~]# cat /opt/B
[root@svr7 ~]# cat /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
###################################################
获取命令帮助
方式:利用 --help 选项
方式:利用 man 命令
• man,格式化手册阅读工具
– 按上、下 、 PgUp 、PgDn 键滚动及翻页
– 按 q 键退出
– 按 / 键向后查找关键词(n、N切换)
#数字5表示的帮助类型,配置文件类型帮助信息
[root@svr7 ~]# man 5 passwd
#################################################
zip归档工具(跨平台的压缩工具,Windows与Linux)
制作.zip压缩包
– zip [-r] 备份文件.zip 被归档的文档…
[root@svr7 ~]# yum -y install zip
[root@svr7 ~]# zip -r /opt/test.zip /etc/passwd /home
[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 ~]# mkdir /nsd02
[root@svr7 ~]# unzip /opt/test.zip -d /nsd02
[root@svr7 ~]# ls /nsd02
[root@svr7 ~]# mkdir /nsd03
[root@svr7 ~]# unzip /opt/nsd.zip -d /nsd03
[root@svr7 ~]# ls /nsd03
###################################################
自定义Yum仓库
1.具备从互联网下载的软件包
真机上传递tools.tar.gz 到虚拟机A
]$ scp /linux-soft/01/tools.tar.gz [email protected]:/root/
2.虚拟机A验证,并进行解包
]# ls /root
]# tar -xf /root/tools.tar.gz -C /
]# ls /
]# ls /tools/
inotify-tools-3.13.tar.gz other
]# ls /tools/other/
3.生成仓库数据文件
[root@svr7 ~]# yum -y install createrepo
[root@svr7 ~]# createrepo /tools/other/
[root@svr7 ~]# ls /tools/other/
4.修改客户端配置文件指定仓库的位置
[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=haha
baseurl=file:///tools/other #指定本地为Yum服务端
enabled=1
gpgcheck=0
[root@svr7 ~]# yum repolist
[root@svr7 ~]# yum -y install sl
[root@svr7 ~]# yum -y install cmatrix
[root@svr7 ~]# yum -y install oneko
[root@svr7 ~]# oneko & #转入后台运行
[root@svr7 ~]# killall oneko #杀死所有oneko程序
####################################################
vim编辑技巧
命令模式操作
[root@svr7 ~]# cp /etc/passwd /opt/p.txt
[root@svr7 ~]# vim /opt/p.txt
光标跳转
Home 键 或 ^或数字 0 跳转到行首
End 键 或“KaTeX parse error: Expected 'EOF', got '#' at position 96: …制/粘贴/删除 复制 yy、#̲yy 复制光标处的一行、#…或D(大写) 从光标处删除到行尾
u 撤销
C(大写) 从光标处删除到行尾,进入插入模式
查找/撤销/保存
/word 向后查找字符串“word”
n、N 跳至后/前一个结果
u 撤销最近的一次操作
U 撤销对光标所在的当前行所有修改
Ctrl + r 取消前一次撤销操作(反撤销)
ZZ(大写) 保存修改并退出
末行模式操作
:r /etc/filesystems 读入其他文件内容
[root@svr7 ~]# echo 123 > /opt/a.txt
[root@svr7 ~]# echo abc > /opt/b.txt
[root@svr7 ~]# vim /opt/a.txt
:r /opt/b.txt #读入/opt/b.txt文件内容到当前文件中
:r /etc/passwd #读入/etc/passwd文件内容到当前文件中
字符串替换
/old/new 替换当前行第一个“old”
/old/new/g 替换当前行所有的“old”
:n,m s/old/new/g 替换第n-m行所有的“old”
:% s/old/new/g 替换文件内所有的“old”
开关参数的控制
:set nu或nonu 显示/不显示行号
:set ai或noai 启用/关闭自动缩进
##################################################
源码编译安装
rpm包: yum rpm -ivh
源码包:-----gcc make-----》可以执行程序--------》运行安装
• 主要优点
– 获得软件的最新版,及时修复bug
– 软件功能可按需选择/定制,有更多软件可供选择
– 源码包适用各种平台
步骤1:安装gcc与make两个开发工具
[root@svr7 ~]# yum -y install gcc make
[root@svr7 ~]# rpm -q gcc
gcc-4.8.5-28.el7.x86_64
[root@svr7 ~]# rpm -q make
make-3.82-23.el7.x86_64
步骤2: tar解包,释放源代码至指定目录
]# tar -xf /tools/inotify-tools-3.13.tar.gz -C /
]# ls /
]# ls /in(tab)
步骤3: ./configure 配置,指定安装目录/功能模块等选项
作用:检测当前系统是否安装gcc
–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.
步骤4: make 编译,生成可执行的二进制程序文件
]# cd /inotify-tools-3.13/
]# make
步骤5: make install 安装,将编译好的文件复制到安装目录
]# cd /inotify-tools-3.13/
]# make install
]# ls /opt/
]# ls /opt/myrpm/
bin include lib share
]# ls /opt/myrpm/bin/ #查看安装完成的程序
###############################################
开班培训第十九天
一 图形建立一个新虚拟机nsd01,安装CentOS 7.5操作系统
1.采用光盘进行安装
2.内存为:2048M
3.磁盘空间:9G
4.虚拟机名:nsd01
5.网络类型:private1
6.软件包选择:带GUI的服务器
7.分区:自动分区
8.设置root的密码:1
9.创建普通用户:lisi 设置密码为:1
########################################
虚拟化概述
• virtualization 资源管理
– x个物理资源 --> y个逻辑资源
– 实现程度:完全、部分、硬件辅助(CPU)
查看CPU是否支持虚拟化功能----》进入BIOS开启virtualization功能
[student@room9pc01 ~]$ lscpu | grep vmx
########################################
虚拟机nsd01的配置
1.配置主机名:kvm.tedu.cn
[root@localhost ~]# echo ‘kvm.tedu.cn’ > /etc/hostname
[root@localhost ~]# hostname kvm.tedu.cn
2.防火墙默认区域设置为trusted
[root@kvm ~]# firewall-cmd --set-default-zone=trusted
3.设置SELinux为宽松模式
[root@kvm ~]# setenforce 0
[root@kvm ~]# getenforce
[root@kvm ~]# vim /etc/selinux/config
SELINUX=permissive
4.设置eth0网卡的IP地址:192.168.4.100/24
[root@kvm ~]# nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.100/24 connection.autoconnect yes
[root@kvm ~]# nmcli connection up eth0
[root@kvm ~]# ifconfig | head -2
5.构建Yum仓库
[root@kvm ~]# cd /etc/yum.repos.d/
[root@kvm yum.repos.d]# mkdir repo
[root@kvm yum.repos.d]# ls
[root@kvm yum.repos.d]# mv *.repo repo
[root@kvm yum.repos.d]# ls
[root@kvm yum.repos.d]# vim dvd.repo
[dvd]
name=haha
baseurl=ftp://192.168.4.254/centos-1804
enbaled=1
gpgcheck=0
[root@kvm yum.repos.d]# yum -y install httpd
########################################
• 虚拟化主要厂商及产品
VMware VMware Workstation、vSphere
Microsoft VirtualPC、Hyper-V
RedHat KVM、RHEV
Citrix Xen
Oracle Oracle VM VirtualBox
########################################
安装虚拟化服务器平台
• 主要软件包
– qemu-kvm:为 kvm 提供底层仿真支持
– libvirt-daemon:libvirtd 守护进程,管理虚拟机
– libvirt-client:用户端软件,提供客户端管理命令
– libvirt-daemon-driver-qemu:libvirtd 连接 qemu 的驱动
– virt-manager:图形管理工具
[root@kvm ~]# yum -y install qemu-kvm
[root@kvm ~]# yum -y install libvirt-daemon
[root@kvm ~]# yum -y install libvirt-client
[root@kvm ~]# yum -y install libvirt-daemon-driver-qemu
[root@kvm ~]# yum -y install virt-manager
虚拟机化服务:libvirtd #默认服务开机自启动
########################################
virsh命令工具介绍
• 提供管理各虚拟机的命令接口
– 支持交互模式,查看/创建/停止/关闭 … …
– 格式:virsh 控制指令 [虚拟机名称] [参数]
[root@kvmsvr ~]# virsh
欢迎使用 virsh,虚拟化的交互式终端。
输入:‘help’ 来获得命令的帮助信息
‘quit’ 退出
virsh #
查看虚拟化信息
• 查看KVM节点(服务器)信息
– virsh nodeinfo
• 列出虚拟机
– virsh list [–all]
• 查看指定虚拟机的信息
– virsh dominfo 虚拟机名称
将指定的虚拟机设为开机自动运行
– virsh autostart [–disable] 虚拟机名称
]$ virsh autostart nsd01
]$ virsh dominfo nsd01
]$ virsh autostart --disable nsd01 #设置开机不自启
]$ virsh dominfo nsd01
• 运行|重启|关闭指定的虚拟机
– virsh start|reboot|shutdown 虚拟机名称
• 强制关闭指定的虚拟机
– virsh destroy 虚拟机名称
########################################
一台KVM虚拟机的构成
– xml配置文件(虚拟机描述文件):定义虚拟机的名称、UUID、CPU、内存、虚拟磁盘、网卡等各种参数设置
]$ ls /etc/libvirt/qemu
]$ virsh dumpxml nsd01 #查看虚拟机xml文件内容
]$ virsh dumpxml A #查看虚拟机xml文件内容
– 磁盘镜像文件:保存虚拟机的操作系统及文档数据,镜像路径取决于xml配置文件中的定义
[student@room9pc01 ~]$ ls /var/lib/libvirt/images/
########################################
命令行手动创建虚拟机
1.创建新的磁盘镜像文件
]$ cd /var/lib/libvirt/images/ #存放磁盘镜像文件目录
]$ cp .node_base.qcow2 nsd02.img
]$ du -sh nsd02.img
2.创建虚拟机xml配置文件
]$ virsh dumpxml nsd01 > /etc/libvirt/qemu/nsd02.xml
]$ vim /etc/libvirt/qemu/nsd02.xml
1)虚拟机名字nsd02
2)删除UUID整行内容,uuidgen可以产生uuid
3)虚拟机磁盘文件路径
3.导入虚拟机信息
]$ virsh list --all
]$ virsh define /etc/libvirt/qemu/nsd02.xml #导入虚拟机
]$ virsh list --all
]$ virsh start nsd02 #虚拟机开机
]$ virt-manager #打开虚拟系统管理器
########################################
命令行手动创建虚拟机
1.手动新建磁盘镜像文件
]$ cd /var/lib/libvirt/images/
]$ cp .node_base.qcow2 /tmp/nsd03.img
]$ du -sh /tmp/nsd03.img
2.创建虚拟机xml配置文件
]$ cd /home/student/
]$ mkdir nsdfile
]$ virsh dumpxml nsd01 > nsdfile/nsd03.xml
]$ vim nsdfile/nsd03.xml
1)虚拟机名字nsd03
2)删除UUID整行内容,uuidgen可以产生uuid
3)虚拟机磁盘文件路径
1.手动创建虚拟机磁盘镜像文件
]$ cp /var/lib/libvirt/images/.node_base.qcow2 /var/lib/libvirt/images/nsd04.img
]$ du -sh /var/lib/libvirt/images/nsd04.img
2.创建虚拟机xml配置文件
]$ virsh edit nsd01
1)虚拟机名字nsd04
2)删除UUID整行内容,uuidgen可以产生uuid
3)虚拟机磁盘文件路径
########################################
命令行删除虚拟机
1.关闭虚拟机nsd04
[student@room9pc01 ~]$ virsh destroy nsd04 #强制关闭虚拟机
域 nsd04 被删除
[student@room9pc01 ~]$ virsh list --all
2.取消虚拟机nsd04的定义
[student@room9pc01 ~]$ virsh undefine nsd04
域 nsd04 已经被取消定义
[student@room9pc01 ~]$ virsh list --all
[student@room9pc01 ~]$ ls /etc/libvirt/qemu
3.手动删除虚拟机nsd04的磁盘镜像文件
]$ ls /var/lib/libvirt/images/nsd04.img
]$ rm -rf /var/lib/libvirt/images/nsd04.img
########################################
磁盘镜像文件的格式
特点\类型 RAW QCOW2
KVM默认 否 是
I/O效率 高 较高
占用空间 大 小
压缩 不支持 支持
后端盘(原始盘)复用 不支持 支持
快照 不支持 支持
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 abc01.img 5G #依据原始盘生成前端盘
]$ qemu-img info abc01.img #查看前端盘信息
file format: qcow2 #文件格式
virtual size: 5.0G (5368709120 bytes) #虚拟空间大小
disk size: 196K #实际占用空间大小
cluster_size: 65536
backing file: .node_base.qcow2 #原始盘名称
2.建立虚拟机xml配置文件
]$ virsh dumpxml nsd01 > /home/student/nsdfile/abc01.xml
]$ vim /home/student/nsdfile/abc01.xml
1)虚拟机名字abc01
2)删除UUID整行内容,uuidgen可以产生uuid
3)虚拟机磁盘文件路径
3.导入虚拟机信息
]$ virsh define /home/student/nsdfile/abc01.xml
]$ virsh start abc01
]$ virt-manager
#########################################
培训开班第二十天
DNS服务基础
• DNS服务器的功能
– 正向解析:根据注册的域名查找其对应的IP地址
– 反向解析:根据IP地址查找对应的注册域名,不常用
DNS服务器分类:
根域名服务器 一级DNS服务器 二级DNS服务器 三级DNS服务器
DNS的域名的分布式结构:树型结构
1)所有的域名都必须以点作为结尾,所有的浏览器自动补全最后的点
www.qq.com. www.baidu.com.
根域名 : . 点
一级域名: .cn .us .tw .hk .jp .kr …
二级域名: .com.cn .net.cn .org.cn .tedu.cn …
三级域名: dc.com.cn tc.com.cn dcc.com.cn tcc.com.cn
完整的主机名(FQDN):主机头部+合格的域名
• Full Qualified Domain Name,完全合格主机名
#########################################
bind-9.9.4-29.el7.x86_64 //域名服务包
bind-chroot-9.9.4-29.el7.x86_64 //提供虚拟根支持(牢笼政策)
– 运行时的虚拟根环境:/var/named/chroot/
– 系统服务:named
– 默认端口:TCP/UDP 53
• 主配置文件:/etc/named.conf #设置本DNS服务器负责解析的域名
tedu.cn
• 地址库文件:/var/named/ #完整的主机名与IP地址的对应关系
构建DNS服务器
虚拟机A:
1.安装软件包
[root@svr7 ~]# yum -y install bind bind-chroot
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
保证named用户对该文件具备读取权限
所有的域名都必须以点结尾
如果没有以点作为结尾,那么默认补全本地址库负责的域名
• NS,域名服务器(Name Server)声明记录
• A,地址(Address)记录,仅用于正向解析区域
]# 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
ftp A 2.2.2.2
]# systemctl restart named
虚拟机B:客户端
1.指定DNS服务器地址,测试解析
]# echo nameserver 192.168.4.7 > /etc/resolv.conf
]# nslookup www.tedu.cn
]# nslookup ftp.tedu.cn
#########################################
多区域的DNS解析
1.修改主配置文件,添加zone的配置
[root@svr7 ~]# vim /etc/named.conf
…
zone “qq.com” IN { #负责解析qq.com域名
type master; #权威主服务器
file “qq.com.zone”; #地址库文件名
};
2.建立新的地址库文件
]# cd /var/named/
]# cp -p tedu.cn.zone qq.com.zone
]# vim qq.com.zone
qq.com. NS svr7
svr7 A 192.168.4.7
www A 3.3.3.3
ftp A 4.4.4.4
[root@svr7 named]# !sys
systemctl restart named
########################################
主机名映射文件:/etc/hosts #直接起到DNS域名解析的作用
只能为本机提供解析
/etc/hosts最高优先级
[root@svr7 /]# vim /etc/hosts
…
192.168.4.110 www.360.com
[root@svr7 /]# ping www.360.com #测试是否能够解析
Nginx的Web服务器,虚拟Web主机 基于域名 基于端口 基于IP地址
########################################
特殊解析记录
1.DNS轮询,基于DNS的站点负载均衡
– 一个域名 —> 多个不同IP地址
[root@svr7 /]# vim /var/named/tedu.cn.zone
tedu.cn. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.1
www A 192.168.4.2
www A 192.168.4.3
ftp A 2.2.2.2
[root@svr7 /]# !sys
systemctl restart named
[root@pc207 ~]# ping www.tedu.cn
[root@pc207 ~]# ping www.tedu.cn
[root@pc207 ~]# ping www.tedu.cn
2.泛域名解析
[root@svr7 /]# vim /var/named/tedu.cn.zone
tedu.cn. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.1
www A 192.168.4.2
www A 192.168.4.3
ftp A 2.2.2.2
A 1.2.3.4
[root@svr7 /]# systemctl restart named
虚拟机B:测试验证
[root@pc207 ~]# nslookup wwww.tedu.cn
[root@pc207 ~]# nslookup hahaxixi.tedu.cn
3.有规律的泛域名解析
pc1.tedu.cn -----> 192.168.10.1
pc2.tedu.cn -----> 192.168.10.2
pc3.tedu.cn -----> 192.168.10.3
…
pc30.tedu.cn -----> 192.168.10.30
内置函数: $GENERATE 制造连续的数字
$GENERATE 起始点-结束点 # $符号代表制造出的连续数字
[root@svr7 /]# vim /var/named/tedu.cn.zone
G E N E R A T E 1 − 30 p c GENERATE 1-30 pc GENERATE1−30pc A 192.168.10.$
[root@svr7 /]# !sys
systemctl restart named
虚拟机B:测试验证
[root@pc207 ~]# nslookup pc1.tedu.cn
[root@pc207 ~]# nslookup pc20.tedu.cn
[root@pc207 ~]# nslookup pc30.tedu.cn
4.解析记录别名
虚拟机A:
[root@svr7 /]# vim /var/named/tedu.cn.zone
vip CNAME ftp #vip的解析结果与ftp一致
[root@svr7 /]# !sys
systemctl restart named
虚拟机B:测试验证
[root@pc207 ~]# nslookup vip.tedu.cn
#########################################DNS的资源解析记录那些?
NS解析记录:DNS服务器声明记录
A解析记录:正向地址解析记录
CNAME解析记录:解析记录的别名
#########################################真机运行clone-vm7快速产生一台虚拟机
虚拟机C
1.配置eth0的IP地址:192.168.4.10/24
2.配置主机名:svr10.tedu.cn
3.配置Yum仓库,以真机提供FTP作为服务端
4.安装httpd软件包进行测试
#########################################
DNS子域授权
父域:www.qq.com www.tedu.cn
子域:www.bj.qq.com www.bj.tedu.cn
qq.com域名有虚拟机A负责解析
bj.qq.com域名有虚拟机B负责解析
递归解析:客户端发送请求给主DNS服务器,主DNS服务器与其他DNS服务器交互最终,将解析结果带回来的过程
迭代解析:主DNS服务器与其他DNS服务器交互
##################################################
DNS主/从结构:备份 解决单点故障
以qq.com域名为例
虚拟机A为主DNS服务器(首选DNS服务器)
虚拟机B为从DNS服务器(备用DNS服务器)
虚拟机A:构建主DNS服务器
1.修改主配置文件,允许虚拟机B进行同步数据
[root@svr7 /]# man named.conf #查看man帮助信息
[root@svr7 /]# vim /etc/named.conf
options {
directory “/var/named”;
allow-transfer { 192.168.4.207; }; #允许从服务器同步数据
};
zone “tedu.cn” IN {
type master;
file “tedu.cn.zone”;
};
zone “qq.com” IN {
type master;
file “qq.com.zone”;
};
2.在地址库文件中,声明从服务器的IP地址
[root@svr7 /]# vim /var/named/qq.com.zone
qq.com. NS svr7 #声明DNS服务器
qq.com. NS pc207 #声明DNS服务器
svr7 A 192.168.4.7
pc207 A 192.168.4.207
www A 3.3.3.10
ftp A 4.4.4.4
3.重起named服务
[root@svr7 /]# systemctl restart named
虚拟机B构建为从DNS服务器(备用DNS服务器)
地址库文件不需要自己创建,地址库文件是从主DNS服务器进行同步
1.安装软件包bind bind-chroot
[root@pc207 /]# yum -y install bind bind-chroot
2.修改主配置文件
[root@pc207 /]# vim /etc/named.conf
options {
directory “/var/named”;
};
zone “qq.com” IN {
type slave; #类型为从服务器
file “slaves/qq.com.slave”;
masters { 192.168.4.7; }; #指定主服务器位置
};
#将备份数据起名为qq.com.slave,存放在/var/named/slaves
#slaves目录默认named用户对其拥有rwx权限
[root@pc207 /]# ls /var/named/slaves/
[root@pc207 /]# systemctl restart named
[root@pc207 /]# ls /var/named/slaves/ #验证同步数据
qq.com.slave
[root@pc207 /]#
虚拟机C:客户端验证
]# echo nameserver 192.168.4.7 > /etc/resolv.conf
]# echo nameserver 192.168.4.207 >> /etc/resolv.conf
]# cat /etc/resolv.conf
nameserver 192.168.4.7 #首选DNS服务器
nameserver 192.168.4.207 #备用DNS服务器
]# nslookup www.qq.com
#########################################
数据更新,一定要在主DNS服务器完成
虚拟机A:
[root@svr7 /]# vim /var/named/qq.com.zone
2019082001 ; serial #数据的版本号格式:年月日次数 10位组成
1D ; refresh #主与从同步数据时间
1H ; retry #失连后同步数据的时间
1W ; expire #完全失效时间
3H ) ; minimum #无效记录 记忆时间
每次数据更新,数据的版本号必须要变大
数据的版本号:主与从数据同步时,唯一标准
#######################################
培训开班第二十一天
构建DNS服务器
虚拟机A:
1.修改主配置文件
[root@svr7 ~]# vim /etc/named.conf
options {
directory “/var/named”; #设置地址库文件存放路径
};
zone “sina.com” IN { #设置负责解析的域名
type master; #本服务器为权威DNS
file “sina.com.zone”; #设置地址库文件名
};
2.建立新的地址库文件sina.com.zone
]# cd /var/named/
]# cp -p named.localhost sina.com.zone #-p保持权限不变
]# vim sina.com.zone
sina.com. NS svr7 #声明负责域名解析的DNS服务器
svr7 A 192.168.4.7 #声明DNS服务器具体的IP地址
www A 40.50.60.70
]# systemctl restart named
虚拟机B:客户端
1.指定DNS服务器地址,测试解析
]# echo nameserver 192.168.4.7 > /etc/resolv.conf
]# nslookup www.sina.com
####################################################
缓存DNS,缓存解析结果,加速解析
环境准备:
虚拟机A:192.168.4.7/24 真DNS服务器
虚拟机B:192.168.4.207/24 构建缓存DNS服务器
虚拟机C:192.168.4.10/24 客户端测试
虚拟机B:构建缓存DNS服务器
[root@pc207 /]# vim /etc/named.conf
options {
directory “/var/named”;
forwarders { 192.168.4.7; }; #转发给真DNS服务器
};
[root@pc207 /]# systemctl restart named
虚拟机C: 客户端测试
]# echo nameserver 192.168.4.207 > /etc/resolv.conf
]# cat /etc/resolv.conf
]# nslookup www.sina.com
#############################################Split分离解析(视图解析)
什么是分离解析
• 当收到客户机的DNS查询请求的时候
– 能够区分客户机的来源地址
– 为不同类别的客户机提供不同的解析结果(IP地址)
– 不同客户端解析同一个域名,得到的解析结果不同
– 为客户端提供网络中最近的服务器
BIND的view视图
• 根据源地址集合将客户机分类
– 不同客户机获得不同结果(待遇有差别)
– 分类要合理,所有的客户端到要找到自己的分类
– 由上到下进行依次匹配, 匹配及停止
view “vip” {
match-clients { 192.168.4.207; }
zone “12306.cn” IN {
… 地址库1;
}; };
view "abc" {
match-clients { 192.168.4.7; }
zone "12306.cn" IN {
...... 地址库2;
}; };
view "other" {
match-clients { any; }
zone "12306.cn" IN {
...... 地址库3;
}; };
案例需求及要点
• 环境及需求
– 权威DNS:svr7.tedu.cn 192.168.4.7
– 负责区域:tedu.cn
– A记录分离解析 —— 以 www.tedu.cn 为例
客户机来自 解析结果
192.168.4.207、192.168.7.0/24 -------》192.168.4.100
其他地址-------》 1.2.3.4
虚拟机A:
1.修改主配置文件
[root@svr7 /]# vim /etc/named.conf
options {
directory “/var/named”;
};
view “nsd” {
match-clients { 192.168.4.207; 192.168.7.0/24; }; #匹配客户端地址
zone “tedu.cn” IN {
type master;
file “tedu.cn.zone”; —》写入解析结果为192.168.4.100
};
};
view “other” {
match-clients { any; }; #匹配客户端地址
zone “tedu.cn” IN {
type master;
file “tedu.cn.other”; —》写入解析结果为1.2.3.4
};
};
2.建立地址库文件tedu.cn.zone与tedu.cn.other写入不同的解析结果
#############################################
多区域的分离解析
– 每个view中,zone的分类以及负责的域名都要保持一致
• 环境及需求
– 权威DNS:虚拟机A 192.168.4.7
– 负责区域:tedu.cn sina.com
– A记录分离解析 —— 以 www.tedu.cn www.sina.com 为例
客户机来自 解析结果
192.168.4.207、192.168.7.0/24 --tedu.cn–》192.168.4.100
192.168.4.207、192.168.7.0/24 --sina.com–》192.168.4.200
其他地址—tedu.cn----》 1.2.3.4
其他地址—sina.com----》 10.20.30.40
[root@svr7 /]# vim /etc/named.conf
options {
directory “/var/named”;
};
view “nsd” {
match-clients { 192.168.4.207; 192.168.7.0/24; };
zone “tedu.cn” IN {
type master;
file “tedu.cn.zone”; —>192.168.4.100
};
zone “sina.com” IN {
type master;
file “sina.com.zone”; —>192.168.4.200
};
};
view “other” {
match-clients { any; };
zone “tedu.cn” IN {
type master;
file “tedu.cn.other”; —>1.2.3.4
};
zone “sina.com” IN {
type master;
file “sina.com.other”; —>10.20.30.40
};
};
2.建立相应的地址库文件,写入不同的解析结果
tedu.cn.zone —> 192.168.4.100
sina.com.zone —> 192.168.4.200
tedu.cn.other —> 1.2.3.4
sina.com.other —> 10.20.30.40
#############################################
acl地址列表(类似于变量)
• 为大批量的客户机地址建立列表
acl dc { 192.168.4.207; 192.168.7.0/24; };
view “nsd” {
match-clients { dc; };
…
测试DNS解析命令:dig
[root@pc207 /]# dig www.sina.com
#############################################
RAID磁盘阵列
• 廉价冗余磁盘阵列
– Redundant Arrays of Inexpensive Disks
– 通过硬件/软件技术,将多个较小/低速的磁盘整合成一个大磁盘
– 阵列的价值:提升I/O效率、硬件级别的数据冗余
– 不同RAID级别的功能、特性各不相同
• RAID 0,条带模式
– 同一个文档分散存放在不同磁盘
– 并行写入以提高效率
– 至少需要两块磁盘
• RAID 1,镜像模式
– 一个文档复制成多份,分别写入不同磁盘
– 多份拷贝提高可靠性,效率无提升
– 至少需要两块磁盘
• RAID5,高性价比模式
– 相当于RAID0和RAID1的折中方案
– 需要至少一块磁盘的容量来存放校验数据
– 至少需要三块磁盘
• RAID6,高性价比/可靠模式
– 相当于扩展的RAID5阵列,提供2份独立校验方案
– 需要至少两块磁盘的容量来存放校验数据
– 至少需要四块磁盘
• RAID 0+1/RAID 1+0(RAID 10)
– 整合RAID 0、RAID 1的优势
– 并行存取提高效率、镜像写入提高可靠性
– 至少需要四块磁盘
#############################################
进程管理
程序:静态的代码 磁盘空间
进程:动态执行的代码 CPU与内存的资源
父进程与子进程 树型结构 僵尸进程 孤儿进程
进程编号: PID
#############################################
查看进程
查看进程树
• pstree — Processes Tree
– 格式:pstree [选项] [PID或用户名]
• 常用命令选项
– -a:显示完整的命令行
– -p:列出对应PID编号
systemd:所有进程的父进程 上帝进程
[root@svr7 ~]# pstree #查看正在运行的所有进程
[root@svr7 ~]# pstree lisi #查看用户lisi运行的进程
[root@svr7 ~]# pstree -p lisi
[root@svr7 ~]# pstree -ap lisi
查看进程快照
• ps — Processes Snapshot
– 格式:ps [选项]…
• 常用命令选项
– aux:显示当前终端所有进程(a)、当前用户在所有
终端下的进程(x), 以用户格式输出(u)
– -elf:显示系统内所有进程(-e)、以长格式输出(-l)
信息、包括最完整的进程信息(-f)
• ps aux 操作:信息详细
– 列出正在运行的所有进程
用户 进程ID %CPU %内存 虚拟内存 固定内存 终端 状态 起始时间 CPU时间 程序指令
• ps -elf 操作:显示该进程的父进程的PID值
– 列出正在运行的所有进程
PPID为父进程的PID值
进程动态排名
• top 交互式工具
– 格式:top [-d 刷新秒数] [-U 用户名]
按P(大写) 进行CPU的排序
按M(大写) 进行内存的排序
检索进程
• pgrep — Process Grep
– 用途:pgrep [选项]… 查询条件
• 常用命令选项
– -l:输出进程名,而不仅仅是 PID
– -U:检索指定用户的进程
– -x:精确匹配完整的进程名
[root@svr7 ~]# pgrep a
[root@svr7 ~]# pgrep -l a
[root@svr7 ~]# pgrep -l log
[root@svr7 ~]# pstree -ap lisi
[root@svr7 ~]# pgrep -lU lisi
#############################################
控制进程
• 后台启动
– 在命令行末尾添加“&”符号,不占用当前终端
• Ctrl + z 组合键
– 挂起当前进程(暂停并转入后台)
• jobs 命令
– 查看后台任务列表
• fg 命令
– 将后台任务恢复到前台运行
• bg 命令
– 激活后台被挂起的任务
[root@svr7 ~]# sleep 1000 & #正在运行放入后台
[root@svr7 ~]# jobs #查看后台进程信息
[root@svr7 ~]# sleep 800
^Z #按Ctrl+z暂停放入后台
[2]+ 已停止 sleep 800
[root@svr7 ~]# bg 2 #激活后台编号为2的进程
[root@svr7 ~]# jobs
[root@svr7 ~]# fg 2 #将后台编号为2的进程恢复到前台
sleep 800
^C #按Ctrl+c结束进程的运行
[root@svr7 ~]# jobs
[root@svr7 ~]# fg 1 #将后台编号为2的进程恢复到前台
sleep 1000
^C #按Ctrl+c结束进程的运行
[root@svr7 ~]# jobs
#############################################
杀死进程
• 干掉进程的不同方法
– Ctrl+c 组合键,中断当前命令程序
– kill [-9] PID… 、kill [-9] %后台任务编号
– killall [-9] 进程名…
– pkill 查找条件,模糊查杀
[root@svr7 ~]# sleep 1000 &
[root@svr7 ~]# sleep 1000 &
[root@svr7 ~]# sleep 1000 &
[root@svr7 ~]# sleep 1000 &
[root@svr7 ~]# jobs -l
[root@svr7 ~]# kill 3512
[root@svr7 ~]# jobs -l
[root@svr7 ~]# kill -9 3517
[root@svr7 ~]# jobs -l
[root@svr7 ~]# killall sleep
[root@svr7 ~]# jobs -l
强制踢出一个用户(杀死一个用户开启的所有进程)
[root@svr7 ~]# killall -9 -u lisi
#############################################
日志管理
日志的功能
• 系统和程序的“日记本”
– 记录系统、程序运行中发生的各种事件
– 通过查看日志,了解及排除故障
– 信息安全控制的依据
内核及系统日志
• 由系统服务rsyslog统一记录/管理
– 日志消息采用文本格式
– 主要记录事件发生的时间、主机、进程、内容
• 常见的日志文件
/var/log/messages 记录内核消息、各种服务的公共消息
/var/log/dmesg 记录系统启动过程的各种消息
/var/log/cron 记录与cron计划任务相关的消息
/var/log/maillog 记录邮件收发相关的消息
/var/log/secure 记录与访问限制相关的安全消息
日志分析
• 通用分析工具
– tail、tailf、less、grep等文本浏览/检索命令
tailf:实时跟踪日志消息
– awk、sed等格式化过滤工具
用户登录分析
• users、who、w 命令
– 查看已登录的用户信息,详细度不同
pts:图形命令行终端
• last、lastb 命令
– 查看最近登录成功/失败的用户信息
[root@svr7 ~]# last -2 #最近登陆成功的2条信息
[root@svr7 ~]# lastb -2 #最近登陆失败的2条信息
#############################################
日志消息的优先级
• Linux内核定义的事件紧急程度
– 分为 0~7 共8种优先级别
– 其数值越小,表示对应事件越紧急/重要
0 EMERG(紧急) 会导致主机系统不可用的情况
1 ALERT(警告) 必须马上采取措施解决的问题
2 CRIT(严重) 比较严重的情况
3 ERR(错误) 运行出现错误
4 WARNING(提醒) 可能会影响系统功能的事件
5 NOTICE(注意) 不会影响系统但值得注意
6 INFO(信息) 一般信息
7 DEBUG(调试) 程序或系统调试信息等
使用journalctl工具
• 提取由 systemd-journal 服务搜集的日志
– 主要包括内核/系统日志、服务日志
• 常见用法
– journalctl -u 服务名 [-p 优先级]
– journalctl | grep 关键词
– journalctl -n 消息条数
– journalctl --since=“yyyy-mm-dd HH:MM:SS” –
until=“yyyy-mm-dd HH:MM:SS”
#############################################systemd介绍
init程序的作用
• Linux系统和服务管理器
– 是内核引导之后加载的第一个初始化进程(PID=1)
– 负责掌控整个Linux的运行/服务资源组合
systemd
• 一个更高效的系统&服务管理器
– 开机服务并行启动,各系统服务间的精确依赖
– 配置目录:/etc/systemd/system/
– 服务目录:/lib/systemd/system/
– 主要管理工具:systemctl
对于服务的管理
systemctl restart 服务名 #重起服务
systemctl start 服务名 #开启服务
systemctl stop 服务名 #停止服务
systemctl status 服务名 #查看服务当前的状态
systemctl enable 服务名 #设置服务开机自启动
systemctl disable 服务名 #设置服务不开机自启动
#############################################
RHEL6 运行级别
0:关机
1:单用户模式(基本功能的实现,破解Linux密码)
2:多用户字符界面(不支持网络)
3:多用户字符界面(支持网络)服务器默认的运行级别
4:未定义
5:图形界面
6:重起
切换运行级别:init 5
RHEL7 运行模式
字符模式:multi-user.target
图形模式:graphical.target
[student@room9pc01 ~]$ rht-vmctl reset classroom
[student@room9pc01 ~]$ rht-vmctl reset server
虚拟机server:当前直接切换到字符模式
[root@svr7 /]# systemctl isolate multi-user.target
虚拟机server:当前直接切换到图形模式
[root@svr7 /]# systemctl isolate graphical.target
虚拟机server:查看每次开机默认进入模式
[root@svr7 /]# systemctl get-default
graphical.target
虚拟机server:设置永久策略,每次开机自动进入multi-user.target
#############################################
培训开班第二十二天
综合实验:
虚拟机C:构建Web服务
1.安装httpd软件包
[root@svr10 ~]# yum -y install httpd
2.建立调用配置文件
[root@svr10 ~]# cat /etc/httpd/conf.d/nsd01.conf
ServerName www.qq.com
DocumentRoot /var/www/qq
ServerName www.163.com
DocumentRoot /var/www/163
3.建立网页文件存放的路径
]# mkdir /var/www/qq /var/www/163
]# echo ‘
虚拟机D:构建Web服务
1.安装httpd软件包
[root@pc20 ~]# yum -y install httpd
2.建立调用配置文件
[root@pc20 ~]# cat /etc/httpd/conf.d/nsd01.conf
ServerName www.qq.com
DocumentRoot /var/www/qq
ServerName www.163.com
DocumentRoot /var/www/163
3.建立网页文件存放的路径
]# mkdir /var/www/qq /var/www/163
]# echo ‘
DNS分离解析
客户端为192.168.4.7------》解析结果192.168.4.10
其余的所有客户端-----》解析结果192.168.4.20
虚拟机A:
1.修改主配置文件
[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”;
};
};
2.建立地址库文件
[root@svr7 /]# cd /var/named/
[root@svr7 named]# tail -3 qq.com.zone
qq.com. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.10
[root@svr7 named]# tail -3 qq.com.other
qq.com. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.20
[root@svr7 named]# tail -3 163.com.zone
163.com. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.10
[root@svr7 named]# tail -3 163.com.other
163.com. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.20
[root@svr7 named]# 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服务器
DHCP概述及原理
• Dynamic Host Configuration Protocol
– 动态主机配置协议,由 IETF(Internet 网络工程师任
务小组)组织制定,用来简化主机地址分配管理
• 主要分配以下入网参数
– IP地址/子网掩码/广播地址
– 默认网关地址、DNS服务器地址
• DHCP地址分配的四次会话,整个过程以广播形式进行,先到先得
– DISCOVERY --> OFFER --> REQUEST -->ACK
一个网络中,只能有一个DHCP服务器
虚拟机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; #默认IP地址租用时间
max-lease-time 7200; #最大IP地址的租用时间
}
3.重起dhcpd服务
[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安装源
###############################################
一 构建DHCP服务器
1.修改主配置文件
[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; #指定下一个服务器的IP地址
filename “pxelinux.0”; #指定网卡引导文件的名称
}
2.重起服务
[root@svr7 /]# systemctl restart dhcpd
pxelinux.0:网卡引导文件(安装说明书)二进制文件
安装一个软件既可以获得
###################################################
二 搭建tftp服务,提供众多的引导文件
tftp:简单的文件传输协议 默认端口:69
http:超文本传输协议 默认端口:80
https:安全的超文本传输协议 默认端口:443
DNS:域名解析协议 默认端口:53
telnet:远程管理协议 默认端口:23 明文传输
ssh:远程管理协议 默认端口:22 加密传输
FTP:文件传输协议 默认端口:21
snmp:简单的网络管理协议 默认端口:161
smtp:邮件协议(用户发邮件) 默认端口:25
pop3:邮件协议(用户收邮件) 默认端口:110
1.安装tftp-server软件包
[root@svr7 /]# yum -y install tftp-server
默认共享数据的路径:/var/lib/tftpboot/
[root@svr7 /]# systemctl restart tftp #重起服务
2.部署网卡引导文件pxelinux.0
]# yum provides */pxelinux.0 #查询仓库中哪个软件包产生该文件
]# yum -y install syslinux
]# rpm -ql 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.部署菜单文件
1)让光盘内容出现系统中
[root@svr7 /]# poweroff #关闭虚拟机
2)利用图形添加光驱设备:添加硬件----》光驱设备 放入系统光盘
3) 开机进入虚拟机A查看光驱设备
[root@svr7 ~]# ls /dev/cdrom
/dev/cdrom
4)挂载光驱设备到/mnt
[root@svr7 ~]# mount /dev/cdrom /mnt/
mount: /dev/sr0 写保护,将以只读方式挂载
[root@svr7 ~]# ls /mnt/
5)建立菜单文件存放目录
]# mkdir /var/lib/tftpboot/pxelinux.cfg
6)将光盘的菜单文件进行复制
]# 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/
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 NSD1907 PXE Server #标题内容
61 label linux
62 menu label ^Install CentOS 7 #菜单选项显示内容
63 menu default #读秒结束后默认选择
64 kernel vmlinuz #加载内核
65 append initrd=initrd.img #加载驱动程序
#########################################
保证服务是启动
[root@svr7 /]# systemctl restart dhcpd
[root@svr7 /]# systemctl disable tftp #关闭tftp开机自启动
[root@svr7 /]# systemctl restart tftp
[root@svr7 /]# systemctl status tftp #查看服务的状态
总结:
1.dhcp服务—》IP地址、next-server、filename
2.tftp服务—》pxelinux.0
3.pxelinux.0文件—》读取默认的菜单文件
pxelinux.cfg/default
4.default 菜单文件—》图形模块、背景图片、内核、驱动…
验证:新建一台虚拟机
安装方式为:网络引导(PXE)
内存:2048M
网络类型:虚拟网络private1
#########################################
三 构建Web服务提供光盘所有内容
1.安装httpd软件包
[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 /]# firefox 192.168.4.7/centos
##################################################
四 部署无人值守自动安装,生成应答文件
1.安装一个图形的软件system-config-kickstart
]# 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)” 查看是否可以进行选择
3.查看生成的应答文件内容
[root@svr7 /]# ls /root/ks.cfg
/root/ks.cfg
[root@svr7 /]# vim /root/ks.cfg
4.利用Web服务共享应答文件
[root@svr7 /]# cp /root/ks.cfg /var/www/html/
[root@svr7 /]# ls /var/www/html/
centos ks.cfg
[root@svr7 /]# firefox 192.168.4.7/ks.cfg
5.利用菜单文件指定应答文件位置
]# 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
#####################################################
总结:
1.dhcp服务—》IP地址、next-server、filename
2.tftp服务—》pxelinux.0
3.pxelinux.0文件—》读取默认的菜单文件
pxelinux.cfg/default
4.default 菜单文件—》图形模块、内核、驱动、ks应答文件…
5.ks应答文件—》键盘的类型、时区、指定光盘访问的路径
–url=“http://192.168.4.7/centos”
培训开班第二十三天
rsync同步操作
rsync概述
• Remote Sync,远程同步
– 支持本地复制,或与其他SSH、rsync主机同步
rsync同步操作
• 命令用法
– rsync [选项…] 源目录 目标目录
• 同步与复制的差异
– 复制:完全拷贝源到目标
– 同步:增量拷贝,只传输变化过的数据
• rsync操作选项
– -n:测试同步过程,不做实际修改
– --delete:删除目标文件夹内多余的文档
– -a:归档模式,相当于-rlptgoD
– -v:显示详细操作信息
– -z:传输过程中启用压缩/解压
]# mkdir /nsd05
]# mkdir /dir
]# cp /etc/passwd /etc/fstab /nsd05
]# ls /nsd05
]# rsync -av /nsd05 /dir/ #同步目录本身
]# ls /nsd05
]# ls /dir
]# rsync -av /nsd05/ /dir/ #同步目录下内容
]# ls /nsd05
]# ls /dir
]# touch /nsd05/{1…3}.txt
]# ls /nsd05
]# rsync -av /nsd05/ /dir/ #传输变化的数据
]# ls /dir
删除目标多余的文档
]# rsync -av --delete /nsd05/ /dir/
]# ls /nsd05
]# ls /dir
]# touch /dir/a.txt
]# touch /dir/b.txt
]# ls /nsd05
]# ls /dir
]# rsync -av --delete /nsd05/ /dir/
]# ls /nsd05
]# ls /dir
##############################################
远程同步=rsync+SSH
• 与远程的 SSH目录保持同步
– 下行:rsync […] user@host:远程目录 本地目录
– 上行:rsync […] 本地目录 user@host:远程目录
虚拟机A的/nsd05目录与虚拟机B的/opt实现数据同步
虚拟机A:
]# rsync -av --delete /nsd05/ [email protected]:/opt/
虚拟机B:
]# ls /opt
###################################################
实时同步
一 生成公钥与私钥,实现ssh无密码验证
虚拟机A:
1.生成公钥与私钥
[root@svr7 ~]# ssh-keygen #一路回车
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): #存放路径
Enter passphrase (empty for no passphrase): #密码设置
Enter same passphrase again: #密码设置
[root@svr7 ~]# ls /root/.ssh/
id_rsa #私钥
id_rsa.pub #公钥
known_hosts #记录曾经远程管理过的机器
2.传递公钥到虚拟机B
[root@svr7 ~]# ssh-copy-id [email protected]
]# rsync -av --delete /nsd05/ [email protected]:/opt/
二 部署inotify-tools监控目录内容的变化
1.真机上传数据到虚拟机A
]$ scp /linux-soft/01/tools.tar.gz [email protected]:/root/
2.虚拟机A进行解包
[root@svr7 ~]# tar -xf /root/tools.tar.gz -C /
[root@svr7 ~]# ls /tools
inotify-tools-3.13.tar.gz other
步骤1:安装gcc与make两个开发工具
]# yum -y install gcc make
步骤2: tar解包,释放源代码至指定目录
]# tar -xf /tools/inotify-tools-3.13.tar.gz -C /opt
]# ls /opt/in(tab)
步骤3: ./configure 配置,指定安装目录/功能模块等选项
]# cd /opt/inotify-tools-3.13/
]# ./configure
步骤4: make 编译,生成可执行的二进制程序文件
]# make
步骤5: make install 安装,将编译好的文件复制到安装目录
]# make install
]# ls /usr/local/bin/inotifywait #查看程序是否产生
/usr/local/bin/inotifywait
• 基本用法
– inotifywait [选项] 目标文件夹
• 常用命令选项
– -m,持续监控(捕获一个事件后不退出)
– -r,递归监控、包括子目录及文件
– -q,减少屏幕输出信息
– -e,指定监视的 modify、move、create、delete、attrib等事件
三 书写同步脚本
for 循环:有次数的循环
for i in 值列表
do
重复执行的代码
done
while 循环:无限次数的循环(死循环)
while 条件
do
重复执行的代码
done
[root@svr7 /]# vim /root/rsync.sh
#!/bin/bash
while inotifywait -rqq /nsd05/
do
rsync -a --delete /nsd05/ [email protected]:/opt/
done
[root@svr7 /]# chmod +x /root/rsync.sh
[root@svr7 /]# /root/rsync.sh
###################################################
环境变量:
USER=当前登陆的用户名
PATH=储存命令程序搜寻路径
[root@svr7 ~]# echo $PATH #查看变量所储存的值
[root@svr7 ~]# vim /opt/hello.sh
#!/bin/bash
echo hello world
[root@svr7 ~]# chmod +x /opt/hello.sh
[root@svr7 ~]# /opt/hello.sh
[root@svr7 ~]# hello.sh
-bash: hello.sh: 未找到命令
[root@svr7 ~]# echo $PATH
[root@svr7 ~]# cp /opt/hello.sh /usr/bin
[root@svr7 ~]# hello.sh
##################################################
Cobbler装机平台,不同版本的多系统的安装
Cobbler简介
• 基本概念
– Cobbler是一款快速的网络系统部署工具,
– 集中管理所需服务,如DHCP、DNS、TFTP、Web
– Cobbler内部集成了一个镜像版本仓库
– Cobbler内部集成了一个ks应答文件仓库
– Cobbler还提供了包括yum源管理、Web界面管理、
API接口、电源管理等功能
手动安装有图形环境的虚拟机
1.操作系统为:CentOS 7.5
2.内存大小:2G
3.磁盘空间:50G
4.虚拟机网络类型为:private1
5.软件包选择 “带GUI的服务器”
6.分区选择 “自动分区”
7.管理员root密码为 1
8.创建普通用户lisi
####################################################
一 具备一个CentOS虚拟机
[root@svr7 ~]# cat /etc/redhat-release
CentOS Linux release 7.5.1804 (Core)
二、虚拟机设置
1.设置防火墙为trusted
]# firewall-cmd --set-default-zone=trusted
2.当前及永久设置SELinux状态为permissive
]# setenforce 0 #当前临时设置为宽松模式
]# getenforce
]# vim /etc/selinux/config
SELINUX=permissive
3.配置IP地址为:192.168.4.123/24
4.配置主机名:cobbler.tedu.cn
5.构建Yum仓库:以真机FTP服务器作为Yum源
[root@cobbler /]# cd /etc/yum.repos.d/
[root@cobbler yum.repos.d]# mkdir repo
[root@cobbler yum.repos.d]# mv *.repo repo
[root@cobbler yum.repos.d]# ls
[root@cobbler yum.repos.d]# vim dvd.repo
[dvd]
name=dvd
baseurl=ftp://192.168.4.254/centos-1804
enabled=1
gpgcheck=0
[root@cobbler yum.repos.d]# yum -y install xeyes
##################################################
三、利用scp真机传递cobbler.zip包到虚拟机192.168.4.123中
##################################################
四、搭建Cobbler装机平台
Cobbler概述软件,管理dhcp、tftp、Web服务
自由的导入镜像与ks应答文件
1.解压cobbler.zip包
]# yum -y install unzip
]# unzip /root/cobbler.zip -d /
]# ls /cobbler/
cobbler_boot.tar.gz cobbler_web.png
cobbler_rpm.zip
]# unzip /cobbler/cobbler_rpm.zip -d /opt/
]# ls /opt/cobbler/
#####################################################
五、安装cobbler主程序、工具包等
]# yum -y install dhcp httpd mod_ssl
]# yum -y install /opt/cobbler/*.rpm
]# rpm -q cobbler
cobbler-2.8.2-1.el7.x86_64
####################################################
cobbler网络装机部署
1.安装软件 cobbler cobbler-web dhcp tftp-server pykickstart httpd
cobbler #cobbler程序包
cobbler-web #cobbler的web服务包
pykickstart #cobbler检查kickstart应答文件语法错误
httpd #Apache web服务
dhcp #dhcp服务
tftp-server #tftp服务
2.配置cobbler主配置文件
[root@cobbler /]# vim /etc/cobbler/settings
next_server: 192.168.4.123 #设置下一个服务器还为本机
server: 192.168.4.123 #设置本机为cobbler服务器
manage_dhcp: 1 #设置cobbler管理dhcp服务
pxe_just_once: 1 #防止客户端重复安装操作系统
开机启动项: 匹配及停止
1.硬盘启动 2.光驱设备 3.U盘 4.网络引导
3.配置cobbler的dhcp
[root@svr7 /]# vim /etc/cobbler/dhcp.template
:%s /旧/新/g #全文替换
:%s /192.168.1/192.168.4/g #全文替换
5 次替换,共 4 行
4.绝对路径解压cobbler_boot.tar.gz #众多的引导文件
5.启动相关服务
]# systemctl restart cobblerd
]# systemctl enable cobblerd
]# systemctl restart httpd
]# systemctl enable httpd
]# systemctl restart tftp
]# systemctl enable tftp
]# systemctl restart rsyncd #同步服务
]# systemctl enable rsyncd
6.同步刷新cobbler配置
[root@svr7 /]# cobbler sync #检测所有配置是否正确
…
*** TASK COMPLETE ***
]# firefox https://192.168.4.123/cobbler_web #了解
用户名:cobbler
密码:cobbler
###############################################
cobbler应用
cobbler import --path=挂载点 --name=导入系统命名(随意起)
导入安装镜像数据
cobbler导入的镜像放在:/var/www/cobbler/ks_mirror
[root@cobbler /]# cobbler list #查看有哪些系统
distros:
CentOS7-x86_64 #安装客户端至少2G内存
profiles:
CentOS7-x86_64
##############################################
删除
###########################################
安装完成机器 默认root 密码 cobbler
###############################################
自定义应答文件:开头注释行删除
[root@cobbler ~]# system-config-kickstart #生成ks文件
必须默认kickstart文件存放位置:/var/lib/cobbler/kickstarts/
[root@cobbler ~]# cobbler list
修改kickstart文件:
[root@cobbler ~]# cobbler profile edit --name=CentOS7 --kickstart=/var/lib/cobbler/kickstarts/自定义.cfg
[root@cobbler ~]# cobbler profile report
[root@cobbler ~]# cobbler sync #同步配置
###############################################