霸气de小男生 提交于 2020-04-06 13:09:14
UNIX诞生,1970年1月1日
• 发行版的名称/版本由发行方决定
   – Red Hat Enterprise Linux 5/6/7
   – Suse Linux Enterprise 12
   – Debian Linux 7.8
   – Ubuntu Linux 14.10/15.04
• 是一套完整Linux系统
   – Linux内核 + 各种外围软件
• CentOS,社区企业操作系统
________________________________________
 文件系统:在空间中,数据排列组合存储的规则
• 传统的MBR分区模式
    – 1~4个主分区
    – 0~3个主分区+1个扩展分区(n个逻辑分区)
• 注意事项
    – MBR分区表只能记录4个主分区,编号范围1-4
    – 当有必要使用4个以上分区时,需要建立扩展分区(占
               主分区编号),扩展分区最多只能有1个
    – 扩展分区作为一个中间性质的容器,从其中再划分出
               的分区空间即为逻辑分区
________________________________________
• 典型的文件系统类型
    – EXT4,第四代扩展文件系统,RHEL6系列默认
    – XFS,高级日志文件系统,RHEL7系列默认
    – SWAP,交换空间(虚拟内存)
________________________________________
分区表示
   hd,表示IDE设备
   sd,表示SCSI设备
________________________________________
完成RHEL7系统的安装过程后,第一次启动时会要求进行初始化设置。
  当提示查看协议信息还是创建用户时,输入1并回车。
 接下来输入2并回车,表示接受许可协议。
 先后输入两次c表示继续,按回车后会进入到欢迎界面。
________________________________________
  蓝色:目录
  黑色:文本文件
  红色:压缩包
  绿色:可以执行的程序
________________________________________
输出信息提示: 未找到命令
  原因:
          1.命令有误
          2.该命令没有安装
________________________________________
1.cat  /etc/redhat-release查看系统版本
   cat  -n  /etc/passwd  查看文本并附带行号
   cat /proc/cpuinfo     列出CPU处理器信息
   cat /proc/meminfo    检查内存大小、空闲情况
2.hostname     查看当前主机名 
3.pwd               显示当前所在位置(pwd — Print Working Directory)
4.cd   /              切换路径(cd — Change Directory)
5.ls /root    /boot  #查看/root  和 boot目录内容(List)
   ls      -l :以长格式显示(显示目录内容的详细属性)
6.uname   -r  列出内核版本
7.ifconfig eth0 192.168.1.168  临时设置的IP地址
8.lscpu  列出CPU处理器信息
9.poweroff 关机
   reboot   重启
10.查看文本文件内容
     cat :小文件
     less:大文件   按q退出
     查看文本文件部分内容
     head   -3   /etc/passwd   #显示头多少行
     tail   -4   /etc/passwd   #显示尾多少行
    从文本文件内容中查找,包含指定字符串的行:grep  '字符串'   文本文件路径
     grep   'root'   /etc/passwd

Linux命令:
用来实现某一类功能的指令或程序;‘
命令的执行依赖于解释器(默认的解释器:/bin/bash)
在终端输入的命令通过解释器被解释成电脑识别的二进制,经内核处理信息最后发送给硬件;

________________________________________
mount挂载操作:用于访问光盘的内容;实际上挂载操作为访问光盘提供了一个文件夹,通过在电 

                                脑上访问这个文件加就可以来读取光盘内容;
1.ls /dev/cdrom   光驱设备的快捷方式
    mkdir ABC 创建ABC文件夹 当作访问点
    mount  /dev/cdrom    /ABC   最后一步  提供设备的访问点
    ls  /ABC/Packages/   直接查看光盘中的软件安装包
    umount   /ABC  删除ABC的访问点
________________________________________
重定向输出:将前面命令的输出结果,作为内容写入文本文件中
>   :覆盖重定向  (它会覆盖文件中之前的内容)
>>  :追加重定向  (不会覆盖文件之前的内容)
1.head  -2  /etc/passwed  >   /opt/test.txt       把passwed中的前两段内容写入test文档中(这个text文本可以是之前不存在的,这个命令会自己建立一个test.txt
hostname >>   /opt/test.txt   将电脑名也写入到text文本中,不会覆盖之前内容
echo   123456>>  /opt/test.txt      echo是一种命令,可以将它后面根的内容写入到指定文本中 
>  /opt/test.txt    清空文本文件内容
________________________________________
ls  ---list
格式:ls  [选项]   【目录或文件名】 
常用的命令选项:
-l  以长格式显示文件信息
-A  显示隐藏文件
-d   显示目录本身(而不是内容)的属性
-h  提供易读的容量单位(K  M  等)
________________________________________
命令的别名:简化复杂命令的输入
1.alias  ABC=‘ls    -h'    定义别名,就是通过输入ABC来实现ls   -h的命令操作
2.alias  查看所有的有效别名
3.unalias  删除别名
________________________________________
使用通配符
*  任意多个任意字符  
?     后面跟一个? 表示后面只能出现一个字符;如果跟两个??表示后面出现两个字符 
ls  /etc/*tab    列出在etc文件中以tab机诶为的所有文件
ls  /boot/vm*   列出以vm开头的所有文件
ls   /dev/tty?    列出以tty开头但后面只能有一个字节的文件
ls   /dev/tty??  列出以tty开头但后面只能有2个字节的文件

-【a-z】列出a到z范围内的所有文件(a到z的范围是连续的) 
-{ a,c,e,w}  列出括号内所存在的文件 
ls   /dev/tty[3-8]   列出以tty结尾的后面一个字节是在3到8的所有文件 
ls   /dev/tty{1,3,5,7,9,ahah}  列出以tty结尾,后面跟的字节只能在括号范围内的字节   

________________________________________
使用vim创建/修改文件
• vim文本编辑器
命令模式      输入模式(插入模式)      末行模式
                 i 键
    命----------------------->输入模式   ( 按Esc 键进行返回命令模式)
    令
    模
    式----------------------->末行模式    (按Esc 键进行返回命令模式)
                        : 键

    在末行模式下     :wq  保存退出       :q!  不保存退出   
vim  /opt/5.txt  进出5.txt文档里面 首先安i键进入输入模式,然后就可以写入内容了;(可以直接用vim创建文件5.txt
________________________________________
删除:
rm  后面常跟-rf  递归删除(含目录)、强制删除
rm  -rf   /opt/1.txt    删除1.txt文件
rm    -rf /opt/*  删除opt文件下的所有文件 
________________________________________
mv 移动/改名   
 格式: mv  [选项]...  原文件...    目标路径
mv    /opt/1.txt      /opt/nsd01     把1.txt文档移动到nsd01 文件夹里面
mv   /opt/nsd01    /opt/test          把文件nsd01的名字重命名为test
________________________________________
cp — Copy   复制   
格式:cp [选项]...  原文件...       目标路径
                    -r:递归,复制目录时必须有此选项
cp  /etc/passed   /opt /    把passed移动到opt文件夹下;
cp  /boot/vm*   /opt/         把boot文件中的所有以vm开头的文件复制到
cp  -r   /boot/    /opt/          把boot目录文件复制到opt下,复制目录文件必须加-r
\cp  -r   /boot/  /opt/           把boot目录再次复制的到opt下,这个时候必须要加\  临时取消别名

________________________________________

________________________________________
1.date  查看日期

   date  -s  “2008-9-6             11:11:11“   修改日期
2.bc   计算器
    7%2 =1  查看7除以2的余数
3./root:管理员的家目录
   home :存放所有普通用户的家目录
4.mkdir -p /vod/movie/cartoon 创建多级目录-p表示连父目录一起创建

设置的永久的别名:
vim  /root/.bashrc    进如vim 编辑下进行修改添加参数
alias   s='ssh    -X    root@172.25.0.11'     用s来代替输入ssh    -X    root@172.25.0.11   使用起来比较方便,但注意,作完修改后要重新打开一个终端,才能看到新别名的
________________________________________
软件包管理:
1.先挂载光盘:输入以下动作
  mkdir   /dvd
mount  /dev/cdrom     /dev       将光盘挂载在dvd文件上
ls  /dvd/Packages       通过dvd挂载点来查看光盘中的软件安装包
2.RPM软件包管理:
 ~  软件包的命名格式及解释说明如下:
        vsftpd-3.0.2-10.el7.x86_64.rpm
         软件名--版本----适用的系统--操作系统的框架
~RPM :Package   Manager   ---RPM安装包管理器:
rpm   -q    firefox  查询firefox软件是否安装
rpm    -hiv    /dvd/Packages/vsftpd/firefox        安装软件firefox(用这种方法安装软件包有局限性,如果所安装的软件包有依赖关系则安装起来比较麻烦,需要一个一个安装)
rpm  -e  firefox  卸载软件firefox
________________________________________
Yum软件包仓库管理,自动解决依赖关系:
实行这个功能时需要手动写入已经配置好的服务器网址,下面为列子
服务端:cla***oom.example.com
http://cla***oom.example.com/content/rhel7.0/x86_64/dvd/  软件包在服务器的存放路径
客户端:server0.example.com指定服务端的位置  /etc/yun.repos.d/*.repo (要确保这个本地路径里面没有repo结尾的文件,不然会影响服务端软件包的导入)因此需要先删除里面的文件
rm -rf   /etc/yum.repos.d/*  删除本地服务端的所有文件
vim  /etc/yum.repos.d/nsd.repo    编辑服务端于服务器之间的关系(nsd.repo是自己手动命名的文件)配置内容如下:
【nsd】     仓库标示
name=nsd   仓库描述信息
baseurl=http://cla***oom.example.com/content/rhel7.0/x86_64/dvd/  (服务器软件包存放地址)
enable=1   是否启用文件(0表示不启用,1表示启用)
gpgcheck=0     是否检测软件包的签名信息(这个一般不要检测)
---------------------------------------------------------------------------------------------------------------------
yum   repolist  列出仓库信息  (没有报错即可)
________________________________________
Yum仓库的使用,(我们已经建立好了仓库,现在就可以直接使用下面命令来直接安装软件包)
yum  -y    install   http     安装http软件包(-y 表示的是同意安装)
yum  clean  all    清除yum仓库的缓存  (有时候使用三个月左右需要

清楚服务器里面的缓存日志)
________________________________________
升级内核:(也是需要从远方服务器端下载内核软件包,然后在本地电脑来进行安装升级的)

wget    http://cla***oom.example.com/content/rhel7.0/x86_64/errata/Packages/kernel-3.10.0-123.1.2.el7.x86_64.rpm      wget后面跟一个远程软件包表示在本地下载内核安装包(次安装包默认下载存放的路径为当前所在路径
rpm  -hiv   kernel-3.10.0-123.1.2.el7.x86_64.rpm    安装内核  (安装完成后需要重启电脑)
reboot   重启电脑
________________________________________
 根据字符串模式提取文本行 
– grep  [选项]   '匹配字符串'      文本文件...
• 常用命令选项
– -v,取反匹配
– -i,忽略大小写
grep 'root'  /etc/passwd      获取passwed中所有包含root的文件
grep  -v   ‘root’    /etc/passwd        获取passwd中除了root以外的所有文件
grep  -i   'ROOT'  /etc/passwd       -i 表示不用区分大小写
grep 'seismic' /usr/share/dict/words > /root/wordlist      把seismic文件写入到wordlist文件中
________________________________________
– ^word  以字符串word开头
– word$  以字符串word结尾
grep '^root' /etc/passwd    在passwd文档中找出以root开头的文件
grep 'bash$' /etc/passwd  在passwd文档中找出以bash结尾的文件
grep  -v  '^$'  /etc/default/useradd    这个命令的意思是读取文件是筛选除来空白行,只显示有文字的行段

________________________________________
• 根据预设的条件递归查找对应的文件
–      [目录]    [条件1] 
--常用条件表示:

                -type  类型(f  文件    ,  d目录 ,  l快捷方式)
                - name   “文档名称”
                - user   用户名
                - size  +/-文件大小(k,M,G
find  /etc/   -name  "*.conf"       在etc目录下,查找所有以.conf结尾的文档
find  /etc/    -type  d                    在etc目录下,查找所有的目录文件
find /boot     -type l                     在etc目录下,查找所有的快捷方式
find /boot      -type f                    在etc目录下,查找所有的文件
find  /root/   -name  "nsd"    -type  f    在root文件中查找包含nsd的所有内容中的文件 
find /boot/    -size +20M            在boot目录下,查找大于20M的文件
find /boot/     -size -20M             在boot目录下,查找小于20M的文件
find  /home   -user zhangsan     在home下查找张三的用户信息
find  /boot/   -size  +30M    -exec    cp  {}   /opt  \;     在boot文件下查找大于30M的文件,并且复制到opt目录下面 
find / -user lisi -type f  -exec cp {} /root/findfiles   \;
________________________________________

配置网络(永久配置)
一.配置永久主机名
echo    ling   >  /etc/hostname  写入ling作为主机名
cat  /etc/hostname   查看配置文件中的主机名
二.永久修改IP地址、子网掩码、网关地址
电脑网卡配置文件存放路径:/etc/sysconfig/network-scripts/ifcfg-eth0
1.显示当前网络接口(网卡)信息:
nmcli   connection    show
2.利用命令配置:(以下命令中的ip地址改变就可以了)
nmcli  connection  modify "System eth0" ipv4.method  manual  ipv4.addresses "172.25.0.11/24  172.25.0.254" ipv4.dns 172.25.254.254 connection.autoconnect  yes
3.查看网卡配置文件内容
cat   /etc/sysconfig/network-scripts/ifcfg-eth0
4.激活网卡配置
nmcli connection up 'System eth0'
三、永久修改DNS服务器地址 /etc/resolv.conf
echo  nameserver  172.25.254.254   >  /etc/resolv.conf     修改DNS服务器
cat  /etc/resolv.conf  查看DNS服务器地址
nslookup   server0.example.com   测试解析DNS
________________________________________
route  -n   查看网关地址

管理用户和组:
用户账户的作用:登陆操作系统;访问控制(不同的用户具备不同的权限)
组帐号的作用:方便对用户的管理
唯一的标示:UID;GID
管理员的UID: 0
普通用户UID:  RHEL7从1000开始;RHEL6从500开始
组的分类:附加组(从属组;公共组) ;  基本组(私有组)

________________________________________

添加用户:
用户的基本信息存放在 /etc/passwd 文件
head  -1   /etc/passwd      查看用户信息第一行
root:x:0:0:root:/root:/bin/bash   用户信息的基本格式,以下为格式的解读:
用户名:密码占位符:UID:GID:用户的信息描述:家目录:解释器程序 (用户的信息描述一般没有)
-------------------------------------------------------------------------------------------------
--使用useradd 命令:
常用的命令选项:
-u  用户UID  
-d  家目录路径
-s 登陆Shell
-g 基本组
-G 附加组
useradd   nsd01  添加用户nsd01
id  nsd01     查看用户nsd01信息  (例如:uid=1003(lisi) gid=1004(lisi) 组=1004(lisi) )
grep  'nsd01'  /etc/passwd   在文件中查看用户的信息(例如:lisi:x:1003:1004::/home/lisi:/bin/bash)
useradd   -u  1200   nsd02   修改用户nsd02的UID值
useradd   -d   /opt/abc    nsd02   修改用户nsd02的家目录路径
useradd   -s   /sbin/nologin   nsd02    阻止用户登陆系统(sbin/nologin 是一条命令) 
groupadd  study     创建study组
useradd -g  study  nsd02   把用户指定到study组里面
useradd  -G   study   nsd02  指定附加组

________________________________________
管道操作:将前面命令的输出结果,传输给后面命令,作为后面命令的参数

head -12     /etc/passwd   |     tail  -5     读取passwd中的前12行,因为有管道的存在,又读取已经读的12行中的最后五行;
cat  -n  /etc/passwd   |   head  -12    |   tail   -5     显示/etc/passwd/文件8-12行内容

________________________________________
• 使用 passwd 命令

1.交互式设置密码(设置的时候会有一问一答的存在)
  passwd    nsd01  为用户nsd01设置密码
2.非交互式设置密码(设置时不存在对话)
echo  123  |   passwd  --stdin   nsd01   设置用户nsd01的密码为123
用户的密码信息存放在 /etc/shadow   文件中

________________________________________
• 使用 usermod 命令(它就是把所有选项放一起一起来修改用户的属性)
– usermod [选项]... 用户名

常用命令选项
-u  用户id
-d  家目录路径
-s  登陆Shell
-g  基本组
-G  附加组
usermod    -u   1600  -d   /opt/test   -G   study   -s   /sbin/nologin    nsd12

________________________________________
删除用户;

• 使用 userdel 命令
   – userdel  [-r]   用户名
userdel  nsd01   删除nsd01用户
userdel   -r  nsd02  也是用来删除用户的命令 

________________________________________
组管理

一.添加组
     组基本信息存放在 /etc/group  文件中
grep  'study'  /etc/group  查看study组的信息(study组是已经创建好的),下面为组的格式:
组的基本格式:study:x:1600:nsd01     (nsd01是一个已经添到组里面的用户)
格式的介绍:  组名:组的密码占位符:GID:组成员列表
------------------------------------------------------------------------------------------
• 使用 groupadd 命令(这个命令是用来添加组的,后面直接添组名)
  – groupadd [-g 组ID]  组名
groupadd   study   创建study组

• 使用 gpasswd 命令
– gpasswd -a 用户名 组名   (就是将用户添加到一个组里面去)
– gpasswd -d 用户名 组名   (就是将用户从组中删除)
gpasswd  -a  zhangsan  study   把张三添加到study的组里去
gpasswd  -d   zhangsan  study   把张三从study组中删除掉

二.删除组 
• 使用 groupdel 命令
– groupdel    组名(删除已经创建的组很简单,groupdel  后面直接跟组名,就可以删掉)
groupdel   study  删除study组

________________________________________
tar 归档及压缩

~归档的含义:将许多零散的文件整理为一个文件,文件的总大小基本不变;
~压缩的含义:按照某种算法减小文件所占用的空间大小;恢复时按照对应的逆向算法解压;
压缩的工具方法有三种,每种方法所压缩出来的文件类型也不一样,以下为三种方法,和对应的文件格式:
gzip ------------> .gz
bzip2------------>  .bz2
xz-------------->   .xz
----------------------------------------------------------------------------------------------------------
tar 集成备份工具:
-c  创建归档
-x  释放归档
-f   指定归档文件名称
-z  ,  j  , J  调用.gz ,  .bz2  ,  .xz  格式的工具进行处理
-t   显示归档的文件清单
-P(大写) 保存归档内文件的绝对路径 (绝对路径就是,在以后释放里面的文件时,文件会按照之前归档时的文件路径释放,可能会导致释放后与当前文件覆盖,造成数据的丢失)
-C  指定tar包的释放位置
-------------------------------------------------------------------------------------
• 使用 tar -c ... 命令
tar  -zcf   加备份文件.tar.gz   加被备份的文档
tar  -jcf    备份文件.tar.bz2     被备份的文档
tar  -Jcf   备份文件.tar.xz        备份的文档
tar   -zcf   /opt/file.tar.gz    /boot/    /home/         把boot和home的文件一起创建压缩包,压缩包的名字是自己命名的,并且自己手动选择压缩包的存放路径
tar  -jcf   /opt/file.tar.bz2     /boot/   /home/             作用同上只是用的压缩工具不一样
tar   -Jcf   /opt/file.tar.xz        /boot/        /home/      同上
tar  -xf  /opt/file.tar.gz  -C  /mnt/   把opt下的压缩包file.tar.gz   解压释放到mnt下
----------------------------------------------------------------------------------------------------------
下面举个实验,主要是研究P 绝对路径的使用情况
 echo 123456 > /opt/1.txt         在1.txt中写入123456
cat /opt/1.txt      查看1.txt的内容                          
 tar    -zcPf    /mnt/nsd.tar.gz    /opt/1.txt    以绝对路径创建1.txt的压缩包nsd.tar.gz 
 tar -tf /mnt/nsd.tar.gz       显示压缩文件内的文件清单
 echo hahaxixi > /opt/1.txt   更改之前创建的1.txt文件内容
 cat /opt/1.txt                        查看txt文件,内容已经变为hahaxixi
 tar -xPf /mnt/nsd.tar.gz      以绝对路径释放之前的压缩包
 cat /opt/1.txt                         查看txt文件内容,结果发现内容被刚释放的压缩包中的txt覆盖了
结论:我们以后在作文件压缩时,最好以绝对路径压缩文件,因为,到释放压缩包的时候
可以选择两种释放方法,一种以绝对路径释放(-P),一种以相对路径释放;尽管当时压缩文件
用的是绝对路径来压缩的,但只要你释放压缩文件时不用-P的绝对路径来释放文件的话,释放后
的文件依然是相对路径;
________________________________________
NTP时间同步:就是有一台时间服务器,为其他客户电脑提供标准时间的协议
• Network Time Protocol
NTP服务器为客户机提供标准时间,NTP客户机需要与NPT服务器保持沟通
实现这个功能需要有以下条件才可以进行:
1.服务端:提供相应功能的程序,会有一个NPT服务器:例如cla***om.example.com
2.客户端:访问服务器的程序
   客户机:
-------------------------------------------------------------------------------------------------------------
以下为实行的具体方法操作:
1.安装客户端程序:chrony
rpm  -q   chrony
2.配置chrony指定的服务端位置,修改配置文件
 vim /etc/chrony.conf   进入文件编辑下,添加服务器信息如下:
server cla***oom.example.com iburst
 3.重起客户端服务chronyd,命令如下:
systemctl  restart  chronyd   重启服务;
systemctl  enable  chronyd   设置开机自动启用功能
4.验证时间同步:
date  显示时间
date  -s  “1996-1-2“    修改时间为1996-1-2
systemctl   restart  chronyd   重启服务
date   查看时间是否有重新校准
________________________________________
cron  任务概述:
用途:按照设置的时间间隔为用户反复执行某一项固定的系统任务;
需要安装的软件包:cronie   和    crontabs
系统服务:crond
生成的日志文件:/var/log/crond

            时间                                    任务

      分  时  日  月  周                     命令或脚本程序
       *   *    *   *   *
       0   22  *   *   *   
       0    8   *   *   1-5
下面为一个案例:
要求:每分钟记录当前的系统时间,写入到/opt/time.txt
• 使用 crontab 命令
– 编辑:crontab -e [-u 用户名]
– 查看:crontab -l [-u 用户名]
– 清除:crontab -r [-u 用户名]
date   >>  /opt/time.txt    查看系统时间,重定向写入到time.txt文本中;
crontab  -e   -u   root  进入计划任务配置文件下,编辑内容,需要输入以下动作:
 */1  *  *  *  *  date >> /opt/time.txt    (每分钟写入时间)

watch  -n  1  cat  /opt/time.txt   每1s中查看time。txt文件内容,来确定上述任务是否执行了;
---------------------------------------------------------------------------------------
备注工具:which  :  这个命令是用来查找命令所对应的程序文件
                          周期性计划任务,命令写对应的程序文件。提高可靠性            
vim: 命令模式   按 yy  复制光标所在的一行
                                 p   粘贴
                                 dd  删除光标所在的一行

基本权限:
一.   访问方式:
1.读取:允许查看内容--read    r   (能够 ls 浏览此目录内容)
2.写入:允许修改内容--write  w    (能够执行 rm/mv/cp/mkdir/touch/等更改目录内容的操作
3.可执行:语序运行和切换--execut  x  (能够 cd 切换到此目录)
二.   权限适用对象(归属)
1.所有者:拥有此文件/目录的用户-user   u
2.所属组:拥有此文件/目录的组  group    g
3.其他用户:除所有者,所属组以外的用户 other  o
------------------------------------------------------------------------------
~使用ls   -l 命令
ls   -ld  显示文件或目录的详细属性
显示的内容以-开头的为:文本文件
                        d开头的为:目录
                        l 开头的为:快捷方式
下面举例说明:
drwxr-xr-x. 3 root root 15 7月  11 2014 /opt  这个是用命令查看的opt属性
d表示:此文加为目录文件
rwx为root所有者所具备的权限
r-x为所属组所具有的权限
最后的r-x为其他用户所具有的权限
---------------------------------------------------------------------------------
~设置基本权限:
使用chmod 命令(此命令是用来给权限对象添加或删除某些权限)
chmod   g+w   nsd01  给nsd01文件的所属组新添加一个w写入的权限
chmod   u-w    /nsd01   给nsd01的所有者去掉一个写入的权限
chmod   o=rwx  /nsd01  给nsd01的其他用户重新写入一些权限,rwx
chmod   u=wrx,g=rx,o=---  /nsd01  给nsd01的所有者写入wrx权限,所属组rx权限,其他用户无权限,他们之间用逗号隔开
----------------------------------------------------------------------------------------------------------
以下为权限应用的案例:
以root用户新建/nsddir/目录,在此目录下新建readme.txt文件,并进一步完成下列操作
1)使用户zhangsan能够在此目录下创建子目录   切换用户  su - zhangsan
    chmod o+w  /nsddir/

2)使用户zhangsan不能够在此目录下创建子目录
    chmod o-w  /nsddir/

