命令大全

命令行的一般格式
– 命令字 [选项]… [参数1] [参数2]…

• pwd — Print Working Directory
– 用途:查看当前所在的位置
[root@A ~]# cd ~lisi #去往lisi的家目录
[root@A lisi]# pwd
/home/lisit

• cd — Change Directory
– 用途:切换工作目录
格式: cd [目标文件夹位置]
cd ~:表示用户的家目录
cd ~user表示用户到user的家目录
cd ~lisi #去往lisi的家目录
. 表示当前目录

ls — List
– 格式:ls [选项]… [目录或文件名]…
蓝色:目录
黑色:文本文件

• 常用命令选项
– -l: 以长格式显示目录内容的详细属性
– -A: 包括名称以 . 开头的隐藏文档
– -d: 显示目录本身(而不是内容)的属性
– -h: 提供易读的容量单位(K、M等)
– -R : 递归显示

  • -Zb : 查看文件的拥有的所有属性
    • Z :安全上下文
      -Zd 改 上下文工具 (chcon)
      一般使用用法:
      以长格式显示目录内容的详细属性
      [root@localhost /]# ls -l /root
      #显示目录本身的详细属性
      [root@localhost /]# ls -ld /root
      #目录内容详细属性加大小单位
      [root@localhost /]# ls -lh /boot/
      [root@A ~]# ls -R /opt/aa

cat
查看文本文件内容
cat -n 按行号显示
cat -n /etc/passwd
1 root❌0:0:root:/root:/bin/bash
用户名:密码占位符:UID:基本组GID:用户描述信息:家目录:解释器程序

cat -n a.txt b.txt >c.txt #把a b 的内容加上行号输入到c(可以不存在的文件会自动创建)中

cat /dev/null > /a.txt #清空a.txt内容
cat << EOF >/etc/a.txt (内容) EOF #EOF是“end of file”表示文本结束符 也可以使用其他符合如:<<EO EO结束
例: [root@node1 ~]# cat <a.txt

abc
EOF
[root@node1 ~]# cat a.txt
abc
脚本创建yum源

cat <<EOF  >/etc/yum.repos.d/rhel.repo
[rhel]
name=rhel7
baseurl=ftp://localhost/rhel7
enabled=1
gpgcheck=0
EOF 

mkdir
创建空目录
• mkdir — Make Directory
– 格式:mkdir [-p] [/路径/]目录名…
mkdir -p /vod/movie/cartoon #创建多层目录
[root@A /]# mkdir /root/nsd01 /mnt/nsd02

touch
– 用途:新建空文件
– 格式:touch 文件名
[root@A /]# touch /opt/1.txt
[root@A /]# ls /opt/
1.txt abc rh
[root@A /]# cat /opt/1.txt

rm
删除 — Remove
格式:rm [选项]… 文件或目录…
黄金组合 :rm -rf
• 常用命令选项
– -r、-f:递归删除(含目录)、强制删除
[root@A ~]# rm -rf /opt/*

mv
移动/重命名 • mv — Move
– 格式:mv 原文件… 目标路径
[root@A ~]# mv /opt/2.txt /opt/nsd01

重命名:路径不变的移动
[root@A ~]# mv /opt/nsd01 /opt/student
[root@A ~]# mv /opt/test/ /opt/abc

cp
复制• cp — Copy
– 格式:cp [选项]… 原文件… 目标路径
• 常用命令选项
– -r:复制目录时必须有此选项
-p 不改变文件属性的拷贝
[root@A ~]# cp -r /boot/ /opt/ #把/boot/复制到/opt/
[root@A ~]# cp /etc/redhat-release /opt/

复制支持两个以上的参数,
永远把最后一个参数作为目标,其他参数全部作为源

cp /etc/shells /etc/shadow /etc/group /opt/

ls /opt/

复制的时候,可以重新命名,目标路径下文档的名字
[root@A /]# cp /etc/redhat-release /mnt/a

      # cp -r /home  /mnt/redhat  
  #将home目录,复制到/mnt下命名为redhat
        # cp -r /home  /mnt/redhat
  #将home目录,复制到/mnt/redhat/ 路径下

less
分屏阅读工具
• 格式:less [选项] 文件名…
– 优势:支持前后翻页• 基本交互操作
– 按 / 键向后查找(n、N切换)
按键盘上 q键 #退出