3)使用户zhangsan能够修改readme.txt文件
    chmod o+w  /nsddir/readme.txt

4)调整此目录的权限,使所有用户都不能进入此目录
   chmod u-x,g-x,o-x  /nsddir/

5)为此目录及其下所有文档设置权限 rwxr-x---
   chmod -R  u=rwx,g=rx,o=---  /nsddir/

________________________________________
~使用chown  命令

先创建一个文件夹  mkdir  /nsd33
查看文件属性:ls   -ld    /nsd33   为:
drwxr-xr-x. 2 root root 6 11月 24 20:30 /nsd33   他的所有者和所属组都是root
通过chown命令来实现修改他的所有者和所属组,命令如下:
chown    zhangsan:tarena    /nsd33     这个就是把nsd33的所有者改为zhangsan,所属组改为tarena
通过chown也可以实现只修改所有者或者所属组,命令如下:
chown   lisi   /nsd33    只修改了所有者
chown    :root   /nsd33   只修改了所属组  

________________________________________
附加权限(特殊权限)
~ Set GID
  • 附加在属组的 x 位上
    – 属组的权限标识会变为 s
    – 适用于目录,Set GID可以使目录下新增的文档自动设
                置与父目录相同的属组(继承)
mkdir /nsd06     创建一个06的文件机  
  ls -ld /nsd06    查看06 文件属性,如下:
drwxr-xr-x. 2 root root 6 11月 25 08:38 /nsd06  这个为查看到的文件属性
chown  :tarena /nsd06 修改文件的所属组,由root改为tarena
  mkdir /nsd06/abc  在06的文件下再创建一个文件adc
  ls -ld /nsd06/abc    查看adc01的属性,如下:
drwxr-xr-x. 2 root root 6 11月 25 08:40 /nsd06/abc  发现所建的文件属性没有继承父母的属性
  chmod g+s /nsd06/   这个时候我们继续在原来的06文加上添加一个+s的附加权限
  ls -ld /nsd06/查看文件属性,如下;
drwxr-sr-x. 3 root tarena 16 11月 25 08:40 /nsd06   这里有一个变化,所属组的x为变成了s
  mkdir /nsd06/abc02  再在06文件下创建一个adc2的文件
ls -ld /nsd06/abc02查看属性如下:
drwxr-sr-x. 2 root tarena 6 11月 25 08:43 /nsd06/abc2,这个时候发现abc2的文件的所属组就继承了06的属性;

________________________________________
ACL策略权限

什么情况下需要使用ACL策略权限?比如在企业里有一个人员信息存放文件,这个文件只能给文员部的人wrx权限的,其他人员一律无任何权限,但这个时候老板说他 想只访问查看这个文件夹;这个时候我们第一不能把老板添加到文员组里面,因为老板不能去修改数据,第二,不能去修改其他用户的权限,因为一旦修改了其他人 都能访问了,所以这个时候就要使用ACL策略权限,给老板自己单独一个权限;
~acl访问策略:能够对个别用户个别组设置独立的权限
                            大多数挂载的EXT3/4、XFS文件系统默认已支持
-------------------------------------------------------------------------------------------------------------
• 使用 getfacl、setfacl 命令
– getfacl       文档...                                        #查看acl策略
– setfacl  -m  u:用户名:权限类别 文档...     为用户添加策略
– setfacl  -m  g:组名:权限类别 文档...         为组添加策率
– setfacl  -b   文档...                                         #清除所有的ACL策略
– setfacl  -x   文档...                                          #清除指定的ACL策略

getfacl  /nsd    查看nsd文件的acl策略权限;
setfacl    -m  u:zhangsan:rx  /nsd10  设置acl策略,给张三添加一个访问读取权限
setfacl  -x  u:kenji  /nsd10    删除keji的acl策略
setfacl   -b    /nsd10    删除nsd10 的全部acl策略
________________________________________
使用LDAP认证
什么是LDAP?
• 轻量级目录访问协议
– Lightweight Directory Access Protocol
– 由服务器来集中存储并向客户端提供的信息,存储方
式类似于DNS分层结构

– 提供的信息包括:用户名、密码、通信录、主机名映
射记录、......
     本地用户:本地/etc/passwd

     网络用户的实现: LDAP服务器

     服务器:cla***oom.example.com
以下为具体操作:
客户端:
1.安装一个客户端软件sssd  与LDAP服务器沟通的软件
yum  -y   install   sssd   安装软件命令
2.安装图形软件authconfig-gtk 配置sssd工具
yum  -y  install authconfig-gtk
3.运行图形软件authconfig-gtk 进行配置
[root@server0 /]# authconfig-gtk  以下为配置信息:
用户账户数据库:LDAP
LDAP搜索基础DN:dc=example,dc=com
LDAP服务器: cla***oom.example.com
钩选:用TLS加密连接
指定证书加密:                
http://cla***oom.example.com/pub/example-ca.crt
认证方法:LDAP密码
4.重起客户端sssd服务
systemctl  restart   sssd   重启sssd服务
systemctl   enable  sssd  设置开机自启
5.验证:LDAP服务器上用户可以在本地识别
二、家目录漫游,在本地访问服务器上的资源
服务端:
   cla***oom.example.com 作了NFS共享文件夹,共享了所有的家目录
客户端:访问共享
[root@server0 ~]# showmount -e cla***oom.example.com
 Export list for cla***oom.example.com:
 /home/guests   172.25.0.0/255.255.0.0

挂载共享目录,提供访问点
mount cla***oom:/home/guests/       /home/guests

磁盘管理:
磁道:track
扇区:sector    每个扇区512个字节
磁头:head
柱面:cylinde
------------------------------------------------------------------------------
________________________________________
MBR/msdos 分区模式:
#1~4个主分区,或者0~3个主分区+1个扩展分区(n个逻辑分区)
#最大支持容量为2.2TB的磁盘
#扩展分区不能格式化
时别硬盘---->分区规划------>格式化---->挂载使用
毛胚楼层----》打隔断------》装修-----》入住
------------------------------------------------------------------------------------
#查看磁盘~lsblk
[root@server0 ~]# lsblk    查看硬盘
#修改硬盘的分区表
使用fdisk +  硬件设备  命令
常用的交互指令:
m  列出指令帮助
p   查看现有的分区表
n   新建分区
d  删除分区
q  放弃更改并退出
w  保存更改并退出
fdisk    /dev/vdb    (进入分区编辑界面)
在分区时,当出现last时对话,直接输入要分区的容量+20G
分区完成后需要w保存并退出
ls /dev/vdb[1-2]  查看目录中的分区
------------------------------------------------------------------------
格式化文件系统(当分区完成后,需要对分区进行格式化)
使用mkfs + 工具 命令来实现 (以下四种为格式化的四种格式)
mkfs.ext3   分区设备路径
mkfs.ext4   分区设备路径     
mkfs.xfs      分区设备路径
mkfs.vfat     分区设备路径

mkfs.ext4   /dev/vdb2    格式化vdb2的分区
mkfs.xfs    /dev/vdb1
blkid   /dev/vdb1  查看分区文件系统
---------------------------------------------------------------
挂载使用
mount /dev/vdb1 /part1
df  -h  查看正在挂载使用的设备信息
-----------------------------------------------------------------
缓解根分区的压力

[root@server0 ~]# find  -size  查找较大的目录有哪些

[root@server0 ~]#  还分新的分区 /dev/vdc1

[root@server0 ~]#  mount /dev/vdc1   /mnt
[root@server0 ~]#  cp -r /home/*    /mnt
[root@server0 ~]#  rm -rf /home/*

[root@server0 ~]#  umount /mnt
[root@server0 ~]#  mount /dev/vdc1   /home
-------------------------------------------------------------------
将虚拟机server重起
--------------------------------------------------------------------
开机自动挂载,修改配置文件 /etc/fstab
• 配置文件 /etc/fstab 的记录格式
设备路径       挂载点        类型      参数          备份标记     检测顺序
/dev/vdb1     /part1                 xfs   defaults            0             0
验证:
[root@server0 ~]# mount -a
检测/etc/fstab开机自动挂载配置文件,格式是否正确
检测/etc/fstab中,书写完成,但当前没有挂载的设备,进行挂载

[root@server0 ~]# df -h
------------------------------------------------------------------------------------
综合分区练习
[root@server0 ~]# fdisk   /dev/vdb
   p 查看分区表
   n 创建新的分区----->回车----->回车---->回车----->在last结束时 +2G
   p 查看分区表
   n 创建新的分区 
                   ----->回车---->起始回车----->结束回车  将所有空间给扩展分区
   p 查看分区表
   n 创建新的分区----->起始回车------>结束+2G
   d 删除分区
   w 保存并退出
[root@server0 ~]# partprobe         #刷新分区表
[root@server0 ~]# ls /dev/vdb[1-5]
[root@server0 ~]# lsblk
-----------------------------------------------------------------------------------
 总结:

 1.查看硬盘     lsblk
 2.划分分区     fdisk
 3.刷新分区表   partprobe
 4.格式化文件系统    mkfs.xfs  mkfs.ext4
 5.挂载                    mount 
 6.开机自动挂载       /etc/fstab

-------------------------------------------------------------------------------------
LVM逻辑卷的使用

  1.整合分散的空间
  2.实现分区的动态扩大与缩减

在“分区 --> 格式化”中间增加的一个逻辑层
– 零散空闲存储 ---- 整合的虚拟磁盘 ---- 虚拟的分区----- 格式化------ 挂载

   砖--------->房子-------->打隔断-------->装修---------->入住

  物理卷
  Physical Volume
  卷组
  Volume Group
  逻辑卷
  Logical Volume

  将众多的物理卷,组成卷组,再从卷组中划分逻辑卷
######################################################
 图形添加全新的硬盘80G

[root@server0 ~]# lsblk

#####################################################
综合分区
 将/dev/vdc划分6个分区,3个主分区,一个扩展分区,2个逻辑分区
[root@server0 ~]# fdisk   /dev/vdc
   n 创建新的分区----->回车----->回车---->回车----->在last结束时 +10G
   n 创建新的分区----->回车----->回车---->回车----->在last结束时 +10G
   n 创建新的分区----->回车----->回车---->回车----->在last结束时 +10G
   p 查看分区表
   n 创建新的分区 
                   ----->回车---->起始回车----->结束回车  将所有空间给扩展分区
   p 查看分区表
   n 创建新的分区----->起始回车------>结束+10G
   n 创建新的分区----->起始回车------>结束+10G
   w 保存并退出
[root@server0 ~]# partprobe         #刷新分区表
[root@server0 ~]# ls /dev/vdc[1-6]
[root@server0 ~]# lsblk
[root@server0 ~]# ls /dev/vdc*

######################################################
新建逻辑卷

1.新建卷组
  命令格式:vgcreate  卷组名称    分区路径

[root@server0 ~]# vgcreate  myvg  /dev/vdc1  /dev/vdc2
[root@server0 ~]# vgs
[root@server0 ~]# pvs

2.创建逻辑卷
  命令格式:lvcreate  -n  逻辑卷名称     -L 大小      基于卷组

[root@server0 ~]# lvcreate -n  mylv  -L 16G   myvg
[root@server0 ~]# lvs

3.使用LVM逻辑卷
[root@server0 ~]# mkfs.ext4 /dev/myvg/mylv
[root@server0 ~]# mkdir /lvm
[root@server0 ~]# tail -1 /etc/fstab 
/dev/myvg/mylv  /lvm   ext4  defaults  0  0

[root@server0 ~]# mount -a
[root@server0 ~]# df -h

#####################################################
 LVM逻辑卷的扩展