diff
逐行比较 (修复补丁的工具)(仅仅提示)
选项: -u 输出统一内容的头部信息(打补丁使用)
-r 递归对比目录中的所有资源(可以对比目录
-a 所有文件视为文本(包括二进制程序)
-N 无文件视为空文件
diff -u test1.sh test2.sh

patch
打补丁
安装包 : patch

(可以给文件或在目录打补丁)

  1. 准备环境,生成补丁文件
    有脚本 1 和 2
    diff -Nua 1 2 >3.patch
    对于旧版本的代码,使用补丁即可更新,而不需要下载完成的新代码
    -p0 整个路径不变
    -p1 修改路径为u/howard/src/blurfl/blurfl.c
    -p4 修改路径为blurfl/blurfl.c
    -R (reverse) 反向修复 卸载补丁,
    -E 修改后如果文件为空,则删除该文件

patch -p0 < 3.patch

patch -RE < 3.patch #还原旧版本,反向修复

• head tail
– 格式: head -n 数字 文件名
tail -n 数字 文件名
默认为前10行 和 后10行
显示/etc/passwd文件内容的8~12行
[root@A ~]# head -12 /etc/passwd | tail -5

grep
– 用途:输出包含指定字符串的行
– 格式:grep ‘查找字符串’ 目标文件
[root@server0 ~]# grep nsd01 /etc/passwd
-v 取反
-i 忽略大小写
grep -v root /etc/passwd #包含root的行
[root@server0 ~]# grep -i ROOT /etc/passwd

find
查找文件
– 常用条件表示:
-type 类型 ( f文件、d目录、l快捷方式)
-name “文档名称”
-size +|-文件大小(k、M、G)
-user 用户名
-iname “文档名称” 忽略大小写根据名称查找,
-maxdepth 限制目录查找的深度(最大层数)
-mtime 文件修改日期
– find … … -exec ; // 要以" \ " 结尾
[root@server0 ~]# find /boot/ -type l #查找快捷方式
[root@server0 ~]# find /boot/ -type d #查找是目录

[root@s ~]# find /boot/ -name “vm*” #以vm开头
[root@s ~]# find /boot/ -name “vm*” #以vm结尾

[root@server0 ~]# find /root/ -name “nsd*” -type d
[root@server0 ~]# find /boot/ -size +10M #以大小
[root@server0 ~]# find / -user student #以用户名

[root@server0 ~]# find /etc/ -iname “PASSWD”

find /etc/ -maxdepth 2 -name “*.conf” 两层目录找

[root@s~]# find /var/log/ -mtime +10 #10天之前的文档
[root@s ~]# find /var/log/ -mtime -2 #最近2天之内的文档
• 使用find命令的 -exec 操作
– find … … -exec 处理命令 {} \ ;
– 优势:以 {} 代替每一个结果,逐个处理,遇 ; 结束

find /boot/ -size +10M -exec cp {} /opt \ ;

find /etc -name “*tab” -exec cp {} /opt \ ;

找出所有用户 student 拥有的文件 ,把它们拷贝到 /root/findfiles/ 文件夹中

find / -user student -type f -exec cp {} /root/findfiles/ \ ;


vim  (文本编辑器)
命令模式 :   	Home 键 或 ^、数字 0          跳转到行首
	                          End 键 或“$”键 		  跳转到行尾
	                         1G 或 gg 			 跳转到文件的首行
	                           G 					 跳转到文件的末尾行

	                   复制 yy、5yy 			复制光标处的一行、复制5行
	                   粘贴 p、P (大写)			      粘贴到光标处之后、之前
	                   x 或 Delete键 		       删除光标处的单个字符
	                    dd、#dd 				删除光标处的一行、#行
	                    d^ 					从光标处之前删除至行首
	                   d$ 					从光标处删除到行尾


插入模式  :
  按   i 进入编辑 ,按 o 换行进入编辑 按 c 删除光标之后内容进入编辑 (按Esc回到命令模式)




末行模式:       :wq 保存并退出
                                 :q!  强制不保存退出  
                                 :wq!强制保存退出
                                 ZZ 保存退出  (shift+zz)
                                  插入文本
               :r  /etc/filesystems  读入其他文件内容
                                :r  /etc/passwd  #读入/etc/passwd到当前文件中
                                字符串替换  
	                      :s/root/abc        替换当前行第一个“root”
	                      :s/root/abc/g      替换当前行所有的“root”
	                      :1,10 s/root/abc/g 替换第1-10行所有的“root”
	                      :%  s/root/abc/g    替换文件内所有的“root
              开关参数的控制(显示行号)
	                       :set nu|nonu    显示/不显示行号
	                       :set ai|noai    启用/关闭自动缩进

awk  
awk -F: '{print $1}' /etc/passwd
awk -F"[:/]" '{print $1,$10}' /etc/passwd
awk -f: '{pirnt $1, "的解释器:" $7}'/etc/passwd 打印常量一定要用“”号
awk '{print $NF}'  /etc/passwd 
free |awk '{print $4}'
$0 表示当前行
$1 第一列 
$2第二列
$3 第三列
NF 文件当前行的列数
NR 文件当前行的行号

文件内容对齐命令
column -t 


tab 补全键
安装包:bash-completion



cron
周期性计划任务
软件包:cronie、crontabs系统服务:crond 日志文件:/var/log/crond
• 使用 crontab 命令
– 编辑:crontab -e  [-u 用户名]
– 查看:crontab -l  [-u 用户名]
– 清除:crontab -r  [-u 用户名]

# crontab -e -u root   #编写root计划任务  
 * * * * *   date  >>  /opt/time.txt

# crontab -l -u root   #查看root计划任务
# cat  /opt/time.txt     #检测结果


##################################################
mount     (umount)卸载挂载
 –格式:  mount  设备路径   挂载点目录
挂载操作:让目录成为设备的访问点
在系统中显示光盘的内容
挂载尽量自己创建目录进行挂载 
Linux:光盘ISO镜像文件------>光驱设备-------->访问点(目录) /dev/cdrom
查看Linux的光驱设备
[root@A /]# ls /dev/cdrom
           #挂载到/dvd
[root@A ~]# mount  /dev/cdrom   /dvd  
[root@s ~]# mount /dev/vdb1 /part1
[root@A ~]# umount /dvd	#卸载该挂载点的设备
开机自动挂载
 配置文件 /etc/fstab 的记录格式
设备路径   挂载点   类型    参数    备份标记   检测顺序
/dev/vdb1  /part1    ext4   defaults    0        0              
                                                     
ssh  
远程管理的命令:  
       -x  #可以查看远程图形
      ssh [-选项]  用户名@服务器的IP地址 

[root@room9pc01 ~]# ssh  root@172.25.0.11

[root@room9pc01 ~]# ssh  root@172.25.0.10
[root@room9pc01 ~]# ssh -X ro






ot@172.25.0.11
 Ctrl+Shift+t:  开启一个新的终端
   加  -X  在远程管理时,本地运行对方的图形程序
      [root@room9pc01 ~]# vim /root/.bashrc  #设置别名
      alias goa='ssh -X root@192.168.4.7'
[root@server0 ~]# exit  #退出远程管理登出

 ssh -i /root/id_rsa.pem (密钥对公钥)  root@192.168.4.2 #密钥对登录

非对称钥匙对
ssh-keygen -f /root/.ssh/id_rsa -N ''   #生成免钥匙命令非交互式 

ssh-copy-id 192.168.4.50           #发送给ip
ssh-add                             本机添加 















su  (substitute User)
切换用户身份
格式  用法1: su - 目标用户 (加上 -  是连家目录一起切换,如果不加 -  切换用户之后家目录默认是原来用户的家目录)
      用法2: su - -c “命令” 目标用户
例: whoami 
 su - tom  -c "mkdir /home/tom/nihao"  


sudo   
提升执行权限
    这个要管理员预先为用户设置执行许可
    被授权用户有权执行授权的命令,验证口令

格式 用法1:  sudo  特权命令
     用法2:  sudo  -u 目标用户 特权命令

-l 查看自己的sudo授权(为小写字母l) 
例:sudo  -l  
    sudo  -u student mkdir /mnt/a  
ls -ld  /mnt/a  验证所有者是谁  

配置sudo授权
修改方法  :visudo 
配置文件也可以: vim /etc/sudoers 
 授权记录格式
-用户 主机列表=命令列表
grep ^root /etc/sudoers
root    ALL=(ALL)   ALL 
可以是%组名  目标身份,省略时表示root
例:允许Tom 以root权限执行/sbin/下的所有命令 
,但是,禁止修改eth0网卡的参数 
[root@node1 ~]# visudo
-----很多内容
插入 
Tom   localhost,svr1=/sbin/*,!/sbin/ifconfig etho 
例2 
wheel组的用户无需验证可执行所有命令
[root@node1 ~]# visudo
、、、
%wheel ALL=(ALL) NOPASSWD:ALL



rsync  (Remote Sync)
远程同步  
支持本地复制,或与其他ssh、rsync主机同步
命令用法:
              rsync  选项    源目录  目标目录   (本地)
            rsync   选项  user@host(ip):远程目标/

   例: rsync  -a   /boot   /todir   #同步整个目录
         rsync  -a  /boot/  /todir/   #只同步目录下数据
     
rsync操作选项
-n  :测试同步过程,不做实际修改
--delete :删除目标文件夹内多余的文档
-a      : 归档模式,相当于 -rlptgoD
-v       : 显示详细操作信息
-z        : 传输过程中启用压缩/解压


-r   :递归,包括目录/子目录所有文件
-l :保留符号链接文件  -p -t 保留文件的权限、时间标志
-o 、-g :保留文件的属主/属组标记 
-D :保留设备文件及其他特殊文件


rsync+ssh 同步
下行:rsync  选项   user@host:远程目录   本地目录
上行:rsync 选项    本地目录  user@host:远程目录

例:将远程主机的/boot/   目录备份到本地 
rsync  root@192.168.4.7:/boot/   /tmp/

例:将本地的/etc   目录备份到远程主机  
du -sh /etc/
rsync -az  /etc    root@192.168.4.7:/opt/

ping
ping 选项 ip
-c 包个数
-n  大小 
-W 超时
-i 时间间隔
-s 包大小
ping测试时间,可以只发送3个测试包(-c 3)、缩短发送测试包的间隔秒数(-i 0.2)、等待反馈的超时秒数(-W 1)。比如,检查可ping通的主机:
ping -c 3 -i 0.2 -W 1 $1 &> /dev/null

netstat

netstat命令可以查看系统中启动的端口信息,该命令常用选项如下:
-a显示所有端口的信息
-n以数字格式显示端口号
-t显示TCP连接的端口
-u显示UDP连接的端口
-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p显示监听端口的服务名称是什么(也就是程序名称)
[root@node1 ~]#  netstat  -anptu |   grep memcached
              #netstat -anptu |
ss
(和netstat功能一样)
 ss命令可以查看系统中启动的端口信息,该命令常用选项如下:
-a显示所有端口的信息
-n以数字格式显示端口号
-t显示TCP连接的端口
-u显示UDP连接的端口
-l显示服务正在监听的端口信息,如httpd启动后,会一直监听80端口
-p显示监听端口的服务名称是什么(也就是程序名称)
例 1:[root@node1 ~]# netstat -nutlpa  | grep nginx
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN  
    11957/nginx: master
    例 2 :[root@node1 ]# ss -nutlpa  | grep nginx
tcp    LISTEN     0      128       *:80                    *:*                   users:(("nginx",pid=23078,fd=6),("nginx",pid=11957,fd=6))

 alias  
[别名名称]  (unalias)取消别名
 • 定义新的别名(临时)
– alias  别名名称= '实际执行的命令行'
[root@A ~]# alias hn='hostname'  #定义别名
[root@A ~]# alias        #查看当前有效别名
     设置永久的别名 
/root/.bashrc   #只对当前用户有效
/etc/bashrc     #对所有用户有效
• 取消已设置的别名
– unalias  [别名名称]    #临时取消别名
  unalias rht                                                
 wget  
   下载 
   通过命令在命令行实现下载:默认下载到当前路径下
下载到当前位置
wget  http://classroom.example.com/content/rhel7.0/x86_64/dvd/Packages/  

下载到指定的位置并改名 
wget -Oo /root/a http://classroom.example.com/


 rpm
传统的安装软件包的命令
– rpm -q 软件名...    #查询软件包是否安装
– rpm -ivh 软件名-版本信息.rpm...  #安装包
– rpm -e 软件名... #卸载

# rpm -q firefox  #查询软件包是否安装
# rpm -ql vsftpd  #查询软件包安装的内容
# rpm -ivh /root/vs(tab)  #安装
# rpm -e vsftpd   #卸载
# rpm -qa  #查看系统安装了什么软件
# rpm -qa |grep httpd 
#rpm -qa |wc -l                                             

Yum     (yum remove 名)#卸载
自动解决依赖关系,安装软件
服务:为客户端自动解决依赖关系,安装软件
配置路径及名称:/etc/yum.repos.d/*.repo   
         错误的文件会影响正确文件
 [root@server0 ~]# rm -rf /etc/yum.repos.d/*
一般情况下不要删除新建一个目录把移动过去
[root@server0 ~]# vim /etc/yum.repos.d/nsd.repo
    [rhel7]      #仓库的标识,随意写不要出现空格
    name=rhel7.0    #仓库的描述信息,随意写
    baseurl=http://classroom.ex   #指定服务端位置
    enabled=1       #是否启用本文件
    gpgcheck=0      #是否检测软件包红帽签名

[root@server0 ~]# yum clean  all  #清空Yum所有缓存
  让客户端重新读取配置文件
       yum repolist   检测yum仓库
[root@server0 ~]# yum remove  软件名    #卸载
• 快速建立repo配置文件
– yum-config-manager --add-repo 软件仓库地址  
###############################################
四  为虚拟机A与虚拟机B搭建Yum仓库

   服务端:虚拟机A  
           1.搭建FTP服务   2.共享光盘所有内容

   1)图形将光盘内容,放入虚拟光驱中
  [root@svr7 ~]# mount /dev/cdrom  /mnt/
  mount: /dev/sr0 写保护,将以只读方式挂载
  [root@svr7 ~]# ls /mnt/

   2)安装vsftpd软件包
   # ls /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm 
   # rpm -ivh /mnt/Packages/vsftpd-3.0.2-22.el7.x86_64.rpm
 
   # rpm -q vsftpd

   3)利用FTP共享光盘所有内容,默认共享路径下/var/ftp
  [root@svr7 ~]# mkdir /var/ftp/rhel7
  [root@svr7 ~]# ls /var/ftp/rhel7
  [root@svr7 ~]# cp -r /mnt/*  /var/ftp/rhel7/
   
   4)重起vsftpd服务验证:
  [root@svr7 ~]# systemctl restart vsftpd
  [root@svr7 ~]# systemctl enable vsftpd

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

   客户端:虚拟机B
[root@pc207 ~]# vim /etc/yum.repos.d/rhel7.repo
 [rhel7]
 name=rhel7
 baseurl=ftp://192.168.4.7/rhel7
 enabled=1
 gpgcheck=0

[root@pc207 ~]# yum repolist

自定义yum
createrepo
createrepo --update  /tools/other #更新自定义yum 
  生成仓库数据文件
[root@svr7 ~]# createrepo /tools/other   #生成自定义仓库  
[root@svr7 ~]# ls /tools/other/
  书写yum客户端配置文件
[root@svr7 ~]# vim /etc/yum.repos.d/rhel7.repo
  .......
 [myrpm]
 name=myrpm
 baseurl=file:///tools/other    #指定本地路径
 enabled=1
 gpgcheck=0

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

 useradd   (usermod)(userdel)
 添加用户  
– useradd [选项]... 用户名
用户基本信息存放在 /etc/passwd 文件 
      • 常用命令选项
– -u 用户id、-d 家目录路径、-G 附加组、-s 登录Shell
      root:x:0:0:root:/root:/bin/bash
用户名:密码占位符:UID:基本组GID:用户描述信息:家目录:解释器程序

[root@ser~]# useradd nsd01
[root@ser~]# id nsd01    #查看用户基本信息 
[root@ser~]# useradd -u 1500 nsd04 #指定UID
[root@ser~]# useradd -d /mnt/nsd06 nsd06#指定家
[root@server0 ~]# useradd -G tarena nsd07  #指定附加组
-s 登录Shell(登陆的解释器程序)  
/sbin/nologin :禁止用户登陆操作系统   /bin/login 默认
[root@server0 ~]# useradd -s /sbin/nologin  nsd08
[root@server0 ~]# usermod -s /bin/login  nsd08
[root@server0 ~]# usermod  #修改已存在用户的属性
usermod
– usermod [选项]... 用户名
#修改已存在用户的属性
– -u 用户id、-d 家目录路径、-G 附加组、-s 登录Shell

[root@A ~]# usermod  -u 1600 -d /opt/nsd11  -s /sbin/nologin -G  tarena   nsd11
userdel
删除用户                  
– userdel   [-r]   用户名
   -r:   连同家目录一并删除
– userdel    用户名     #仅删除用户信息

passwd
设置登录密码
格式   :– passwd [用户名]  (这种是交互式)
 
echo '密码' | passwd --stdin 用户名 (非交互式修改密码)

-l   锁定用户账号(是小写字母l不是1)
例:passwd  -l  student    #锁定用户student的密码

 -u 解锁  
例: passwd -u student    #解锁student的密码 

-S   看密码状态
例: passwd  -S student   #查看student目前密码的状态

用户密码信息存放在 /etc/shadow 文件
           #交互式设置密码
 [root@A ~]# passwd  nsd01  
            非交互式设置密码
[root@A ~]# echo 123456 | passwd --stdin nsd01 

[root@A ~]# useradd harry
[root@A ~]# echo redhat | passwd --stdin harry

强制定期修改密码 
配置文件为 /etc/login.defs 
对新建用户有效 
主要控制属性
-PASS_MAX_DAYS
-PASS_MIN_DAYS
-PASS_WARN_AGE 


 
groupadd       
  添加组       
– groupadd [-g 组ID] 组名                  
[root@server0 ~]# groupadd tarena     #创建组

gpasswd           
管理组成员
– gpasswd -a  用户名   组名
– gpasswd -d  用户名   组名
[root@A ~]# gpasswd -a natasha stugrp 
[root@A ~]# gpasswd -d natasha stugrp
groupdel
删除组
– groupdel   组名

在Linux系统中创建一个用户,会由那些文件改变内容?
   /etc/passwd  /etc/shadow
   /etc/group   /etc/gshadow   
                                   
权限和归属   
基本权限的类别
–r  读取:     允许查看内容-read 
–w  写入:     允许修改内容-write  
–x 可执行:    允许运行和cd切换-execute  
  基本权限    r=4 w=2 x=1  
   – 附加权限:SUID = 4,SGID = 2,Sticky Bit = 1                           
                功能
读取 r :  cat  less  head tail 
写入 w :  vim 可以保存退出   重定向  >   >>
可执行 x :    学习Shell脚本  
           
            权限适用对象(归属):
– u    所有者:拥有此文件/目录的用户-user 
– g    所属组:拥有此文件/目录的组-group  
– o  其他用户:除所有者、所属组以外的用户other
       所有者>所属组>其他人
              权限的数值表示
             • 权限的数值化
             – 基本权限:r = 4,w = 2,x = 1    
           – 附加权限:SUID = 4,SGID = 2,Sticky Bit = 1
            • 采用数值形式设置权限
             – chmod [-R] nnn 文档...
             – chmod [-R] xnnn 文档..
chmod                                              
设置基本权限    常见提示:权限不足 Permission denied
– chmod [-R] 归属关系+-=权限类别 文档..
      [-R]:递归设置权限
[root@server0 ~]# chmod u-w /nsd01 所有者-w
[root@server0 ~]# chmod o=rwx /nsd01
      t=1 u=7 g=7 o=0
[root@server0 ~]# chmod 1770 /nsd01 
以root用户新建/nsddir/目录,在此目录下新建readme.txt文件
并进一步完成下列操作
 1)使用户lisi能够在此目录下创建子目录   切换用户  su  -  lisi
     chmod o+w  /nsddir/

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

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

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

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


 chown
设置文档归属        
– chown   属主        文档...
– chown   :属组       文档...
– chown   属主:属组   文档...
[root@server0 /]# chown lisi:tarena /nsd03
[root@server0 /]# chown zhangsan /nsd03
[root@server0 /]# chown :root /nsd03

利用root用户新建/nsd06目录,并进一步完成下列操作
1)将属主设为gelin01,属组设为tarena组
[root@server0 /]# useradd gelin01
[root@server0 /]# groupadd tarena
[root@server0 /]# chown gelin01:tarena  /nsd06

2)使用户gelin01对此目录具有rwx权限
      除属主与属组之外的人,对此目录无任何权限
[root@server0 /]# chmod o=--- /nsd06

3)使用户gelin02能进入、查看此目录
[root@server0 /]# gpasswd -a  gelin02  tarena

4)将gelin01加入tarena组, 将nsd06目录的权限设为rw-r-x---
      再测试gelin01用户能否进入此目录
[root@server0 /]# chmod u=rw,g=rx /nsd06

chage  设置账号有效期

-d  0                强制初次登录修改密码(是零不是O)
例:chage  -d  0  student 
-E yyyy-mm-dd      指定失效日期
chage   -E  2017-12-31   lizhigui

-l     查看  
 chage  -l  student  




chcon  (复制模版)
-t   指定访问类型 
-R  递归修改   
一般移动的文件,原有的上下文属性不变
复制的文件,自动继承目标位置的上下文
例:ls -Z /var/ftp/rt.txt  
-rw-r--r--  root root system_u:object_r:admin_home_t:s0

chcon -t  public_content_t   /var/ftp/rt.txt

restorecon
重置安全上下文
例: restorecon  /var/ftp/rt.txt


方式1:参照标准目录,重设新目录的属性

– chcon [-R] --reference=模板目录   新目录

# chcon  -R --reference=/var/www/  /webroot

[root@server0 ~]# ls  -Zd  /var/www/
[root@server0 ~]# ls  -Zd  /webroot/ 





附加权限(特殊权限)

Set GID:附加在属组的 x 位,属组的权限上标识会变为 s
Set UID:附加在所有者的 x 位,权限上标识会变为 s
Sticky Bit(粘滞位)
      • 附加在其他人的 x 位上              
– 其他人的权限标识会变为 t
– 适用于开放 w 权限的目录,可以阻止用户滥用 w 写入
权限(禁止操作别人的文档)
[root@server0 /]# chmod g+s /nsd07   #设置set GID权限
[root@server0 ~]# chmod u+s /usr/bin/hahach 
不管什么用户都可以在此目录中拥有root权限
[root@server0 ~]# chmod o+t /home/public


chattr 和  lsattr
锁定/解锁保护文件
用法:" + "  "- " " = "
属性i:内容不可变  (immutable)
属性a:内容仅可追加 (append only)

例:chattr  +i /etc/hosts  #文件这样就不能修改了,修改就会说权限不够
    chattr +a  /etc/hosts  #这样可以追加
    chattr -a  /etc/hosts 去除
  lsattr   /etc/hosts  # 查看文件是否有特殊权限



ACL  
命令
setfacl 设置acl   
getfacl 查看acl
acl访问控制列表(ACL策略  ACL权限)
– 能够对个别用户、个别组设置独立的权限
– 大多数挂载的EXT3/4、XFS文件系统默认已支持
# setfacl -m u:lisi:rx /nsd09  #为lisi设置ACL策略
          -m:modify修改  u: 用户
   实现一个用户lisi可以读取文件redhat.txt内容,请问入如何设置权限,你有几种方法?
第一:利用其他人进行配置
          chmod  o+r   redhat.txt
 第二:利用所属组进行配置
                 将lisi加入到redhat.txt所属组中
          chmod  g+r redhat.txt
第三:利用所有者进行配置
          chown  lisi  redhat.txt
          chmod  u+r   redhat.txt
 第四:利用ACL进行配置
          setfacl -m u:lisi:r  redhat.txt 
• 使用 getfacl、setfacl 命令
        – getfacl 文档...  查看acl策略
– setfacl [-R] -m u:用户名:权限类别   文档...
– setfacl [-R] -m g:组名:权限类别   文档...
– setfacl [-R] -x u:用户名: 文档...#删除指定的ACL策略
– setfacl [-R] -b 文档...       #删除所有的ACL策略
          ACL策略设置黑名单
[root@server0 /]# setfacl -m u:zhangsan:---  /nsd11
[root@server0 /]# getfacl  /nsd1


>
重定向操作
:将前面命令的输出结果写入到文本文件中
> : 覆盖重定向                          
>>:追加重定向
[root@server0 ~]# hostname > /opt/ls.txt
[root@server0 ~]# hostname >> /opt/ls.txt 
[root@A ~]# echo A.tedu.cn > /etc/hostname
[root@A ~]# cat -n /etc/passwd | head -12  |  tail -5  > /opt/1.txt


  | 
管道操作:
 将前面命令的输出结果,交由后面命令再处理一遍,作为后面命令的参数
[root@A ~]# head -12 /etc/passwd  |  tail -5
[root@A ~]# cat -n /etc/passwd | head -12  |  tail -5  > /opt/1.txt 

tar                         
 备份与恢复       
  压缩与解压缩源文件均不会消失 归档及压缩: 1.减小占用的空间  2.将零散的文件归成一个压缩包 
 Linux独有压缩格式及命令工具:
       gzip---> .gz 
       bzip2---> .bz2 
       xz---> .xz                                        
 归档及压缩的格式:   
 tar  选项  /路径/归档压缩之后的名字  被归档压缩源文档.                                
     解包:         
     tar  选项   /路径/压缩包    -C     释放路径
– -c:创建归档
– -x:释放归档
– -f:指定归档文件名称
– -C:指定释放的位置
– -t:查看tar包中文件清单
–-z、-j、-J:调用 .gz、.bz2、.xz 格式的工具进行处理
# tar -zcf  /opt/file.tar.gz   /home/   /etc/passwd
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
使用 tar 工具完成以下备份任务:
– 创建一个名为 /root/backup.tar.bz2 的归档文件
– 其中包含 /usr/local 目录中的内容
– tar 归档必须使用 bzip2 进行压缩
# tar -jcf /root/backup.tar.bz2 /usr/local/
# ls /root/                                 
查看包内容/解包:
[root@A ~]# tar -tf /opt/abc.tar.xz    #查看包内容    [root@A ~]# tar -xf  /opt/file.tar.gz  -C  /mnt/   #解包 
zip/unzip压缩与解压缩:

制作zip压缩包:zip [-r] 备份文件.zip 被归档的文档...
释放zip压缩包:unzip 备份文件.zip [-d 目标文件夹]

history
历史命令
• 管理/调用曾经执行过的命令
– history               :查看历史命令列表
– history -c           :清空历史命令
– !n                     :执行命令历史中的第n条命令
– !str                    :执行最近一次以str开头的历史命令
 • 调整历史命令的数量
[root@svr7 ~]# vim /etc/profile
du
统计文件的占用空间

– du [选项]... [目录或文件]...
– -s:只统计每个参数所占用的总空间大小
– -h:提供易读容量单位(K、M等)
[root@svr7 /]# du -sh /root/ /etc/
[root@server0 ~]# du -h /var/spool/anacron
  12K	/var/spool/anacron

date
查看/调整系统日期时间
[root@server0 ~]# date +%F
  2018-11-13

[root@svr7 /]# date +%Y    #显示年份
[root@svr7 /]# date +%m    #显示月份
[root@svr7 /]# date +%Y-%m-%d  #显示 年-月-日
[root@svr7 /]# date +%H:%M   #显示 时与分
 date -s "yyyy-mm-dd HH:MM:SS"   #更改时间

ln  创建软连接
– ln -s 原始文件或目录   软连接文件
  若原始文件或目录被删除,连接文件将失效
   软连接可存放在不同分区/文件系统
制作快捷方式:
[root@svr7 /]# ln -s /路径/源文件   /路径/快捷方式
[root@svr7 /]# cat /etc/redhat-release 
[root@svr7 /]# ln -s /etc/redhat-release /opt/test
[root@svr7 opt]# ln -s /opt/A  /opt/B  #制作软连接
[root@svr7 opt]# ls /opt/

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

[root@svr7 opt]# ln /opt/A  /opt/C   #制作硬连接


curl
测试服务器页面
curl -o /etc/yum.repos.d/centos.alyun.repo  http://mirrors.aliyun.com/Centos7-repo 或者 
wget -O  的功能一样


[root@client ~]# curl http://192.168.4.5


###################################################################
快速创建虚拟机
真机:
[root@room9pc01 ~]# ls /usr/local/bin/clone-vm7/usr/local/bin/clone-vm7
clone-vm7
[root@room9pc01 ~]# clone-vm7 #快速产生新的虚拟机rhel7.4
Enter VM number: 9
clone-auto7 
[root@room9pc01 ~]# clone-auto7
number of vms: 2     快速产生两台虚拟机


 virsh console C
虚拟机不需要配置IP地址
利用 virsh console 虚拟机名 可以直接链接  
localhost login:   Ctrl + ]   #回到真机




1.搭建虚拟机C服务端
    要求:配置永久主机名svr8.tedu.cn
	     配置eth0永久 IP地址:192.168.4.8/24
             使用真机ftp服务器作为Yum源

#####################################################                                                 
  NTP   
 时间同步                
NTP网络时间协议
• Network Time Protocol
– NTP服务器为客户机提供标准时间
– NTP客户机需要与NTP服务器保持沟通
1.安装chrony软件,寻找NTP服务端进行沟通     
 [root@A ~]# yum -y install chrony
2.修改配置文件/etc/chrony.conf
  [root@A ~]# vim  /etc/chrony.conf  
    以#开头的行代表注释
     #server 0.rhel.pool.ntp.org iburst
     #server 1.rhel.pool.ntp.org iburst
     #server 2.rhel.pool.ntp.org iburst
     server  classroom.example.com  iburst
  3.重起程序(重起服务)
    daemon:超级守护程序
   # systemctl restart chronyd  #重起服务
   # systemctl enable chronyd   #设置开机自起   
 4.验证
  [root@A ~]# date  #查看时间
    2018年 10月 09日 星期二 17:44:38 CST

LDAP
LDAP认证:作用:实现网络用户认证,用户集中管理
LDAP服务器:提供用户名,及密码认证
  客户端:           
1.安装软件sssd,与LDAP服务端沟通      
 [root@server0 /]# yum -y install sssd
 2.安装图形的工具authconfig-gtk,配置sssd软件
 [root@server0 ~]# yum -y install authconfig-gtk
 3.运行图形的工具
   [root@server0 ~]# authconfig-gtk
       选择LDAP
      dc=example,dc=com        #指定服务端域名
      classroom.example.com    #指定服务端主机名
    勾选TLS加密   使用证书加密:http://classroom.example.com/pub/example-ca.crt
     4.重起服务
  [root@server0 ~]# systemctl restart sssd
  [root@server0 ~]# systemctl enable sssd
     5.验证:
  [root@serv ~]# grep ldapuser0 /etc/passwd
  [root@serv ~]# id ldapuser0#识别LDAP服务器上用户    
                                                        
NFS
家目录漫游
• Network File System,网络文件系统
– 由NFS服务器将指定的文件夹共享给客户机
– 客户机将此共享目录 mount 到本地目录,访问此共享 类似于 EXT4、XFS等类型,只不过资源在网上

• 查看NFS资源
– showmount -e [服务器地址]
[root@s ~]# showmount -e classroom.example.com
• 挂载NFS共享目录
– mount 服务器地址:目录路径 本地挂载点

mount classroom.example.com:/home/guests /mnt

#将共享挂载到本地目录/home/guests

mount classroom.example.com:/home/guests /home/guests

配置NFS共享
(服务端:) 只读NFS共享的实现

1.安装软件包
[root@server0 /]# yum -y install nfs-utils
2.创建共享目录发布共享
[root@server0 /]# mkdir /public
3.修改 /etc/exports
– 文件夹路径 客户机地址(权限) 客户机地址(权限) … …
[root@server0 /]# vim /etc/exports
/public *(ro)
3.重起nfs-server服务
[root@server0 /]# systemctl restart nfs-server
[root@server0 /]# systemctl enable nfs-server
客户端:
查看NFS资源
– showmount -e [服务器地址]
[root@desktop0 ~]# showmount -e 172.25.0.11
挂载NFS共享目录
[root@desktop0 /]# mkdir /mnt/nfs
– mount 服务器地址:目录路径 本地挂载点

[root@desktop0 /]# vim /etc/fstab
172.25.0.11:/public /mnt/nfs nfs defaults,_netdev 0 0

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

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
########################################################################################

分区的规划
MBR分区模式 (此模式支持最大空间 2.2T)
三种分区类型: 主分区 扩展分区 逻辑分区
3个主分区, 1个扩展分区, N个逻辑分区
理论上最多4个主分区
fdisk
创建新的分区
[root@server0 ~]# fdisk /dev/vdb
n 创建新的分区—>回车—>回车–>回车—>在last结束时 +2G
p 查看分区表
n 创建新的分区–>回车—>回车—>回车—>在last结束时 +1G
d 删除分区
w 保存并退出
q 不保存并退出
l 查看分区情况
lsblk
#查看划分的分区信息
[root@server0 ~]# lsblk #查看划分的分区信息
mkfs

#格式化分区,赋予文件系统
mkfs.ext4 #格式化成ext4
mkfs.xfs #格式化成xfs
root@server0 ~]# mkfs.ext4 /dev/vdb1 #格式化成ext4
[root@server0 ~]# mkfs.xfs /dev/vdb2 #格式化成xfs

df -h
#查看正在挂载分区的使用情况
[root@server0 ~]# df -h #查看正在挂载分区的使用情况

mount -a

刷新检测自动挂载

[root@server0 ~]# mount -a

partprobe #刷新所有分区

######################################################
总结:
1.识别硬盘 lsblk
2.分区 fdisk
3.刷新所有分区 partprobe
4.进行格式化 mkfs.ext4 mkfs.xfs blkid(查看文件系统)
5.挂载使用 mount —> df -h (查看是否挂载成功)
6.书写配置文件/etc/fstab —> mount -a(测试)
######################################################

                    vgcreate   lvcreate   
          (创建卷组)(创建逻辑卷)

创建卷组命令格式: vgcreate 卷组名 设备路径
创建卷组指定大小: vgcreate -s 大小 卷组名 设备路径
创建逻辑卷命令格式: lvcreate -L 逻辑卷的大小 -n 逻辑卷的名称 设备路径
建逻辑卷指定PE个数 lvcreate -l PE个数 -n 逻辑卷名 卷组名
卷组划分空间的单位: PE 默认 4M

vgcreate systemvg /dev/vdc[1-2] #创建卷组

lvcreate -L 16G -n mylv systemvg #创建逻辑卷

     [root@server0 ~]# pvs    #查看物理卷信息
     [root@server0 ~]# vgs      #查看卷组信息
     [root@server0 ~]# lvs      #查看逻辑卷信息
     [root@server0 ~]# vgdisplay  #显示卷组详细信息
  1. 基于刚建立的 2000MiB 分区构建新的 LVM 存储–
    -新的逻辑卷命名为 database,大小为50个物理扩展单元(Physical Extent),属于 datastore 卷组
    – 在 datastore 卷组中的所有逻辑卷,其物理扩展单元(Physical Extent)的大小为16MiB
    – 使用 EXT3 文件系统对逻辑卷 database 格式化,此逻辑卷应该在开机时自动挂载到 /mnt/database 目录

逻辑卷删除
创建:先创建物理卷,再创建卷组,最后创建逻辑卷
删除:先删除逻辑卷,在删除卷组,最后删除物理卷

###########################################################
vgextend lvextend
扩展卷组 扩展逻辑卷
查看卷组有没有足够的剩余空间
[root@server0 ~]# lvs
[root@server0 ~]# vgs
1.卷组有足够的剩余空间,直接扩展逻辑卷的空间
[root@server0 ~]# lvextend -L 18G /dev/systemvg/mylv
A:文件系统的扩大
resize2fs :刷新ext4文件系统
xfs_growfs :刷新xfs文件系统
[root@server0 ~]# resize2fs /dev/systemvg/mylv

2.卷组没有足够的剩余空间
A:首先扩展卷组
[root@server0 ~]# vgextend systemvg /dev/vdc3
B:直接扩展逻辑卷的空间
[root@server0 ~]# lvextend -L 25G /dev/systemvg/mylv
C:文件系统的扩大
[root@server0 ~]# df -h
[root@server0 ~]# resize2fs /dev/systemvg/mylv

                                           逻辑卷也可以减小
  ext4文件系统支持减小       xfs文件系统不支持减小

vgchange (指定划分空间大小)
-s #大小
请创建一个大小为250M的逻辑卷redhat.

vgchange -s 1M systemvg #修改PE的大小

lvcreate -L 250M -n redhat systemvg

swap 交换分区
什么是交换空间
• 相当于虚拟内存
– 当物理内存不够用时,使用磁盘空间来模拟内存
– 在一定程度上缓解内存不足的问题
– 交换分区:以空闲分区充当的交换空间
创建交换分区
1.格式化交换文件系统
[root@server0 ~]# mkswap /dev/vdb1
[root@server0 ~]# blkid /dev/vdb1
2.启用交换分区
[root@server0 ~]# swapon /dev/vdb1
[root@server0 ~]# swapon -s #查看交换分区组成信息
3.停用交换分区
[root@server0 ~]# swapoff /dev/vdb2
[root@server0 ~]# swapon -s
4.实现开机自动启用交换分区
[root@server0 ~]# vim /etc/fstab
/dev/vdb1 swap swap defaults 0 0

[root@server0 ~]# swapon -a #专用于检测swap分区
[root@server0 ~]# swapon -s

NMAP (nmap) 网络探测工具
安装包:nmap
-sS tcp syn扫描(半开)
-sT tcp 连接扫描(全开)
-sU udp扫描
-sP ICMP扫描
-A 目标系统全面分析
例: nmap www.baidu.com
nmap 192.168.4.1

网络抓包工具(tcpdump)

格式: tcpdump 选项 过滤条件

-i 指定监控的网络接口
-A 转换维ACSII码,
-w 将数据包信息保存到指定文件
-r 从指定文件读取数据包信息

过滤的条件:类型:host net port protrange
方向:src(本地文件路径) dst(远程机器路径)
协议:tcp udp ip wlan arp 、、、
多个条件组合:and or not
例: tcpdump -A -w ftp.cap host 192.168.4.1 and prot 21 #抓包 主机21端口
tcpdump -A -r ftp.cap |egrep ‘(User|PASS)’ #分析抓包里面内容

arp -n 查看 mac地址
route -n 查看 路由表
设置默认网关
systemctl stop NetwrokManager
route add default gw 192.168.4.254

nm-connection-editor 图形配置ip

nmcli connection modify eth0 ipv4.method manual ipv4.addresses 192.168.4.1/24
connection.autoconnect yes

ip a 查看ip

iptables
包过滤防火墙
安装包:iptables-services
用法:
iptables -t 表名 [选项] 链名 条件 -j [目标操作]

默认为 filter表 不指定链就为所有链

选项--------------------------------------------------------
选项(插入):-A 在链的末尾追加一条规则
-I 在链的开头(或指定序号)插入规则
例:iptables -t filter -I INPUT -p icmp -j REJECT(-p 协议名或协议号)


选项(查看):-L (查看)列出所有的规则条目
-n 以数字形式显示地址、端口等信息
–line-numbers 查看规则时,显示规则的序号
例:iptables -nL INPUT
iptables -L INPUT --line-numbers

选项 (删除) -D 删除链内指定序号
-F 清空所有的规则
例: iptables -D INPUT 3
iptables -F
iptables -t nat -F

默认策略 -P 为指定的链设置默认规则
例:iptables -t filter -P INPUT DROP (设置input默认值)
———————————————————————————

4表 5链 (四个表、五种规则链)
规则链之间的
入站:PREROUTING -->INPUT
出站:OUTPUT–>POSTROUTING
转发:PREROUTING --> FORWARD ->POSTROUING

raw(状态跟踪表) :prerouting output

mangle(包标记表) :prerouting postrouting
output input forward

nat(地址转换表) :prerouting postrouting
output
filter(过滤表) :input output forward

[目标操作]
:ACCEPT 允许通过/放行
:DROP 直接丢弃,不给出任何回应
:REJECT 拒绝通过,必要时会给出提示
:LOG 记录日志,然后传给下一条规则 (匹配即停止 规律的唯一例外)


条件

           协议匹配  -p  协议名

通过匹配 地址匹配 -s 源地址、-d 目标地址
接口匹配 -i 收数据的网卡、 -o发数据的网卡

         端口匹配  --sport源端口 --dport 目标端口                                隐含匹配     ICMP类型匹配 --icmp-type icmp类型
                需要取反条件时,用叹号!

         -m  扩展模块  --扩展条件 条件值
           mac地址匹配   -m mac --mac-source mac地址

扩展匹配 -m multiport --sport源端口列表
多端口匹配
-m multiport --dport目标端口列表

           ip范围匹配   -m iprange --src-range ip1-ip2
                        -m iprange --dst-range ip1-ip2

==============================================================================================
开启内核的ip转发

  1. 作为网关、路由的必要条件
    echo ‘net.ipv4.ip_forward=1’ >>/etc/sysctl.conf 或者
    echo 1 >/proc/sys/net/ipv4/ip_forward
    echo “1” > /proc/sys/net/ipv4/ip_forward //开启路由转发

封禁ip地址/网段

1.主机防护 、针对入站访问的源地址
例:iptables -A INPUT -s 192.168.4.120 -j DROP
iptables -A INPUT -s 10.10.10.0/24 -j DROP

2.网络防护、针对转发访问的源地址
例:iptables -A FORWARD -s 192.168.0.0/16 -j DROP

3.保护特定网络服务 (限制对指定服务端口的访问)
例:iptables -A INPUT -S 192.168.4.0/24 -p tcp --dport 22 -j ACCEPT (或者DROP) #允许远程22端口访问192.168.4.0网段

4.禁止ping相关策略处理(允许本机ping其他主机、但禁止其他主机ping本机)
例:iptables -A INPUT -p icmp --icmp-type echo-request -j DROP(ACCEPT)
iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT(DROP)

5.根据mac地址封锁主机
iptables -A INPUT -m mac --mac-source 00:0c:29:74:BE:21 -j DROP

6.开放多个端口
iptables -A INPUT -p tcp -m multiport --dports 20:22,25,80,110,143,1650,:16800 -j ACCEPT


7.配置SNAT (共享上网)
局域网段 :192.168.4.0/24
外网接口 tcp 80
外网接口的ip :192.168.2.5
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -p tcp --dport 80 -j SNAT --to-soure 192.168.2.5


8.地址伪装策略
共享动态公网ip地址实现上网
主要针对不固定ip 将SNAT 改为 MASQUERADE
对于ADSL宽带拨号连接,网络接口可写为ppp+
iptables -t nat -A POSTROUTING -s 192.168.4.0/24 -O eth1 -j SNAT -to-source 192.168.2.5 (可改为 -j MASQUERADE伪装)

team
聚合连接

获取配置team聚合连接的用法帮助 ——man nmcli-examples

config ‘{“runner”: {“name”: “activebackup”}}’ //可以通过man teamd.conf查找 在所有的帮助中查找:/example 按G到末行

链路聚合的优势:
team 聚合连接(也称为链路聚合):
由多块网卡(team-slave)一起组建而成的虚拟网卡,即组队。

作用1:轮询式的流量负载均衡

作用2:热备份连接冗余

实现链路聚合的条件:
2块或2块以上的物理网卡

步骤如下:
1.创建虚拟网卡team0 【为聚合连接提供配置(类型,连接名,运行器,IP地址)】

[root@server0 ~]# nmcli connection add type team con-name team0 ifname team0 autoconnect yes config ‘{“runner”: {“name”: “activebackup”}}’

解释 numcli connection 添加 类型 team 配置文件名称 team0 ifconfig显示的名字为team0 每次开机自动启动配置 热备份方式

2.添加成员【为成员网卡提供配置(类型,连接名,主连接)】
[root@server0 ~]# nmcli connection add type team-slave con-name team0-1 ifname eth1 master team0

[root@server0 ~]# nmcli connection add type team-slave con-name team0-2 ifname eth2 master team0

3.配置IP地址
[root@server0 ~]# 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

5.验证查看【检查聚合连接状态】
[root@server0 ~]# teamdctl team0 state
[root@server0 ~]# ifconfig eth1 down
[root@server0 ~]# teamdctl team0 state

#################################################################
Shell 脚本
什么是脚本:可以执行的一个文本文件,可以实现某种功能
将回显功能关闭(stty -echo),
将回显功能恢复(stty echo)

案例1:书写一个shell ,在屏幕输出hello world

vim /root/hello.sh

echo hello world

ls -l /root/hello.sh

chmod +x /root/hello.sh #赋予执行权限

/root/hello.sh

bc
小数运算工具
交互式运算
[root@svr5 ~]# bc

非交互式
[root@svr5 ~]# echo ‘scale=4;12.34/5.678’ | bc
2.1733

expr
整数运算工具

1)使用expr命令
乘法操作应采用 * 转义

[root@node1 ~]# expr 12 + 15
27
[ ] 或 []或 [](())
算式替换
乘法操作*无需转义,运算符两侧可以无空格;引用变量可省略 $ 符号;计算结果替换表达式本身,可结合echo命令输出
[root@node1 ~]# echo [ 89 + 12 ] 101 l e t e x p r 或 [89+12] 101 let expr或 [89+12]101letexpr[]、$(())方式只进行运算,并不会改变变量的值;而let命令可以直接对变量值做运算再保存新的值。因此变量X=1234,在执行let运算后的值会变更;另外,let运算操作并不显示结果,但是可以结合echo命令来查看:

                        shell脚本的元素

规范Shell脚本的一般组成
• #! 环境声明,下面的代码用哪一个程序来解释
• # 注释文本
• 可执行代码
变 量 名 • 基 本 格 式 – 引 用 变 量 值 : 变量名 • 基本格式 – 引用变量值: :变量名
– 查看变量值:echo $变量名、echo ${变量名}
变量名=储存的值 使用变量储存的值 $变量名
– 变量名只能由字母/数字/下划线组成,区分大小写
– 变量名不能以数字开头,不要使用关键字和特殊字符
[root@server0 ~]# echo $a7 #输出为空,会将a7作为整体
[root@server0 ~]# echo ${a}7

重定向输出
> :只收集前面命令的正确信息
2> :只收集前面命令的错误信息
&> :收集前面命令的错误信息与正确信息

cat /etc /opt/1.txt > /opt/a.txt #只收集正确信息

cat /etc /opt/1.txt 2> /opt/a.txt #只收集错误信息

cat /etc /opt/1.txt &> /opt/a.txt #正确错误都收集 read -p ‘屏幕输出信息’

黑洞设备 :/dev/null
单引 ’ ’ :取消所有特殊字符含义

案例2:书写一个创建用户的脚本,并设置密码
#!/bin/bash
read -p ‘请输入您要创建的用户名:’ a
useradd KaTeX parse error: Expected 'EOF', got '&' at position 5: a &̲> /dev/null e…a创建成功
echo 123 | passwd --stdin KaTeX parse error: Expected 'EOF', got '&' at position 3: a &̲> /dev/null ec…a密码设置成功

$( )或 反撇号
将命令的输出,作为参数参与下一个命令执行
%F 完整日期格式,等价于 年-月-日
[root@server0 opt]# mkdir $(date +%F)

环境变量 USER=永远储存当前登陆的用户名
[root@server0 opt]# echo $USER #环境变量
root
[root@node1 ~]# echo $USER $HOME $SHELL $UID
root /root /bin/bash 0

env
3)查看系统变量
使用env可查看所有环境变量:
[root@svr5 src]# env
set
使用set可查看所有变量(包括env能看到的环境变量):

位置变量 bash内置,存储执行脚本时提供的命令行参数(非交互) 系统定义赋值完成,用户直接使用即可
[root@server0 /]# vim /root/1.sh #位置变量
#!/bin/bash
echo $1 echo $2 echo $3

预定义变量 bash内置,可直接调用的特殊值,不能直接修改
系统定义赋值完成,用户直接使用即可
$# 已加载的位置变量的个数
$* 所有位置变量的值
$? 程序退出后的状态值,0表示正常,其他值异常
echo
#!/bin/bash
echo $0 //脚本的名称
echo $1 //第一个参数
echo $2 //第二个参数
echo $* //所有参数
echo $# //所有的综合输入几个
echo $$ //当前进程的进程号
echo $? //上一个程序的返回状态码 //查看结果0为对,非0为错
!= 比较两个字符串是否不相同
#!/bin/bash
echo $1 echo $2 echo $3
echo $# #统计一共输入了几个命令行参数
echo $* #输出所有的命令行参数

[root@server0 /]# cat /etc/
cat: /etc/: 是一个目录
[root@server0 /]# echo $?
1
条件测试判断 –[ 测试表达式 ]
0 零为真 其他数字为假
检查文件状态
-e:文档存在为真 exist
-e 判断对象是否存在(不管是目录还是文件)
-d:文档存在,且必须为目录才为真 directory
-d 判断对象是否为目录(存在且是目录)
-f:文档存在,且必须为文件才为真 file
-f 判断对象是否为文件(存在且是文件)
-r:文档存在,且必须对其有读取权限才为真 read
-r 判断对象是否可读
-w:文档存在,且必须对其有写入权限才为真 write
-w 判断对象是否可写
-x:文档存在,且必须对其有执行权限才为真 execute
-x 判断对象是否具有可执行权限
-z 检查变量的值是否未设置(空值)
-n 可以测试变量是否不为空(相当于 ! -z)

&&,逻辑与
||,逻辑或

A && B //仅当A命令执行成功,才执行B命令

A || B //仅当A命令执行失败,才执行B命令

A ; B //执行A命令后执行B命令,两者没有逻辑关系

A && B || C

[root@server0 /]# [ -e /etc ]
[root@server0 /]# echo $?
0
[root@server0 /]# [ -d /etc/passwd ]
[root@server0 /]# echo $?
1
比较整数大小
-gt:大于 greater than
-ge:大于等于 great or equal
-eq:等于 equal
-ne:不等于 not equal
-lt:小于 less than
-le:小于等于 less or equal
[root@svr5 ~]# [ $A -gt 10 ] //不支持小数比较
[root@svr5 ~]# [ $X -gt 10 ] && echo “大于” || echo “否”
大于
[root@server0 /]# [ 1 -gt 1 ]
[root@server0 /]# echo $?
1
• 字符串比对
== :两个字符串一致为真
!= :两个字符串不一致为真
[root@server0 /]# [ redhat == CentOS ]
[root@server0 /]# echo $?
1
[root@server0 /]# [ root == $USER ]
[root@server0 /]# echo $?
0

if 
双分支处理
if [条件测试];then
	   命令序列xx
	else
	   命令序列yy
	fi
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
if   多分支处理

	if [条件测试1];then
	  命令序列xx
          命令序列bb
	elif [条件测试2];then
	  命令序列yy
     elif [条件测试3];then
	  命令序列aa
          ......
	else
	  命令序列zz
	fi
 案例:
   利用read 读取用户输入的成绩.
   如果成绩 大于等于90,则输出  优秀
   如果成绩 大于等于80,则输出  良好
   如果成绩 大于等于70,则输出  一般
   如果成绩 大于等于60,则输出  合格
   以上条件均不满足,则输出  一首凉凉送给你!



[root@server0 /]# vim /root/if02.sh  
#!/bin/bash
read  -p '请输入您的成绩:'   num

if  [ $num -ge 90  ];then
   echo  优秀
elif [ $num -ge 80  ];then
   echo  良好
elif [ $num -ge 70  ];then
   echo  一般
elif [ $num -ge 60  ];then
   echo  合格
else
  echo  '一首凉凉送给你!'
fi
for循环
for循环处理
• 遍历/列表式循环
– 根据变量的不同取值,重复执行xx处理
for 变量名   in  值列表  do  命令  done
for i in {1..5} do echo $i done
for i in `seq 5` do echo $i done 
for i in `cat /a.txt` do echo $i done 
 造数机制: {起始值..结束值}
             {1..10}:  1到10 所有的数字         
             {20..38}:  20到38所有的数字

案例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 1   #程序退出返回值为1
  elif  [ $1 == redhat ];then
   echo fedora
  elif  [ $1 == fedora ];then
   echo redhat
  else
   echo '/root/foo.sh redhat|fedora' >&2 #变成错误输出
   exit 2   #程序退出返回值为2
  fi

echo -e "\033[32mOK\033[0m"
3X为字体颜色,4X为背景颜色
while
循环的条件一般通过变量来进行控制,在循环体内对变量值做相应改变,以便在适当的时候退出,避免陷入死循环
while 格式
  1.  while  条件测试   do    命令序列  done
  2.while :  do    命令序列  done
[root@svr5 ~]# vim while01.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
        echo "$i"
done
case
格式:
case  变量  in
模式1)
    命令序列1 ;;
模式2)
    命令序列2 ;;
    .. ..
*)
    默认命令序列
esac
例:
#!/bin/bash
case $1 in
redhat)
        echo "fedora";;
fedora)
        echo "redhat";;
    *)                                              //默认输出脚本用法
    echo "用法: $0 {redhat|fedora}"
esac

fork 炸弹
Shell版本的fork炸弹
[root@svr5 ~]# vim test.sh
#!/bin/bash
.(){
.|.&
}
.
中断及退出
通过
break、
continue、
exit
在Shell脚本中实现中断与退出的功能。
break可以结束整个循环;continue结束本次循环,进入下一次循环;exit结束整个脚本,案例如下:
1)编写脚本文件
注意:要求打印所有6的倍数的平方值,也就是非6的倍数都跳过!!!
[root@svr5 ~]# vim test.sh 
#!/bin/bash
for i in {1..20}
do
    [ $[i%6] -ne 0 ]  &&  continue
    echo $[i*i]
done
[root@svr5 ~]# chmod +x test.sh
[root@svr5 ~]# ./test.sh

字符串截取及切割
子串截取的三种用法:
${变量名:起始位置:长度}   (默认从0开始)
expr substr "$变量名" 起始位置 长度  (从1开始)
echo $变量名 | cut -b 起始位置-结束位置 (从第1个字符开始(编号也是从1开始)


子串替换的两种用法:
只替换第一个匹配结果:${变量名/old/new}
替换全部匹配结果:${变量名//old/new}
例:将phone字符串中的所有8都替换为X:
[root@svr5 ~]# echo  ${phone//8/X}
137XX76XX97

字符串掐头去尾:
从左向右,最短匹配删除:${变量名#*关键词}
删除从左侧第1个字符到最近的关键词“:”的部分,* 作通配符理解:
[root@svr5 ~]# echo ${A#*:}
x:0:0:root:/root:/bin/bash

从左向右,最长匹配删除:${变量名##*关键词}
删除从左侧第1个字符到最远的关键词“:”的部分:
[root@svr5 ~]# echo ${A##*:}

从右向左,最短匹配删除:${变量名%关键词*}
删除从右侧最后1个字符到往左最近的关键词“:”的部分,* 做通配符理解:
echo ${A%:*}

从右向左,最长匹配删除:${变量名%%关键词*}
删除从右侧最后1个字符到往左最远的关键词“:”的部分:
[root@svr5 ~]# echo ${A%%:*}




正则表达式  表-1 基本正则列表






echo ${变量}       只输出变量
echo ${变量::}     截取
echo ${变量///}     替换
echo ${变量#*:}    删除从头部开始
echo ${变量%:*}   去尾
echo ${变量:-1234}    变量初始值,当变量没有初始值会输出1234
数组
定义数组  x={11 12 13 14}   或 x【0】=11    x【1】=12    x【2】=13 x【3】=14 
echo ${x[0]}       11    

sed   
用法1:    前置命令 | sed  [选项]  '条件指令'
用法2:    sed  [选项]    '条件指令'    文件.. ..
指令可以是增、删、改、查等指令

sed命令的常用选项如下:
-n(屏蔽默认输出,默认sed会输出读取文档的全部内容)
-r(让sed支持扩展正则)
-i(sed直接修改源文件,默认sed只是通过内存临时修改文件,源文件无影响)
1)sed命令的 -n 选项
执行p打印等过滤操作时,希望看到的是符合条件的文本。但不使用任何选项时,默认会将原始文本一并输出,从而干扰过滤效果。比如,尝试用sed输出/etc/hosts的第1行:

sed命令的p、d、s等常见操作
p(打印)    print  
 d(删除) delete 
 s(替换)  substitution

sed工具的多行文本处理操作:
i      (insert)         : 在指定的行之前插入文本
a      (append)  :在指定的行之后追加文本
c       (change)               :替换指定的行
r  w  H G  
r /a.txt   读入   w / a.txt   保存到a.txt

##############################
总结知识点:
#sed [选项] '条件指令' 文件
选项:
-n 屏蔽默认输出
-r 支持扩展正则
-i 修改源文件
条件:
行号 4  4,5   4~2 (4开始每隔2行) 4,+10
/正则/
指令:
p 打印
d 删除
s 替换s/旧/新/g
a 追加 后
i 插入  前
c 替换行

p
[root@svr5 ~]# sed  -n 'p' a.txt            //输出所有行,等同于cat a.txt
[root@svr5 ~]# sed  -n '4p' a.txt            //输出第4行
[root@svr5 ~]# sed  -n '4,7p' a.txt        //输出第4~7行
[root@svr5 ~]# sed  -n '4,+10p' a.txt        //输出第4行及其后的10行内容
[root@svr5 ~]# sed  -n '/^bin/p' a.txt        //输出以bin开头的行
[root@svr5 ~]# sed  -n '$=' a.txt            //输出文件的行数

2)下面看看sed工具的d指令案例集锦(自己提前生成一个a.txt文件)

[root@svr5 ~]# sed  '3,5d' a.txt             //删除第3~5行
[root@svr5 ~]# sed  '/xml/d' a.txt            //删除所有包含xml的行
[root@svr5 ~]# sed  '/xml/!d' a.txt         //删除不包含xml的行,!符号表示取反
[root@svr5 ~]# sed  '/^install/d' a.txt    //删除以install开头的行
[root@svr5 ~]# sed  '$d' a.txt                //删除文件的最后一行
[root@svr5 ~]# sed  '/^$/d' a.txt             //删除所有空行

)下面看看sed工具的s指令案例集锦(自己提前生成一个a.txt文件)
注意:替换操作的分隔“/”可改用其他字符,如#、&等,便于修改文件路径

[root@svr5 ~]# sed 's/xml/XML/'  a.txt        //将每行中第一个xml替换为XML
[root@svr5 ~]# sed 's/xml/XML/3' a.txt     //将每行中的第3个xml替换为XML
[root@svr5 ~]# sed 's/xml/XML/g' a.txt     //将所有的xml都替换为XML
[root@svr5 ~]# sed 's/xml//g'     a.txt     //将所有的xml都删除(替换为空串)
[root@svr5 ~]# sed 's#/bin/bash#/sbin/sh#' a.txt  //将/bin/bash替换为/sbin/sh
[root@svr5 ~]# sed '4,7s/^/#/'   a.txt         //将第4~7行注释掉(行首加#号)
[root@svr5 ~]# sed 's/^#an/an/'  a.txt         //解除以#an开头的行的注释(去除行首的#号)

################################################################
SELinux
一套增强Linux系统安全的强制访问控制体系

• SELinux的运行模式
– enforcing(强制)、permissive(宽松)
– disabled(彻底禁用)
-a    使用  getsebool  查看 可列出所有布尔值
例:getsebool -a  |grep samba 
-P  加 P 永久 更改‘ 重启一样有效 

临时配置
setenforce :设置selinux的运行模式  参数(0  或 1 )
 getenforce  : #查看当前SELinux状态  
[root@server0 ~]# setenforce 1 #设置当前SELinux状态为 enforcing
[root@server0 ~]# getenforce   #查看当前SELinux状态
[root@server0 ~]# setenforce 0 #设置当前SELinux状态为 permissive
永久配置
 固定配置:/etc/selinux/config 文件 
[root@server0 ~]# vim /etc/selinux/config
SELINUX=permissive
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
防火墙
作用: 隔离  过滤
硬件防火墙:一般保护的一个网络所有主机
软件防火墙:一般保护本机
管理工具:firewall-cmd(命令)、firewall-config(图形)
预设安全区域:
– public:仅允许访问本机的sshd dhcp  ping少数几个服务
– trusted:允许任何访问
– block:拒绝任何来访请求(明确拒绝)
– drop:丢弃任何来访的数据包(非明确拒绝,直接丢弃,节省资源)
配置永久防火墙模式:vim /etc/firewalld/firewalld.conf
            DefaultZone=public

# firewall-cmd --get-default-zone    #查看默认区域
# firewall-cmd --set-default-zone=block  #修改默认区域为block (临时)
# firewall-cmd --reload   #重新加载防火墙所有配置文件规则
# firewall-cmd --zone=public   --list-all   #列出所有public区域的服务

永久防火墙策略
parmanent  (添加永久防火墙策略)    add
(添加端口或服务加--permanent 为永久设置)
# firewall-cmd --zone=public  --add-service=ftp
# firewall-cmd --permanent --zone=public  --add-service=ftp
# firewall-cmd --permanent --zone=public  --add-service=httpd
临时删除                                       remove
# firewall-cmd --zone=public  --remove-service=http
永久删除(删除配置文件中规则)
# firewall-cmd --permanent --zone=public   --remove-service=http
在区域添加源IP地址
                    加入到block区域中 (明确拒绝端口172.25.0.10访问本机)
# firewall-cmd --zone=block --add-source=172.25.0.10
# firewall-cmd --permanent --zone=block --add-source=172.25.0.10
端口转发  (例:5423  >>  80)
                   端口重定向(端口1 --> 端口2)
  – 从客户机访问 端口1 的请求,自动映射到本机 端口2 
 
#firewall-cmd --permanent --zone=trusted --add-forward-port=port=5423:proto=tcp:toport=80
                                                             

                                      互联网常见的协议
            http:超文本传输协议 :80
           https:安全超文本传输协议 :443
           FTP:文件传输协议 :  21 
           ssh 22
           DNS:域名解析协议 :  53
           telnet:远程管理协议  23
           tftp:简单文件传输协议 :  69
           SMTP:邮件协议(用户发邮件):25
           pop3:邮件协议(用户收邮件):110
           snmp:网络管理协议 :161
           ISCSI 网络磁盘   :3260  
           NTP 网络时间同步协议 :123 
                     NFS(TCP/UDP 2049)、RPC(TCP/UDP 111) 
                    SMB      samba      (TCP 139)、CIFS(TCP 445)
                     nginx    80
                     mysql  3306 
                     tomcat  8005 8009 8080 
                      php  9000 



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


Web  (软件httpd) 
端口:http =80  https=443
主配置文件:/etc/httpd/conf/httpd.conf
调用文件 : /etc/httpd/conf.d/ *conf      (一般使用调用配置文件)
静态网站的运行   >> •服务端的原始网页 = 浏览器访问到的网页
– 由Web服务软件处理所有请求
– 文本(txt/html)、图片(jpg/png)等静态资源
动态网站的运行   >>• 服务端的原始网页 ≠ 浏览器访问到的网页
– 由Web服务软件接受请求,动态程序转后端模块处理
– PHP网页、Python网页、JSP网页......


Web通信基本概念
基于 B/S (Browser/Server)架构的网页服务
• Hyper Text Markup Language(HTML),超文本标记语言
• Hyper Text Transfer Protocol(HTTP),超文本传输协议

– Listen:监听地址:端口(80)
– ServerName:本站点注册的DNS名称(空缺)
– DocumentRoot:网页根目录(/var/www/html)
– DirectoryIndex:起始页/首页文件名(index.html)


搭建普通web服务
      防火墙    环境设置为trusted
1.安装httpd(Apache)软件包(服务端软件)
[root@server0 ~]# yum  -y  install   httpd
2.书写一个页面文件
   默认存放网页文件的路径:  /var/www/html
   默认网页文件的名字: index.html(访问显示的页面)
  [root@server0 ~]# vim /var/www/html/index.html 
  <marquee><font color=red><h1>NSD1809 阳光明媚
     滚动           字体颜色为红色     最大字体
3.  重起httpd服务
  [root@server0 ~]# systemctl restart httpd
  [root@server0 ~]# systemctl enable httpd
4.本机测试
  [root@server0 ~]# firefox 172.25.0.11


案例3:在原网站创建子目录内容访问
在 Web 网站 http://server0.example.com 的
DocumentRoot 目录下创建一个名为 private 的子目录,要求如下:

1.查看 server0.example.com 的DocumentRoot 目录
# cat /etc/httpd/conf.d/nsd01.conf 

2.创建目录,写入页面文件
# mkdir /var/www/myweb/private
# echo '<h1> wo shi private' > /var/www/myweb/private/index.html

3.在虚拟机server与虚拟机desktop上 访问测试
   firefox  server0.example.com/private

4.从 server0 上,任何人都可以浏览 private的内容,
但是从其他系统不能访问这个目录的内容  
[root@server0 ~]# vim /etc/httpd/conf/httpd.conf 
[root@server0 ~]# vim /etc/httpd/conf.d/nsd02.conf
<Directory "/var/www/myweb/private">
    Require ip 172.25.0.11  [::1]/128  127.0.0.0/8  #仅本机可访问
</Directory>
[root@server0 ~]# systemctl restart httpd

5.在虚拟机desktop0进行验证:
[root@desktop0 ~]#firefox server0.example.com/private
Forbidden
You don't have permission to access /private on this server.

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

        – 由同一台服务器提供多个不同的Web站点
                             • 区分方式
                – 基于域名的虚拟主机
                – 基于端口的虚拟主机
               – 基于IP地址的虚拟主机

– 基于域名的虚拟主机

 <VirtualHost  IP地址:端口>
   ServerName  此站点的DNS名称
   DocumentRoot  此站点的网页根目录
 </VirtualHost>

• 配置文件路径
– /etc/httpd/conf/httpd.conf  主配置文件
– /etc/httpd/conf.d/*.conf    调用配置文件



# mkdir      /var/www/qq           /var/www/baidu
# echo '<h1>企鹅'  > /var/www/qq/index.html
# echo '<h1>百度'  > /var/www/baidu/index.html

# vim /etc/httpd/conf.d/nsd01.conf
 <VirtualHost  *:80>         #所有IP地址开放80端口
   ServerName    www0.example.com  #指定网站名称
   DocumentRoot  /var/www/qq       #指定网页文件存放路径
 </VirtualHost>

 <VirtualHost  *:80>
   ServerName    webapp0.example.com
   DocumentRoot  /var/www/baidu
 </VirtualHost>

 <VirtualHost *:80>
  ServerName   server0.example.com
  DocumentRoot   /var/www/myweb
 </VirtualHost>
# systemctl  restart httpd

网页内容访问限制客户机地址
• 使用 <Directory> 配置区段
– 每个文件夹自动继承其父目录的访问权限
– 除非针对子目录有明确设置
                       <Directory 目录的绝对路径>
	                   .. ..
	                 Require all denied|granted
	                 Require ip IP或网段地址 .. ..
	               </Directory>

                <Directory  /var/www/html>
	             Require all denied | granted   #拒绝所有 | 允许所有
	             Require ip 172.25.0.10      #仅允许172.25.0.10进行访问
               </Directory>

#############################################################
安全的Web的构建  (软件:httpd  mod_ssl )
• Public Key Infrastructure,公钥基础设施
– 公钥:主要用来加密数据
– 私钥:主要用来解密数据(与相应的公钥匹配)
– 数字证书:证明拥有者的合法性/权威性(单位名称、有效期、公钥、颁发机构及签名、......)
– Certificate Authority,数字证书授权中心:负责证书的申请/审核/颁发/鉴定/撤销等管理工作 
1.部署网站证书(营业执照)
# cd  /etc/pki/tls/certs/   #默认存放网站证书路径
# wget http://classroom.example.com/pub/tls/certs/server0.crt
部署根证书(公安局信息)
# cd  /etc/pki/tls/certs/   
# wget http://classroom.example.com/pub/example-ca.crt
部署私钥匙(解密)
# cd /etc/pki/tls/private/
# wget http://classroom.example.com/pub/tls/private/server0.key
2.安装软件包  
[root@server0 /]# yum -y install httpd
[root@server0 /]# yum -y install mod_ssl(支持加密通信)

3.修改配置文件/etc/httpd/conf.d/ssl.conf 
    # echo '<h1>NSD1809 Web' > /var/www/html/index.html
 
   [root@server0 /]# vim /etc/httpd/conf.d/ssl.conf
               在末行模式下   :set  nu  显示行号
 59 DocumentRoot "/var/www/html"
 60 ServerName www0.example.com:443
                      指定网站证书   
100 SSLCertificateFile /etc/pki/tls/certs/server0.crt
                      指定私钥
107 SSLCertificateKeyFile /etc/pki/tls/private/server0.key
                      指定根证书
122 SSLCACertificateFile /etc/pki/tls/certs/example-ca.crt
4.重起httpd服务
[root@server0 /]# systemctl restart httpd
5.验证:
  [root@desktop0 ~]# firefox https://www0.example.com
     点击  了解安全的风险  ---->添加例外----->确认安全例外


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

自定Web根目录

调整 Web 站点 http://server0.example.com 的网页
目录,要求如下:
1)新建目录 /webroot,作为此站点新的网页目录
  # mkdir /webroot
  # echo '<h1>wo shi webroot' > /webroot/index.html
2)修改虚拟Web主机配置文件,指定新的网页目录
 # vim /etc/httpd/conf.d/nsd01.conf 
   <VirtualHost *:80>
    ServerName  server0.example.com
    DocumentRoot  /webroot
   </VirtualHost>
3)修改Web访问控制配置文件,允许所有人访问
  # vim /etc/httpd/conf.d/nsd02.conf 
   <Directory    "/webroot">
     Require  all  granted     #允许所有人访问 
   </Directory>
4)重起服务
[root@server0 ~]# systemctl restart httpd

5) 修改SELinux策略,安全上下文值(标签值)  
[root@server0 ~]# ls  -Zd  /var/www/   
[root@server0 ~]# ls  -Zd  /webroot/

# chcon  -R --reference=/var/www/  /webroot

[root@server0 ~]# ls  -Zd  /var/www/
[root@server0 ~]# ls  -Zd  /webroot/ 

###########################################################
部署动态网站
 LAMP (Linux Apache MySQL/MariaDB php/python) 

方案3 :以webapp0.example.com部署Python页面为例

# cat /etc/httpd/conf.d/nsd01.conf #查看DocmentRoot

1.安装mod_wsgi软件包,翻译Python页面代码
[root@server0 /]# yum -y install mod_wsgi

2.修改配置文件,进行翻译Python页面代码 
      # vim /etc/httpd/conf.d/nsd01.conf
           此虚拟主机侦听在端口8909
Listen 8909           #配置httpd程序监听8909端口
<VirtualHost *:8909>  #虚拟web主机监听8909
  ServerName webapp0.example.com
  DocumentRoot /var/www/baidu
  WsgiScriptAlias /  /var/www/baidu/webinfo.wsgi  # 当客户端直接访问网页文件根目录时,webinfo.ws呈现
</VirtualHost>

3. SELinux非默认端口的开放
# semanage port -l | grep http
# semanage port -a -t http_port_t     -p tcp 8909 
   -a:添加    -t:类型     -p:协议
4.   起服
      systemctl restart httpd
      systemctl enable httpd
5.验证:
 http://webapp0.example.com:8909



#####################################################
FTP (软件vsftpd)
ftp://用户名:密码@服务器地址[:端口号]/目录/文件名
端口:ftp=21
搭建简单FTP服务(实现文件的传输)
 1.安装vsftpd服务端软件
2.FTP共享数据的路径:  /var/ftp   (默认)
#把要共享的文件和目录放到这个目录下

 3.重起vsftpd服务
  [root@server0 ~]# systemctl restart vsftpd
  [root@server0 ~]# systemctl enable vsftpd
4.本机测试
[root@server0 ~]# firefox ftp://172.25.0.11

Samba
Samba服务基础:实现跨平台的共享(Windows与Linux)
– 协议:SMB(TCP 139)、CIFS(TCP 445)
  • 所需软件包:samba
  • 系统服务:smb
Samba用户 —— 专用来访问共享文件夹的用户
  pdbedit
• 使用 pdbedit 管理工具
– 添加用户:pdbedit -a 用户名
– 查询用户:pdbedit -L [用户名]
– 删除用户:pdbedit -x 用户名 
samba 配置文件  :/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 = 客户机地址 .. .

搭建(简单)samba
             环境配置      (服务端)         
# firewall-cmd --set-default-zone=trusted
          1.安装samba软件包
[root@server0 ~]# yum -y install samba
2.创建Samba的共享帐号
 # useradd -s /sbin/nologin harry
 # pdbedit -a harry    #将harry添加为共享帐号
# pdbedit -L          #查看所有Samba的共享帐号
3.修改配置文件/etc/samba/smb.conf
 1)创建目录           [root@server0 ~]# mkdir  /common
 2)vim /etc/samba/smb.conf 
  89   workgroup = STAFF     #此服务器必须是 STAFF 工作组的一个成员
 命令模式  按 G(大写) 到全文最后
	321  [common]           #共享名
	322  path = /common     #共享实际路径
4.SELinux的布尔值策略(功能的开关)
– 需要加 -P 选项才能实现永久设置(需要内存的支持)
# getsebool -a | grep samba        #查看samba服务布尔值
# setsebool samba_export_all_ro on #修改samba服务布尔值
5.重起smb服务
[root@server0 ~]# systemctl restart smb
[root@server0 ~]# systemctl enable smb
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
samba 客户端  (1)
    配置环境
# firewall-cmd --set-default-zone=trusted
1.安装客户端软件包samba-client
         [root@desktop0 ~]# yum -y install samba-client
• 列出共享资源
                        – smbclient -L 服务器地址
                              # smbclient  -L   172.25.0.11
• 连接到共享文件夹
               – smbclient -U 用户名 //服务器地址/共享名
                    # smbclient -U harry  //172.25.0.11/common
samba 客户端  (2)
 mount挂载:本地目录作为Samba服务的访问点
1.安装cifs-utils软件包,支持cifs文件系统的软件包
[root@desktop0 /]# yum -y install cifs-utils
    2.挂载访问 
[root@desktop0 /]# mkdir /mnt/smb
普通挂载  # mount -o user=harry,pass=123  //172.25.0.11/common    /mnt/smb/

                               开机自动挂载/etc/fstab
                                 _netdev:网络设备
                   指明本设备需要具备所有网络参数后,在进行挂载
[root@desktop0 /]# vim /etc/fstab 
//172.25.0.11/common  /mnt/smb   cifs defaults,user=harry,pass=123,_netdev   0  0
[root@desktop0 /]# mount -a  #检测开机自动挂载是否书写正确
[root@desktop0 /]# df -h
读写的Samba共享

           服务端
1.创建共享目录
[root@server0 /]# mkdir /devops
2.修改配置文件/etc/samba/smb.conf
 [devops]
 path = /devops
 write list = chihiro  #允许chihiro用户可以写入
3.重起smb服务
[root@server0 /]# systemctl  restart smb
4.修改SELinux布尔值
[root@server0 /]# getsebool -a | grep samba
[root@server0 /]# setsebool  -P samba_export_all_rw=on
5.服务端本地目录权限
[root@server0 /]# setfacl -m u:chihiro:rwx /devops
[root@server0 /]# getfacl /devops

               客户端:
[root@desktop0 /]# mkdir /mnt/dev
1.完成开机自动挂载
[root@desktop0 /]# vim /etc/fstab 
//172.25.0.11/devops  /mnt/dev   cifs defaults,user=chihiro,pass=123,_netdev   0   0
[root@desktop0 /]# mount -a
[root@desktop0 /]# df -h
##################################################
总结:读写Samba共享
搭建Samba服务:
  1.修改防火墙策略
  2.安装软件包samba
  3.创建Samba共享帐号   pdbedit
  4.创建共享目录,修改配置文件发布共享,添加可写用户
  5.重起smb服务
  6.修改SELinux功能的开关(rw读写功能)
  7.赋予本地目录(可写用户身份)读写执行的权限

客户端:
   1.修改防火墙策略
   2.安装软件包cifs-utils
   3.利用mount挂载的方式
   4.实现开机自动挂载
multiuser机制(多用户)
– multiuser,提供对客户端多个用户身份的区分支持
– sec=ntlmssp,提供NT局域网管理安全支持
将共享,开机自动挂载到/mnt/samba
-发布共享/public,共享名为haxi
	-共享用户chihiro对共享具备读写权限
//172.25.0.11/devops  /mnt/dev   cifs defaults,username=chihiro,password=123,mnltiuser,sec=ntlmssp _netdev   0   0


iSCSI  
( 软件包 :服务端targetcli  客户端iscsi-initiator-utils)

网络磁盘(共享分区或整个磁盘)  默认端口:3260
backstore,后端存储(
对应到服务端提供实际存储空间的设备,需要起一个管理名称
target,磁盘组
– 是客户端的访问目标,作为一个框架,由多个lun组成
lun,逻辑单元
– 每一个lun需要关联到某一个后端存储设备,在客户端
会视为一块虚拟硬盘
– iqn.yyyy-mm.倒序域名:自定义标识

搭建iscsi磁盘共享
1.利用fisk /dev/vdb命令,划分一个5G的主分区
                         服务端
一 防火墙设置为trusted
二 .安装软件包targetcli(服务端软件),进行配置
root@server0 ~]# yum  -y  install  targetcli
[root@server0 ~]# targetcli
   1.创建后端存储 backstore,后端存储(冰箱进行纸质包装)
  /> backstores/block create name=nsd  dev=/dev/vdb1
           后端存储/块设备          创建       名字              实际设备
  2.创建 target,磁盘组 (木质箱子)
  /> iscsi/ create  iqn.2018-10.example.com:server0
   3.进行关联, lun 逻辑单元
  [root@server0 ~]# targetcli 
  /> ls
/> iscsi/iqn.2018-10.example.com:server0/tpg1/  
   luns     create   /backstores/block/nsd 
   4.访问控制, 设置客户端访问服务端时,声称的名字(符合iqn格式)
 /> iscsi/iqn.2018-10.example.com:server0/tpg1/acls  
   create  iqn.2018-10.example.com:desktop0
   5.开放本机的IP地址与端口
  /> iscsi/iqn.2018-10.example.com:server0/tpg1/  
  portals create 172.25.0.11
  /> ls
 6.重起服务端target服务
[root@server0 ~]# systemctl restart target
[root@server0 ~]# systemctl enable target
                              客户端:    
 1.防火墙设置默认区域为trusted
2.安装软件包(客户端软件包)
[root@desktop0 ~]# rpm -q iscsi-initiator-utils
3.指定客户端声称的名字
 # vim /etc/iscsi/initiatorname.iscsi 
 InitiatorName=iqn.2018-10.example.com:desktop0
4.重起iscsid服务,刷新客户端声称的名字
 [root@desktop0 ~]# systemctl restart iscsid
 [root@desktop0 ~]# systemctl daemon-reload
 [root@desktop0 ~]# systemctl restart iscsid
5.发现服务端共享存储
书写发现的命令,  参考# man iscsiadm  搜索全文 /example
scsiadm --mode discoverydb --type sendtargets -- portal 172.25.0.11  --discover
6.加载共享存储
	# lsblk 
	# systemctl restart iscsi  #重起服务加载共享存储
	# systemctl enable iscsi
###############################################################
总结:
服务端:
  1.防火墙默认区域设置为trusted
  2.安装软件包targetcli
      A:建立后端存储
      B:建立target磁盘组
      C:关联lun
      D:设置acl访问控制,客户端声称的名字
      E:开启本机的IP地址及端口
  3.重起target服务

客户端:
  1.防火墙默认区域设置为trusted
  2.安装软件包iscsi-initiator-utils
  3.修改文件/etc/iscsi/initiatorname.iscsi客户端声称的名字
  4.重起iscsid服务刷新客户端iqn标识
  5.书写客户端发现命令,参照man iscsiadm
  6.重起iscsi服务,加载共享存储  最终利用lsblk查看新磁盘

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

数据库管理   (软件 MariaDB-server)
数据库:存放数据的仓库
– 社区开源版 MariaDB  默认端口:3306

一  安装数据库
[root@server0 ~]# yum -y install mariadb-server
[root@server0 ~]# systemctl restart mariadb
[root@server0 ~]# systemctl enable mariadb
二  数据库基本操作
show (查看)      create(创建)
> show databases;           #显示所有库
> create database nsd1809;  #创建nsd1809库
> exit                      #结束退出mariadb
>drop datebase nsd1809  #删除1809库
三  为数据库管理员设置密码
• 为数据库账号修改密码
– mysqladmin [-u用户名] [-p[旧密码]] password '新密码'
[root@server0 ~]# mysqladmin -u root password '123'
进入数据库
[root@server0 ~]# mysql -u root -p123  #非交互式进入数据库
[root@server0 ~]# mysql -u root  -p  #交互式进入

 MariaDB [(none)]> use nsd;       #进入nsd库
 MariaDB [nsd]> show tables;      #显示所有表格

• 禁止监听,只服务于本机,MariaDB主配文件为/etc/my.cnf
#vim /etc/my.cof
skip-networking    #跳过网络

• 导入数据 /恢复到数据库
– mysql [-u用户名] [-p[密码]] 数据库名 < 备份文件.sql
# mysql -u root -p123 nsd  <  users.sql   #导入数据
# mysql -u root -p123 nsd  > users.sql   #导出数据

案例5:使用数据库查询
1. 在系统 server0 上使用数据库 nsd,并使用相
应的 SQL 查询以回答下列问题:
1)密码是 solicitous 的人的名字?

MariaDB [(none)]> use nsd;   #切换到库nsd
MariaDB [nsd]> show tables;  #查看所有的表格
> select * from base;
> select * from base where password='solicitous';
> select * from base where name='tom';
> select * from base where password='456';
2)有多少人的 姓名是 Barbara 同时居住在 Sunnyvale
> select  *  from   base,location   where base.name='Barbara'   and   location.city='Sunnyvale' 
 and   base.id=location.id;
2. 禁止空密码root用户访问 mariadb 数据库
> use mysql;
> desc user;    #查看表结构
> select  user,host,password   from user  where password='';  查询空密码的用户
> delete  from user   where   password=' ';                       #删除空密码的用户 
> select  user,host,password   from  user;                        #查询是否还存在空密码用户
> flush  privileges;                                                          #刷新user表记录
测试登陆失败,利用域名方式登陆
# mysql -u root -h server0.example.com

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

表格操作:  
 insert(增)  delete(删)  update(改)  select(查)         查看表结构的命令: desc
                                                                > desc user;    #查看表结构

查询表格内容
   MariaDB [(none)]> use nsd;   #切换到库nsd
   MariaDB [nsd]> show tables;  #查看所有的表格
   select  表字段   from  表名;
   select  表字段   from  库名.表名;
MariaDB [nsd]> select * from base;
MariaDB [nsd]> select name from base;
MariaDB [mysql]> select user,host,password from user;

MariaDB [(none)]> use nsd;
MariaDB [nsd]> desc base;
##################################################
数据库的授权:
–GRANT  权限列表  ON   数据库名.表名   TO 用户名@客户机地址   IDENTIFIED   BY  '密码';

[root@server0 ~]# mysql -u root -p123
> grant select on nsd.* to dc@localhost identified by '123';    #当dc从locahost登陆输入密码123,将会获得nsd库所有表的查询权限




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

mail 
邮件服务    (软件 :postfix)

    SMTP:用户发出的邮件的协议  默认端口  25
    pop3:用户收到的邮件的协议  默认端口 110

搭建简单邮件服务

1.检查是否安装postfix软件包,搭建为邮件服务器
[root@server0 /]# rpm -q postfix
postfix-2.10.1-6.el7.x86_64
2.修改配置文件
[root@server0 /]# vim /etc/postfix/main.cf 
     末行模式  :set  nu  开启行号
 99 myorigin = server0.example.com  #默认补全的域名后缀
116 inet_interfaces = all (或者loopback-only 仅自己)#允许本机所有接口使用邮件服务
164 mydestination =              //此行的值设为空
mynetworks=127.0.0.0/8   [::1]/128   //仅本机
relayhost=[smtpX.example.com]     //后端邮件服务器
local_transport = error:local dirvctory 
3.重起服务
[root@server0 /]# systemctl restart postfix
                                 发信操作与收信操作

                               • mail 发信操作
         – mail -s '邮件标题'   -r 发件人   收件人[@收件域]...
        mail      -s   " test"   student  (直接收件人)
                               • mail 收信操作
                             – mail    -u   用户名

###############################################################
源码编译安装
• 主要优点
– 获得软件的最新版,及时修复bug
– 软件功能可按需选择/定制,有更多软件可供选择
– 源码包适用各种平台

步骤1:安装gcc与make
[root@svr7 ~]# yum -y install  gcc  make

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

步骤3:  ./configure 配置,
# cd /inotify-tools-3.13/
# ./configure  --prefix=/opt/myrpm   #指定安装位置

步骤4:make 编译,生成可执行的二进制程序文件
[root@svr7 inotify-tools-3.13]# make

步骤5:make install 安装,将编译好的文件复制到安装目录
[root@svr7 inotify-tools-3.13]# make install

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


DNS
服务器的功能
– 正向解析:根据注册的域名查找其对应的IP地址
– 反向解析:根据IP地址查找对应的注册域名,不常用
                    所有完整的域名都必须以点结尾   根域名:  .
顶级域名:   .cn    .us   .jp   .kr  .tw  .hk ......
二级域名:   .com.cn   .net.cn  .org.cn  .tedu.cn    
三级域名:   .nb.com.cn  .haxi.com.cn  .xixi.com.cn
完整域名(FQDN): www.nb.com.cn  ftp.nb.com.cn


• BIND服务器端程序     
– 系统服务:named
– 默认端口:TCP/UDP 53
– 运行时的虚拟根环境:/var/named/chroot/

• 主配置文件:/etc/named.conf    指定本机负责解析的域名
• 地址库文件:/var/named/etc/        完整的域名与IP对应关系    

• NS,域名服务器(Name Server)记录
• A,地址(Address)记录,仅用于正向解析区域

搭建基本DNS服务

虚拟机A
1.安装软件包
[root@svr7 ~]# yum -y install bind-chroot bind

2.修改配置文件/etc/named.conf


[root@svr7 ~]# cp /etc/named.conf  /root/named.bak
[root@svr7 ~]# vim /etc/named.conf
 options {
    directory       "/var/named";  #指定地址库文件路径
  };
  zone "tedu.cn" IN {         #指定本机负责解析的域名
        type master;          #本机为权威主DNS服务器
        file "tedu.cn.zone";  #指定地址库文件名字
  };

3.创建地址库文件/var/named/tedu.cn.zone
# cd  /var/named
# cp -p named.localhost  tedu.cn.zone  #保持属性不变
# vim tedu.cn.zone            
 #没有以点结尾,默认补全tedu.cn.
 tedu.cn.    NS  svr7        #tedu.cn.区域有svr7负责
 svr7        A   192.168.4.7 #svr7的IP地址为192.168.4.7
 www         A   1.1.1.1
 ftp         A   2.2.2.2

4.重起named服务
# systemctl  restart  named


5.客户端验证
指定DNS服务器位置
# echo nameserver 192.168.4.7 > /etc/resolv.conf
2.域名解析测试
# nslookup www.tedu.cn 
# nslookup ftp.tedu.cn


#################################################
多区域的DNS服务器

虚拟机A:
1.修改配置文件/etc/named.conf      
  ......
  zone "qq.com" IN {       
        type master;         
        file "qq.com.zone"; 
  };
3.创建地址库文件/var/named/qq.com.zone
# cd  /var/named
# cp -p tedu.cn.zone  qq.com.zone 
# vim qq.com.zone           
 qq.com.     NS  svr7      
 svr7        A   192.168.4.7
 www         A   3.3.3.3
 ftp         A   4.4.4.4
4.重起named服务
# systemctl  restart  named          

5.客户端验证
1.指定DNS服务器位置
# echo nameserver 192.168.4.7 > /etc/resolv.conf
2.域名解析测试
# nslookup www.qq.com
# nslookup ftp.qq.com

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

特殊的解析记录,以tedu.cn.zone为例

一 DNS的负载均衡,轮询的相同解析记录(了解)

[root@svr7 /]# vim /var/named/tedu.cn.zone
tedu.cn.    NS  svr7
svr7        A   192.168.4.7
www         A   192.168.4.1
www         A   192.168.4.2
www         A   192.168.4.3
www         A   192.168.4.4
ftp         A   2.2.2.2

[root@svr7 /]# !sys
systemctl restart named
#############################################################

二 泛域名解析

[root@svr7 /]# vim  /var/named/tedu.cn.zone
.......
*           A   10.11.12.14
[root@svr7 /]# !sys
systemctl restart named

客户端验证:
[root@pc207 /]# nslookup wwwwww.tedu.cn
[root@pc207 /]# nslookup hahaxixi.tedu.cn

三 解析记录的别名(了解)
[root@svr7 /]# vim /var/named/tedu.cn.zone 
 .......
 tts      CNAME     ftp   #tts解析结果与ftp解析结果一致
    [root@svr7 /]# !sys
systemctl restart named

客户端验证
[root@pc207 ~]# nslookup tts.tedu.cn

四   有规律的泛域名解析

       pc1.tedu.cn ----> 192.168.10.1
       pc2.tedu.cn ----> 192.168.10.2
       pc3.tedu.cn ----> 192.168.10.3
             ......
       pc50.tedu.cn ----> 192.168.10.50

   内置函数: $GENERATE   产生连续的数字

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

 $GENERATE   1-50   pc$    A   192.168.10.$

[root@svr7 /]# !sys
systemctl restart named
[root@svr7 /]# 

客户端验证
[root@pc207 ~]# nslookup pc1.tedu.cn
[root@pc207 ~]# nslookup pc2.tedu.cn
[root@pc207 ~]# nslookup pc18.tedu.cn
[root@pc207 ~]# nslookup pc50.tedu.cn
##############################################
DNS服务器常见的资源解析记录都有那些?
  NS解析记录    A解析记录     CNAME解析记录

###############################################
DNS子域授权 ,qq.com域名为例
   
            父域:www.qq.com

            子域:www.bj.qq.com

            父域的DNS服务器为虚拟机A,负责解析qq.com       
  
            子域的DNS服务器为虚拟机B,负责解析bj.qq.com  

虚拟机B
1.安装软件包
[root@pc207 ~]# yum -y install bind-chroot  bind
2.修改配置文件/etc/named.conf
[root@pc207 ~]# cp /etc/named.conf  /root/named.bak
[root@pc207 ~]# vim /etc/named.conf
 options {
    directory       "/var/named";  #指定地址库文件路径
  };
  zone "bj.qq.com" IN {         #指定本机负责解析的域名
        type master;            #本机为权威主DNS服务器
        file "bj.qq.com.zone";  #指定地址库文件名字
  };
3.创建地址库文件/var/named/bj.qq.com.zone
# vim    bj.qq.com.zone      
 bj.qq.com.  NS  pc207        
 pc207       A   192.168.4.207 
 www         A   5.5.5.5
4.重起named服务
# systemctl  restart  named
###############################################
子域授权
  通过父域的DNS服务器为虚拟机A,能够解析www.bj.qq.com
虚拟机A:
[root@svr7 /]# vim /var/named/qq.com.zone
 qq.com.     NS  svr7
 bj.qq.com.  NS  pc207
 svr7        A   192.168.4.7
 pc207       A   192.168.4.207
 www         A   3.3.3.3
 ftp         A   4.4.4.4
[root@svr7 /]#systemctl restart named
[root@pc207 /]# nslookup www.bj.qq.com 192.168.4.7
Server:		192.168.4.7
Address:	192.168.4.7#53

Non-authoritative answer:   #非权威解答
Name:	www.bj.qq.com
Address: 5.5.5.5
 
递归查询: 
     客户端向首选DNS服务器寻求解析,首选DNS服务器与其他DNS服务器交互,最终将解析结果,带回来的过程

  options {
        directory       "/var/named";
        recursion  no;    #禁止递归
    };

[root@pc207 /]# dig  www.bj.qq.com  192.168.4.7


迭代查询:首选DNS服务器与其他DNS服务器交互

################################################
直接起到DNS解析的功能(只能对本机解析) 
  /etc/hosts 主机名映射文件(本地主机名与IP地址对应关系)

[root@svr7 /]# vim /etc/hosts
[root@svr7 /]# tail -1 /etc/hosts
192.168.4.110   www.360.com

[root@svr7 /]# ping www.360.com

    /etc/hosts(DNS解析过程中,最高优先级)

客户端解析域名顺序:
      1./etc/hosts
      2./etc/resolv.conf
           3.找寻DNS服务器
###############################################

缓存DNS: 
        利用内存进行缓存解析记录,加速解析

真机搭建缓存DNS服务器
1.搭建Yum仓库
[root@room9pc01 ~]# cat /etc/redhat-release 
CentOS Linux release 7.4.1708 (Core) 
[root@room9pc01 ~]# ls /iso/
CentOS-7-x86_64-DVD-1708.iso
[root@room9pc01 ~]# mkdir /dvd/
[root@room9pc01 ~]# mount /iso/CentOS-7-x86_64-DVD-1708.iso    /dvd/

# ls  /dvd/
# cd  /etc/yum.repos.d/
# mkdir  repo
# mv   *.repo   repo
# vim   dvd.repo
  [dvd]
  name=CentOS7.4
  baseurl=file:///dvd    #指定本地Yum
  enabled=1
  gpgcheck=0

# yum -y install  bind  bind-chroot

2.查看达内   内网DNS服务器地址
[root@room9pc01 /]# cat  /etc/resolv.conf 
nameserver  172.40.1.10
[root@room9pc01 /]#          

3.修改DNS服务器主配置文件,指定转发给内网DNS服务器
[root@room9pc01 /]# vim /etc/named.conf 
  options {
           directory       "/var/named";
           forwarders   {  172.40.1.10;  };
   };

4. 重起named服务
[root@room9pc01 /]# systemctl restart named

5.在虚拟机上验证:
[root@svr7 /]# nslookup www.taobao.com 192.168.4.254


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

Split分离解析(视图解析) 

什么是分离解析
• 当收到客户机的DNS查询请求的时候
 – 能够区分客户机的来源地址
 – 为不同类别的客户机提供不同的解析结果(IP地址)
 – 为不同的客户端,提供最近最适合的服务器
• 根据源地址集合将客户机分类
– 不同客户机获得不同结果(待遇有差别)
注意事项:
1.客户端必须找到,自己的分类,需要管理员分类合理
2.view客户端由上及下,匹配及停止
3.所有的zone都必须在view中

	view  "haha"   {
	 match-clients  {  192.168.4.207;  };
	  zone "12306.cn"  IN {
	    ...... 地址库1;
	    };                                                
         };                           
	view  "xixi"   {
	 match-clients  {  192.168.4.110;   };
	  zone "12306.cn" IN {
	    ...... 地址库2;
	   }; 
         }; 
    view  "hehe"   {
	 match-clients  {  any;   };
	  zone "12306.cn" IN {
	    ...... 地址库3;
	   }; 
         }; 
##########################################
案例需求及要点
• 环境及需求
– 权威DNS:svr7.tedu.cn 192.168.4.7
– 负责区域:tedu.cn
– A记录分离解析 —— 以 www.tedu.cn 为例
客户机来自 解析结果
     192.168.4.207----------》 192.168.4.100
     其他地址          ----------》 1.2.3.4
 view nsd {                      
  match-clients  {  192.168.4.207;  };
   zone "tedu.cn" {
      type master;
      file "tedu.cn.zone";
   };
 };
 view other {
  match-clients {  any;  };
   zone "tedu.cn" {
      type master;
      file "tedu.cn.other";
    };
 };
 请去建立相应的地址库文件,写入不同的解析结果

################################################3
acl地址列表
• 为大批量的客户机地址建立列表
  acl "liantong" {
     IP地址1; IP地址2; .. ..
         网段1; 网段2; .. ..
      .. ..
      };
  acl "tietong" {
    IP地址3; IP地址4; .. ..
       网段3; 网段4; .. ..
       .. ..
    };


 acl test { 192.168.4.207; 192.168.4.1;
           192.168.4.2; 192.168.4.3;
    };

 view nsd {
 match-clients { test; };
  zone "tedu.cn" {
      type master;
      file "tedu.cn.zone";
    };
  };

###############################################
补充:多区域的分离解析
  每一个view中,zone的个数保持一致,域名的个数保持一致

[root@svr7 /]# vim /etc/named.conf
options {
	directory 	"/var/named";
};
acl test { 192.168.4.207; 192.168.4.1;
             192.168.4.2;   192.168.4.3;
        };

view nsd {
 match-clients { test; };
  zone "tedu.cn" {
      type master;
      file "tedu.cn.zone";
   };
  zone "sina.com" {
      type master;
      file "sina.com.zone";
   };
};
view other {
 match-clients { any; };
  zone "tedu.cn" {
      type master;
      file "tedu.cn.other";
   };
  zone "sina.com" {
      type master;
      file "sina.com.other";
   };
};

 请去建立相应的地址库文件,写入不同的解析结果

RAID磁盘阵列
RAID阵列概述
• 廉价冗余磁盘阵列
– Redundant Arrays of Inexpensive Disks
– 通过硬件/软件技术,将多个较小/低速的磁盘整合成一个大磁盘
– 阵列的价值:提升I/O效率、硬件级别的数据冗余
– 不同RAID级别的功能、特性各不相同
• RAID 0,条带模式
– 同一个文档分散存放在不同磁盘
– 并行写入以提高效率
– 至少由两块磁盘组成


• RAID 1,镜像模式
– 一个文档复制成多份,分别写入不同磁盘
– 多份拷贝提高可靠性,效率无提升
– 至少由两块磁盘组成


• RAID5,高性价比模式
– 相当于RAID0和RAID1的折中方案
– 需要至少一块磁盘的容量来存放校验数据
– 至少由三块磁盘组成

• RAID6,高性价比/可靠模式
– 相当于扩展的RAID5阵列,提供2份独立校验方案
– 需要至少两块磁盘的容量来存放校验数据
– 至少由四块磁盘组成

RAID0/1/10
• RAID 0+1/RAID 1+0
– 整合RAID 0、RAID 1的优势
– 并行存取提高效率、镜像写入提高可靠性
– 至少由四块磁盘组成

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

进程管理
     程序:静态的代码,仅占硬盘空间
   进程:动态的代码,占用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(13952)───vim(13996)
                        [root@svr7 ~]# pstree -ap lis
查看进程快照
• ps — Processes Snapshot
– 格式:ps [选项]...
• 常用命令选项
– aux:显示当前终端所有进程(a)、当前用户在所有
终端下的进程(x), 以用户格式输出(u)
– -elf:显示系统内所有进程(-e)、以长格式输出(-l)
信息、包括最完整的进程信息(-f)

 ps  aux             :输出进程信息非常详细
                          – 列出正在运行的所有进程

  ps  -elf            :输出进程信息比较详细,有该进程的父进程信息
                         – 列出正在运行的所有进程

tree
 树 
安装包 tree  (可以查看目录里面树状表示)   
例: mkdir /a
       cat /etc/passwd > a/a.txt
tree  a  




   PPID:父进程的PID号
###############################################################
WC
统计
用法:wc -l 

请统计Linux一共有多少个用户? 
[root@svr7 ~]# wc -l /etc/passwd  #统计有多少行
 42 /etc/passwd
 请统计/etc目录下以tab结尾的文件,一共有多少个? 
# find /etc/ -name "*tab"  -type  f 
# find /etc/ -name "*tab"  -type  f   | wc -l
 请统计/etc目录下以 .conf 结尾的文件,一共有多少个?
# find /etc/ -name "*.conf"  -type f  
# find /etc/ -name "*.conf"  -type f   |  wc -l
 请统计Linux正在运行的进程,一共有多少个?
[root@svr7 ~]# ps aux | wc -l
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                                   进程动态排名
    top 
交互式工具
– 格式:top [-d 刷新秒数] [-U 用户名]

  按键盘上  P(大写)按照CPU排序
   按键盘上  M(大写)按照内存排序

检索进程
• pgrep — Process Grep
• 常用命令选项
– -l                  :输出进程名,而不仅仅是 PID
– -U                :检索指定用户的进程
– -t                  :检索指定终端的进程
– -x                 :精确匹配完整的进程名


[root@svr7 ~]# who  #当前系统有哪些用户正在登陆

       pts:图形命令行终端

[root@svr7 ~]# pgrep  crond
[root@svr7 ~]# pgrep  -l crond
[root@svr7 ~]# pgrep  -l log 
[root@svr7 ~]# pgrep -lU lisi

[root@svr7 ~]# pgrep -lU lisi -t pts/3
[root@svr7 ~]# pgrep -lU lisi -t pts/2

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


控制进程
• 后台启动
– 在命令行末尾添加“&”符号,(运行并转入后台)


• Ctrl + z 组合键
– 挂起当前进程(暂停并转入后台)

• jobs 命令
– 查看后台任务列表

• fg 命令
– 将后台任务恢复到前台运行

• bg 命令
– 激活后台被挂起的任务


[root@svr7 ~]# sleep 800 &   #运行放入后台
[root@svr7 ~]# jobs          #查看后台运行的进程
[root@svr7 ~]# sleep 1000
^Z                       #按键盘上  Ctrl + Z 暂停放入后台
[2]+  已停止               sleep 1000
[root@svr7 ~]# jobs   #查看后台运行的进程
[root@svr7 ~]# bg 2   #将后台编号为2的进程继续运行
[root@svr7 ~]# jobs
[root@svr7 ~]# fg 2   #将后台编号为2的进程,恢复到前台
sleep 1000
^C                    #按键盘上  Ctrl + C 结束
[root@svr7 ~]# jobs 
[root@svr7 ~]# fg 1   #将后台编号为1的进程,恢复到前台
sleep 800
^C                    #按键盘上  Ctrl + C 结束
[root@svr7 ~]# job

kill
杀死进程
• 干掉进程的不同方法
– Ctrl+c 组合键,中断当前命令程序

– kill [-9] PID... 
– killall  进程名...
– pkill 查找条件
进程调度及终止的主要命令工具:

命令行 &:将命令行在后台运行
Ctrl + z 组合键:挂起当前进程(暂停并转入后台)
jobs:列出当前用户当前终端的后台任务
bg 编号:启动指定编号的后台任务
fg 编号:将指定编号的后台任务调入前台运行
kill [-9] PID...:杀死指定PID值的进程
kill [-9] %n:杀死第n个后台任务
killall [-9] 进程名...:杀死指定名称的所有进程
pkill:根据指定的名称或条件杀死进程

[root@svr7 ~]# sleep 800 &
[root@svr7 ~]# sleep 900 &
[root@svr7 ~]# jobs 
[root@svr7 ~]# jobs -l

[root@svr7 ~]# kill 15519
[root@svr7 ~]# jobs -l
[root@svr7 ~]# killall sleep
[root@svr7 ~]# jobs -l

w
显示已经登录的用户及正在进行的操作
[root@room9pc01 ~]# w
 15:55:58 up  7:19,  2 users,  load average: 0.47, 0.35, 0.22
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     :0       :0               08:38   ?xdm?  54:57   0.30s /usr/libexec/g
root     pts/0    :0               15:41    6.00s  0.08s  0.00s w

who 
显示已经登录的用户名、终端名称、登录时间及登录IP
[root@room9pc01 ~]# who
root     :0           2019-01-24 08:38 (:0)

whoami 
显示当前用户的用户名
[root@room9pc01 ~]# who
root     :0           2019-01-24 08:38 (:0)

uptime 
执行该命令将会显示出系统的当前时间、上线时间、当前的用户数量以及过去1、5、15分钟内的系统负载
[root@room9pc01 ~]# uptime
 17:44:35 up  9:07,  3 users,  load average: 0.41, 0.20, 0.16

free
查看实际内存占用(和可用空间)内存利用率

选项:-h (人类易读)
或者:-k (KB)-g (GB)  -m(MB) -tera(TB) 默认以KB为单位
-l   按内存高低总计信息
 -t  在linux后面加-t 显示linux 全部内存  
[root@room9pc01 ~]# free -h
              total        used        free      shared  buff/cache   available
Mem:            15G        1.7G         11G         95M        2.5G         13G
Swap:            0B          0B          0B


total 内存总数: 128
used 已经使用的内存数: 119
free 空闲的内存数: 8
shared 当前已经废弃不用,总是0
buffers Buffer Cache内存数: 1
cached Page Cache内存数: 22

例:free -m
      free -hs 3  #每3秒显示一次统计内存利用率

     free  -l 
free 命令使用 /proc/meminfo 作为基准来显示内存利用率信息



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

                               内核及系统日志
• 由系统服务rsyslog统一记录/管理

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


日志分析

     tailf:实时跟踪日志     tail -f  

• 通用分析工具
– tail、tailf、less、grep等文本浏览/检索命令
– awk、sed等格式化过滤工具


用户登录分析
• users
  who
  w    命令


– 查看已登录的用户信息,详细度不同

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

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

[root@svr7 ~]# last -2    #最近登陆成功的2条用户信息
[root@svr7 ~]# lastb -2   #最近登陆失败的2条用户信息


日志消息的优先级

• Linux内核定义的事件紧急程度        
– 分为 0~7 共8种优先级别
– 其数值越小,表示对应事件越紧急/重要
 
  0  EMERG(紧急)        会导致主机系统不可用的情况
  1  ALERT(警告)         必须马上采取措施解决的问题
  2  CRIT(严重)	        比较严重的情况
  3  ERR(错误)	       运行出现错误
  4  WARNING(提醒)    可能会影响系统功能的事件
  5  NOTICE(注意)      不会影响系统但值得注意
  6  INFO(信息)	       一般信息
  7  DEBUG(调试)       程序或系统调试信息等


使用journalctl工具

• 提取由 systemd-journal 服务搜集的日志
– 主要包括内核/系统日志、服务日志

• 常见用法
– journalctl | 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

#查看关于httpd服务日志
[root@svr7 ~]# journalctl -u httpd

systemctl
控制
• Linux系统和服务管理器
– 是内核引导之后加载的第一个初始化进程(PID=1)
– 负责掌控整个Linux的运行/服务资源组合

对于服务的管理
 systemctl restart  服务名   #重起服务
 systemctl start  服务名       #开启服务
 systemctl stop  服务名         #停止服务
 systemctl status  服务名     #查看服务当前的状态
 
 systemctl enable  服务名      #设置服务开机自启动
 systemctl disable  服务名    #设置服务不开机自启动
 systemctl enable  服务名 


#查看是否开机自启动
[root@svr7 /]# systemctl is-enabled httpd  
disabled  #禁止开机启动
[root@svr7 /]# systemctl enable httpd

[root@svr7 /]# systemctl is-enabled httpd
enabled  #允许开机启动
[root@svr7 /]#

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

– 服务目录:/lib/systemd/system/

[root@svr7 /]# vim /lib/systemd/system/httpd.service

RHEL6:运行级别   200 

         0:关机     0
         1:单用户模式(基本功能的实现,破解Linux密码)50 
	 2:多用户字符界面(不支持网络) 80
	 3:多用户字符界面(支持网络)服务器默认的运行级别  100
	 4:未定义
	 5:图形界面    190
	 6:重起   0
   
    切换运行级别:init  数字    
 
RHEL7:运行模式

   字符模式:multi-user.target
   图形模式:graphical.target

当前直接切换到图形模式
[root@svr7 /]# systemctl isolate graphical.target
当前直接切换到字符模式
[root@svr7 /]# systemctl isolate multi-user.target

查看每次开机默认进入模式
# systemctl get-default
 multi-user.target

设置永久策略,每次开机自动进入graphical.target
# systemctl set-default graphical.target 
# reboot 
#################################################

DHCP

部署DHCP服务器
• Dynamic Host Configuration Protocol
– 动态主机配置协议,由 IETF(Internet 网络工程师任
务小组)组织制定,用来简化主机地址分配管理
• 主要分配以下入网参数
– IP地址/子网掩码/广播地址
– 默认网关地址、DNS服务器地址
• DHCP地址分配的四次会话(广播进行,先到先得)
– DISCOVERY --> OFFER --> REQUEST -->ACK

  在一个网络中只能有一台DHCP
• 装软件包 dhcp
• 配置文件 /etc/dhcp/dhcpd.conf
• 起服务 dhcpd


虚拟机A:


1.安装软件包
[root@svr7 /]# yum -y install dhcp
2.修改配置文件
[root@svr7 /]# vim  /etc/dhcp/dhcpd.conf 
    #读入其他文件内容
  :r /usr/share/doc/dhcp*/dhcpd.conf.example

subnet 192.168.4.0 netmask 255.255.255.0 { 分配的网段
  range 192.168.4.20 192.168.4.100;     分配范围
  option domain-name-servers 192.168.4.7; 分配DNS服务器
  option routers 192.168.4.254;  分配网关地址
  default-lease-time 600;   默认租约时间
  max-lease-time 7200;      最大租约时间
}
3.重起服务
[root@svr7 /]# systemctl restart dhcpd 

################################################
PXE
网络装机概述
网络装机的优势
• 规模化:同时装配多台主机
• 自动化:装系统、配置各种服务
• 远程实现:不需要光盘、U盘等物理安装介质

• 需要哪些服务组件?
– DHCP服务,分配IP地址、定位引导程序
– TFTP服务,提供引导程序下载
– HTTP服务,提供yum安装源

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

一、搭建配置DHCP服务

1.指定写一个服务器地址
[root@svr7 /]# vim /etc/dhcp/dhcpd.conf
subnet 192.168.4.0 netmask 255.255.255.0 {
  range 192.168.4.20 192.168.4.100;
  option domain-name-servers 192.168.4.7;
  option routers 192.168.4.254;
  default-lease-time 600;
  max-lease-time 7200;
  next-server  192.168.4.7;  #指定下一个服务器地址
  filename  "pxelinux.0";    #指定引导文件名称
}
2.重起服务
[root@svr7 /]# systemctl  restart  dhcpd

    pxelinux.0:网卡引导文件,安装说明书,二进制文件
                             安装一个软件,会自动生成该文件
二、配置TFTP服务

       tftp:简单的文件传输协议
             默认端口为:  69
             默认共享路径:/var/lib/tftpboot
1.安装tftp-server软件
[root@svr7 /]# yum -y install tftp-server

2.重起tftp服务
[root@svr7 /]# systemctl  restart  tftp
[root@svr7 /]# systemctl  enable   tftp

3.部署pxelinux.0文件
# yum  provides   */pxelinux.0  #查询那个软件包产生该文件
# yum -y  install  syslinux     #安装软件

# rpm -ql syslinux  |  grep pxelinux.0   #查看安装清单

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

# ls /var/lib/tftpboot/    
 
4.部署菜单文件
 默认存放路径/var/lib/tftpboot/pxelinux.cfg/

 pxelinux.0--》/var/lib/tftpboot/pxelinux.cfg/default

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

# ls -l /var/lib/tftpboot/pxelinux.cfg/default
# chmod u+w /var/lib/tftpboot/pxelinux.cfg/default
# ls -l /var/lib/tftpboot/pxelinux.cfg/default

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

  在真机上,利用clone-vm7新建一台虚拟机,名字:PXE-Server
   1.设置防火墙为trusted
   2.当前及永久关闭SELinux
   3.配置IP地址:192.168.4.122/24
   4.搭建Yum仓库   
   5.主机名:PXE.tedu.cn

######################################################
搭建一键装机平台
一 、搭建DHCP服务
1.安装dhcp
2.修改配置文件
subnet 192.168.4.0  netmask  255.255.255.0 {
  range 192.168.4.180  192.168.4.230;
  next-server  192.168.4.122;
  filename  "pxelinux.0";
}

3.重起dhcpd服务,设置开机自起动

#####################################################
二、搭建tftp

1.安装tftp-server
2.启动tftp服务,设置开机自起动
3. 部署pxeliunx.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. 部署光盘内容
[root@PXE ~]# yum -y install httpd
[root@PXE ~]# mkdir /var/www/html/rhel6
[root@PXE ~]# mkdir /var/www/html/rhel7

[root@PXE ~]# mount /dev/cdrom  /mnt/    #光盘为rhel7
[root@PXE ~]# ls /mnt/
[root@PXE ~]# cp -r  /mnt/*    /var/www/html/rhel7/

[root@PXE ~]# umount  /mnt
[root@PXE ~]# mount /dev/cdrom  /mnt/   #光盘为rhel6
[root@PXE ~]# ls /mnt/
[root@PXE ~]# cp -r  /mnt/*    /var/www/html/rhel6/

[root@PXE ~]# du  -sh /var/www/html/rhel7/
[root@PXE ~]# du  -sh /var/www/html/rhel6/


5.部署rhel7、rhel6   的启动内核与驱动程序
# mkdir /var/lib/tftpboot/rhel6
# mkdir /var/lib/tftpboot/rhel7

# cp /var/www/html/rhel6/isolinux/vmlinuz   
     /var/www/html/rhel6/isolinux/initrd.img            
     /var/lib/tftpboot/rhel6/

# cp /var/www/html/rhel7/isolinux/vmlinuz  
     /var/www/html/rhel7/isolinux/initrd.img               
     /var/lib/tftpboot/rhel7/

# ls /var/lib/tftpboot/rhel7
# ls /var/lib/tftpboot/rhel6


6.部署图形模块与背景
# cp /var/www/html/rhel6/isolinux/vesamenu.c32  
     /var/lib/tftpboot/

# rpm -ql syslinux | grep jpg

# cp /usr/share/doc/syslinux-4.05/sample/syslinux_splash.jpg   /var/lib/tftpboot/
 # ls /var/lib/tftpboot/

7.部署菜单文件
# mkdir /var/lib/tftpboot/pxelinux.cfg

# cp /var/www/html/rhel6/isolinux/isolinux.cfg 
     /var/lib/tftpboot/pxelinux.cfg/default
# chmod 644 /var/lib/tftpboot/pxelinux.cfg/default
# ls -l /var/lib/tftpboot/pxelinux.cfg/default

8.修改菜单文件内容
# vim /var/lib/tftpboot/pxelinux.cfg/default
......
menu background syslinux_splash.jpg
menu title Welcome to PXE Server!
......
label linux
  menu label Install RHEL7.2
  kernel rhel7/vmlinuz
  append initrd=rhel7/initrd.img

label vesa
  menu label Install RHEL6.7
  kernel rhel6/vmlinuz
  append initrd=rhel6/initrd.img 

label local
  menu label Boot from local drive
  menu default                    #读秒结束最后默认选择
  localboot 0xffff

#####################################################
三、搭建httpd服务共享光盘所有内容

1.启动服务
[root@PXE /]# systemctl restart httpd
[root@PXE /]# systemctl enable httpd
2.测试访问
[root@PXE /]# firefox  http://192.168.4.122/rhel6
[root@PXE /]# firefox  http://192.168.4.122/rhel7

####################################################
四、生成ks文件
[root@PXE /]# yum -y install system-config-kickstart

  修改Yum客户端配置文件的标示名
   [development]
[root@PXE /]# system-config-kickstart  #先看“软件包选择”
        软件包选择:  在“桌面”一栏选择----->第一个为GNOME  则为rhel7

    RHEL7的文件系统为xfs
#####################################################

[root@PXE ~]# vim /etc/yum.repos.d/rhel7.repo 
     执行向rhel6的光盘

 [development]
 name=rhel7
 baseurl=http://192.168.4.122/rhel6
 enabled=1
 gpgcheck=0

[root@PXE ~]# yum clean all       #清空Yum缓存

[root@PXE ~]# system-config-kickstart 
        软件包选择:  在“桌面”一栏选择----->第一个为KDE桌面  则为rhel6

    RHEL6的文件系统为ext4

[root@PXE ~]# ls /root/ks*
/root/ks6.cfg  /root/ks7.cfg

#############################################
五、指定ks应答文件

1.共享ks应答文件
[root@PXE ~]# cp /root/ks*  /var/www/html/
[root@PXE ~]# ls /var/www/html/

2.修改菜单文件

# vim /var/lib/tftpboot/pxelinux.cfg/default

label linux
  menu label Install RHEL7.2
  kernel rhel7/vmlinuz
  append initrd=rhel7/initrd.img ks=http://192.168.4.122/ks7.cfg

label vesa
  menu label Install RHEL6.7
  kernel rhel6/vmlinuz
  append initrd=rhel6/initrd.img ks=http://192.168.4.122/ks6.cfg

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


Cobbler
装机平台,不同版本的多系统的安装

一  安装一个CentOS虚拟机  
真机: 
[root@room9pc01 ~]# ls /iso/
CentOS-7-x86_64-DVD-1708.iso

虚拟机要求:
             1.硬盘大小50G
             2.网络类型private1
             3.软件包选择 "带GUI的服务器"
             4.分区选择 "自动分区"

             5.将CentOS放入光驱设备,搭建本地Yum仓库
             6.配置IP地址:192.168.4.120/24
             7.配置主机名:Cobbler.tedu.cn
##################################################
zip压缩与解压缩(跨平台)

压缩:
    zip -r  /路径/压缩包名.zip   被压缩的源文档

解压缩:
    unzip   /路径/压缩包名.zip  -d  指定释放位置

# zip -r /opt/nsd.zip /home /etc/passwd
# ls /opt/
# unzip /opt/nsd.zip -d /opt/rh/
# ls /opt/rh

# zip -r /opt/test.zip /etc/shadow  /etc/fstab
# ls /opt/
# unzip /opt/test.zip -d /opt/rh/


###################################################
二、虚拟机设置  
   1.设置防火墙为trusted
  # firewall-cmd  --set-default-zone=trusted 

   2.当前及永久设置SELinux状态为permissive
 [root@Cobbler ~]# setenforce 0    #当前临时关闭
 [root@Cobbler ~]# getenforce 
 [root@Cobbler ~]# vim /etc/selinux/config 
  SELINUX=permissive

三、利用scp真机传递Cobbler.zip包到虚拟机192.168.4.120中
 # scp /root/桌面/Cobbler.zip   root@192.168.4.120:/root/
 	
##################################################
重设root密码  

案例1:为虚拟机 server 重设管理密码
1)重启系统,进入 recovery 恢复模式(修复模式) 
按e键,找到 linux16 行,末尾添加 rd.break console=tty0
按 ctrl + x 启动
2)以可写方式重新挂载 /sysroot,并切换到此环境
switch_root# mount  -o  remount,rw  /sysroot
switch_root# chroot  /sysroot    
sh-3.2#
3)将root用户的密码设置为 redhat
# echo  redhat  |  passwd  --stdin  root
4)重设SELinux安全标签(安全增强版Linux)
# touch  /.autorelabel    #让  SElinux  失忆
5)先后执行 exit、reboot 完成修复
# exit
# reboot
##################################################
四、搭建Cobbler装机平台

  Cobbler概述软件,管理dhcp、tftp、Web服务
    自由的导入镜像与ks应答文件

1.解压Cobbler.zip包
# unzip /root/Cobbler.zip -d /
# cd /Cobbler/
# ls

# unzip /Cobbler/cobbler.zip  -d  /opt/ 
# ls /opt/cobbler

#####################################################
五、安装cobbler主程序、工具包等
[root@cobbler /]# yum -y install /opt/cobbler/*.rpm

################################################################
cobbler网络装机部署

1.安装软件 cobbler cobbler-web dhcp tftp-server pykickstart httpd  tftp-server 

 cobbler         #cobbler程序包
 cobbler-web     #cobbler的web服务包
 pykickstart     #cobbler检查kickstart语法错误
 httpd           #Apache web服务
 dhcp            #dhcp服务
 tftp-server     #tftp服务

2.配置cobbler
[root@cobbler /]# vim  /etc/cobbler/settings

 next_server:   192.168.4.120 #设置下一个服务器还为本机
 server:   192.168.4.120      #设置本机为cobbler服务器
 manage_dhcp:   1             #设置cobbler管理dhcp服务
 pxe_just_once:   1           #防止客户端重复安装操作系统

 开机启动: 匹配及停止  
     1.硬盘启动     2.光驱设备      3.U盘      4.网络引导  
3.配置cobbler的dhcp        
[root@svr7 /]# vim  /etc/cobbler/dhcp.template 

  :%s  /旧/新/g      #全文替换

  :%s  /192.168.1/192.168.4/g    #全文替换

    5 次替换,共 4 行   