一、卷组有足够的剩余空间
  1.直接扩展逻辑卷的空间
  [root@server0 ~]# vgs
  [root@server0 ~]# lvextend -L  19G  /dev/myvg/mylv 

  [root@server0 ~]# lvs
  [root@server0 ~]# vgs

  2.扩展文件系统的大小
     扩展ext4文件系统:  resize2fs
     扩展xfs文件系统: xfs_growfs 

  [root@server0 ~]# df  -h | tail -1
  [root@server0 ~]# blkid /dev/myvg/mylv 
  [root@server0 ~]# resize2fs /dev/myvg/mylv
  [root@server0 ~]# df  -h | tail -1

二、卷组没有足够的剩余空间

   1.扩展卷组空间
  [root@server0 ~]# vgextend myvg /dev/vdc3
  [root@server0 ~]# vgs

   2.直接扩展逻辑卷的空间
  [root@server0 ~]# vgs
  [root@server0 ~]# lvextend -L  25G  /dev/myvg/mylv 

  [root@server0 ~]# lvs
  [root@server0 ~]# vgs

    3.扩展文件系统的大小
  [root@server0 ~]# df  -h | tail -1
  [root@server0 ~]# resize2fs /dev/myvg/mylv
  [root@server0 ~]# df  -h | tail -1
######################################################
了解:
    缩减:不要做, 先缩减文件系统的大小,在缩减空间大小

[root@server0 ~]# resize2fs /dev/myvg/mylv 10G
[root@server0 ~]# umount /lvm
[root@server0 ~]# resize2fs /dev/myvg/mylv 10G
 resize2fs 1.42.9 (28-Dec-2013)
 请先运行 'e2fsck -f /dev/myvg/mylv'.

[root@server0 ~]# e2fsck -f /dev/myvg/mylv
[root@server0 ~]# resize2fs /dev/myvg/mylv 10G
[root@server0 ~]# lvreduce -L 10G /dev/myvg/mylv

[root@server0 ~]# lvreduce -L 10G /dev/myvg/mylv 
  WARNING: Reducing active logical volume to 10.00 GiB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce mylv? [y/n]: y

#####################################################
• 创建卷组的时候设置PE大小
– vgcreate -s  PE大小     卷组名       空闲分区...
– vgchange -s  PE大小     卷组名

  PE:卷组划分空间的单位   4M

[root@server0 ~]# vgdisplay myvg
[root@server0 ~]# vgchange -s 2M  myvg
[root@server0 ~]# vgdisplay myvg

• 创建逻辑卷的时候指定PE个数
– lvcreate -l PE个数 -n 逻辑卷名 卷组名

[root@server0 ~]# lvcreate  -l  102  -n  lvtest02  myvg
  Logical volume "lvtest02" created
[root@server0 ~]# lvs

#####################################################
 交换分区(虚拟内存)

• 相当于虚拟内存,
   – 当物理内存不够用时,使用磁盘空间来模拟内存
   – 在一定程度上缓解内存不足的问题

[root@server0 ~]# swapon -s    #查看交换空间,组成 成员信息

[root@server0 ~]# mkswap /dev/vdc5  #格式化,交换文件系统
[root@server0 ~]# swapon /dev/vdc5  #启用交换分区
[root@server0 ~]# swapon -s

[root@server0 ~]# mkswap /dev/vdc6  #格式化,交换文件系统
[root@server0 ~]# swapon /dev/vdc6  #启用交换分区
[root@server0 ~]# swapon -s

#####################################################

 开机自动启用交换分区 /etc/fstab

[root@server0 ~]# vim /etc/fstab 
[root@server0 ~]# tail -2 /etc/fstab
/dev/vdc5  swap  swap   defaults  0 0
/dev/vdc6  swap  swap   defaults  0 0

[root@server0 ~]# swapoff /dev/vdc[5-6]   #停用交换分区

[root@server0 ~]# swapon -s
[root@server0 ~]# swapon -a     #检测/etc/fstab交换分区 
[root@server0 ~]# swapon -s

########################################
###############################################

Shell脚本

  • 脚本: 可以执行文件,实现某种功能

  • 提前设计可执行语句,用来完成特定任务的文件(命令的堆积)

规范Shell脚本的一般组成
 • #! 环境声明(Sha-Bang) 以下所有代码,用那个程序解释
 • # 注释文本
 • 可执行代码

[root@server0 ~]# cat /root/hello.sh
  #!/bin/bash
  echo hello world
  hostname
  uname -r
  ifconfig | head -2 | tail -1
  cat  /etc/redhat-release

[root@server0 ~]# /root/hello.sh

####################################################
 重定向输出

   >  : 只收集正确信息的重定向
   2>: 只收集错误信息的重定向
   &>: 收集正确与错误信息的重定向

[root@server0 ~]# echo 123 > /opt/1.txt
[root@server0 ~]# cat /opt/1.txt
[root@server0 ~]# cat /etc

[root@server0 ~]# cat  /opt/1.txt  /etc/
[root@server0 ~]# cat  /opt/1.txt  /etc/ > /mnt/a.txt
[root@server0 ~]# cat /mnt/a.txt 

[root@server0 ~]# cat /opt/1.txt /etc/ 2> /mnt/a.txt
[root@server0 ~]# cat /mnt/a.txt

[root@server0 ~]# cat /opt/1.txt /etc/ &> /mnt/a.txt
[root@server0 ~]# cat /mnt/a.txt

 运算:
[root@server0 ~]# echo 1+2  | bc     

[root@server0 ~]# echo 2*3  | bc

[root@server0 ~]# echo 4/2  | bc

[root@server0 ~]# echo 10%3 | bc    #取余数运算

 $( ):将命令的输出结果,作为参数

[root@server0 ~]# rm -rf /opt/*
[root@server0 ~]# cd /opt/

[root@server0 opt]# date

[root@server0 opt]# date  +%F   #输出年月日

[root@server0 opt]# mkdir $(date  +%F)
[root@server0 opt]# ls

[root@server0 opt]# mkdir mydir-$(date  +%F)
[root@server0 opt]# ls

[root@server0 opt]# mkdir $(hostname)-$(date  +%F)
[root@server0 opt]# ls

  ''(单引号):取消特殊字符的意义

[root@server0 /]# echo  '* >'

[root@server0 /]# echo  '* > ? {} [] ~'

#####################################################

  /dev/null:黑洞设备

    变量:为了增加脚本适用环境的能力,以及方便适用

    变量作用:以不变的名称,存储变化的值(容器)

  read 产生交互:为了降低脚本的使用难度

[root@server0 /]# cat  /root/user.sh
 #!/bin/bash
 read   -p   '请输入您要创建的用户名:'       user
 useradd  $user  &>  /dev/null
 echo  $user用户创建成功
 echo  123  |  passwd  --stdin  $user   &> /dev/null
 echo  $user用户密码设置成功

[root@server0 /]#  /root/user.sh

  #!/bin/bash
  read -p '请输入您要创建的用户名:' user
  read -p '请输入您要设置的密码:' pass
  useradd $user &> /dev/null
  echo $user用户创建成功
  echo $pass | passwd --stdin $user &> /dev/null
  echo $user用户密码设置成功

#################################################
  变量的定义

• 以不变的名称存放的可能会变化的值
– 变量名=变量值
– 方便以固定名称重复使用某个值
– 提高对任务需求、运行环境变化的适应能力

• 设置变量时的注意事项
– 若指定的变量名已存在,相当于为此变量重新赋值
– 等号两边不要有空格
– 变量名由字母/数字/下划线组成,区分大小写
– 变量名不能以数字开头,不要使用关键字和特殊字符

• 基本格式
– 引用变量值:$变量名
– 查看变量值:echo $变量名、echo ${变量名}

[root@server0 /]# a=rhel
[root@server0 /]# echo $a
[root@server0 /]# echo ${a}

[root@server0 /]# echo $a7

[root@server0 /]# echo ${a}7

环境变量
• 常见的环境变量
– USER(当前登陆的用户)
– RANDOM(储存一个随机数)

位置变量
• 在执行脚本时提供的命令行参数
   – 表示为 $n,n为序号
   – $1、$2、.. .. ${10}、${11}、.. ..

 [root@server0 /]# vim /root/2.sh 

  #!/bin/bash
  echo $1
  echo $2
  echo $3

 [root@server0 /]# /root/2.sh  hello  tom   harry

 [root@server0 /]# vim /root/3.sh 

  #!/bin/bash
   cat  -n  $1  |  head -$2

 [root@server0 /]# /root/3.sh  /etc/passwd   3

预定义变量

  $#  已

加载的位置变量的个数
  $*  所有位置变量的值
  $?  程序退出后的状态值,0表示正常,其他值异常

[root@server0 ~]# cat /root/3.sh
 #!/bin/bash
 echo $1
 echo $2
 echo $#
 echo $*

[root@server0 ~]# /root/3.sh haha xixi hehe  lele

######################################################
常用的测试选项
• 检查文件状态
  -e:存在为真
  -d:存在且为目录才为真
  -f:存在且为文件才为真
  -r:存在且具备读取权限才为真
  -w:存在且具备写入权限才为真
  -x:存在且具备执行权限才为真

• 比较整数大小(带e字母的都有“等于”二字)
   -gt:大于
   -ge:大于等于
   -eq:等于
   -ne:不等于
   -lt:小于
   -le:小于等于

• 字符串比对
      ==:相等为真
      !=:不相等为真

####################################################

if双分支处理

 if [条件];then
     命令序列xx
 else
     命令序列yy
 fi

  请书写脚本:
       用户输入一个用户名,判断用户是否存在
       如果存在 输出用户/etc/passwd相应一行
       如果不存在 则创建该用户

[root@server0 ~]# vim /root/6.sh

    read  -p  '请输入一个用户名:'    user
    id  $user &> /dev/null
    if  [  $? -eq 0 ];then
         grep $user /etc/passwd
     else
          useradd $user
          echo $user 创建成功
     fi 
[root@server0 ~]# /root/6.sh

         请书写脚本:
                 计算机随机产生一个10以内的随机数
                 用户随机输入一个10以内的随机数
                 如果相等,则中奖了
                 如果不相等,则谢谢回顾

[root@server0 ~]# vim /root/7.sh

#!/bin/bash
 read  -p   '请输入一个10以内的随机数字:'      num1
 num2=$(echo $RANDOM % 10 | bc)
 if [  $num1  -eq  $num2  ];then
    echo 恭喜您,中奖了
 else
    echo 恭喜您,谢谢回顾
    echo 正确数字为$num2
 fi

[root@server0 ~]# /root/7.sh

if多分支处理

 if [条件1] ; then
      命令序列xx
 elif [条件2] ; then
      命令序列yy
 elif [条件3] ; then
      命令序列aa
 else
       命令序列zz
 fi

       请书写脚本:
           请用户输入积分.
               如果用户的积分大于等于90,输出 vip plus
               如果用户的积分大于等于80,输出 vip
               如果用户的积分大于等于70,输出 老司机
               如果用户的积分大于等于60,输出 新手
               以上均不满足,输出 仍需努力

[root@server0 ~]# vim /root/8.sh
  #!/bin/bash
  read -p '请用户输入积分:'   num 
  if [  $num  -ge  90  ];then
      echo  VIP PLUS
  elif [  $num  -ge  80  ];then
      echo VIP 
  elif [  $num  -ge  70  ];then
      echo 老司机
  elif [  $num  -ge  60  ];then
      echo 新手
  else
      echo 仍需努力
  fi

##################################################

案例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 2
 elif [ $1 == redhat ];then
    echo fedora 
 elif [ $1 == fedora ];then
    echo redhat 
 else
   echo  '/root/foo.sh redhat|fedora'  >&2
   exit 3
 fi

[root@server0 ~]#  /root/foo.sh
[root@server0 ~]#  echo $?
[root@server0 ~]#  /root/foo.sh 2> /opt/2.txt
[root@server0 ~]#  cat /opt/2.txt

##################################################

 for循环结构

  循环作用:让计算机,反复执行重复性的操作

    for 变量  in  值列表
     do
            执行的动作
     done

[root@server0 ~]# vim /root/10.sh
        #!/bin/bash
      for  user  in  kenji  natasha  tom  harry  jack
      do
           useradd $user
             echo $user 成功
      done

[root@server0 ~]# /root/10.sh 

#######################################################

真机上:还原三台虚拟机cla***oom、server、desktop

[root@room9pc14 桌面]# rht-vmctl reset cla***oom
[root@room9pc14 桌面]# rht-vmctl reset server
[root@room9pc14 桌面]# rht-vmctl reset desktop

真机远程管理:ssh方式,方便使用server与desktop   

[root@room9pc14 桌面]# ssh  用户名@IP地址

补充快捷键: Ctrl+Shift+t 开启一个新的终端

[root@room9pc14 桌面]# ssh -X root@172.25.0.11

##################################################

 for循环结构

  循环作用:让计算机,反复执行重复性的操作

    for 变量  in  值列表
     do
            执行的动作
     done

[root@server0 ~]# vim /root/10.sh
        #!/bin/bash
      for  user  in  kenji  natasha  tom  harry  jack
      do
           useradd $user
             echo $user 成功
      done

[root@server0 ~]# /root/10.sh 

#######################################################
案例5:编写一个批量添加用户脚本
在 server0 上创建 /root/batchusers 脚本
1)此脚本要求提供用户名列表文件作为参数
2)如果没有提供参数,此脚本应该给出
  提示 Usage: /root/batchusers,退出并返回相应值
3)如果提供一个不存在的文件,此脚本应该给出
  提示 Input file not found,退出并返回相应值
4)新用户的登录Shell为 /bin/false,无需设置密码
5)用户列表测试文件:
  http://cla***oom/pub/materials/userlist