4.绝对路径解压cobbler_boot.tar.gz    #众多的引导文件

# tar -tf /Cobbler/cobbler_boot.tar.gz #查看包里面内容
# tar -xPf /Cobbler/cobbler_boot.tar.gz  #绝对路径释放

# ls  /var/lib/cobbler/loaders/

5.启动相关服务
[root@svr7 /]# systemctl restart cobblerd
[root@svr7 /]# systemctl enable cobblerd

[root@svr7 /]# systemctl restart httpd
[root@svr7 /]# systemctl enable httpd

[root@svr7 /]# systemctl restart tftp
[root@svr7 /]# systemctl enable tftp

[root@svr7 /]# systemctl restart rsyncd   #同步服务
[root@svr7 /]# systemctl enable rsyncd

6.同步刷新cobbler配置
[root@svr7 /]# cobbler sync
......
*** TASK COMPLETE ***


  # firefox https://192.168.4.120/cobbler_web

    用户名:cobbler
    密码:cobbler
#########################################################################################################
cobbler应用

cobbler import --path=挂载点   --name=导入系统命名(随意起)
导入安装镜像数据


# mount /dev/cdrom  /dvd

# ls /dvd/

# cobbler import --path=/dvd  --name=CentOS7

cobbler导入的镜像放在:/var/www/cobbler/ks_mirror

[root@cobbler /]# cobbler list    #查看有哪些系统
distros:
   CentOS7-x86_64        #安装客户端至少2G内存

profiles:
   CentOS7-x86_64

##############################################
删除
# cobbler list 
# cobbler profile remove --name=CentOS7-x86_64  #删除菜单信息
# cobbler distro remove --name=CentOS7-x86_64  #删除镜像信息


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

# umount /dvd/
# mount /dev/cdrom  /dvd   将光盘换成RHEL7
# ls /dvd/

  安装完成机器 默认root  密码  cobbler

############################################################################################################
自定义应答文件:开头注释行删除
[root@cobbler ~]# system-config-kickstart  #生成ks文件

必须默认kickstart文件存放位置:/var/lib/cobbler/kickstarts/

[root@cobbler ~]# cobbler list

修改kickstart文件:
[root@cobbler ~]# cobbler profile edit --name=CentOS7.4-A  --kickstart=/var/lib/cobbler/kickstarts/自定义.cfg

[root@cobbler ~]# cobbler profile report
[root@cobbler ~]# cobbler sync  #同步配置

###############################################################################################
nginx
源码安装Nginx需要提前安装依赖包软件:
gcc,openssl-devel,pcre-devel 
加密nginx  (模块 --with-http_ssl_module)
auth_basic  ''Input Password''
auth_basic_user_file "/usr/local/nginx/pass"
1.yum -y install httpd-tools
htpasswd -c  /usr/local/nginx/pass  用户名 (第一个用户要加c  pass 这个文件是自己自由创建的)
 LNMP (Linux Nginx MySQL/MariaDB php/python)