[root@server0 ~]# vim  /root/batchusers
#!/bin/bash
if [ $# -eq 0 ];then                    #如果没有输入位置参数
  echo 'Usage: /root/batchusers' >&2
  exit 1
fi

if [ ! -f $1 ];then                     #如果文件不存在为真
  echo 'Input file not found' >&2
  exit 2
fi

for i in  $(cat $1)
 do
   useradd  -s  /bin/false  $i  &> /dev/null
   echo $i成功
 done

######################################################
 系统安全保护
SELinux概述
• Security-Enhanced Linux
– 美国NSA国家安全局主导开发,一套增强Linux系统安
全的强制访问控制体系
– 集成到Linux内核(2.6及以上)中运行
– RHEL7基于SELinux体系针对用户、进程、目录和文件
提供了预设的保护策略,以及管理工具

##################################################

• SELinux的运行模式
– enforcing(强制)、permissive(宽松)
– disabled(彻底禁用)

• 切换运行模式
– 临时切换:setenforce 1|0
– 固定配置:/etc/selinux/config 文件
– 如果修改SELinux状态为disabled(彻底禁用),需要修改/etc/selinux/config 文件并且重起

虚拟机server
[root@server0 ~]# getenforce       #查看当前SELinux状态
Enforcing
[root@server0 ~]# setenforce 0     #设置SELinux状态
[root@server0 ~]# getenforce 
Permissive
[root@server0 ~]# vim /etc/selinux/config 
SELINUX=permissive

虚拟机desktop
[root@desktop0 ~]# getenforce 
Enforcing
[root@desktop0 ~]# setenforce 0
[root@desktop0 ~]# getenforce 
Permissive
[root@desktop0 ~]# vim /etc/selinux/config 
SELINUX=permissive

#################################################

 配置聚合连接(网卡绑定、链路聚合)

   HSRP热备份路由协议: 备份网关设备

                               活跃路由器           备份路由器
                                             虚拟路由器          

   网卡绑定: 备份网卡

                                 网卡1 :eth1      网卡2 :eth2

                                               虚拟网卡team

#####################################################
  建立网卡绑定

虚拟机Server0上

1.建立team虚拟的网卡

参考 man teamd.conf —— '{"runner":{"name":"activebackup"}}'

# nmcli connection add type team      
  con-name team0 ifname team0 autoconnect yes           
  config  '{"runner": {"name": "activebackup"}}'

    建立一个类型为team的网卡,配置文件名字为team0,
  ifconfig命令显示的设备名为team0,每次开机自动启动
  team运行的模式为热备份方式
# vim /etc/sysconfig/network-scripts/ifcfg-team0 
# ifconfig team0

2.添加奴隶

# nmcli connection add type team-slave con-name team0-1 ifname eth1 master team0 

# nmcli connection add type team-slave con-name team0-2 ifname eth2 master team0 

添加一个类型为team-slave的成员,配置文件名team0-1,设备为eth1,添加到team0组队中

3.配置IP地址
# nmcli connection modify team0       
  ipv4.method manual ipv4.addresses 192.168.1.1/24     
  connection.autoconnect yes

4.激活
[root@server0 ~]# nmcli connection up team0
[root@server0 ~]# nmcli connection up team0-1 
[root@server0 ~]# nmcli connection up team0-2
[root@server0 ~]# ifconfig team0

5.查看team信息
[root@server0 ~]# teamdctl team0 state 

6.配置错误,删除重做
[root@server0 ~]# nmcli connection delete team0
[root@server0 ~]# nmcli connection delete team0-1
[root@server0 ~]# nmcli connection delete team0-2
###################################################
配置IPV6地址

   ip地址:唯一标识,网络一个节点的地址

   ipv4: 32个二进制      点分4个10进制   

   ipv6: 128个二进制     以":"分隔8段,每段用16进制表示   

案例3:配置IPv6地址
# nmcli connection modify 'System eth0' 
ipv6.method manual ipv6.addresses 2003:ac18::305/64 connection.autoconnect yes

# nmcli  connection up 'System eth0'

# ping6  2003:ac18::305

#####################################################
 配置用户环境(永久别名的定义)
 alias别名设置
 • 查看已设置的别名
  – alias [别名名称]
 • 定义新的别名
  – alias 别名名称= '实际执行的命令行'
 • 取消已设置的别名
  – unalias [别名名称]

用户个性化配置文件
• 影响指定用户的 bash 解释环境
– ~/.bashrc,每次开启 bash 终端时生效

全局环境配置
• 影响所有用户的 bash 解释环境
– /etc/bashrc,每次开启 bash 终端时生效

[root@server0 ~]# vim /root/.bashrc   #root用户自定义别名
  alias  hello='echo hi'
[root@server0 ~]# vim /etc/bashrc     #所有用户自定义别名
  alias  myls='ls -ld'
[root@server0 ~]# vim /home/student/.bashrc  #student用户
  alias  hi='echo hello'

  开启一个新的终端
[root@server0 ~]# hello         #执行成功
[root@server0 ~]# myls /root/   #执行成功
[root@server0 ~]# hi            #执行失败
[root@server0 ~]# su - student
[student@server0 ~]$ hello   #执行失败       
[student@server0 ~]$ hi      #执行成功
[student@server0 ~]$ myls /root/ #执行成功
[student@server0 ~]$ exit        #回到root
####################################################

[root@server0 ~]# vim /etc/bashrc     #所有用户自定义别名
  alias  qstat='/bin/ps -Ao pid,tt,user,fname,rsz'

####################################################
防火墙策略管理

一、Web服务器

 Server服务端 :服务端软件
  客户端:客户端软件,访问服务端资源

1.安装服务端软件httpd
[root@server0 ~]# yum -y install httpd

2.启动httpd服务,设置为开机自起
[root@server0 ~]# systemctl  restart  httpd
[root@server0 ~]# systemctl  enable   httpd

3.验证
[root@server0 ~]# firefox http://172.25.0.11

4.书写一个页面
         默认网页文件路径:/var/www/html
         默认网页文件名称:index.html

[root@server0 ~]# vim /var/www/html/index.html
<marquee><font color=red><h1>hahaxixihehelele

[root@server0 ~]#  firefox http://172.25.0.11

#######################################################
二、FTP服务器

1.安装服务端软件vsftpd
[root@server0 ~]# yum -y install vsftpd

2.启动vsftpd服务,设置为开机自起
[root@server0 ~]# systemctl  restart  vsftpd
[root@server0 ~]# systemctl  enable   vsftpd

3.验证
[root@server0 ~]# firefox ftp://172.25.0.11

  默认的共享路径:/var/ftp

#####################################################

• 系统服务:firewalld
• 管理工具:firewall-cmd、firewall-config

[root@server0 ~]# systemctl restart firewalld

   作用:隔离, 严格控制入站请求,放行所有出站

• 根据所在的网络场所区分,预设保护规则集
  – public:仅允许访问本机的sshd等少数几个服务
  – trusted:允许任何访问
  – block:拒绝任何来访请求
  – drop:丢弃任何来访的数据包

 防火墙判定的规则:
 1.客户端数据中的源IP地址,查看所有区域中那个区域有该地址的规则,如果有则进入该区域

 2. 进入默认区域(管理员可以设置默认区域)

####################################################
虚拟机server0:
# firewall-cmd --get-default-zone          #查看默认区域
# firewall-cmd --zone=public  --list-all   #查看区域规则
虚拟机desktop0:
# ping -c 2 172.25.0.11  #可以通信
虚拟机server0:
# firewall-cmd --get-default-zone        #查看默认区域  
# firewall-cmd --set-default-zone=block  #修改默认区域
# firewall-cmd --get-default-zone 
虚拟机desktop0:
# ping -c 2 172.25.0.11  #不能通信,当可以收到回应
虚拟机server0:
# firewall-cmd --set-default-zone=drop  #修改默认区域
# firewall-cmd --get-default-zone       #查看默认区域
虚拟机desktop0:
# ping -c 2 172.25.0.11  #不能通信,没有回应
######################################################
虚拟机server0:
# firewall-cmd --set-default-zone=public 
# firewall-cmd --get-default-zone 
# firewall-cmd --zone=public  --list-all     #查看区域策略
# firewall-cmd --zone=public  --add-service=http  #添加服务

虚拟机desktop0:
# firefox http://172.25.0.11  #可以访问
# firefox ftp://172.25.0.11   #不可以访问

虚拟机server0:
# firewall-cmd --zone=public  --list-all      #查看区域策略
# firewall-cmd --zone=public  --add-service=ftp  #添加服务

虚拟机desktop0:
# firefox http://172.25.0.11   #可以访问
# firefox ftp://172.25.0.11    #可以访问
#####################################################

– 永久配置(permanent)

虚拟机server0:
# firewall-cmd --reload                  #重新加载防火墙配置
# firewall-cmd --zone=public --list-all  #查看防火器规则

# firewall-cmd --permanent --zone=public   --add-service=http

# firewall-cmd --permanent --zone=public   --add-service=ftp

# firewall-cmd --zone=public --list-all  #查看防火器规则
# firewall-cmd --reload                  #重新加载防火墙配置  
# firewall-cmd --zone=public --list-all 

#######################################################

实现本机的端口映射
• 本地应用的端口重定向(端口1 --> 端口2)
– 从客户机访问 端口1 的请求,自动映射到本机 端口2
– 比如,访问以下两个地址可以看到相同的页面:
  http://172.25.0.11:5423/
  http://172.25.0.11/

从客户机访问 ------》172.25.0.11:5423-----------》172.25.0.11:80

虚拟机Server0:

# firewall-cmd   --permanent    --zone=public      
  --add-forward-port=port=5423:proto=tcp:toport=80

# firewall-cmd  --reload

# firewall-cmd  --zone=public --list-all

虚拟机Desktop0:

# firefox http://172.25.0.11:5423
######################################################

真机上:还原三台虚拟机cla***oom、server、desktop

[root@room9pc14 桌面]# rht-vmctl reset cla***oom
[root@room9pc14 桌面]# rht-vmctl reset server
[root@room9pc14 桌面]# rht-vmctl reset desktop

真机远程管理:ssh方式,方便使用server与desktop   

[root@room9pc14 桌面]# ssh  用户名@IP地址

补充快捷键: Ctrl+Shift+t 开启一个新的终端

[root@room9pc14 桌面]# ssh -X root@172.25.0.11

##################################################

修改两台虚拟机防火墙默认区域为trusted:

[root@server0 ~]# firewall-cmd --set-default-zone=trusted
[root@desktop0 ~]# firewall-cmd --set-default-zone=trusted 

#######################################################

 Samba共享服务,跨平台的共享(Windows与Linux)

– 用途:为客户机提供共享使用的文件夹
– 协议:SMB(TCP 139)、CIFS(TCP 445)

• 所需软件包:samba
• 系统服务:smb

• Samba用户 —— 专用来访问共享文件夹的用户
– 采用独立设置的密码
– 但需要提前建立同名的系统用户(可以不设密码)

• 使用 pdbedit 管理工具
– 添加用户:pdbedit -a 用户名
– 查询用户:pdbedit -L [用户名]
– 删除用户:pdbedit -x 用户名

• 修改 /etc/samba/smb.conf
[自定共享名]
path = 文件夹绝对路径
; public = no|yes //默认no
; browseable = yes|no //默认yes
; read only = yes|no //默认yes
; write list = 用户1 .. .. //默认无
; valid users = 用户1 .. .. //默认任何用户
; hosts allow = 客户机地址 .. ..
; hosts deny = 客户机地址 .. ..

  装包、配置(修改主配置文件)、起服务

服务端Server0
1.安装samba软件,服务端软件
2.建立Samba账户
[root@server0 ~]# useradd -s /sbin/nologin harry
[root@server0 ~]# useradd -s /sbin/nologin chihiro
[root@server0 ~]# useradd -s /sbin/nologin kenji

[root@server0 ~]# pdbedit -a harry    #添加设置Samba帐号
[root@server0 ~]# pdbedit -a chihiro
[root@server0 ~]# pdbedit -a kenji

[root@server0 ~]# pdbedit -L         #查看所有Samba账户

3修改 /etc/samba/smb.conf(vim命令模式,/workgroup 全文查找)

[root@server0 ~]# mkdir /common            #创建共享目录
[root@server0 ~]# echo 123 > /common/a.txt #创建测试文件
[root@server0 ~]# ls /common
[root@server0 ~]# vim /etc/samba/smb.conf
  .......
        workgroup = STAFF    #设置工作组
  .......
        [common]         #设置共享名
        path = /common   #设置共享的实际路径

4启动smb服务,设置为开机自起
[root@server0 ~]# systemctl restart smb
[root@server0 ~]# systemctl enable smb

#####################################################
客户端Desktop0
1.安装软件包:samba-client

2.列出共享资源
– smbclient -L 服务器地址

[root@desktop0 ~]# smbclient -L 172.25.0.11
Enter root's password:  直接回车

3.连接到共享文件夹
– smbclient -U  用户名   //服务器地址/共享名

[root@desktop0 ~]# smbclient -U harry //172.25.0.11/common
Enter harry's password: 输入密码123
Domain=[STAFF] OS=[Unix] Server=[Samba 4.1.1]
smb: \> 

###################################################
 客户端访问服务端资源
     1.服务端,服务的访问控制
     2.服务端,防火墙
     3.服务端,SELinux策略
     4.服务端,本地权限

###################################################
 SELinux策略,布尔值(开启或关闭)

虚拟机Server0:开启ELinux功能的开关

• getsebool 查看 SELinux 开关
[root@server0 ~]# getsebool -a | grep samba
samba_export_all_ro --> off
samba_export_all_rw --> off

• setsebool 控制 SELinux 开关
– 需要加 -P 选项才能实现永久设置

[root@server0 ~]# setsebool samba_export_all_ro on
[root@server0 ~]# getsebool -a | grep samba

####################################################
客户端Desktop方便的访问

[root@desktop0 ~]# mkdir  /mnt/nsd01
[root@desktop0 ~]# ls  /mnt/nsd01

 安装一个可以支持挂载Samba的软件cifs-utils
[root@desktop0 ~]# yum -y install cifs-utils

# mount -o username=harry,password=123  //172.25.0.11/common    /mnt/nsd01/
# df -h

完成开机自动挂载

  _netdev:在开机启动时,先启动完网络服务,在挂载该设备

[root@desktop0 ~]# vim /etc/fstab

//172.25.0.11/common   /mnt/nsd01    cifs username=harry,password=123,_netdev   0   0

[root@desktop0 ~]# mount -a
[root@desktop0 ~]# df -h

####################################################
 完成读写的Samba共享

服务端Server0
1.安装samba软件,服务端软件
2.建立Samba账户
3.修改配置文件/etc/samba/smb.conf

[root@server0 ~]# mkdir /devops
[root@server0 ~]# touch /devops/b.txt
[root@server0 ~]# vim /etc/samba/smb.conf
[devops]
path = /devops
write list = chihiro     #允许chihiro可以写

4.重起smb服务

5.修改SELinux开关
[root@server0 ~]# getsebool -a | grep samba
[root@server0 ~]# setsebool samba_export_all_rw on
[root@server0 ~]# getsebool -a | grep samba

6.赋予chihiro本地权限
[root@server0 ~]# setfacl -m u:chihiro:rwx /devops/
[root@server0 ~]# getfacl /devops/

客户端Desktop完成开机自动挂载
[root@desktop0 ~]# mkdir /mnt/nsd02
[root@desktop0 ~]# vim /etc/fstab

//172.25.0.11/devops   /mnt/nsd02   cifs username=chihiro,password=123,_netdev   0   0

[root@desktop0 ~]# mount -a
[root@desktop0 ~]# df -h

####################################################

 multiuser机制(多用户的Samba挂载)

  – multiuser,提供对客户端多个用户身份的区分支持
  – sec=ntlmssp,提供NT局域网管理安全支持

客户端Desktop完成开机自动挂载
[root@desktop0 /]# vim /etc/fstab 
//172.25.0.11/devops  /mnt/nsd02 cifs username=kenji,password=123,_netdev,multiuser,sec=ntlmssp 0 0

[root@desktop0 /]# umount /mnt/nsd02
[root@desktop0 /]# mount -a
[root@desktop0 /]# df -h
[root@desktop0 /]# su - student
[student@desktop0 ~]$ cifscreds add -u chihiro 172.25.0.11
[student@desktop0 ~]$ touch /mnt/nsd02/10.txt
[student@desktop0 ~]$ ls  /mnt/nsd02
[student@desktop0 ~]$ exit
#######################################################
Sticky Bit
• 附加在其他人的 x 位上
– 其他人的权限标识会变为 t
– 适用于开放 w 权限的目录,可以阻止用户滥用 w 写入
权限(禁止操作别人的文档)

[root@server0 ~]# mkdir /public
[root@server0 ~]# chmod u=rwx,g=rwx,o=rwx /public
[root@server0 ~]# ls -ld /public

[root@server0 ~]# chmod o+t /public
[root@server0 ~]# ls -ld /public

####################################################

真机上:还原三台虚拟机cla***oom、server、desktop

[root@room9pc14 桌面]# rht-vmctl reset cla***oom
[root@room9pc14 桌面]# rht-vmctl reset server
[root@room9pc14 桌面]# rht-vmctl reset desktop

真机远程管理:ssh方式,方便使用server与desktop   

[root@room9pc14 桌面]# ssh  用户名@IP地址

补充快捷键: Ctrl+Shift+t 开启一个新的终端

[root@room9pc14 桌面]# ssh -X root@172.25.0.11

##################################################

修改两台虚拟机防火墙默认区域为trusted

[root@server0 ~]# firewall-cmd --set-default-zone=trusted
[root@desktop0 ~]# firewall-cmd --set-default-zone=trusted 

#####################################################
 NFS共享服务(Linux与Linux)

普通NFS服务

• Network File System,网络文件系统
– 用途:为客户机提供共享使用的文件夹
– 协议:NFS(TCP/UDP 2049)、RPC(TCP/UDP 111)

• 所需软件包:nfs-utils
• 系统服务:nfs-server

• 列出有哪些NFS共享资源
– showmount -e 服务器地址
• 手动挂载NFS共享
– mount 服务器地址:文件夹路径 挂载点
• 开机挂载配置 /etc/fstab
– 服务器地址:文件夹路径 挂载点 nfs _netdev 0 0

服务端:Server0
1.安装服务端软件包,nfs-utils

2.修改 /etc/exports
  文件夹路径     客户机地址(权限)  
[root@server0 ~]# mkdir /public
[root@server0 ~]# echo 123 > /public/123.txt

[root@server0 ~]# vim /etc/exports
/public   172.25.0.0/24(ro)

3.重起服务
[root@server0 ~]# systemctl restart nfs-server
[root@server0 ~]# systemctl enable nfs-server

客户端:Desktop0  (vim命令模式下,按o可以另起一行进入插入模式)

[root@desktop0 ~]# showmount -e 172.25.0.11    #查看共享
[root@desktop0 ~]# mkdir /mnt/nfs01
[root@desktop0 ~]# vim /etc/fstab 
172.25.0.11:/public  /mnt/nfs01   nfs  _netdev 0 0
[root@desktop0 ~]# mount -a 
[root@desktop0 ~]# df -h
#########################################################
  安全的NFS服务(必须还原所有cla***oom、server、desktop的环境)

1.还原所有cla***oom、server、desktop

2.修改两台虚拟机server、desktop防火墙默认区域为trusted

[root@server0 ~]# firewall-cmd --set-default-zone=trusted
[root@desktop0 ~]# firewall-cmd --set-default-zone=trusted 

3.实现用户统一
– 结合 LDAP + kerberos 技术,实现认证和加密支持
– 同一个 kerberos 领域内,认证用密码

[root@server0 ~]# lab nfskrb5 setup   #加入 LDAP+kerberos
[root@desktop0 ~]# lab nfskrb5 setup  #加入 LDAP+kerberos

4.验证:
[root@server0 ~]# id ldapuser10

[root@desktop0 ~]# id ldapuser10

##########################################################
搭建安全的NFS服务

服务端Server

1.部署与kerberos通信加密的密钥
# wget http://cla***oom/pub/keytabs/server0.keytab -O /etc/krb5.keytab

2.配置NFS读写的共享
[root@server0 ~]# mkdir /nsd
[root@server0 ~]# touch /nsd/123.txt
[root@server0 ~]# vim /etc/exports
 /nsd        172.25.0.0/24(rw,sec=krb5p)

3.必须同时重起服务nfs-server、nfs-secure-server
# systemctl restart nfs-server nfs-secure-server

4.为了做题,让ldapuser0具备写权限,赋予他本地的写权限
# setfacl  -m  u:ldapuser0:rwx   /nsd

######################################################

客户端Desktop:
1.部署与kerberos通信加密的密钥
# wget http://cla***oom/pub/keytabs/desktop0.keytab -O /etc/krb5.keytab

2.修改/etc/fstab开机自动挂载配置文件
[root@desktop0 ~]# mkdir /mnt/test
[root@desktop0 ~]# vim /etc/fstab 

172.25.0.11:/nsd   /mnt/test  nfs  _netdev,sec=krb5p   0 0

 #重起客户端nfs加密服务
[root@desktop0 ~]# systemctl restart nfs-secure 
[root@desktop0 ~]# mount -a
[root@desktop0 ~]# df -h

3.验证ldapuser0是否有写权限:
[root@desktop0 ~]# ssh ldapuser0@127.0.0.1

ldapuser0@127.0.0.1's password: 密码为 kerberos

[ldapuser0@desktop0 test]$ cd /mnt/test
[ldapuser0@desktop0 test]$ touch ldapuser0.txt

##################################################

真机上:还原三台虚拟机cla***oom、server、desktop

[root@room9pc14 桌面]# rht-vmctl reset cla***oom
[root@room9pc14 桌面]# rht-vmctl reset server
[root@room9pc14 桌面]# rht-vmctl reset desktop

真机远程管理:ssh方式,方便使用server与desktop   

[root@room9pc14 桌面]# ssh  用户名@IP地址

补充快捷键: Ctrl+Shift+t 开启一个新的终端

[root@room9pc14 桌面]# ssh -X root@172.25.0.11

##################################################

修改两台虚拟机防火墙默认区域为trusted

[root@server0 ~]# firewall-cmd --set-default-zone=trusted
[root@desktop0 ~]# firewall-cmd --set-default-zone=trusted 

#####################################################
 划分分区的指令:parted (专门做大空间划分 2T)

  GPT: 突破了4个主分区限制,可以有128主分区

[root@server0 ~]# parted /dev/vdb
(parted) print            #输出分区表
(parted) mktable gpt      #设置分区模式为GPT

(parted) mkpart           #划分新的分区
 分区名称?  []? haha         #分区名称随便起
 文件系统类型?  [ext2]? ext4   #文件系统不起作用
 起始点? 0                                 #上一个分区的结束,是下一个分区的开始
 结束点? 2G 
 忽略/Ignore/放弃/Cancel? Ignore  #忽略,分区表信息会占用一部分空间
(parted) print                  #输出分区表
(parted) quit

[root@server0 ~]# ls /dev/vdb1
#####################################################
iSCSI网络磁盘

• Internet SCSI,网际SCSI接口
   – 一种基于C/S架构的虚拟磁盘技术
   – 服务器提供磁盘空间,客户机连接并当成本地磁盘使用

服务端思路:
1.划分分区
2.运行targetcli命令
------>建立后端存储
------>建立共享磁盘起名
------>关系将共享磁盘名字与后端存储联系起来
------>做ACL 允许客户端通过那个名字来访问
------>启用端口和IP

• ISCSI Qualified Name 名称规范
– iqn.yyyy-mm.倒序域名:自定义标识
– 用来识别 target 磁盘组,也用来识别客户机身份

  服务端server0:
 1.服务端软件,targetcli
 2.运行targetcli命令进行配置

[root@server0 ~]# targetcli 
/> ls
/> backstores/block create  nsd  /dev/vdb1   #创建后端存储并起名
/> ls
/> iscsi/ create iqn.2017-12.com.example:server0 #为共享磁盘起名
/> ls
/> iscsi/iqn.2017-12.com.example:server0/tpg1/luns     create  /backstores/block/nsd                     #关联后端存储

/> ls
/> iscsi/iqn.2017-12.com.example:server0/tpg1/acls      create iqn.2017-12.com.example:desktop0          #设置客户端名称
/> ls
/> iscsi/iqn.2017-12.com.example:server0/tpg1/portals     create  172.25.0.11                              #启用端口与IP
Using default IP port 3260
Created network portal 172.25.0.11:3260.

/> exit

 3.重起服务,设置为开机自起
[root@server0 ~]# systemctl restart target
[root@server0 ~]# systemctl enable target

客户端desktop0:
1.安装一个客户端软件
[root@desktop0 ~]# yum repolist 
[root@desktop0 ~]# yum -y install iscsi-initiator-utils.i686

2.指定客户端自称的名字
[root@desktop0 ~]# vim /etc/iscsi/initiatorname.iscsi
 #指明访问服务端,客户端自称的名字,是服务端ACL指定的名称
 InitiatorName=iqn.2017-12.com.example:desktop0 

3.发现服务端位置
[root@desktop0 ~]# man  iscsiadm
[root@desktop0 ~]# iscsiadm --mode discoverydb --type sendtargets --portal 172.25.0.11 --discover

4.加载共享存储
[root@desktop0 ~]# lsblk 
[root@desktop0 ~]# systemctl restart iscsi
[root@desktop0 ~]# systemctl daemon-reload
[root@desktop0 ~]# systemctl restart iscsi
[root@desktop0 ~]# systemctl enable iscsi
[root@desktop0 ~]# lsblk 

######################################################
客户端:刷新/etc/iscsi/initiatorname.iscsi文件的服务

[root@desktop0 ~]# systemctl restart iscsid 
[root@desktop0 ~]# systemctl restart iscsi

######################################################
 MariaDB数据库        

  database:数据库

什么是数据库
 • DB,数据库:一批数据的集合,主流的数据库多用来存放关系型表格数据

虚拟机Server:安装MariaDB数据库 
[root@server0 ~]# yum -y install mariadb-server

 MariaDB数据库 ,端口:3306

启动数据库服务 
[root@server0 ~]# systemctl restart mariadb
[root@server0 ~]# systemctl enable  mariadb

######################################################

MariaDB数据库基本操作

[root@server0 ~]# mysql             #默认没有密码

 MariaDB [(none)]> show  databases;             #查看所有库
 MariaDB [(none)]> create database  nsd1710;    #创建库

 MariaDB [(none)]> show  databases;
 MariaDB [(none)]> drop  database  nsd1710;      #删除库

 MariaDB [(none)]> show  databases;

 MariaDB [(none)]> quit

[root@server0 ~]#

  设置MariaDB数据库管理员的密码

    数据库管理员名:root   MariaDB数据库   mysql-----》user

    系统管理员名:root    /etc/passwd

– mysqladmin  [-u用户名]   [-p[旧密码]]   password '新密码'

[root@server0 ~]# mysqladmin  -u  root   password  '123'

[root@server0 ~]# mysql -u root -p
Enter password: 输入密码 

[root@server0 ~]# mysql -u root -p123     #非交互输入密码进入

##########################################################

• 禁止监听,只服务于本机

[root@server0 ~]# vim  /etc/my.cnf
[mysqld]
skip-networking     //跳过网络监听
.. ..
[root@server0 ~]# systemctl restart mariadb

##########################################################

– 使用/选择数据库:USE 数据库名;
– 列出库里有哪些表:SHOW TABLES;

[root@server0 ~]# mysql  -u root  -p123

MariaDB [mysql]> show   databases;
MariaDB [mysql]> use   mysql;
MariaDB [mysql]> show   tables;
MariaDB [mysql]> create   database   nsd1710;
MariaDB [mysql]> show   databases;

在虚拟机Server0上操作:下载事先备份好的数据库文件

# wget http://cla***oom/pub/materials/users.sql

导入数据到数据库中
[root@server0 ~]# mysql -u root -p123 nsd1710 < users.sql 

[root@server0 ~]# mysql -u root -p123
MariaDB [(none)]> use nsd1710;
MariaDB [nsd1710]> show tables;

  查询数据库中表记录
 select  表字段   from  库.表名

 select  *   from  nsd1710.base;

MariaDB [nsd1710]> select * from location;
MariaDB [nsd1710]> select * from base;

#########################################################
 增 insert 
 删 delete
 改 update
 查 select 

有条件的查询

1.在base表中查询密码为123的用户的名字?
[root@server0 ~]# mysql -u root -p123
MariaDB [(none)]> use nsd1710;
MariaDB [nsd1710]> show tables;

> select * from base where password='123';

> select name,password from base where password='123';

> select name from base where password='123';

> select id,name from base;

并使用相 应的 SQL 查询以回答下列问题:
1)密码是 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','321');   #插入表记录
> insert location  values (6,'Sunnyvale');   #插入表记录
> select * from base;
> select * from location ;