yum -y install gcc openssl-devel pcre-devel   
yum -y install   mariadb   mariadb-server   mariadb-devel (MariaDB)

yum -y  install  php   php-mysql
yum -y  install php-fpm-5.4.16-42.el7.x86_64.rpm  (另外下载)
步骤:
一.php-fpm配置文件(相当于配置Nginx+fastCGI)
[root@proxy etc]# vim /etc/php-fpm.d/www.conf
[www]
listen = 127.0.0.1:9000            //PHP端口号
pm.max_children = 32                //最大进程数量
pm.start_servers = 15                //最小进程数量
pm.min_spare_servers = 5            //最少需要几个空闲着的进程
pm.max_spare_servers = 32            //最多允许几个进程处于空闲状态

二.修改Nginx配置文件并启动服务
root@proxy ~# vim /usr/local/nginx/conf/nginx.conf
location / {
            root   html;
            index  index.php  index.html   index.htm;
#设置默认首页为index.php,当用户在浏览器地址栏中只写域名或IP,不说访问什么页面时,服务器会把默认首页index.php返回给用户
        }
 location  ~  \.php$  {
            root           html;
            fastcgi_pass   127.0.0.1:9000;    #将请求转发给本机9000端口,PHP解释器
            fastcgi_index  index.php;
            #fastcgi_param   SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi.conf;
        }
   root@proxy ~]# /usr/local/nginx/sbin/nginx -s reload