> select * from base,location                             where  base.name='Barbara'  and  location.city='Sunnyvale'    and  base.id=location.id;

##########################################################
 数据库授权

– 除了 root 用户,此nsd1710数据库只能被用户 lisi 查询,此用户的密码为123

  MariaDB数据库   mysql-----》user

– GRANT 权限列表  ON 数据库名.表名 TO 用户名@ 客户机地址  IDENTIFIED BY '密码';

[root@server0 ~]# mysql -u root -p123

grant select on nsd1710.* to  lisi@localhost identified by  '123';

     当lisi从本地localhost登陆,输入密码123.将会获得nsd1710库中所有表的查询的权限

验证:测试lisi登陆
[root@server0 ~]# mysql -u lisi -p123

######################################################
DELETE 删除表记录
• MariaDB [(none)]> 交互指令
– DELETE  FROM  [数据库.]表名  WHERE  条件语句;

1. 禁止空密码root用户访问 mariadb 数据库

[root@server0 ~]# mysql -u root -p123
> 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;

###########################################################

刷新user表的记录:
MariaDB [(none)]> flush privileges;

###########################################################

真机上:还原三台虚拟机cla***oom、server、desktop

[root@room9pc14 桌面]# rht-vmctl reset cla***oom
[root@room9pc14 桌面]# rht-vmctl reset server
[root@room9pc14 桌面]# rht-vmctl reset desktop

真机远程管理:ssh方式,方便使用server与desktop   

[root@room9pc14 桌面]# ssh  用户名@IP地址

补充快捷键: Ctrl+Shift+t 开启一个新的终端

[root@room9pc14 桌面]# ssh -X root@172.25.0.11

##################################################

修改两台虚拟机防火墙默认区域为trusted

[root@server0 ~]# firewall-cmd --set-default-zone=trusted
[root@desktop0 ~]# firewall-cmd --set-default-zone=trusted 

#######################################################
搭建基本的Web服务

• 基于 B/S (Browser/Server)架构的网页服务
– 服务端提供网页
– 浏览器下载并显示网页
• Hyper Text Markup Language,超文本标记语言
• Hyper Text Transfer Protocol,超文本传输协议

 装包、起服务

 服务端:Server
  1. 安装软件httpd
  2. 启动httpd服务,设置开机自起
   默认网页文件的位置:/var/www/html/index.html
  3. 书写一个页面文件
  # echo '<h1>My First Web' > /var/www/html/index.html

  客户端:Desktop
     #前提:真机所有浏览器关闭
    1.测试访问:firefox   172.25.0.11   
    2.测试访问:命令行测试工具
  [root@desktop0 ~]# elinks -dump 172.25.0.11

#########################################################
  设置Web的域名

   DNS服务器:cla***oom.example.com

        server0.example.com  
        www0.example.com
        webapp0.example.com

虚拟机Server0:
 1.修改配置文件/etc/httpd/conf/httpd.conf  
    #补充vim 命令模式  /ServerName 全文查找ServerName 按n、N跳转
    #将开头的‘#’去掉

  ServerName server0.example.com:80   

 2.重起httpd服务

虚拟机desktop0:
  测试:elinks -dump server0.example.com

#################################################
 DocumentRoot:网页根目录(/var/www/html)

虚拟机Server0:
 1.修改配置文件/etc/httpd/conf/httpd.conf  
    #补充vim 命令模式  /Doc 全文查找Doc  按n、N跳转

   DocumentRoot "/var/www/myweb"

  2.创建目录/var/www/myweb,重起httpd服务

  3.书写新的测试页面
[root@server0 ~]# echo woshi myweb > /var/www/myweb/index.html

 虚拟机desktop0:
    测试:elinks -dump server0.example.com
#######################################################

  服务端与客户端路径的对照:
 客户端: elinks  -dump  server0.example.com

 服务端: /var/www/myweb

 客户端: elinks  -dump  server0.example.com/abc

 服务端: /var/www/myweb/abc

 客户端:   server0.example.com/abc/private

 服务端: /var/www/myweb/abc/private

######################################################
  虚拟Web主机

  一台服务器,提供多个不同的Web站点

• 区分方式
  – 基于域名的虚拟主机
  – 基于端口的虚拟主机
  – 基于IP地址的虚拟主机