三:创建PHP页面,测试LNMP架构能否解析PHP页面
1)创建PHP测试页面1,可以参考lnmp_soft/php_scripts/test.php:
[root@proxy ~]# vim /usr/local/nginx/html/test1.php
<?php
$i="This is a test Page";
echo $i;
?>
------------------------------------------------------------------------------------
2)创建PHP测试页面,连接并查询MariaDB数据库。
可以参考lnmp_soft/php_scripts/mysql.php:
[root@proxy ~]# vim /usr/local/nginx/html/test2.php
<?php
$mysqli = new mysqli('localhost','root','密码','mysql');
//注意:root为mysql账户名称,密码需要修改为实际mysql密码,无密码则留空即可
//localhost是数据库的域名或IP,mysql是数据库的名称
if (mysqli_connect_errno()){
    die('Unable to connect!'). mysqli_connect_error();
}
$sql = "select * from user";
$result = $mysqli->query($sql);
while($row = $result->fetch_array()){
    printf("Host:%s",$row[0]);
    printf("</br>");
    printf("Name:%s",$row[1]);
    printf("</br>");
}
?>
------------------------------------------------------------------------------------
地址重写
rewrite 旧地址 新地址 [选项];
last 不再读其他rewrite
break 不再读其他语句,结束请求
redirect 临时重定向
permament 永久重定向