#######################################################
 基于域名的虚拟主机

   一旦启用 虚拟Web主机功能,所有的站点都必须用虚拟Web主机来实现

      /etc/httpd/conf.d/*.conf

  容器

• 为每个虚拟站点添加配置
 <VirtualHost IP地址:端口>
   ServerName   此站点的DNS名称
   DocumentRoot 此站点的网页根目录
 </VirtualHost>

#帮助文档  /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
虚拟机Server0:
[root@server0 ~]# vim  /etc/httpd/conf.d/nsd01.conf  #调用配置
<VirtualHost   *:80>                      #虚拟Web主机开始
    DocumentRoot  /var/www/qq             #指定网页文件根目录
    ServerName  www0.example.com          #指定域名
</VirtualHost>                  #虚拟Web主机结束
<VirtualHost   *:80>
    DocumentRoot  /var/www/baidu
    ServerName  webapp0.example.com
</VirtualHost>
<VirtualHost   *:80>
    DocumentRoot  /var/www/myweb
    ServerName  server0.example.com
</VirtualHost>

[root@server0 ~]# mkdir /var/www/qq       #建立相应的网页目录
[root@server0 ~]# mkdir /var/www/baidu    #建立相应的网页目录
[root@server0 ~]# echo QQ > /var/www/qq/index.html
[root@server0 ~]# echo baidu > /var/www/baidu/index.html
[root@server0 ~]# systemctl restart httpd

#########################################################
实现httpd访问控制,实现仅本机访问页面

• 使用 <Directory> 配置区段
– 每个文件夹自动继承其父目录的ACL访问权限
– 除非针对子目录有明确设置

<Directory 目录的绝对路径>
.. ..
  Require all denied|granted
  Require ip IP或网段地址 .. ..
</Directory>

虚拟机Server:
1.建立目录
# mkdir /var/www/myweb/private
2.写入网页文件
# echo woshi private > /var/www/myweb/private/index.html

测试:
 虚拟机Server: elinks -dump server0.example.com/private
 虚拟机Desktop: elinks -dump server0.example.com/private

3.实现httpd服务访问控制
[root@server0 ~]# vim  /etc/httpd/conf.d/nsd02.conf
 <Directory "/var/www/myweb/private">
     Require  ip  127.0.0.1   172.25.0.11
 </Directory>

4.重起httpd服务

测试:
 虚拟机Server: elinks -dump server0.example.com/private #可以

 虚拟机Desktop: elinks -dump server0.example.com/private #失败

########################################################
 SELinux 安全上下文(标签)

    • 方式1:参照标准目录,重设新目录的属性
    – chcon [-R] --reference=模板目录    新目录

案例4:使用自定Web根目录
调整 Web 站点 http://server0.example.com 的网页
目录,要求如下:
 1)新建目录 /webroot,作为此站点新的网页目录
[root@server0 ~]# mkdir /webroot
[root@server0 ~]# echo woshi webroot > /webroot/index.html
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf  
 <VirtualHost *:80>
    DocumentRoot /webroot
    ServerName server0.example.com
 </VirtualHost>

[root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf
 <Directory "/webroot">
    Require all granted
 </Directory>

[root@server0 ~]# ls -Zd /var/www
[root@server0 ~]# ls -Zd /webroot
[root@server0 ~]# chcon -R  --reference=/var/www  /webroot/
[root@server0 ~]# ls -Zd /webroot

[root@server0 ~]# systemctl restart httpd

###################################################
  cp会继承标签值,mv不会继承:  尽量用cp
###################################################

部署动态Web站点

1.在虚拟机Server上,下载动态页面(Python页面)

 # wget http://cla***oom/pub/materials/webinfo.wsgi
 # cat  webinfo.wsgi

2.在虚拟机Server上,放入webapp0.example.com默认网页根目录

[root@server0 ~]# vim  /etc/httpd/conf.d/nsd01.conf 
[root@server0 ~]# cp  webinfo.wsgi  /var/www/baidu/
[root@server0 ~]# ls  /var/www/baidu/

3.安装Python程序,解析识别 Python页面

[root@server0 ~]# yum -y install mod_wsgi

4.Desktop测试:
   # elinks -dump webapp0.example.com/webinfo.wsgi
     #  可以看到Python代码

5.方便访问,让客户端访问webapp0.example.com可以直接看到 Python页面
  虚拟机Server0上:网页跳转(网页别名)
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf 
 <VirtualHost *:80>
    DocumentRoot /var/www/baidu
    ServerName webapp0.example.com
    alias  /  /var/www/baidu/webinfo.wsgi

 </VirtualHost>
[root@server0 ~]# systemctl restart httpd

6. 客户端测试访问    
[root@desktop0 ~]# elinks -dump webapp0.example.com

7. 程序 Python 的翻译
  虚拟机Server0上:
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf 
 <VirtualHost *:80>
    DocumentRoot /var/www/baidu
    ServerName webapp0.example.com
    wsgiscriptalias  /  /var/www/baidu/webinfo.wsgi

 </VirtualHost>
[root@server0 ~]# systemctl restart httpd

8. 客户端测试访问    
[root@desktop0 ~]# elinks -dump webapp0.example.com

9.此webapp0.example.com侦听在端口8909
  虚拟机Server0上:
[root@server0 ~]# vim /etc/httpd/conf.d/nsd01.conf 
 Listen 8909
 <VirtualHost *:8909>
    DocumentRoot /var/www/baidu
    ServerName webapp0.example.com
    WsgiScriptAlias  /  /var/www/baidu/webinfo.wsgi
 </VirtualHost>
[root@server0 ~]# 
   显示SELinux开放的所有接口
[root@server0 ~]# semanage port -l
[root@server0 ~]# semanage port -l | grep http
[root@server0 ~]# semanage port -a -t http_port_t -p tcp 8909
      -a :添加
      -t:类型
      -p:协议
[root@server0 ~]# systemctl restart httpd
[root@desktop0 ~]# elinks -dump webapp0.example.com:8909
########################################################

真机上:还原三台虚拟机cla***oom、server、desktop

[root@room9pc14 桌面]# rht-vmctl reset cla***oom
[root@room9pc14 桌面]# rht-vmctl reset server
[root@room9pc14 桌面]# rht-vmctl reset desktop

真机远程管理:ssh方式,方便使用server与desktop   

[root@room9pc14 桌面]# ssh  用户名@IP地址

补充快捷键: Ctrl+Shift+t 开启一个新的终端

[root@room9pc14 桌面]# ssh -X root@172.25.0.11
[root@room9pc14 桌面]# ssh -X root@172.25.0.10
##################################################

修改两台虚拟机防火墙默认区域为trusted

[root@server0 ~]# firewall-cmd --set-default-zone=trusted
[root@desktop0 ~]# firewall-cmd --set-default-zone=trusted 

#######################################################
搭建安全的Web服务
   http------》https

1.安装,实现Web加密传输的软件
[root@server0 ~]#  yum -y install mod_ssl

[root@server0 ~]# ls /etc/httpd/conf.d/
autoindex.conf  README    userdir.conf
nsd01.conf      ssl.conf  welcome.conf

2.部署网站数字证书(营业执照)
# cd  /etc/pki/tls/certs/
# ls
# wget  http://cla***oom/pub/tls/certs/server0.crt
# ls

3.部署网站根证书(公安局信息)
# cd  /etc/pki/tls/certs/
# ls
# wget  http://cla***oom/pub/example-ca.crt
# ls

4.部署私钥(用于解密)
# cd /etc/pki/tls/private/
# ls
# wget http://cla***oom/pub/tls/private/server0.key
# ls

5.修改配置文件/etc/httpd/conf.d/ssl.conf
# vim /etc/httpd/conf.d/ssl.conf 
   补充:vim 末行模式   :set   nu   添加行号

 59 DocumentRoot "/var/www/html"         #去掉注释
 60 ServerName server0.example.com:443   #去掉注释,修改域名

#指定网站证书位置及名称
 100 SSLCertificateFile  /etc/pki/tls/certs/server0.crt

#指定私钥位置及名称
 107 SSLCertificateKeyFile /etc/pki/tls/private/server0.key

#指定根证书位置及名称
 122 SSLCACertificateFile  /etc/pki/tls/certs/example-ca.crt

6.重起httpd服务

7.Desktop验证:
[root@desktop0 ~]# firefox https://server0.example.com

    点击: 我以了解安全的风险
              添加例外
              确认安全例外

########################################################

 配置邮件服务器

• 电子邮件服务器的基本功能
  – 为用户提供电子邮箱存储空间(用户名@邮件域名)
  – 处理用户发出的邮件 —— 传递给收件服务器
  – 处理用户收到的邮件 —— 投递到邮箱

     SMTP(发邮件的协议  端口:25)
     pop3(收邮件的协议  端口:110)

  DNS:cla***om.example.com
  server0.example.com

虚拟机Server0

1.安装postfix,提供邮件功能的软件
2.建立邮件账户,邮件服务器上本地用户
[root@server0 /]# useradd -s /sbin/nologin yg
[root@server0 /]# useradd -s /sbin/nologin xln
[root@server0 /]# echo 123 | passwd --stdin yg
[root@server0 /]# echo 123 | passwd --stdin xln

3.配置邮件服务器 /etc/postfix/main.cf

[root@server0 /]# vim /etc/postfix/main.cf

 99  myorigin = server0.example.com   #默认补全的邮件域名后缀  
 116 inet_interfaces = all            #允许所有的网络接口
 164 mydestination = server0.example.com     #判断为本域邮件

4.重起postfix服务
[root@server0 /]# systemctl restart postfix

######################################################
测试:
使用mail命令发信/收信
• mail 发信操作
  – mail  -s  '邮件标题'     -r  发件人       收件人

• mail 收信操作
  – mail  [-u 用户名]

[root@server0 /]# mail  -s  'test01'   -r   yg   xln
AAAAAAAAAAAAAA
BBBBBBBBBBBBBB
.
EOT
[root@server0 /]# mail  -u   xln
Heirloom Mail version 12.5 7/5/10.  Type ? for help.
"/var/mail/xln": 1 message 1 new
>N  1 yg@server0.example.c  Tue Dec  5 14:18  19/598   
& 1

########################################################
nullclient邮件服务(邮件空客户端)

• nullclient,空客户端
– 不提供任何邮箱账号,因此不需要投递邮件
– 但是可以为用户代发邮件

1.把Desktop配置成,邮件服务器
[root@desktop0 ~]# lab smtp-nullclient setup

2.配置Server为邮件空客户端
[root@server0 /]# vim  /etc/postfix/main.cf
  – 所发出的邮件显示来自于 desktop0.example.com

 99   myorigin = desktop0.example.com
 116  inet_interfaces = localhost
 164  mydestination = 
 317  relayhost = [172.25.0.10]      #将邮件移交给那台服务器

3.重起postfix服务
[root@server0 /]#  systemctl restart postfix

########################################################
验证:
在Server上发一封邮件,给本地的Student
[root@server0 /]# mail -s 'test02' -r  yg  student
abc
.
EOT

到Desktop:最终由Desktop上的student收到
[root@desktop0 /]# mail -u student

#######################################################

手动新键一台虚拟机:
   虚拟机的名字:nsd
   CPU、内存、硬盘均默认
     网络类型:private1
   软件包选择:带GUI的服务器
   分区:自动分区
######################################################

虚拟化概述
• virtualization 资源管理
– x个物理资源 --> y个逻辑资源
– 实现程度:完全、部分、硬件辅助(CPU)

######################################################
虚拟机nsd:搭建本地Yum仓库

1.服务端:挂载光盘
[root@localhost 桌面]# mount /dev/cdrom /mnt
[root@localhost 桌面]# ls /mnt

2.客户端:书写一个配置文件/etc/yum.repos.d/*.repo
[root@localhost 桌面]# vim  /etc/yum.repos.d/abc.repo
    [abc]
    name=abc
    baseurl=file:///mnt
    enabled=1
    gpgcheck=0
[root@localhost 桌面]# yum repolist

########################################################

yum软件组管理
• 使用RHEL7软件仓库的预设分组
– yum groups list [hidden] [组名]...
– yum groups info [组名]...
– yum groups install [组名]...
– yum groups remove [组名]

安装虚拟化服务器平台
• 主要软件组
 Virtualization\ Client      #虚拟化客户端
 Virtualization\ Platform    #虚拟化平台
 Virtualization\ Hypervisor  #虚拟化管理器
 Virtualization\ Tools       #虚拟化工具

[root@localhost 桌面]# yum -y groups install 
 Virtualization\ Client 
 Virtualization\ Platform 
 Virtualization\ Hypervisor 
 Virtualization\ Tools

######################################################

 虚拟化服务:libvirtd

#######################################################
真机操作:
• 查看KVM节点(服务器)信息
  – virsh nodeinfo
• 列出虚拟机
  – virsh list [--all]
• 查看指定虚拟机的信息
  – virsh dominfo 虚拟机名称
• 运行|重启|关闭指定的虚拟机
  – virsh start|reboot|shutdown 虚拟机名称
• 强制关闭指定的虚拟机
  – virsh  destroy  虚拟机名称

[root@room9pc14 桌面]# virsh autostart nsd   #设置开机自起动
[root@room9pc14 桌面]# virsh dominfo nsd
[root@room9pc14 桌面]# virsh autostart --disable nsd #关闭自起动
[root@room9pc14 桌面]# virsh dominfo nsd
#########################################################
  删除唯一性的硬件设备

[root@room9pc14 桌面]# virsh  destroy  nsd
  手动图形删除:两个 channel 设备(接口设备,具备唯一性)

##########################################################
一台KVM虚拟机的组成

– xml配置文件(虚拟机描述文件):定义虚拟机的名称、UUID、CPU、内
存、虚拟磁盘、网卡等各种参数设置
 虚拟机描述文件默认路径: /etc/libvirt/qemu

– 磁盘镜像文件:保存虚拟机的操作系统及文档数据,
镜像路径取决于xml配置文件中的定义
 磁盘镜像文件 默认路径: /var/lib/libvirt/images/
 查看磁盘镜像文件信息
  # qemu-img info /var/lib/libvirt/images/nsd.qcow2 

########################################################
手动快速创建一台虚拟机
1.创建新的磁盘文件
[root@room9pc14 桌面]# cd /var/lib/libvirt/images/
[root@room9pc14 images]# cp nsd.qcow2  test01.qcow2

2.写新的虚拟机描述文件
[root@room9pc14 images]# cd /etc/libvirt/qemu/
[root@room9pc14 qemu]# cp nsd.xml test01.xml
[root@room9pc14 qemu]# vim test01.xml 
   修改name、删除UUID整行、修改磁盘文件路径、删除MAC整行

3.导入虚拟机信息
[root@room9pc14 /]# virsh define /etc/libvirt/qemu/test01.xml
[root@room9pc14 /]# virsh list --all
[root@room9pc14 /]# virsh start test01

#########################################################

导出xml配置文件
  – 查看:virsh  dumpxml  虚拟机名
  – 备份:virsh  dumpxml  虚拟机名  >  虚拟机名.xml

编辑虚拟机设置
• 对虚拟机的配置进行调整
– 编辑:  virsh   edit   虚拟机名
            导出、修改、导入

####################################################
删除虚拟机
– virsh undefine 虚拟机名

# virsh undefine test01
# rm -rf /var/lib/libvirt/images/test01.qcow2 

####################################################

COW技术原理
• Copy On Write,写时复制
– 直接映射原始盘的数据内容
– 对前端盘的修改不回写到原始盘

1.快速创建qcow前端盘
• qemu-img 通过 -b 选项复用指定后端盘
– qemu-img create -f qcow2 -b 后端盘   前端盘

# cd /var/lib/libvirt/images/
# qemu-img create -f qcow2   -b nsd.qcow2  new01.qcow2

# qemu-img info new01.qcow2

2.常见新的虚拟机描述文件
# cd /etc/libvirt/qemu/
# cp nsd.xml new01.xml
# vim new01.xml
   修改name、删除UUID整行、修改磁盘文件路径指定前端盘、删除MAC整行 

3.导入新的虚拟机
# virsh  define  /etc/libvirt/qemu/new01.xml

#######################################################
搭建新的教学环境
1.在真机上操作新建两台虚拟机
[root@room9pc14 桌面]# clone-vm7 
Enter VM number: 1

[root@room9pc14 桌面]# clone-vm7 
Enter VM number: 2

2.在真机上操作,随真机的启动而启用
[root@room9pc14 桌面]# virsh autostart A
[root@room9pc14 桌面]# virsh autostart B

3.以root身份进入虚拟机,配置两台虚拟机的网络地址参数,密码123456
   虚拟机A:
       IP地址:192.168.4.7/24
             主机名:svr7.tedu.cn

   虚拟机B:
       IP地址:192.168.4.207/24
             主机名:pc207.tedu.cn

4.真机利用Web服务提供Yum源(共享光盘所有内容)

[root@room9pc14 桌面]# ifconfig private1
[root@room9pc14 桌面]# rpm -q httpd
httpd-2.4.6-40.el7.x86_64

# mkdir  /var/www/html/rhel7
# mount  /ISO/rhel-server-7.2-x86_64-dvd.iso  /mnt/
# cp -r  /mnt/*   /var/www/html/rhel7/

# firefox http://127.0.0.1/rhel7
# firefox http://192.168.4.254/rhel7

6.虚拟机A与虚拟机B指定Yum位置
[root@svr7 ~]# vim /etc/yum.repos.d/rhel7.repo
   [rhel7]
   name=rhel7 
   baseurl=http://192.168.4.254/rhel7
   enabled=1
   gpgcheck=0

[root@pc207 ~]# vim /etc/yum.repos.d/rhel7.repo
   [rhel7]
   name=rhel7 
   baseurl=http://192.168.4.254/rhel7
   enabled=1
   gpgcheck=0
###########################################################

手动新键一台虚拟机:
   虚拟机的名字:nsd
   CPU、内存、硬盘均默认
     网络类型:private1
   软件包选择:带GUI的服务器
   分区:自动分区
######################################################

虚拟化概述
• virtualization 资源管理
– x个物理资源 --> y个逻辑资源
– 实现程度:完全、部分、硬件辅助(CPU)

######################################################
虚拟机nsd:搭建本地Yum仓库

1.服务端:挂载光盘
[root@localhost 桌面]# mount /dev/cdrom /mnt
[root@localhost 桌面]# ls /mnt

2.客户端:书写一个配置文件/etc/yum.repos.d/*.repo
[root@localhost 桌面]# vim  /etc/yum.repos.d/abc.repo
    [abc]
    name=abc
    baseurl=file:///mnt
    enabled=1
    gpgcheck=0
[root@localhost 桌面]# yum repolist

########################################################

yum软件组管理
• 使用RHEL7软件仓库的预设分组
– yum groups list [hidden] [组名]...
– yum groups info [组名]...
– yum groups install [组名]...
– yum groups remove [组名]

安装虚拟化服务器平台
• 主要软件组
 Virtualization\ Client      #虚拟化客户端
 Virtualization\ Platform    #虚拟化平台
 Virtualization\ Hypervisor  #虚拟化管理器
 Virtualization\ Tools       #虚拟化工具

[root@localhost 桌面]# yum -y groups install 
 Virtualization\ Client 
 Virtualization\ Platform 
 Virtualization\ Hypervisor 
 Virtualization\ Tools

######################################################

 虚拟化服务:libvirtd

#######################################################
真机操作:
• 查看KVM节点(服务器)信息
  – virsh nodeinfo
• 列出虚拟机
  – virsh list [--all]
• 查看指定虚拟机的信息
  – virsh dominfo 虚拟机名称
• 运行|重启|关闭指定的虚拟机
  – virsh start|reboot|shutdown 虚拟机名称
• 强制关闭指定的虚拟机
  – virsh  destroy  虚拟机名称

[root@room9pc14 桌面]# virsh autostart nsd   #设置开机自起动
[root@room9pc14 桌面]# virsh dominfo nsd
[root@room9pc14 桌面]# virsh autostart --disable nsd #关闭自起动
[root@room9pc14 桌面]# virsh dominfo nsd
#########################################################
  删除唯一性的硬件设备

[root@room9pc14 桌面]# virsh  destroy  nsd
  手动图形删除:两个 channel 设备(接口设备,具备唯一性)

##########################################################
一台KVM虚拟机的组成

– xml配置文件(虚拟机描述文件):定义虚拟机的名称、UUID、CPU、内
存、虚拟磁盘、网卡等各种参数设置
 虚拟机描述文件默认路径: /etc/libvirt/qemu

– 磁盘镜像文件:保存虚拟机的操作系统及文档数据,
镜像路径取决于xml配置文件中的定义
 磁盘镜像文件 默认路径: /var/lib/libvirt/images/
 查看磁盘镜像文件信息
  # qemu-img info /var/lib/libvirt/images/nsd.qcow2 

########################################################
手动快速创建一台虚拟机
1.创建新的磁盘文件
[root@room9pc14 桌面]# cd /var/lib/libvirt/images/
[root@room9pc14 images]# cp nsd.qcow2  test01.qcow2

2.写新的虚拟机描述文件
[root@room9pc14 images]# cd /etc/libvirt/qemu/
[root@room9pc14 qemu]# cp nsd.xml test01.xml
[root@room9pc14 qemu]# vim test01.xml 
   修改name、删除UUID整行、修改磁盘文件路径、删除MAC整行

3.导入虚拟机信息
[root@room9pc14 /]# virsh define /etc/libvirt/qemu/test01.xml
[root@room9pc14 /]# virsh list --all
[root@room9pc14 /]# virsh start test01

#########################################################

导出xml配置文件
  – 查看:virsh  dumpxml  虚拟机名
  – 备份:virsh  dumpxml  虚拟机名  >  虚拟机名.xml

编辑虚拟机设置
• 对虚拟机的配置进行调整
– 编辑:  virsh   edit   虚拟机名
            导出、修改、导入

####################################################
删除虚拟机
– virsh undefine 虚拟机名

# virsh undefine test01
# rm -rf /var/lib/libvirt/images/test01.qcow2 

####################################################

COW技术原理
• Copy On Write,写时复制
– 直接映射原始盘的数据内容
– 对前端盘的修改不回写到原始盘

1.快速创建qcow前端盘
• qemu-img 通过 -b 选项复用指定后端盘
– qemu-img create -f qcow2 -b 后端盘   前端盘

# cd /var/lib/libvirt/images/
# qemu-img create -f qcow2   -b nsd.qcow2  new01.qcow2

# qemu-img info new01.qcow2

2.常见新的虚拟机描述文件
# cd /etc/libvirt/qemu/
# cp nsd.xml new01.xml
# vim new01.xml
   修改name、删除UUID整行、修改磁盘文件路径指定前端盘、删除MAC整行 

3.导入新的虚拟机
# virsh  define  /etc/libvirt/qemu/new01.xml

#######################################################
搭建新的教学环境
1.在真机上操作新建两台虚拟机
[root@room9pc14 桌面]# clone-vm7 
Enter VM number: 1

[root@room9pc14 桌面]# clone-vm7 
Enter VM number: 2

2.在真机上操作,随真机的启动而启用
[root@room9pc14 桌面]# virsh autostart A
[root@room9pc14 桌面]# virsh autostart B

3.以root身份进入虚拟机,配置两台虚拟机的网络地址参数,密码123456
   虚拟机A:
       IP地址:192.168.4.7/24
             主机名:svr7.tedu.cn

   虚拟机B:
       IP地址:192.168.4.207/24
             主机名:pc207.tedu.cn

4.真机利用Web服务提供Yum源(共享光盘所有内容)

[root@room9pc14 桌面]# ifconfig private1
[root@room9pc14 桌面]# rpm -q httpd
httpd-2.4.6-40.el7.x86_64

# mkdir  /var/www/html/rhel7
# mount  /ISO/rhel-server-7.2-x86_64-dvd.iso  /mnt/
# cp -r  /mnt/*   /var/www/html/rhel7/

# firefox http://127.0.0.1/rhel7
# firefox http://192.168.4.254/rhel7

6.虚拟机A与虚拟机B指定Yum位置
[root@svr7 ~]# vim /etc/yum.repos.d/rhel7.repo
   [rhel7]
   name=rhel7 
   baseurl=http://192.168.4.254/rhel7
   enabled=1
   gpgcheck=0

[root@pc207 ~]# vim /etc/yum.repos.d/rhel7.repo
   [rhel7]
   name=rhel7 
   baseurl=http://192.168.4.254/rhel7
   enabled=1
   gpgcheck=0

7. 设置防火墙trusted与关闭SELinux

[root@svr7 ~]# firewall-cmd --set-default-zone=trusted
[root@svr7 ~]# setenforce 0   #当前修改为宽松模式
[root@svr7 ~]# getenforce 
  Permissive
[root@svr7 ~]# vim /etc/selinux/config 
  SELINUX=permissive

###########################################################
• 使用 guestmount 工具
    – 支持离线挂载 raw、qcow2 格式虚拟机磁盘
• 基本用法
  – guestmount  -a  虚拟机磁盘路径   -i   /挂载点

##########################################################
扩展的几个应用

 /boot          存放系统引导必需的文件,包括内核、启动配置
 /bin、/sbin    存放各种命令程序
 /dev           存放硬盘、键盘、鼠标、光驱等各种设备文件
 /etc           存放Linux系统及各种程序的配置文件
 /root、/home/  用户名 分别是管理员root、普通用户的默认家目录
 /var           存放日志文件、邮箱目录等经常变化的文件
 /proc          存放内存中的映射数据,不占用磁盘
 /tmp           存放系统运行过程中使用的一些临时文件

###################################################

权限的数值表示
• 权限的数值化
– 基本权限:r = 4,w = 2,x = 1 
虚拟机Svr7:
[root@svr7 ~]# mkdir /nsd01
[root@svr7 ~]# ls -ld /nsd01
drwxr-xr-x. 2 root root 6 12月  6 20:44 /nsd01

[root@svr7 ~]# chmod 007 /nsd01
[root@svr7 ~]# ls -ld /nsd01
d------rwx. 2 root root 6 12月  6 20:44 /nsd01

[root@svr7 ~]# chmod 700 /nsd01
[root@svr7 ~]# ls -ld /nsd01
drwx------. 2 root root 6 12月  6 20:44 /nsd01

[root@svr7 ~]# chmod 750 /nsd01
[root@svr7 ~]# ls -ld /nsd01
drwxr-x---. 2 root root 6 12月  6 20:44 /nsd01

################################################

自定义Yum仓库

1.自己下载的rpm包,真机的tools目录上传到虚拟机svr7
[root@room9pc14 桌面]# scp -r tools root@192.168.4.7:/root/
root@192.168.4.7's password:

2.虚拟机svr7查看
[root@svr7 ~]# ls /root/tools/other/

3.仓库数据文件
[root@svr7 ~]# createrepo /root/tools/other/
[root@svr7 ~]# ls /root/tools/other/

4.书写客户端配置文件
[root@svr7 ~]# vim /etc/yum.repos.d/rhel7.repo 
    [myrpm]
    name=myrpm
    baseurl=file:///root/tools/other
    enabled=1
    gpgcheck=0

[root@svr7 ~]# yum -y install sl
[root@svr7 ~]# rpm -ql  sl          #显示rpm安装清单

[root@svr7 ~]# yum -y install cmatrix
[root@svr7 ~]# rpm -ql  cmatrix     #显示rpm安装清单
[root@svr7 ~]# cmatrix

[root@svr7 ~]# yum -y install oneko
[root@svr7 ~]# oneko
[root@svr7 ~]# killall oneko

######################################################
• du,统计文件的占用空间
– du [选项]... [目录或文件]...

– -s:只统计每个参数所占用的总空间大小
– -h:提供易读容量单位(K、M等)

[root@svr7 ~]#  du -sh /root
[root@svr7 ~]#  du -sh /root /etc  /var

######################################################
 快捷方式(链接、连接):  ln -s  /路径/源文件      /路径/快捷方式的名字

# ln -s /etc/sysconfig/network-scripts/ifcfg-eth0  /opt/network

# ls -l /opt/

# cat /opt/network 

  i节点:编号,唯一标识硬盘上一块存储区域

• ln,创建软连接
– 软连接 --> 原始文档 --> i节点 --> 文档数据
– ln -s 原始文件或目录 软连接文件
 若原始文件或目录被删除,连接文件将失效
 软连接可存放在不同分区/文件系统

• ln,创建硬连接
– 硬连接 --> i节点 --> 文档数据
– ln 原始文件 硬连接文件
 若原始文件被删除,连接文件仍可用
 硬连接与原始文件必须在同一分区/文件系统

    只有硬连接不会产生新的文件,也不会单独占用新的磁盘空间
[root@svr7 ~]# rm -rf /opt/*
[root@svr7 ~]# echo 123 > /opt/A
[root@svr7 ~]# ln -s /opt/A /opt/A1       #制作软连接快捷方式
[root@svr7 ~]# ls /opt/

[root@svr7 ~]# ln /opt/A  /opt/A2         #制作硬连接快捷方式
[root@svr7 ~]# ls /opt/

[root@svr7 ~]# cp /opt/A /opt/A3           #复制新文件
[root@svr7 ~]# ls /opt/
[root@svr7 ~]# ls -i /opt/              #查看目录内容的i节点编号

[root@svr7 ~]# rm -rf /opt/A               #删除源文件
[root@svr7 ~]# ls -i /opt/
[root@svr7 ~]# cat /opt/A1            #软连接不可用
[root@svr7 ~]# cat /opt/A2            #硬连接可用
[root@svr7 ~]# cat /opt/A3            #复制新文件可用
########################################################
压缩和归档

   zip :跨平台(Windows与Linux) 

     命令格式:zip [-r]  /路径/备份文件.zip   /路径/被归档的文档..

[root@svr7 ~]# zip -r /opt/test01.zip  /home/ /boot/
[root@svr7 ~]# ls /opt
[root@svr7 ~]# unzip /opt/test01.zip -d /mnt/

[root@svr7 ~]# zip -r /opt/test02.zip  /etc/selinux
[root@svr7 ~]# ls /opt
[root@svr7 ~]# unzip  /opt/test02.zip  /mnt

##########################################################

• date,查看/调整系统日期时间
– date +%F
– date +"%Y-%m-%d %H:%M:%S"
– date -s yyyy-mm-dd HH:MM:SS"

历史命令

管理/调用曾经执行过的命令
– histroy:查看历史命令列表
– history -c:清空历史命令
– !str:执行最近一次以str开头的历史命令

• 调整历史命令的数量
[root@svr7 ~]# vim /etc/profile
 HISTSIZE=1000   //默认记录1000条

###################################################
• man,格式化手册阅读工具
– 按 上 、 下 、 PgUp 、PgDn 键滚动及翻页
– 按 q 键退出
– 按 / 键向后查找关键词(n、N切换)
[root@svr7 ~]# man mkdir
.. ..
[root@svr7 ~]# man 5 passwd

   5:配置文件帮助信息

#################################################

vim编辑技巧

光标跳转
  Home 键、数字 0       跳转至行首
  End 键                     跳转到行尾
  PgUp 键、PgDn 键    向上翻页、向下翻页
  1G 或 gg          跳转到文件的首行
  G                跳转到文件的末尾行

复制/粘贴/删除
  yy、4yy         复制光标处的一行、4行
  p               粘贴到光标处之后、之前
  x 或 Delete键      删除光标处的单个字符
  dd、6dd         删除光标处的一行、6行
  d^              从光标处之前删除至行首
  d$              从光标处删除到行尾
  C(大写)         从光标处删除到行尾,并且进入 输入模式

查找/撤销/保存
  /root      向后查找字符串“root”
  n、N       跳至后/前一个结果
  u          撤销最近的一次操作
  Ctrl + r   取消前一次撤销操作
  ZZ (大写)  保存修改并退出

######################################################

末行模式操作

   :r /etc/filesystems    读入其他文件内容

 [root@svr7 ~]# echo 123 > /opt/1.txt
 [root@svr7 ~]# echo abc > /opt/2.txt
 [root@svr7 ~]# vim /opt/1.txt 

             :r  /opt/2.txt  #读入/opt/2.txt内容到当前文本文件内容

字符串替换
 :s/root/admin        替换当前行第一个“root”
 :s/root/admin/g      替换当前行所有的“root”
 :1,8 s/root/admin/g  替换第1-8行所有的“root”
 :% s/root/admin/g    替换文件内所有的“root”

开关参数的控制
  :set nu|nonu  显示/不显示行号
  :set ai|noai  启用/关闭自动缩进

#########################################################

源码编译安装

• 主要优点
– 获得软件的最新版,及时修复bug
– 软件功能可按需选择/定制

  RPM软件包:rpm命令  yum仓库

             gcc、make               进行配置
   源代码软件包-------------------> 可以执行的程序------------>运行安装

步骤1:安装gcc与make编译工具
[root@svr7 ~]# yum -y install gcc make
[root@svr7 ~]# rpm -q gcc
[root@svr7 ~]# rpm -q make

步骤2:tar解包,释放源代码至指定目录
# rm -rf /opt/*
# tar -xf /root/tools/inotify-tools-3.13.tar.gz -C /opt/
# ls /opt
# ls /opt/inotify-tools-3.13

步骤3: ./configure 配置,指定安装目录/功能模块等选项
# cd  /opt/inotify-tools-3.13
# ./configure  --prefix=/mnt/myrpm   #配置功能,指定安装位置

 checking for gcc... no              #gcc没有安装

步骤4: make 编译,生成可执行的二进制程序文件
   解压目录下
  # make

步骤5: make install 安装,将编译好的文件复制到安装目录
  # make  install
  # ls /mnt/
  # ls /mnt/myrpm/
  # ls /mnt/myrpm/bin/

########################################################
Set UID
• 附加在属主的 x 位上
  – 属主的权限标识会变为 s
  – 适用于可执行文件,Set UID可以让使用者具有文件属主的身份及部分权限
[root@svr7 /]# which mkdir 
/usr/bin/mkdir
[root@svr7 /]# cp /usr/bin/mkdir /usr/bin/abcdir
[root@svr7 /]# chmod u+s /usr/bin/abcdir
[root@svr7 /]# ls -l /usr/bin/abcdir
[root@svr7 /]# useradd student
[root@svr7 /]# su - student
[student@svr7 ~]$ mkdir nsd01
[student@svr7 ~]$ ls -l
[student@svr7 ~]$ abcdir nsd02
[student@svr7 ~]$ ls -l 
[student@svr7 ~]$ exit

########################################################
查看网络接口信息
   netstat  -anptu

        -a:显示所有接口信息
        -n:以数字方式显示
        -p:显示程序信息  
        -t:tcp连接 
        -u:udp连接

########################################################

RAID阵列概述
• 廉价冗余磁盘阵列
– 通过硬件/软件技术,将多个较小/低速的磁盘整合成一个大磁盘
– 阵列的价值:提升I/O效率、硬件级别的数据冗余
– 不同RAID级别的功能、特性各不相同

###################################################
进程管理

   程序:静态没有执行的代码,占用磁盘空间

   进程:执行的代码放入内存中运行,占用内存、cpu

     PID:编号,标识进程
         父进程、子进程
####################################################

查看进程树
• pstree — Processes Tree
– 格式:pstree [选项] [PID或用户名]
• 常用命令选项
 – -a:显示完整的命令行
 – -p:列出对应PID编号

   systemd:内核直接运行的第一个进程,PID永远为1

[root@svr7 ~]# pstree
[root@svr7 ~]# pstree lisi
bash───vim
[root@svr7 ~]# pstree -p lisi
bash(30712)───vim(30751)
[root@svr7 ~]# pstree -ap lisi

#################################################

• ps aux 操作
– 列出正在运行的所有进程

• ps -elf 操作
– 列出正在运行的所有进程

#################################################

• top 交互式工具
– 格式: top [-d 刷新秒数]

   按大写的P   cpu排序
   按大写的M   内存排序

#######################################################

• pgrep — Process Grep
– 用途:pgrep [选项]... 查询条件

• 常用命令选项
– -l:输出进程名,而不仅仅是 PID
– -U:检索指定用户的进程
– -t:检索指定终端的进程

[root@svr7 ~]# pgrep log
[root@svr7 ~]# pgrep -l log

[root@svr7 ~]# pgrep -U lisi
[root@svr7 ~]# pgrep -lU lisi
[root@svr7 ~]# pstree -ap lisi

[root@svr7 ~]# who                #查看正在登陆的用户信息
[root@svr7 ~]# pgrep -lU lisi
[root@svr7 ~]# pgrep -lU lisi -t pts/2

########################################################
 进程的调度(前后台)

放入后台启动
– 在命令行末尾添加“&”符号,正在运行的状态放入后台
– Ctrl + z 组合键,暂停的状态放入后台

[root@svr7 ~]# sleep 800 &       #将前台的进程,正在运行放入后台    
[root@svr7 ~]# jobs              #查看后台进程

[root@svr7 ~]# jobs -l           #查看后台进程,并且加上PID
[root@svr7 ~]# sleep 700
^Z                            #按Ctrl+z可以暂停放入后台
[2]+  已停止               sleep 700
[root@svr7 ~]# jobs -l
[root@svr7 ~]# bg 2           #将后台进程编号为2的,继续在后台运行
[2]+ sleep 700 &
[root@svr7 ~]# jobs -l
[root@svr7 ~]# fg 1         #将后台的进程恢复到前台
sleep 800
^C                        #按Ctrl+c结束进程
[root@svr7 ~]# fg 2
sleep 700
^C                       #按Ctrl+c结束进程
#########################################################
杀死进程

  – kill  [-9]  PID... 
  – killall  [-9]  进程名...

[root@svr7 ~]# sleep  900 &
[root@svr7 ~]# sleep  900 &
[root@svr7 ~]# sleep  900 &
[root@svr7 ~]# sleep  900 &
[root@svr7 ~]# jobs -l
[root@svr7 ~]# kill 1928
[root@svr7 ~]# jobs -l
[root@svr7 ~]# killall  sleep
[root@svr7 ~]# jobs -l

[root@svr7 ~]# killall  -9  -u  lisi       #强制踢出一个用户

#########################################################
 日志管理

• 系统和程序的“日记本”
– 记录系统、程序运行中发生的各种事件
– 通过查看日志,了解及排除故障
– 信息安全控制的“依据

主要用途
  /var/log/messages      记录内核消息、各种服务的公共消息
  /var/log/dmesg         记录系统启动过程的各种消息
  /var/log/cron          记录与cron计划任务相关的消息
  /var/log/maillog       记录邮件收发相关的消息
  /var/log/secure        记录与访问限制相关的安全消息

######################################################
  tailf   实时跟踪 新增日值消息

#######################################################
• users、who、w 命令
– 查看已登录的用户信息,详细度不同

• last、lastb 命令
– 查看最近登录成功/失败的用户信息

[root@svr7 ~]#  users
[root@svr7 ~]#  who
[root@svr7 ~]#  w

[root@svr7 ~]#  last -2    #最近两次登录成功
[root@svr7 ~]#  lastb -2   #最近两次登录失败

####################################################
Linux内核定义的事件紧急程度

 – 分为 0~7 共8种优先级别
 – 其数值越小,表示对应事件越紧急/重要

 0  EMERG(紧急)   会导致主机系统不可用的情况
 1  ALERT(警告)   必须马上采取措施解决的问题
 2  CRIT(严重)    比较严重的情况
 3  ERR(错误) 运行出现错误
 4  WARNING(提醒) 可能会影响系统功能的事件
 5  NOTICE(注意)  不会影响系统但值得注意
 6  INFO(信息)    一般信息
 7  DEBUG(调试)   程序或系统调试信息等

• 提取由 systemd-journal 服务搜集的日志
• 常见用法
– journalctl | grep 关键词
– journalctl -u 服务名 [-p 优先级]
– journalctl -n 消息条数
– journalctl --since="yyyy-mm-dd HH:MM:SS" --
until="yyyy-mm-dd HH:MM:SS"

[root@svr7 ~]# yum -y install httpd
[root@svr7 ~]# systemctl restart httpd

[root@svr7 ~]# journalctl -u httpd -p 6

#######################################################
 systemctl控制

systemd
• 一个更高效的系统&服务管理器
   – 开机服务并行启动,各系统服务间的精确依赖
   – 服务目录:/lib/systemd/system/

• 控制服务状态
– systemctl start|stop|restart 服务名...

• 查看服务的运行状态
– systemctl status|is-active  服务名...

[root@svr7 ~]# systemctl enable httpd      #设置随机自起
[root@svr7 ~]# systemctl is-enabled httpd  #查看是否随机自起
[root@svr7 ~]# systemctl disable httpd     #设置随机不自起
[root@svr7 ~]# systemctl is-enabled httpd

#########################################################

  graphical.target   图形模式  
  multi-user.target  文本模式

当前切换图形模式  
[root@svr7 ~]# systemctl isolate graphical.target

每次开机都进入的模式,默认模式的修改
[root@svr7 ~]# systemctl get-default 

[root@svr7 ~]# systemctl set-default graphical.target 
[root@svr7 ~]# systemctl get-default 
[root@svr7 ~]# reboot

######################################################

  wc: 统计
 [root@svr7 ~]# wc -l /etc/passwd    #统计行数

  请统计/etc/以“.conf” 结尾的文件有多少个?(不包括子目录)
 [root@svr7 ~]# ls -l /etc/*.conf | wc -l

  请统计/etc/以“.conf” 结尾的文件有多少个?(包括子目录)
 [root@svr7 ~]# find /etc -name "*.conf" | wc -l

  请统计/etc/以“.conf” 结尾的文件有多少个?
 [root@svr7 ~]# ls -l /etc/*.conf | wc -l
 [root@svr7 ~]# find /etc -name "*.conf" | wc -l

####################################################
find  查找:

        -group :查找所属组
        -mtime:按照时间去查找,过去时间  
                               +10 :十天之前          
                               -10  :十天之内  

#####################################################

DNS解析的作用
• 为什么需要DNS系统
– www.baidu.com 与 119.75.217.56,哪个更好记?
– 互联网中的114查号台/导航员

• DNS服务器的功能
– 正向解析:根据注册的域名查找其对应的IP地址
– 反向解析:根据IP地址查找对应的注册域名,不常用

     所有域名都必须以 “.” 结尾   根域

                “.”  根域

    .com  .cn   .us    .kr   .hk   .tw

       .com.cn    .edu.cn    .org.cn

       .sina.com.cn  

    主机名:www.sina.com.cn   tts.sina.com.cn

• Full Qualified Domain Name,完全合格主机名
   – = 站点名.域名后缀
   – = 站点名. .. .. .二级域.一级域

###################################################

BIND域名服务
• BIND(Berkeley Internet Name Daemon)
– 伯克利 Internet 域名服务

– 官方站点:https://www.isc.org/
[root@svr7 ~]# yum -y install bind-chroot bind
[root@svr7 ~]# rpm -qa bind*
bind-9.9.4-29.el7.x86_64    //域名服务包
bind-chroot-9.9.4-29.el7.x86_64    //提供虚拟根支持
• BIND服务器端程序

– 系统服务:named
– 默认端口:TCP/UDP 53

  TCP 53  : 主从同步
  UDP 53  : 为客户端解析域名

– 运行时的虚拟根环境:/var/named/chroot/

 • 主配置文件:/etc/named.conf    #设置负责解析的域名
 • 地址库文件:/var/named/        #主机名与IP地址对应记录

######################################################
服务端svr7:
1.安装bind、bind-chroot
2.修改主配置文件/etc/named.conf
  options {
      directory     "/var/named";    #指定地址库文件位置
   };
   zone  "tedu.cn"   IN  {         #指定负责解析的域名
      type   master;            #指定为权威主服务器
      file   "tedu.cn.zone";    #指定地址库文件的名称
    };

3.创建相应的地址库文件 /var/named/tedu.cn.zone
 # cd /var/named/
 # cp -p named.localhost  tedu.cn.zone     #保持属性不变  
 # ls -l tedu.cn.zone
 # vim tedu.cn.zone 
 # tail -4  tedu.cn.zone
  tedu.cn.          NS      svr7.tedu.cn.  
  svr7            A      192.168.4.7
  www             A       1.1.1.1
  ftp             A       2.2.2.2

4.重起named服务

客户端测试:虚拟机pc207
指定DNS服务器IP地址
[root@pc207 ~]# echo nameserver 192.168.4.7 > /etc/resolv.conf
[root@pc207 ~]# nslookup www.tedu.cn

##########################################################
 特殊的解析记录
[root@svr7 /]# vim /var/named/tedu.cn.zone 

 tedu.cn.        NS      svr7.tedu.cn.
 svr7            A       192.168.4.7
 www             A       1.1.1.1
 ftp             A       2.2.2.2
 *               A       100.200.220.230
 $GENERATE  1-60  stu$    A  192.168.10.$

   stu1.tedu.cn--------》192.168.10.1
   stu2.tedu.cn--------》192.168.10.2
   stu3.tedu.cn--------》192.168.10.3
     .......
   stu60.tedu.cn-------》192.168.10.60

   $GENERATE 造数工具

  • 基于DNS的站点负载均衡
     – 一个域名 ---> 多个不同IP地址

[root@svr7 /]# vim /var/named/tedu.cn.zone 

 tedu.cn.        NS      svr7.tedu.cn.
 svr7            A       192.168.4.7
 www             A       192.168.4.10
 www             A       192.168.4.20
 www             A       192.168.4.30
 ftp             A       2.2.2.2
 *               A       100.200.220.230
 $GENERATE 1-60 stu$  A  192.168.10.$

######################################################

DNS子域授权

      父域:www.tedu.cn       父域DNS(svr7)可以解析tedu.cn
      子域:www.bj.tedu.cn    子域DNS(pc207)可以解析bj.tedu.cn

    父域DNS(svr7)可以解析tedu.cn
    子域DNS(pc207)可以解析bj.tedu.cn
    父域DNS(svr7)也可以解析bj.tedu.cn
    子域DNS(pc207)也可以解析tedu.cn

虚拟机pc207:
1.安装bind、bind-chroot
2.修改主配置文件/etc/named.conf
  options {
      directory     "/var/named";    #指定地址库文件位置
   };
   zone  "bj.tedu.cn"   IN  {         #指定负责解析的域名
      type   master;               #指定为权威主服务器
      file   "bj.tedu.cn.zone";    #指定地址库文件的名称
    };
3.创建相应的地址库文件 /var/named/bj.tedu.cn.zone
 # cd /var/named/
 # cp -p named.localhost  bj.tedu.cn.zone      #保持属性不变  
 # vim bj.tedu.cn.zone 
  bj.tedu.cn.     NS          pc207 
  pc207            A          192.168.4.207
  www              A      1.2.3.4

4.重起named服务,测试 nslookup  www.bj.tedu.cn 192.168.4.207

#######################################################
子域授权

  父域DNS(svr7)也可以解析bj.tedu.cn

 虚拟机svr7:
[root@svr7 /]# vim /var/named/tedu.cn.zone 

  tedu.cn.         NS      svr7.tedu.cn.
  bj.tedu.cn.      NS      pc207.bj.tedu.cn.
  pc207.bj.tedu.cn. A       192.168.4.207
  svr7              A       192.168.4.7

[root@svr7 /]# systemctl restart named 

[root@svr7 /]# nslookup www.bj.tedu.cn 192.168.4.7

     递归解析: DNS服务器帮客户端与其他DNS服务器询问解析结果,并且将解析结果得到,给与客户端的过程

######################################################
 子域DNS将请求转发给父域的DNS

    子域DNS(pc207)也可以解析tedu.cn

虚拟机pc207:

[root@pc207 /]# vim /etc/named.conf 

 zone "tedu.cn" IN {
     type forward;
     forwarders  { 192.168.4.7; };
 };

[root@pc207 /]#  systemctl restart named

[root@pc207 /]#  nslookup  www.tedu.cn 192.168.4.207

#######################################################
  缓存DNS服务器

缓存DNS
  – 不需要管理任何DNS区域,但是能够替客户机查询,
  而且通过缓存、复用查询结果来加快速度
  – 典型应用:ISP服务商、企业局域网

DHCP概述及原理
• Dynamic Host Configuration Protocol
  – 动态主机配置协议,由 IETF(Internet 网络工程师任
务小组)组织制定,用来简化主机地址分配管理

• 主要分配以下入网参数
 – IP地址/子网掩码/广播地址
  – 默认网关地址、DNS服务器地址

• DHCP地址分配的四次会话(广播)[先到先得原理]
  – DISCOVERY --> OFFER --> REQUEST -->ACK

   端口:67

  一个局域网内不能有二台DHCP服务器

 虚拟机svr7:
 1.安装dhcp软件包
 2.修改配置文件 /etc/dhcp/dhcpd.conf
 [root@svr7 /]# vim /etc/dhcp/dhcpd.conf 

 subnet  192.168.4.0  netmask  255.255.255.0  {  #设置分配的网段
    range 192.168.4.10  192.168.4.50;        #设置IP地址范围
    option domain-name-servers  8.8.8.8;     #设置DNS服务器
    option routers  192.168.4.254;           #设置网关
    default-lease-time 600;             #设置默认租期时间
    max-lease-time 7200;                #设置最大的租期时间
   }

 3.启动dhcpd服务,设置开机自起
 [root@svr7 /]# systemctl restart dhcpd
 [root@svr7 /]# systemctl enable dhcpd

##########################################################

• PXE,Pre-boot eXecution Environment
– 预启动执行环境,在操作系统之前运行
– 可用于远程安装
• 工作模式
– PXE client 集成在网卡的启动芯片中
– 当计算机引导时,从网卡芯片中把PXE client调入内存
执行,获取PXE server配置、显示菜单,根据用户选
择将远程引导程序下载到本机运行

• 需要哪些服务组件?
– DHCP服务,分配IP地址、定位引导程序
– TFTP服务,提供引导程序下载
– HTTP服务,提供yum安装源
• 客户机应具备的条件
– 网卡芯片必须支持PXE协议
– 主板支持从网卡启动

#####################################################
虚拟机svr7:

一、配置dhcpd服务
 1.修改配置文件 /etc/dhcp/dhcpd.conf
 [root@svr7 /]# vim /etc/dhcp/dhcpd.conf 

 subnet 192.168.4.0 netmask 255.255.255.0 {
   range 192.168.4.10 192.168.4.50;
   option domain-name-servers 8.8.8.8;
   option routers 192.168.4.254;
   default-lease-time 600;
   max-lease-time 7200;
   next-server  192.168.4.7;
   filename  "pxelinux.0";
  }
    pxelinux.0:网卡引导文件(安装说明书)(二进制文件)
        安装一个软件可以得到该pxelinux.0文件
 2.重起dhcpd服务

######################################################
二、TFTP服务的搭建

  tftp: 简单的文件传输协议    端口:69
    默认共享路径:/var/lib/tftpboot

  1.安装一个服务端软件tftp-server      
  2.启动tftp服务,设置开机自起
 [root@svr7 /]# systemctl restart tftp
 [root@svr7 /]# systemctl enable tftp

  3.部署pxelinux.0文件
    查询仓库中哪一个软件包,可以产生一个文件
  # yum  provides  */pxelinux.0
  # rpm -ql syslinux |  grep pxelinux.0

  # cp /usr/share/syslinux/pxelinux.0   /var/lib/tftpboot/
  # ls /var/lib/tftpboot/

 4.部署菜单文件
  pxelinux.0-------->/var/lib/tftpboot/pxelinux.cfg/default

 # mkdir  /var/lib/tftpboot/pxelinux.cfg
 # ls  /var/lib/tftpboot/
 # mount /dev/cdrom  /mnt/

# cp /mnt/isolinux/isolinux.cfg   /var/lib/tftpboot/pxelinux.cfg/default

 # ls -l /var/lib/tftpboot/pxelinux.cfg/default
 # chmod 644 /var/lib/tftpboot/pxelinux.cfg/default
 # ls -l /var/lib/tftpboot/pxelinux.cfg/default

  5.部署  启动内核、启动驱动程序、图形的模块

  default ----》 启动内核、启动驱动程序、图形的模块

  vmlinuz------>启动内核
  initrd.img------>启动驱动程序
  vesamenu.c32------>图形的模块

 # cp /mnt/isolinux/vmlinuz /mnt/isolinux/initrd.img /mnt/isolinux/vesamenu.c32 /var/lib/tftpboot/

 # ls /var/lib/tftpboot/
 initrd.img  pxelinux.cfg  vmlinuz
 pxelinux.0  vesamenu.c32

  6.修改菜单文件/var/lib/tftpboot/pxelinux.cfg/default

[root@svr7 /]# vim /var/lib/tftpboot/pxelinux.cfg/default
 ......
 menu title NSD1710 PXE Server !
 ...... 
 label linux
  menu label Install RHEL7     #显示菜单文字
  menu default                 #读秒结束后,默认选择
  kernel vmlinuz               #调用内核
  append initrd=initrd.img     #调用驱动程序