步骤一:修改配置文件(访问a.html重定向到b.html)
1)修改Nginx服务配置

server {
        listen       80;
       server_name  localhost;
rewrite /a.html  /b.html;    #修改配置文件(访问a.html重定向到b.html)
步骤二:访问a.html重定向到b.html(跳转地址栏)
1)修改Nginx服务配置:
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
rewrite /a.html  /b.html  redirect; 
步骤三:修改配置文件(访问192.168.4.5的请求重定向至www.tmooc.cn)
1) 修改Nginx服务配置
[root@proxy ~]# vim /usr/local/nginx/conf/nginx.conf
.. ..
server {
        listen       80;
        server_name  localhost;
rewrite ^/ http://www.baidu.com;
location / {
    root   html;
index  index.html index.htm;
步骤四:修改配置文件(访问192.168.4.5/下面子页面,重定向至www.tmooc.cn/下相同的页面)
1) 修改Nginx服务配置

rewrite ^/(.*)$ http://www.tmooc.cn/$1;
步骤五:修改配置文件(实现curl和火狐访问相同链接返回的页面不同)
server {
        listen       80;
        server_name  localhost;
location / {
    root   html;
index  index.html index.htm;
}
#这里,~符号代表正则匹配,*符号代表不区分大小写
if ($http_user_agent ~* firefox) {            //识别客户端firefox浏览器
rewrite ^(.*)$ /firefox/$1;







lftp
命令行连接ftp
 包:lftp
yum -y install lftp
用法:lftp +ip  

cd  :切换位置
ls 查看
pwd/lpwd  可看当前位置

下载: 
get或者 mget 
 get 用于下载一个文件, mget 用于下载多个文件

6、上传
put、mput
put用于上传一个文件,mput用于上传多个文件



git
版本控制系统
从现有仓库克隆
git clone git://github.com/schacon/grit.git

从克隆回来变成新的目录库
git clone git://github.com/schacon/grit.git mygrit

检查当前文件状态
git status (一般要跟踪才打这命令)

跟踪新文件
git add 文件名

查看前后的变化
git diff  

提交更新 
git  commit 

移除文件(要从git中移除某个文件)
git rm

git rm --cached readme.txt

移动  mv

git 图形化工具 :gitk





  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: cmd指令大全是一个非常重要的工具,它可以让用户通过命令行来执行一系列的操作,包括系统管理、文件操作、网络设置等等。这些指令的功能非常丰富,可以满足用户进行各种复杂的操作。 CSDN作为国内最大的IT技术社区,也为大家提供了关于cmd指令大全的相关资料,可以帮助读者更好地了解和使用cmd指令。在CSDN网站上,读者可以找到详细的cmd指令列表,包括了常用的指令和高级指令,同时还提供了具体的使用说明和示例代码,让读者更方便地掌握这些指令的使用方法。 通过CSDN,读者可以了解到如何在cmd命令行中快速定位文件、查看网络信息、管理系统程序以及进行网络配置等,这些都是非常重要的操作,可以大大提高工作效率和准确度。 总之,cmd指令大全指令csdn提供了全面的指令列表和详细的使用说明,帮助读者更好地掌握cmd指令的技巧和使用方法。对于需要频繁操作cmd指令的人来说,这些资源是非常有价值的。 ### 回答2: cmd指令大全是一份Windows操作系统下的命令行指令列表,可以通过这些指令来管理和控制操作系统。这个指令大全包含了几乎所有的常用指令,包括文件管理、网络管理、进程管理等方面的指令。同时,这个指令大全也可以作为学习Windows操作系统命令行操作的参考。 CSDN是一个专业的IT技术社区,以IT技术为核心,以技术交流和资源分享为目的,提供IT技术学习、交流、就业服务和软件开发等全方位服务。在CSDN中,有许多关于cmd指令大全的文章和教程,可以供用户学习和参考。 通过CSDN学习cmd指令大全指令,可以从基本的操作开始,较为系统地了解Windows命令行的使用方法和原理,例如查找文件、创建文件夹、进程管理等功能。在掌握这些基础操作后,用户可以进一步学习高级指令和脚本编写技巧,实现更加复杂的操作。总的来说,通过CSDN学习cmd指令大全,可以帮助用户提高操作系统管理和控制的效率和水平,同时也可以增加工作和学习的技能和竞争力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值