######################################################

 pxelinux.0--->default---->图形的模块---->vmlinuz、initrd.img

######################################################
三、搭建httpd服务,共享光盘所有内容
1.安装httpd
2.启动httpd服务,设置开机自起
3.创建挂载点/var/www/html/rhel7
[root@svr7 ~]# mkdir /var/www/html/rhel7

4.进行挂载
[root@svr7 ~]# mount /dev/cdrom   /var/www/html/rhel7

[root@svr7 ~]# firefox http://192.168.4.7/rhel7

5.完成开机自动挂载,修改/etc/fstab
 [root@svr7 ~]# vim /etc/fstab 
 [root@svr7 ~]# tail -1 /etc/fstab
 /dev/cdrom   /var/www/html/rhel7   iso9660  defaults  0  0

 [root@svr7 ~]# umount /var/www/html/rhel7/
 [root@svr7 ~]# ls /var/www/html/rhel7/
 [root@svr7 ~]# mount -a
 mount: /dev/sr0 写保护,将以只读方式挂载
 [root@svr7 ~]# ls /var/www/html/rhel7/

########################################################
四、实现无人值守安装,生成自动应答文件(ks文件)

  system-config-kickstart 图形的工具来生成

[root@svr7 ~]# yum -y install system-config-kickstart
[root@svr7 ~]# system-config-kickstart
[root@svr7 ~]# vim /etc/yum.repos.d/rhel7.repo
       Yum仓库
    [development]   #修改仓库的名称

[root@svr7 ~]# system-config-kickstart  
   检查  软件包选择  是否可用

[root@svr7 ~]# ls /root/ks.cfg 
 /root/ks.cfg
[root@svr7 ~]# vim /root/ks.cfg

 1.利用httpd共享应答ks文件
 [root@svr7 ~]# cp /root/ks.cfg   /var/www/html/
 [root@svr7 ~]# ls /var/www/html/

 2.修改菜单文件,指定应答ks文件位置
 [root@svr7 ~]# vim  /var/lib/tftpboot/pxelinux.cfg/default

 label linux
   menu label Install RHEL7
   menu default
   kernel vmlinuz
   append initrd=initrd.img  ks=http://192.168.4.7/ks.cfg

##########################################################
总结:
        dhcp-----》IP地址、next-server、pxelinux.0
        tftp-----》pxelinux.0
        pxelinux.0-----》default
        default-----》vesamenu.c32-----》vmlinuz、initrd.img
        ks-----》url --url="http://192.168.4.7/rhel7"

#########################################################

rsync同步操作

     同步 : 只传输变化的数据
     复制:完整的传输

• 命令用法
– rsync [选项...] 源目录 目标目录

• 同步与复制的差异
– 复制:完全拷贝源到目标
– 同步:增量拷贝,只传输变化过的数据

• 本地同步
– rsync [选项...] 本地目录1    本地目录2        //同步整个文件夹
– rsync [选项...] 本地目录1/    本地目录2      //只同步目录下的数据

• rsync操作选项
– -n:测试同步过程,不做实际修改
– --delete:删除目标文件夹内多余的文档
– -a:归档模式,相当于-rlptgoD (保持属性不变)
– -v:显示详细操作信息
– -z:传输过程中启用压缩/解压

[root@svr7 ~]# mkdir /dir1
[root@svr7 ~]# mkdir /nsd
[root@svr7 ~]# cp -r /home/ /dir1
[root@svr7 ~]# cp /etc/passwd /dir1
[root@svr7 ~]# ls /dir1
[root@svr7 ~]# rsync -avz  /dir1/   /nsd
[root@svr7 ~]# ls /nsd

[root@svr7 ~]# touch /dir1/1.txt
[root@svr7 ~]# ls /dir1/
[root@svr7 ~]# ls /nsd

[root@svr7 ~]# rsync -avz /dir1/   /nsd
[root@svr7 ~]# ls /dir1/
[root@svr7 ~]# ls /nsd

[root@svr7 ~]# touch /dir1/2.txt
[root@svr7 ~]# rsync -avz /dir1/   /nsd
[root@svr7 ~]# ls /nsd

[root@svr7 ~]# ls /dir1/
[root@svr7 ~]# ls /nsd
[root@svr7 ~]# touch /nsd/10.txt
[root@svr7 ~]# rsync -avz --delete /dir1/  /nsd
[root@svr7 ~]# ls /dir1/
[root@svr7 ~]# ls /nsd

#####################################################
 远程同步 rsync+SSH同步

– 下行:rsync [...] user@host:远程目录    本地目录
– 上行:rsync [...] 本地目录       user@host:远程目录

虚拟机A:
[root@svr7 ~]# rm -rf /opt/*
[root@svr7 ~]# cp /etc/passwd /opt/
[root@svr7 ~]# cp /etc/fstab  /opt/
[root@svr7 ~]# ls /opt/

 # rsync -avz --delete   /opt/  root@192.168.4.207:/opt/

虚拟机B:
[root@pc207 ~]# ls /opt/

###################################################
 无密码的验证

   公钥、私钥

1. 在虚拟机Svr7生成公钥、私钥
[root@svr7 ~]# ssh-keygen      #一路回车
[root@svr7 ~]# ls /root/.ssh    #公钥、私钥生成位置

2. 在虚拟机Svr7上,传递公钥到虚拟机pc207
[root@svr7 ~]# ssh-copy-id  root@192.168.4.207

[root@pc207 ~]# ls /root/.ssh/   #公钥存放在对方的,位置及名称
 authorized_keys

3. 在虚拟机Svr7上,测试
[root@svr7 ~]# ssh  root@192.168.4.207   #无需密码验证

########################################################
  实时同步  inotify-tools-3.13.tar.gz

  真机上 :
  # scp /root/桌面/tools/inotify-tools-3.13.tar.gz root@192.168.4.7:/root

  虚拟机Svr7:
步骤1:安装gcc与make编译工具
步骤2:tar解包,释放源代码至指定目录
 # mkdir /myrpm/
 # tar -xf /root/inotify-tools-3.13.tar.gz  -C /myrpm/
 # ls /myrpm/

步骤3: ./configure 配置,指定安装目录/功能模块等选项
 # cd /myrpm/inotify-tools-3.13/
 # ./configure

步骤4: make 编译,生成可执行的二进制程序文件
步骤5: make install 安装,将编译好的文件复制到安装目录

[root@svr7 /]# which inotifywait 
/usr/local/bin/inotifywait

########################################################

 最容易写成死循环
    while  [条件]
    do
           执行的语句
    done

     A  /opt  --------》  B /opt

  # inotifywait -mrq  /opt/

  # rsync -avz --delete   /opt/  root@192.168.4.207:/opt/

  实时同步的脚本
虚拟机Svr7:
[root@svr7 /]# vim  /root/rsync.sh
   #!/bin/bash
    while  inotifywait -rqq  /opt/    (1个q减少输出;2个q不输出)
    do
         rsync -az --delete   /opt/  root@192.168.4.207:/opt/
    done

[root@svr7 /]# /root/rsync.sh  #运行脚本

####################################################

虚拟机Svr7
  搭建基本的DNS
 1.安装bind、bind-chroot
 2.修改配置文件/etc/named.conf
 options {
        directory       "/var/named";
 };
 zone "tedu.cn" IN {
        type master;
        file "tedu.cn.zone";
  };
 3.建立相应的地址库文件/var/named/tedu.cn.zone
  tedu.cn.        NS      svr7.tedu.cn.
  svr7            A       192.168.4.7
  www             A       1.1.1.1

 4.重起named服务,验证
    nslookup   www.tedu.cn  192.168.4.7
########################################################

 Split分离解析(视图解析)

什么是分离解析
• 当收到客户机的DNS查询请求的时候
   – 能够区分客户机的来源地址
   – 为不同类别的客户机提供不同的解析结果(IP地址)
   – 为客户端提供网络最近资源

  view "haha" {
    match-clients { 192.168.1.0/24; }
    zone "12306.cn" IN {
      12306.cn.zone;
   }; };

  view "xixi" {
    match-clients { 192.168.2.0/24; }
    zone "12306.cn" IN {
      12306.cn.other;
    }; };

  view "hehe" {
    match-clients { any; }
    zone "12306.cn" IN {
      12306.cn.any;
    }; };

##########################################################
   分离解析
          客户端:192.168.4.207------------>www.tedu.cn----》1.1.1.1
          客户端:其他人------------->www.tedu.cn----》2.2.2.2

    一旦使用view分离解析,所有的zone都必须在view中

1.修改配置文件/etc/named.conf
 options {
        directory       "/var/named";
 };
 view  haha  {
  match-clients  {   192.168.4.207;   };
  zone  "tedu.cn"  {
   type  master;
   file  "tedu.cn.haha";
    };
  };
 view  xixi  {
  match-clients  {    any;    };
  zone  "tedu.cn"  {
   type  master;
   file  "tedu.cn.xixi";
   };
 };
 2.分别建立tedu.cn.haha与tedu.cn.xixi,写入不同的解析结果
 3.重起named服务,验证  在svr7上测试解析  在pc207上测试解析

#########################################################
 PATH变量的作用:提供命令的搜寻路径

[root@svr7 /]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

   提示 命令没有找到?
        1.输入命令有误
        2.该命令没有安装
        3.该命令执行程序没有在PATH的路径中

########################################################

-------------------------------------------------------------------------------------------
RAID0:至少两块磁盘,分别存放不同的数据;只提高了数据的读写性能,不提供备份冗余
RAID1:至少两块磁盘,分别存放相同的数据;只提供了数据的备份冗余,未提高读写性能
RAID5:至少三块磁盘,核心技术多出一个校验值;校验值均匀随即分布在三块磁盘中,三块磁盘存放不同的数据;即提高了读写性能,也提供了备份功能(最多只能坏一块磁盘);还可以再添加一块磁盘,这块磁盘作一个热备磁盘,监控前面的三块磁盘的健康状态,当一个磁盘坏掉后,这个第四的硬盘会被自动使用添加到阵列中,并把坏的磁盘数据cp到自己的磁盘中;
RAID6:至少使用四块磁盘,原理和5一样,银行用的比较多一点;他允许坏2快磁盘;
RAID10 | 01 至少使用4块磁盘;如下图所:AB和CD先做RAID0,然后AB和CD作完的RAID0形成的大的磁盘再作RAID1;也可以实现同时坏2快磁盘,但有限制,只能同时坏ab 或cd

pstree  用户名   查看用户开启的进程
pstree -ap 用户名  查看详细内容和pid
ps -aux  进程快照 
ps -aux | grep 服务名  查看服务开启了多少个进程

---------------------------------------

--------
kill  -9 PID号  杀进程
killall -9  进程名  死所有进城
killall -9 -u lisi  杀死lisi开启的所有进程(强制踢出除一个用户)

---------------------------------------------
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!