Linux常用命令

/:是Linux文件系统的根目录
/bin:存放用户命令 例如:/bin/ls
/boot:系统启动所需要的文件目录
/dev:设备文件目录
/etc:系统配置文件目录
/home:普通用户家目录
/root: 系统管理员root家目录
/run:进程的运行数据存放目录
/sbin:存放管理员用户使用的命令 例如:/sbin/shutdown
/tmp:临时文件目录;任何人都可访问,存放周期10天
/usr:常规目录;存放程序文件,库文件,共享文件,各种文档等
/usr/bin:存放用户命令
/usr/local:程序安装目录
/usr/sbin:类似/sbin;存放管理员用户使用的命令
/usr/tmp:被抛弃临时文件目录
/var:动态数据文件目录;日志文件log,数据库,缓存目录等
/var/tmp:临时文件目录;存放周期更长
除了以上目录,还有一些其他目录:

/lib:存放程序库文件
/lib64:存放64位程序库文件
/media:用来挂载媒体设备
/mnt:用来挂在存储设备
/opt:可选的应用安装位置
/proc :所有正在运行进程的映像
/srv :用来存储本机提供的服务或数据
/sys:存放硬件设备的驱动程序信息
注意:

/etc,/bin,/sbin,/lib目录存放的是系统启动就需要用到的程序,这些目录不能挂载额外的分区,必须在根文件系统的分区上。
/usr/local目录下的内容都是第三方软件,建议单独分区。
2、绝对路径
绝对路径是指目录下的绝对位置,直接到达目标位置,通常是从"/"开始的路径。

例如:/etc/sysconfig/network-scripts/ifcfg-ens33

3、相对路径
相对路径就是指由某个文件所在的路径引起的跟其它文件(或目录)的路径关系。

相对路径和绝对路径不一样的是:相对路径必须需要有一个参考文件或目录,相对于这个参考文件或目录来说,我其他文件的位置处于这个参考文件或目录的什么位置。

4、文件命名规则
长度不能超过255个字符;
不能使用/当文件名;
严格区分大小写;
以点号开头的文件为隐藏文件;
注意:

隐藏文件中存在两个特殊的目录:.(点)表示当前目录;..(两个点)表示当前目录的上一级目录
虽说Linux可以使用特殊字符作为文件名,但一般不介意使用特殊字符。
例如:用 (空格)当作文件名;虽然可以这么做,但是查看文件的时候如果不注意,可能永远发现不了这个名为 (空格)的文件。

Linux系统基础
由目的单一的小程序组成,组合小程序完成复杂任务;
一切皆文件;
配置文件保存为纯文本格式。


1、shell
1.1 shell简介
Shell俗称壳(用来区别于核),是指“为使用者提供操作界面”的软件(命令解析器)。它类似于DOS下的command.com和后来的cmd.exe。它接收用户命令,然后调用相应的应用程序。

常见的shell有两种,一种是图形界面,即GUI,一种是命令行终端,即CLI。

常用的GUI:Graphic User Interface

Windows
X-Window
Gnome
KDE
Xfce
常用的CLI:Command Line Interface

bash
sh
csh
zsh
ksh
tcsh
Redhat 和 Centos使用的是:bash shell
有#代表是管理员
$表示普通用户
波浪线表示在家目录
后面九位字符:文件权限        
9位,每3位一组,每一组:rwx(读,写,执行)

目录管理命令
//目录管理

    ls      //列出目录内容
        -l      //长格式
    //以长格式显示的第一段含义:
            第一个字符:文件类型
                -   //普通文件(f)
                d   //目录文件
                b   //块设备文件(block)
                c   //字符设备文件(character)
                l   //符号链接文件(symbolic link file)
                p   //命令管道(pipe)
                s   //套接字文件(socket)
            后面九位字符:文件权限        
        9位,每3位一组,每一组:rwx(读,写,执行)
    //以长格式显示的第二段含义:
            文件硬链接的次数
    //以长格式显示的第三段含义:
            文件的属主(owner)
    //以长格式显示的第四段含义:
            文件的属组(group)
    //以长格式显示的第五段含义:
            文件大小(size),单位是字节
    //以长格式显示的第六,七,八段含义:
            时间戳(timestamp),最近一次被修改的时间
                访问      //access,访问的时间
                修改      //modify,文件内容被修改的时间
                改变      //change,metadata(元数据)变化的时间
         -h     //做单位转换
         -a     //显示以.开头的隐藏文件
            .       //表示当前目录
            ..      //表示父目录
         -d     //显示目录自身属性
         -i     //显示文件的inode(index node)
         -r     //逆序显示
         -R     //递归(recursive)显示

    cd      //切换目录

    pwd     //查看当前所在目录路径

    tree    //查看目录树
     -d          //只显示目录
     -L level    //指定显示的层级数目
      -P 字符串    //显示指定字符串匹配到的文件

hostnamectl  set-hostname    永久修改主机名
hostnamectl 临时修改主机名
vim  配置文件    vim文本修改器
主机名在配置文件 /etc/hostname
修改系统配置文件按i 在前面插入  按a也可以 按esc退出 打一个英文冒号 加w(保存)q(退出)!(强制)
clear 清屏 按Ctrl加l
 w           //显示当前在线用户并显示其在运行的命令
which       //显示指定命令的绝对路径
date“+ %Y / %m /%d   %H :%M  :%S  ”     date“+ %Y 年 %m 月%d  天 %H 时 %M  分%S秒  ”   格式化输出时间
 date  -s    “年-月-日  时:分:秒”  修改时间
echo “字符串” 输出到屏幕

man加命令获取帮助 

bash支持以下特性:
支持命令历史、命令补全
支持管道、重定向
支持命令别名
支持命令行编辑
支持命令行展开
支持文件名通配
支持变量
支持编程

``        //反引号,键盘左上角Esc下面的键,用于命令替换 
""        //双引号,弱引用,可以实现变量替换
''          //单引号,强引用,不完成变量替换
例子a=1 echo "$a"
会显示1

//文件名通配 globbing
 *               //匹配任意长度的任意字符
 ?               //匹配任意单个字符     例子:ls ????1 会匹配前四位任意的五位数1结尾
 []              //匹配指定范围内的任意单个字符   例子:ls hzz[1-9]  会匹配有1-9的
 [^]             //匹配指定范围之外的任意单个字符

 !n              //执行命令历史中的第n条命令
 !-n             //执行命令历史中倒数第n条命令
  !!              //执行上一条命令
 !string     //执行命令历史中最近一个以指定字符串开头的命令
  !$              //引用前一个命令的最后一个参数
 esc,.           //按下esc松开后按.,引用前一个命令的最后一个参数
       

cat //将文件内容输出至标准输出(屏幕)
 -n //显示行号
 注意:使用cat查看文件内容时会将文件的所有内容加载至内存, 所以应避免使用cat打开巨大文件
 tac //倒序打印文件内容至标准输出
 more //全屏查看文本文件内容,只能从前往后,不能从后往前。
 //文件内容显示完后自动退出
 less //全屏查看文本文件内容,可从前往后亦可从后往前。推荐使用
head //从头部开始打印文件内容,默认打印10行
-n //指定要打印的行数,-n 可以是15也可以是-15
tail //查看文本文件尾部内容
-n //指定要打印的行数,可以是-n 15也可以是-15
 -f //实时监测文件末尾内容

sort //默认升序排序,不是按数值大小排序的
-n //根据数值大小进行排序
 -r //逆序排序
-t //字段分隔符                                   sort -n -t ':' -k 3 /etc/passwd   以:为分隔符,将第三段以大小排序
 -k //以哪个字段为关键字进行排序
 -u //去重,排序后相同的行只显示一次
 -f //排序时忽略字符大小写
uniq //将重复的行只显示一遍(连续且完全相同方为重复)
 -c //显示文件中行重复的次数
 -d //只显示重复的行
 -u //只显示未重复的行

wc(word count)
-l //显示行数
 -w //显示单词数
 -c //显示字节数

 //大小统计
 du //查看文件或目录占用的磁盘空间大小
 -h //以人类友好的方式显示大小
 -s //显示总的占用空间大小

 df //报告文件系统磁盘空间使用情况
 -h //以人类友好的方式显示大小
 -i //显示inode信息 

2、文件查找命令
 cut //截取文本内容
 cut OPTION... [FILE]...
 -d'' //指定字段分隔符,默认是空格
 -f //指定要显示的字段
 -f 1,3 显示第1个字段和第3个字段
 -f 1-3 显示第1个字段到第3个字段

 awk //基于列的文本报告工具
 -F'' //选择分隔符;分隔符用单引号引起来    awk -F ':' '/root/ {print$1,$3}' /etc/passwd    匹配带root的以:为分隔符的第一行第三行
 '/root/' //匹配关键字root的行
 '{print$#}' //选择打印第#列
 'NR==# {print $#}' //选择打印第几行第几列    awk -F ':' 'NR==1 {print$7}' /etc/passwd   匹配以:为分隔符的第一行第七列


 sed //基于行的过滤和转换文本的流编辑器
 -i //修改文件内容
 示例:
 sed -i 's/原字符串/新字符串/' file
 //字符串替换原字符串,只替换每行第一个匹配到的字符    sed -i 's/1/10/g' crp   修改文件内容1为100
 sed -i 's/原字符串/新字符串/g' file
 //字符串替换原字符串,替换正行所有匹配到的字符串

 grep //搜索文本内容,并将匹配的内容所在一整行都显示出来。
 //grep是可以使用正则表达式来过滤文本的命令。
 -i //忽略大小写
 --color //匹配到的内容高亮显示
 -w //强制模式,完全匹配字词
 -n //显示匹配到的内容的行号
 -v //显示没有被模式匹配到的行                grep -E “^0$” crp     匹配开头结尾只有0的   ^ 开头  $结尾
 -o //只显示被模式匹配到的字符串    grep -Ev“^#|^$” crp    去掉注释和空行
 -E //使用扩展正则表达式。grep -E相当于使用egrep
 -q //静默模式,不向屏幕输出任何信息
 -A 1 //被模式匹配到的内容以及其后面一行的内容都显示出来,
 //如果把1改成2就表示被模式匹配到的内容以及其后面2行的内容均显示出来
 -B 1 //被模式匹配到的内容以及其前面一行的内容都显示出来,
 //如果把1改成2就表示被模式匹配到的内容以及其前面2行的内容均显示出来
 -C 1 //被模式匹配到的内容以及其前后的行各显示1行,如果把1改成2
 //就表示被模式匹配到的内容以及其前后的行各显示2行。
egrep //基于正则表达式查找文件内容
 fgrep //不支持正则表达式,执行速度快

 
 find //实时查找,精确性强,遍历指定目录中所有文件完成查找,
 //查找速度慢,支持众多查找标准。
 语法:
 find 查找路径 [OPTION...] [查找标准] [查找到以后的处理动作]
 查找路径,默认为当前目录
 查找标准,默认为指定路径下的所有文件
-name 'filename' //对文件名作精确匹配.支持glob通配符机制
-iname 'filename' //文件名匹配时不区分大小写
 -regex pattern //基于正则表达式进行文件名匹配,以pattern匹配整个文件路径字符串,而不仅仅是文件名称
 -user username //根据属主来查找
 -group groupname //根据属组来查找
 -uid //根据UID进行查找,当用户被删除以后文件的属主会变为此用户的UID
 -gid //根据GID进行查找,当用户被删除以后文件的属组会变为此用户的GID
 -nouser //查找没有属主的文件.用户被删除的情况下产生的文件,只有uid没有属主
 -nogroup //查找没有属组的文件.组被删除的情况下产生的文件,只有gid没有属组
 -type //根据文件类型来查找(f,d,c,b,l,p,s)
 -size //根据文件大小进行查找。如1k、1M,+10k、+10M,-1k、-1M,+表示大于,-表示小于
-mtime //修改时间
 -ctime //改变时间
 -atime //访问时间
 +5 //5天前
 -5 //5天以内
-mmin //多少分钟修改过
-cmin //多少分钟改变过
 -amin //多少分钟访问过
+5 //5分钟前
 -5 //5分钟以内
 -perm mode //根据权限精确查找
 -perm -mode //文件权限能完全包含此mode时才符合条件
 -perm /mode //9位权限中有任何一位权限匹配都视为符合查找条件

 //组合条件:
 -a
 -o
 -not
 ! // ! 和-not含义一样

 //处理动作:默认为显示到屏幕上
 -print //显示
 -ls //类似ls -l的形式显示每一个文件的详细信息
 -delete //删除查找到的文件
 -fls /path/to/somefile //查找到的所有文件的长格式信息保存至指定文件中
 -ok COMMAND {} \; //对查找到的每个文件执行COMMAND,每次操作都需要用户确认   find /root/ -name "crp" -ok  cp -r {} /opt/ \
 -exec COMMAND {} \; //对查找到的每个文件执行COMMAND,操作不需要确认        在根下root目录里找到文件名带有crp的文件复制在根下opt里

 注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令,而有些命令不能接受过多参数,此时命

 xargs //通过管道将查找到的内容给xargs处理,xargs会把内容进行拆分,拆分完毕后将内容作为参数交给后面的命令执行。

重定向与管道符
压缩、解压缩命令
 重定向 //将输出的内容重定向到某个文件

 //系统设定:
 默认输入设备 //标准输入,STDIN,0 (键盘)
 默认输出设备 //标准输出(显示器)
 标准正确输出 //STDOUT,1
 标准错误输出 //STDERR,2
//I/O重定向:
>:覆盖输出重定向
 >>:追加输出重定向
2> //重定向错误输出
 2>> //追加重定向错误输出
&> //覆盖重定向标准输出或错误输出至同一个文件
 &>> //追加重定向标准输出或错误输出至同一个文件
 < //输入重定向
 << //Here Document,退出条件

 tee //从标准输入读取数据,输出一份到屏幕上,一份保存到文件
 示例:
 [root@localhost ~]# tee /tmp/hello.out
 hello world
 hello world
 [root@localhost ~]# cat /tmp/hello.out
 hello world

 | 管道符 //前一个命令的输出,作为后一个命令的输入。最后一个命令会在当前shell进程的子shell进程中执行
使用格式: 命令1 | 命令2 | 命令3 | ...
示例:
 [root@hzz ~]# echo "hello hzz" | cut ‐d ' ' ‐f 2
 hzz

 xargs //和管道符连用,将前面的命令执行的结果作为参数交给后面的命令执行
 使用格式: 命令1 | xargs 命令2                    
 选项:                                                              ls |xargs -n 100 rm -rf    将ls的文本转化为拿出100个交给rm -rf
-n 设置一次性传递的参数的数量,默认是所有
-i 将数据拆分为一个一个的存储在{}中                    find / -name "file[1-9]" -o -name ""
 示例:
 [root@hzz ~]# find / -name "ifcfg-ens33" | xargs -i cp {} /root/
 [root@hzz ~]# ls
 ifcfg-ens33

 Linux Vim编辑器 Linux 基础(二) 
压缩、解压缩命令

//压缩格式
 gz,bz2,xz,zip,Z

 compress //用此命令压缩的文件其文件名为FILENAME.Z,解压用uncompress

 gzip //压缩后的文件以.gz结尾;只能压缩文件不能压缩目录
gzip /path/to/somefile //压缩完成后会不保留原文件
 -d //解压缩,解压完成后不保留原文件
 -c //将结果输出至标准输出,保留原文件
 -# //#用1-9代替,-1压缩等级最低;-9 压缩比最高。默认压缩比是-6
 -l //查看压缩文件内的内容;从左至右依次显示为:
 压缩文件的大小;未压缩文件的大小;压缩比;未压缩文件的名称
gunzip //解压
 gunzip /path/to/some_compress_file.gz //解压完成后不保留原文件
 zcat /path/to/somefile.gz //不解压的情况下查看文本文件的内容

bzip2 //压缩后的文件以.bz2结尾;bzip2是一款比gzip有着更大压缩比的压缩工具,使用格式近似
 bzip2 /path/to/somefile //压缩完成后不保留原文件
 -d //解压缩,解压完成后不保留原文件
 -# //#用1-9代替,指定压缩比,默认为6
 -k //keep,压缩时保留原文件
 bunzip2 //解压
 bunzip2 /path/to/some_compress_file.bz2 //解压完成后不保留原文件
 bzcat /path/to/somefile.bz2 //不解压的情况下查看文本文件的内容

 xz //压缩后的文件以.xz结尾;比bzip2有着更大压缩比的压缩工具,使用格式近似
 xz /path/to/somefile //压缩完成后不保留原文件
 -d //解压缩,解压完成后不保留原文件
 -# //#用1-9代替,指定压缩比,默认为6
 -k //keep,压缩时保留原文件
 unxz //解压
 unxz /path/to/some_compress_file.xz //解压完成后不保留原文件
 xzcat /path/to/somefile.xz //不解压的情况下查看文本文件的内容

 zip //既归档又压缩的工具。zip可以压缩目录
 //gz、bz2、xz都只能压缩文件,zip压缩后保留原文件
 zip filename.zip file1 file2 ...
 zip filename.zip DIR/*
 unzip //解压
 unzip filename.zip

 tar归档,归档本身并不意味着压缩
 tar //归档工具,只归档不压缩
 -c //创建归档文件
 -f file.tar //操作的归档文件
 -x //还原归档
 -v //显示归档过程
 -C //将展开的归档文件保存至指定目录下
 -tf /path/to/file.tar //不展开归档,直接查看归档了哪些文件
 --delete //从归档文件中删除文件
 -p //归档时保留权限信息。只有管理员才有权限用此选项
 --xattrs //在归档时保留文件的扩展属性信息
 -zcf //归档并调用gzip压缩
 -zxf //调用gzip解压缩并展开归档

 -jcf //归档并调用bzip2压缩
 -jxf //调用bzip2解压缩并展开归档

 -Jcf //归档并调用xz压缩
 -Jxf //调用xz解压缩并展开归档
file 查看文件是什么类型

 vi/vim的特点
vi/vim是一种纯文本编辑器,它不像word可以排版,可以调整字体大小,可以改变字体等等,vi/vim只是一个文本编辑工具,它只
能对文本的内容进行操作,比如新增内容、修改内容、删除内容等等。vi/vim是一个全屏幕的文本编辑器,在编辑文本时它将占
据整个屏幕。
2 vi/vim三种编辑模式
vi/vim编辑器有三种编辑模式,分别是:
编辑模式 作用
命令模式 用户执行命令,比如复制行、粘贴行等
输入模式 用于输入文本、修改文本等
末行模式 用于查找文本、保存修改等
vi/vim三种编辑模式之间转换的方式:
命令模式-->输入模式
01 命令模式
02 输入模式
03 末行模式


输入模式-->命令模式
命令模式-->末行模式
末行模式-->命令模式
3文本编辑方式
打开文件方式: 文件打开后默认处于命令模式下
关闭文件方式:末行模式关闭文件
命令 意义
q 退出
wq 保存并退出
q! 不保存退出
w 保存但不退出
w! 强行保存
wq! 强行保存并退出
x 强行保存并退出
命令模式关闭文件:
命令模式下移动光标的方式:
 i:insert,在当前光标所在字符的前面,转为输入模式
 I:大写的i,在当前光标所在行的行首转换为输入模式
 a:append,在当前光标所在字符的后面转换为输入模式
 A:在当前光标所在行的行尾转换为输入模式
 o:open,在当前光标所在行的下方新建一行并转为输入模式
 O:大写的o,不是数字0,在当前光标所在行的上方新建一行并转换为输入模式
 ESC
 :
 ESC
 vim filename //打开文件
 vim +n filename //打开文件并定位到第n行
 vim +/pattern filename //打开文件并定位到第一次被/pattern匹配到的内容行首
 vim +/ 关键字 文件名       vim +/ music ls.out


命令模式下字符编辑:
编辑命令 意义 x 删除光标所在处的单个字符
#x 删除光标所在处及其向后共
#个字符
xp 交换光标所在处的字符及其后面字符的位置
命令模式下删除字符: d
命令模式下
d命令常与跳转命令组合使用,例如:
末行模式下
d命令的使用:
范围表示方法:


表示方法 意义
. 光标所在当前行
$ 最后一行
+# 光标所在行往后#行
$-# 倒数第#行
% 全文
命令模式下复制命令:yy
命令模式下粘贴命令:p
命令模式下替换:r
命令模式下撤销编辑:u
可视化模式:
可视化模式下可以对选取的内容进行前面讲的所有编辑操作
末行模式下文本查找:
末行模式下查找并替换:s
s命令只能在末行模式下使用
末行模式下显示或取消显示行号:
 Linux 用户和组 Linux 基础(三) 
01 p:小写p
02 若删除或复制的为整行内容,则粘贴至光标所在行的下方
03 若删除或复制的为非整行,则粘贴至光标所在字符的后面
04 P:大写p
05 若删除或复制的为整行内容,则粘贴至光标所在行的上方
06 若删除或复制的为非整行,则粘贴至光标所在字符的前面
01 R:替换模式,替换多个字符
02 r#:将当前光标的字符替换为#,这里的#可以是任何字符
01 u:撤销前一次的编辑操作,连接u命令可以撤销此前的n次编辑操作
02 #u:直接撤销此前的#次编辑操作
03 ctrl+r:还原最近一次的撤销操作
04 .(点):重复前一次编辑操作
01 v:按字符选取内容
02 V:按矩形块(行)选取内容
01 /pattern:从上往下查找匹配的内容
02 ?pattern:从下往上查找匹配的内容
03 n:从上往下查找匹配到的内容的下一条
04 N:从下往上查找匹配到的内容的下一条
01 语法:ADDR1,ADDR2 s/pattern/string/gi
02
03 1,5 s/abc/def/g //表示把第一行到第五行的所有abc替换为def
01 set nu:显示行号
02 set nonu:取消显示行号


date -d '1970-1-1 +18929 days'   liunx计算时间的命令

用户和组
Linux 是多用户多任务操作系统;简单的说:Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影
响。
1、用户和组的概念
用户的作用:
Authentication:认证
Authorization:授权
Accouting:审计
用户存在的最终目的:
为了实现资源的分派
组的作用:
将具有相同特征的用户放在一起组成一个整体
当用户数量过多时方便管理
1.1 Linux安全上下文
Linux通过安全上下文的概念完成用户权限的指派。
先判断用户是否是某文件的属主
再判断用户是否是该文件属组中的一员
最后定其为其他用户
运行中的程序:进程(process)
以进程发起者的身份运行
root:cat
tom:cat
进程所能够访问的所有资源的权限取决于进程的发起者的身份
2、用户分类
Linux用户分为管理员和普通用户:
用户分类 用户ID(uid)
管理员 0
普通用户 1-65535
其中普通用户又分为系统用户和登录用户:
普通用户类别 用户ID(uid)
系统用户 1-499(为守护类进程获取系统资源而完成权限指派的用户)
登录用户 500-65535(为了完成交互式登录使用的用户)
3、组的分类

用户组分类 特性
基本组 用户的默认组
附加组(额外组) 基本组以外的其它组
4、用户和组相关的配置文件
4.1 各配置文件
配置文件 作用
/etc/passwd 用户及其属性信息(名称、uid、基本组id等等)
/etc/shadow 用户密码及其相关属性
/etc/group 组及其属性信息
/etc/gshadow 组密码及其相关属性。在用户执行基本组切换时使用
4.2 配置文件解析
/etc/passwd 配置文件解析
字段 含义
第一字段 用户名
第二字段 密码占位符
第三字段 UID
第四字段 GID
第五字段 用户的描述信息
第六字段 用户家目录
第七字段 用户的登录shell
/etc/shadow 配置文件解析
字段 含义
第一字段 用户名
第二字段 加密后的密码
第三字段 最近一次更改密码的日期
第四字段 密码的最小使用期限
第五字段 密码的最大使用期限
第六字段 密码警告时间段
第七字段 密码禁用期
第八字段 帐号的过期日期
第九字段 保留字段
/etc/group 配置文件解析
字段 含义
第一字段 组名
第二字段 组密码

字段 含义
第三字段 GID
第四字段 以当前组为附加组的用户列表(分隔符为逗号)
/etc/gshadow 配置文件解析
字段 含义
第一字段 用户组
第二字段 用户组密码
第三字段 用户组管理者,这个字段也可为空,如果有多个用户组管理者,用,号分割
第四字段 组成员,如果有多个成员,用,号分割

用户管理命令
 查看用户信息命令id
 创建用户命令useradd
 删除用户命令userdel
 修改用户属性命令usermod
 切换用户命令su
su 命令用法
管理员用户 su 切换至其他用户不需要密码,非管理员用户 su 切换至其他用户时需要输入目标用户的密码
 id //查看用户的帐号属性信息
 -u //查看UID
 -g //查看GID
 -G //查看Groups
 //语法:useradd [option] USERNAME
 -u UID //指定用户uid
 -g GID //指定用户所属基本组,可为组名或GID,组必须事先存在       useradd - u 777 crp 创建一个uid为777的crp用户
 -G groupname,... //附加组,可以有多个,用逗号隔开。组必须事先存在
 -c "COMMENT" //注释信息
 -d directory //指定用户的家目录。此目录必须不能事先存在
 -s shell //最好使用/etc/shells里面有的shell
 -M //创建用户时不给其创建家目录
 -r //添加一个系统用户      useradd -r -M -s /sbin/nologin apache 创建一个系统用户          echo $? 验证你上条命令是否正确,正确返回0
 //语法:userdel [option] USERNAME
 -r //删除用户的同时删除其家目录(userdel默认不会删除其家目录)
 //语法:usermod [options] username
 -u UID
 -g GID
 -a -G groupname //不使用-a选项,会覆盖此前的附加组
 -m -d //改变用户家目录的同时把原来家目录的文件移动到新的家目录中
 -e YYYY-MM-DD //指明用户帐号过期日期
 -f INACTIVE //设定非活动期限
 -L //锁定帐号;被锁定的帐号在/etc/shadow文件中密码前面会有一个!感叹号
 -U //解锁帐号
 -s SHELL //修改用户登录shell

su的用法 特点
su USERNAME 非登录式切换,即不会读取目标用户的配置文件
su - USERNAME 登录式切换,即会读取目标用户的配置文件。完全切换
bash的配置文件:
配置文件类型 配置文件路径
全局配置 /etc/profile,/etc/profile.d/*.sh,/etc/bashrc
个人配置 ~/.bash_profile,~/.bashrc
配置文件类型 功能
profile类 为交互式登录的shell提供配置,用来设定环境变量、运行命令或脚本
bashrc类 为非交互式登录的shell提供配置,用来设定本地变量、定义命令别名
非登录式shell如何读取配置文件?
~/.bashrc --> /etc/bashrc --> /etc/profile.d/*.sh
登录式shell如何读取配置文件?
/etc/profile --> /etc/profile.d/*.sh --> ~/.bash_profile --> ~/.bashrc --> /etc/bashrc


 密码管理命令passwd
 密码生成工具openssl
组管理命令
 //语法:su [options] [-] [USER NAME]
-c 'COMMAND' //切换身份执行命令,命令执行结束后又回到原来的身份
 语法:passwd [options] [USERNAME]
 --stdin //从标准输入获取用户密码;例:echo "redhat"|passwd --stdin user1
 -l //锁定用户
 -u //解锁用户
 -d //删除用户密码
 -n mindays //指定最短使用期限
 -x maxdays //指定最长使用期限
 -w warndays //提前多少天开始警告
 -i inactivedays //非活动期限,密码过期后到禁用前的这段时间
 //语法:openssl command [command_opts] [command_args]
 command //包含标准命令、消息摘要命令、加密命令
 version //查看程序版本号                                                    openssl passwd -1 -salt '炸树'
 dgst //提取特征码
 passwd //生成密码
 rand //生成伪随机数          openssl rand -base64 20

 //提取特征码
 [root@localhost ~]# openssl dgst -md5 /etc/fstab
 MD5(/etc/fstab)= 1e5e9207c47ba4e9393b153dc3b0375a

 //生成密码 openssl passwd -1 -salt 'string'
 [root@localhost ~]# echo "hzz" | openssl passwd -1 -salt hellonihao -stdin
 $1$hellonih$hSAyL4yP5lbKiUh76Z6W30

 //生成随机数 openssl rand -base64 NUM ; NUM表示随机数的长度
 [root@localhost ~]# openssl rand -base64 20
 aVQYKyrx8pX3y4Vjb8QBtxMbY9k=

Thank for Halo   
 创建组命令groupadd
 删除组命令groupdel
 Linux 权限管理 Linux Vim编辑器 
 //语法:groupadd [options] GROUP
 -g GID //指定GID
 -r //添加一个系统组
 //语法:groupdel [options] GROUP 删除组时只需要指定组名即可

1 权限修改命令chmod
2 属主和属组修改命令chown
3 特殊权限
linux的权限默认是根据linux安全上下文的方式来控制的,而特殊权限的存在打破了linux安全上下文的规则。
 //权限修改主要修改三类对象的权限

 //语法:chmod MODE file,...
 -R //递归修改权限

 //修改某类对象权限:u,g,o,a

 权限修改的三种方式:
 chmod 对象类别=MODE file,.....
 chmod 对象类别=MODE,对象类别=MODE file,.....
 例如:
 [root@localhost ~]# chmod u=rwx hzz
 [root@localhost ~]# chmod u=rwx,g=rwx hzz

 chmod 对象类别+|-MODE file,.....
 chmod 对象类别+|-MODE,对象类别+|-MODE file,.....
 chmod +|-MODE file,.....
例如:
 [root@localhost ~]# chmod u+rwx hzz
 [root@localhost ~]# chmod u-x,g-x hzz
 [root@localhost ~]# chmod +x hzz

 chmod "mode number" file,.....
 例如:
 [root@localhost ~]# chmod 777 hzz
 //chown命令只有管理员可以使用。

 chown USERNAME file,...
 -R //修改目录及其内部文件的属主

 chown USERNAME:GROUPNAME file,...
 chown USERNAME.GROUPNAME file,...
 例如:
 [root@localhost ~]# chown root.root hzz
 [root@localhost ~]# chown root:root hzz


 文件系统访问控制列表facl
facl(Filesystem Access Control List),利用文件扩展保存额外的访问控制权限。
 遮罩码
为什么文件创建以后默认权限是644?
为什么目录创建以后默认权限是755?
从名字就能看出来,遮罩码umask是用来隐藏一些权限的。
文件最终的权限为:
 SUID(4) //运行程序时,这个程序启动的进程的属主是程序文件自身的属主,而不是发起者为属主
 chmod u+s file
 chmod u-s file
//如果file本身原来就有执行权限,则SUID显示为s,否则显示为S

 SGID(2) //运行程序时,这个程序启动的进程的属组是程序文件自身的属组,而不是启动者所属的基本组
 //一旦某目录被设定了SGID,则对此目录有写权限的用户在此目录中创建的文件或目录,其所属的组为此设定了SGID的目录的属组
 chmod g+s DIR
 chmod g-s DIR
 //如果file本身原来就有执行权限,则SGID显示为s,否则显示为S

 SBIT(1) //公共目录,每个人都能创建文件,删除自己的文件,但是不能删除别人创建的文件
 chmod o+t DIR
 chmod o-t DIR
 //如果DIR本身原来就有执行权限,则SBIT显示为t,否则显示为T

 特殊权限的数字表示方式:
4755 //有SUID,文件权限为755
2755 //有SGID,文件权限为755
 1755 //有Sticky,文件权限为755
 //这里前面的4、2、1分别表示SUID、SGID、Sticky
 //语法:setfacl [-bkndRLP] { -m|-M|-x|-X ... } file ...
 -m //设定权限条目
 u:UID:perm
 g:GID:perm
 示例:
 setfacl -m u:test:rw file
 setfacl -m g:test:rw file

 //如果要为某个目录设定默认的访问控制列表,只需要设定时在u或g前面加上d即可
 示例:
 setfacl -m d:u:test:rw file
 //此时在此目录中创建的文件均继承此访问控制列表所设置的权限

 -x //删除权限条目    r=4 w=2 x=1
 u:UID
 g:GID
 示例:
 setfacl -x u:test file
 setfacl -x g:test file

 -b //Remove all
 示例:
 setfacl -b file

 //查看文件系统访问控制列表getfacl
//语法:getfacl [-aceEsRLPtpndvh] file ...
 示例:
 getfacl file
 新建文件和新建目录的默认权限是由遮罩码umask来控制的。
 举例:如果你不想让人家认出你,你会怎么办?
 666-umask 文件最高权限 - 遮罩码 = 文件最终权限


目录最终的权限为:
文件默认是不能具有执行权限的,如果文件有了执行权限则将其权限整体加1。
3、sudo借权
sudo可以实现某个用户能够以另外哪一个用户的身份通过哪些主机执行什么命令
sudo的配置文件:/etc/sudoers
4、文件特殊属性命令
chattr命令用于改变文件的特殊属性。与chmod命令相比,chmod只是改变文件的读写、执行权限,而chattr是基于内核的更底层的属
性控制。
 777-umask 目录最高权限 - 遮罩码 = 目录最终权限
 //使用visudo命令进行sudo的配置,每一行就是一个sudo条目,条目格式如下:

示例:
 who which_hosts=(runas) command

 who : User,User_Alias //表示运行命令者的身份
 which_hosts : Host,Host_Alias //通过哪些主机
 runas : User,Runas_Alias //以哪个用户的身份
command : Command,Cmnd_Alias //运行哪些命令

//别名必须全部而且只能使用大写英文字母的组合,可以使用感叹号取反

//别名分类
1.用户别名:
 User_Alias "Alias" =
 用户的用户名
 组名,使用%引导
 还可以其它已经定义的用户别名

 2.主机别名:
 Host_Alias "Alias" =
 主机名
 IP地址
 网络地址
 其它主机别名

3.命令别名:
 Cmnd_Alias =
 命令路径
 目录(此目录内的所有命令)
 其它已定义的命令别名

//sudo命令语法:sudo [options] COMMAND
 -V //显示版本编号
 -h //帮助信息,会显示版本编号及指令的使用方式说明
 -l //列出当前用户可以使用的所有sudo类命令
 -v //重新做一次密码确认,如果超过N(默认为5)分钟,也会问密码
 -k //立刻清除认证信息,如果不指定-k,默认认证信息在5分钟后失效
 -b //将要执行的指令放在后台执行
 -u USERNAME //以指定的用户名执行命令,默认为root


5、扩展命令
 Linux 进程管理 Linux 用户和组 
 命令格式:
 chattr [选项] [+/-/=属性] [文件或目录]

 选项:
-R //递归
 -V //显示过程

 模式:
 + //用于增加属性
 - //用户删除属性
 = //用于指定属性
 A //告诉系统不要修改该文件的最后访问时间
 a //只能向文件追加数据,不能删除
 i //设定文件不能被删除,改名,写入或新增内容

 示例:
 [root@hzz ~]# chattr +a hzz.txt //为hzz.txt增加a属性
 [root@hzz ~]# lsattr hzz.txt //查看文件特殊属性
 -----a-------e-- hzz.txt
 sleep //睡眠

 //写脚本时为防止上一个命令没执行完下一命令就开始执行时可以sleep命令
 //语法:sleep NUMBER[SUFFIX]...
 SUFFIX:
 s:秒,默认
 m:分
 h:小时
 d:天
 示例:
sleep 5 //表示睡眠5秒后再执行后面的命令

 last //显示/var/log/wtmp文件内容,用户登录历史及系统重启历史
 -n # //显示最近#次的相关信息

lastb //显示/var/log/btmp文件内容,用户错误的登录尝试
 -n # //显示最近#次的相关信息

 lastlog //显示每个用户最近一次成功登录信息
 -u username //显示特定用户最近的登录信息

 basename //显示路径基名

1.1 什么是进程?
进程是正在执行当中的程序(命令),每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
程序被执行时,执行人的权限和属性、以及程序的代码都会被加载入内存,操作系统就会给这个进程分配一个 ID 号,我们称为
PID(进程 ID)。
1.2 什么是程序?
程序是人使用计算机语言编写的可以实现特定目的或解决特定问题的代码集合。
使用计算机语言编写
可以执行
实现一定功能的代码
1.3 进程管理的作用
判断服务器健康状态:运维工程师最主要的工作就是保证服务器安全稳定的运行。理想的状态是,在服务器出现问题,但是还没有
造成服务器宕机或停止服务时,就人为干预解决了问题。进程管理最主要的工作就是判断服务器当前运行是否健康,是否需要人为
干预。如果服务器的 CPU 占用率、内存占用率过高,就需要人为介入解决问题了。
查看系统中所有的进程:我们需要查看系统中所有正在运行的进程,通过这些进程可以判断系统中运行了哪些服务,是否有非法服
务运行。
杀死进程:这是进程管理中最不常用的手段,当我需要停止服务时,会通过正确关闭命令来停止服务(如 apache 服务可以通过
systemctl stop apache 来关闭)。只有当正常终止进程的手段失效的情况下,才会考虑使用 kill 命令杀死进程(你不是杀手,不要
什么进程都用 kill来终止,否则非常容易导致服务器崩溃)。
1.4 进程的生命周期
当程序运行的时候会由父进程通过fock(一种分支函数)创建子进程来处理任务;子进程被创建后开始处理任务,当任务处理完毕后就
会退出,然后子进程会通知父进程来回收资源;如果子进程处理任务期间,父进程意外终止了,那么这个子进程就变成了僵尸进程。
process.png
2、进程的查看
2.1 ps命令

ps 命令是用来静态显示系统中进程的命令。
ps命令有些特殊,它的部分命令的选项不能加入“-”,比如命令“ps aux”,其中“aux”是选项,但是这个选项不能加入“-”。这是因为 ps命
令的部分选项需要遵守 BSD 操作系统的格式。所以 ps 命令的常用选项的组合是固定的。
注意:
加了 [ ] 的,表示内核进程
exiting或defunct表示僵尸进程
ps aux输出结果
输出 含义
USER 该进程是由哪个用户产生的;
PID 进程的 ID 号;
%CPU 该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源;
%MEM 该进程占用物理内存的百分比,占用越高,进程越耗费资源;
VSZ 虚拟内存,该进程向系统申请的内存空间,单位 KB;
RSS 物理内存,该进程实际使用的内存空间,单位 KB;
TTY
该进程是在哪个终端中运行的。其中 tty1-tty7 代表本地控制台终端(可以通过alt+F1-F7 键切换不同的终端),
tty1-tty6 是本地的字符界面终端,tty7 是图形终端。pts/0-255 代表虚拟终端,一般是远程连接的终端,第一个远
程连接占用的是 pts/0 终端,第二个远程连接占用 pts/1,依次增长;
STAT 进程状态;
START 该进程的启动时间;
TIME 该进程占用 CPU 的运算时间,注意不是系统时间;
COMMAND 产生此进程的命令;
STAT进程状态 状态含义
01 [root@localhost ~]# ps aux
02 #查看系统中所有进程,使用BSD操作系统格式
03
04 [root@localhost ~]# ps -le /常用的选项ps -ef
05 #查看系统中所有进程,使用Linux标准命令格式。
06
07 选项:
08 a: //显示一个终端的所有进程,除了会话引线
09 u: //显示进程的归属用户及内存的使用情况
10 x: //显示没有控制终端的进程
11 f: //查看进程父子关系                ps -aux  或者 ps -efl
12 k: //根据进程属性排序,加-表示倒序
13
14 -e //显示所有进程,与-A效果相同
15 -f //显示更详细的完整格式的进程信息
16 -l //显示更多信息
17 -u //显示指定用户启动的进程
18 -o //根据自己的需要选择要显示的字段
19
20 [root@hzz ~]# ps auxk -%cpu //根据CPU使用率进行排序,从高到低
21 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
22 root 1085 1.2 2.0 159160 37716 ? S<sl 10月21 133:08 top
23
24 [root@localhost ~]# ps -o pid,comm,ni //表示只显示进程号,命令,nice值三个字段
25 PID COMMAND NI
26 8828 bash 0
27 9844 ps 0

网络管理
1、网卡命名方式
1.1 网卡名称的组成格式
前两个字母标识固件
以太网卡以 en 开头
无线网卡以 wl 开头
后一个字母标识设备结构
o:主板上集成的设备的设备索引号
s:扩展槽的索引号
p s:基于拓扑的命名。如enp2s1,表示PCI总线上第2个总线的第1个插槽的设备索引号
x:基于MAC地址的命名
1.2 传统网卡命名方式
传统的网卡命名方式:
以太网卡 eth [0,1,2,...]
无线网卡 wlan [0,1,2,...]

1.3 Redhat7网卡命名机制
Systemd对网卡的命名方式:

规则1:如果从BIOS中能够取到可用的,板载网卡的索引号,则使用这个索引号命名。例如:eno1
规则2:如果从BIOS中能够取到可以用的,网卡所在的PCI-E热插拔插槽的索引号,则使用这个索引号命名。例如:ens1
规则3:如果硬件接口的位置信息可用,则根据此信息进行命名。例如:enp2s0
规则4:根据MAC地址命名,默认不开启。例如:enx2387a1dc56
规则5:上述均不可用时,则使用传统命名机制。
注意:网卡的命名方式有dell的biosdevname和systemd的net.ifnames两种命名规范;在此主要使用systemd的net.ifnames方案。

1.5 回归传统网卡命名
//修改网卡配置文件
[root@hzz ~]# cd /etc/sysconfig/network-scripts/
[root@hzz network-scripts]# mv ifcfg-ens33 ifcfg-eth0
[root@hzz network-scripts]# vim ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
NAME=eth0                   //此处要把ens33改成eth0
UUID=03be31f5-a3c1-4f8d-88b3-aea6e85c869f
DEVICE=eth0                 //此处要把ens33改成eth0
ONBOOT=yes

//编辑/etc/default/grub配置文件,在以GRUB_CMDLINE_LINUX开头的行内rhgb的前面加上net.ifnames=0 biosdevname=0
[root@hzz ~]# vim /etc/default/grub
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)"
GRUB_DEFAULT=saved
GRUB_DISABLE_SUBMENU=true
GRUB_TERMINAL_OUTPUT="console"
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=rhel/root rd.lvm.lv=rhel/swap net.ifnames=0 biosdevname=0 rhgb quiet"
GRUB_DISABLE_RECOVERY="true"

//为grub2生成其配置文件
[root@hzz ~]# grub2-mkconfig -o /etc/grub2.cfg
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-3.10.0-693.el7.x86_64
Found initrd image: /boot/initramfs-3.10.0-693.el7.x86_64.img
Found linux image: /boot/vmlinuz-0-rescue-fd0bcf5782d24ba5b903b175c35f328e
Found initrd image: /boot/initramfs-0-rescue-fd0bcf5782d24ba5b903b175c35f328e.img
done

//重启系统
[root@hzz ~]# reboot
2、网络管理常用命令
2.1 ifconfig命令
ifconfig命令,查看当前处于活动状态的所有网络接口(网卡)的信息,也可以临时修改网络接口(网卡)的配置。

//查看当前处于活动状态的所有网络接口
[root@hzz ~]# ifconfig
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.52.156  netmask 255.255.255.0  broadcast 192.168.52.255
        inet6 fe80::dbd:1db2:658d:30ab  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ab:61:83  txqueuelen 1000  (Ethernet)
        RX packets 3286  bytes 273792 (267.3 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4677  bytes 615915 (601.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 72  bytes 5560 (5.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 72  bytes 5560 (5.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

//仅查看ens33网卡状态
[root@hzz ~]# ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.52.156  netmask 255.255.255.0  broadcast 192.168.52.255
        inet6 fe80::dbd:1db2:658d:30ab  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ab:61:83  txqueuelen 1000  (Ethernet)
        RX packets 4932  bytes 410142 (400.5 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 7576  bytes 944073 (921.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

//查看所有网卡状态信息, 包括禁用和启用
[root@hzz ~]# ifconfig -a
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.52.156  netmask 255.255.255.0  broadcast 192.168.52.255
        inet6 fe80::dbd:1db2:658d:30ab  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:ab:61:83  txqueuelen 1000  (Ethernet)
        RX packets 5834  bytes 484471 (473.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 9030  bytes 1113649 (1.0 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1  (Local Loopback)
        RX packets 72  bytes 5560 (5.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 72  bytes 5560 (5.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ifconfig输出结果

//第一行网卡基本信息:
<UP,BROADCAST,RUNNING,MULTICAST>
        UP                      表示接口已启用
        BROADCAST               表示支持广播
        RUNNING                 表示接口在工作中
        MULTICAST               表示支持组播
        MTU                     1500(最大传输单元):1500字节

//第二行IPv4地址信息:
inet 192.168.52.156             网卡的IP地址
netmask 255.255.255.0           IP地址掩码
broadcast 192.168.52.255        广播地址。

//第三行IPv6地址信息:
inet6 fe80::dbd:1db2:658d:30ab  网卡的IPv6地址。
prefixlen 64                    IPv6地址掩码长度。
scopeid 0x20<link>              作用域,link表示仅该接口有效。

//第四行mac地址信息:
ether 00:0c:29:ab:61:83         网卡接口的MAC地址。
txqueuelen 1000                 传输队列长度。
(Ethernet)                      接口类型为Ethernet。

//第五,六行接收报文信息:
RX packets 5834                 表示此接口正确接收数据包的个数。
bytes 484471 (473.1 KiB)        表示此接口正确接收数据包的总字节数。
RX errors 0                     接收时,产生错误的数据包的个数
dropped 0                       接收时,丢弃的数据包的个数。
overruns 0                      接收时,由于速度过快而丢失的数据包的个数。
frame 0                         接收时,发生frame错误而丢失的数据包的个数。

//第七,八行发送报文信息:
TX packets 9030                 表示此接口正确发送的数据包的个数。
bytes 1113649 (1.0 MiB)         表示此接口正确发送的数据包的总字节数。
TX errors 0                     发送时,产生错误的数据包的个数。
dropped 0                       发送时,丢弃的数据包的个数。
overruns 0                      发送时,由于速度过快而丢失的数据包的个数。
carrier 0                       发送时,发生carrier错误而丢失的数据包的个数。
collisions 0                    发送时,冲突的数据包的个数。
2.2 ip命令
ip命令,查看所有网络接口的信息,也可临时修改网卡配置。

//语法:ip [ OPTIONS ] OBJECT { COMMAND | help }
OBJECT:
    link   网络设备
    addr   协议地址(IPv4/IPv6)
    route  路由表

OPTIONS
-s         查看详细信息

COMMAND
show       显示信息
set        设置
add        添加
del        删除
ip link show

//查看网络设备属性
[root@hzz ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:ab:61:83 brd ff:ff:ff:ff:ff:ff

//显示报文统计信息
[root@hzz ~]# ip -s link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    RX: bytes  packets  errors  dropped overrun mcast   
    5560       72       0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    5560       72       0       0       0       0       
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 00:0c:29:ab:61:83 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    8447543    103002   0       0       0       0       
    TX: bytes  packets  errors  dropped carrier collsns 
    19165672   155011   0       0       0       0 
ip link set 网卡名 {up | down}

//启用或禁用网络设备
[root@hzz ~]# ip link set lo down
[root@hzz ~]# ip link set lo up
ip addr show

//查看网络接口协议地址(IPv4/IPv6)信息
[root@hzz ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ab:61:83 brd ff:ff:ff:ff:ff:ff
    inet 192.168.52.156/24 brd 192.168.52.255 scope global dynamic ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::dbd:1db2:658d:30ab/64 scope link
       valid_lft forever preferred_lft forever

//ip addr show输出结果
<BROADCAST,MULTICAST,UP,LOWER_UP>
        BROADCAST                     表示该接口支持广播
        MULTICAST                     表示该接口支持多播
        UP                            表示该网络接口已启用
        LOWER_UP                      表示网络电缆已插入,设备已连接至网络
mtu 1500                              最大传输单位(数据包大小)1500字节
qdisc pfifo_fast                      用于数据包排队
state UP                              网络接口已启用
qlen 1000                             传输长度
link/ether 00:1e:4f:c8:43:fc          接口的MAC(硬件)地址
brd ff:ff:ff:ff:ff:ff                 MAC广播地址
inet 192.168.52.156/24                IPv4地址
brd 192.168.52.255                    IPv4广播地址
scope global                          允许所有人访问此ip地址
dynamic ens33                         地址是动态分配的
valid_lft forever(永久)              IPv4地址的有效使用期限
preferred_lft forever(永久)          IPv4地址的首选生存期
inet6 fe80::dbd:1db2:658d:30ab/64     IPv6地址
scope link                            仅在允许此设备上访问此ip地址
valid_lft forever(永久)              IPv6地址的有效使用期限
preferred_lft forever(永久)          IPv6地址的首选生存期
ip addr add IP地址 dev 网卡名

//给网卡添加IP地址
[root@hzz ~]# ip addr add 192.168.52.157/24 dev ens33
[root@hzz ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ab:61:83 brd ff:ff:ff:ff:ff:ff
    inet 192.168.52.156/24 brd 192.168.52.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet 192.168.52.157/24 scope global secondary ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::dbd:1db2:658d:30ab/64 scope link 
       valid_lft forever preferred_lft forever
ip addr del IP地址 dev 网卡名

//删除网卡的IP地址
[root@hzz ~]# ip addr del 192.168.52.157/24 dev ens33
[root@hzz ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:ab:61:83 brd ff:ff:ff:ff:ff:ff
    inet 192.168.52.156/24 brd 192.168.52.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::dbd:1db2:658d:30ab/64 scope link 
       valid_lft forever preferred_lft forever

ip route show

[root@hzz ~]# ip route show
default via 192.168.52.2 dev ens33 proto static metric 100
192.168.52.0/24 dev ens33 proto kernel scope link src 192.168.52.156 metric 100

//输出结果
default                   默认路由
via 192.168.52.2          下一跳
dev ens33                 网卡
proto static              路由的协议,kernel是指由内核判断自动设定
metric 100                度量值
scope link                有效范围本地,global全局,site站点。
ip route add 目的地址 via 下一跳 dev 网卡名

[root@hzz ~]# ip route add 192.168.1.0/24 via 192.168.52.2 dev ens33
[root@hzz ~]# ip route show
default via 192.168.52.2 dev ens33 proto static metric 100 
192.168.1.0/24 via 192.168.52.2 dev ens33 
192.168.52.0/24 dev ens33 proto kernel scope link src 192.168.52.156 metric 100 
ip route del 目的地址 dev 网卡名

[root@hzz ~]# ip route del 192.168.1.0/24 dev ens33
[root@hzz ~]# ip route show
default via 192.168.52.2 dev ens33 proto static metric 100 
192.168.52.0/24 dev ens33 proto kernel scope link src 192.168.52.156 metric 100 
2.3 route命令
route命令和ip route命令类似。

//查看当前路由表
[root@hzz ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         gateway         0.0.0.0         UG    100    0        0 ens33
192.168.52.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33

////以数字方式显示路由表
[root@hzz ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.52.2    0.0.0.0         UG    100    0        0 ens33
192.168.52.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33

//输出结果
Flags标志说明:
    U         Up表示此路由启动状态
    H         Host,表示此网关为一主机
    G         Gateway,表示此网关为一路由器
    R         Reinstate Route,使用动态路由重新初始化的路由
    D         Dynamically,动态路由
    M         Modified,此路由已被修改
    !         表示此路由当前为关闭状态
Ref           该路由的引用数
Use           该路由被使用的次数
Iface         接口,也就是网卡
route命令添加或删除路由

route命令添加的路由是临时的,重启之后就会失效。

//语法:route add或del [-net或-host] 目的地址 gw 网关地址 dev 网卡名

-net          表示目的地址是一个网段
-host         表示目的地址是一个具体的ip

//增加网段路由
[root@hzz ~]# route add -net 192.168.1.0/24 gw 192.168.52.2 dev ens33
[root@hzz ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.52.2    0.0.0.0         UG    100    0        0 ens33
192.168.1.0     192.168.52.2    255.255.255.0   UG    0      0        0 ens33
192.168.52.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33

//增加主机路由
[root@hzz ~]# route add -host 192.168.2.1 gw 192.168.52.2 dev ens33
[root@hzz ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.52.2    0.0.0.0         UG    100    0        0 ens33
192.168.1.0     192.168.52.2    255.255.255.0   UG    0      0        0 ens33
192.168.2.1     192.168.52.2    255.255.255.255 UGH   0      0        0 ens33
192.168.52.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33

//删除路由
[root@hzz ~]# route del -net 192.168.1.0/24
[root@hzz ~]# route del -host 192.168.2.1
[root@hzz ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.52.2    0.0.0.0         UG    100    0        0 ens33
192.168.52.0    0.0.0.0         255.255.255.0   U     100    0        0 ens33
3、网络相关配置文件
3.1 网卡配置文件
网卡(网络接口),其配置文件的路径是 /etc/sysconfig/network-scripts/ifcfg-INTERFACE_NAME。

[root@hzz ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=eth1
UUID=03be31f5-a3c1-4f8d-88b3-aea6e85c869f
DEVICE=eth1
ONBOOT=yes
IPADDR=192.168.52.156
NETMASK=255.255.255.0
GATEWAY=192.168.52.2
DNS1=192.168.52.2

////网卡配置说明
TYPE                        接口类型。常见的接口类型有:Ethernet,bond,team,Bridge。
BOOTPROTO=static            启动的协议,获取IP的方式。可选值有{static|none|dhcp|bootp}。如果要使用静态地址,使用static或none都可以。
NAME="ens33"                连接名称
UUID                        设备的唯一标识,全局唯一的IEEE机器识别号,可以不写
DEVICE="ens33"              关联的设备名称,要与文件名的后半部"INTERFACE_NAME"保持一致
ONBOOT=yes                  在系统引导时是否自动激活此网络接口,可选值有{ yes | no }
IPADDR=192.168.52.156       固定IP地址
PREFIX=24                   子网掩码,生产环境中不建议用
NETMASK=255.255.255.0       子网掩码
GATEWAY=192.168.52.2        默认网关
DNS1=192.168.52.2           第一个DNS服务器指向
DNS2                        第二个DNS服务器指向
DNS3                        第三个DNS服务器指向

HWADDR                      硬件地址(mac地址),要与硬件中的地址保持一致,可不写。
DEFROUTE={yes|no}           将接口设定为默认路由{yes|no}
USERCTL={yes|no}            是否允许普通用户控制此接口的启用与禁用
PEERDNS={yes|no}            是否在BOOTPROTO为dhcp时接受由dhcp服务器指定的DNS地址,此项设为yes时获得的DNS地址将直接覆盖至/etc/resolv.conf文件中
NM_CONTROLLED={yes|no}      NM是NetworkManager的简写,NM是由RHEL研发的在RHEL6中取代network脚本来实现网络管理、配置的服务脚本.可选值有{ yes | no },此项是设定此网卡是否接受NM控制。CentOS6建议设为“no”
3.2 路由配置文件
路由配置文件的路径是 /etc/sysconfig/network-scripts/route-INTERFACE_NAME ,该配置文件默认不存在。

//添加格式一:DEST via NEXTHOP
[root@hzz ~]# vim /etc/sysconfig/network-scripts/route-ens33
192.168.1.0/24 via 192.168.52.2

//添加格式二:三行为一条,序号不一样。
[root@hzz ~]# vim /etc/sysconfig/network-scripts/route-ens33
ADDRESS0=192.168.2.0
NETMASK0=255.255.255.0
GATEWAY0=192.168.52.2
ADDRESS1=192.168.3.0
NETMASK1=255.255.255.0
GATEWAY1=192.168.52.2
3.3 DNS配置文件
DNS服务器配置文件的路径是 /etc/resolv.conf 。

//前面的nameserver固定,后面写DNS服务器地址。
[root@hzz ~]# vim /etc/resolv.conf
nameserver DNS_IP_1
nameserver DNS_IP_2
nameserver DNS_IP_3
本地DNS解析配置文件路径是 /etc/hosts 。
[root@hzz ~]# vim /etc/hosts
127.0.0.1       localhost localhost.localdomain localhost4 localhost4.localdomain4
::1             localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.52.156  hzz
3.4 主机名配置文件
生产环境中必须配置主机名,同时主机名也需要遵循一定的规范, 例如:公有云中主机名就以 ”地区-项目-业务-服务-节点-地址“ 这种方式命名。

公有云: 地区-项目-业务-服务-节点-地址
wh-shop-register-nginx-node1-192.168.56.13
wh-med-pay-mysql-master01-192.168.56.11
wh-med-pay-mysql-slave01-192.168.56.12

//主机名配置文件为/etc/hostname
[root@localhost ~]# cat /etc/hostname
localhost.localdomain

//hostname查看主机名
[root@localhost ~]# hostname
localhost.localdomain

//hostname临时修改主机名
[root@localhost ~]# hostname hzz
[root@localhost ~]# cat /etc/hostname
localhost.localdomain
//注意:修改主机名后需要重新加载shell才会显示效果


//rhel7系统建议使用hostnamectl修改和查看主机名
//设定永久名称
[root@localhost ~]# hostnamectl set-hostname hzz
[root@localhost ~]# cat /etc/hostname
hzz

//查看主机信息
[root@localhost ~]# hostnamectl
   Static hostname: hzz
         Icon name: computer-vm
           Chassis: vm
        Machine ID: fd0bcf5782d24ba5b903b175c35f328e
           Boot ID: a060e3a2882f4d2c92884eee9db702bc
    Virtualization: vmware
  Operating System: Red Hat Enterprise Linux Server 7.4 (Maipo)
       CPE OS Name: cpe:/o:redhat:enterprise_linux:7.4:GA:server
            Kernel: Linux 3.10.0-693.el7.x86_64
      Architecture: x86-64
注意:在Linux中以命令方式修改网络配置大部分情况只在当前状态有效,重启后将失效。故若想使修改的配置重启后依然有效,则必须编辑配置文件进行配置的修改。

4、NetworkManager管理网络
RHEL/CentOS7系统默认使用NetworkManager来提供网络服务,这是一种动态管理网络配置的守护进程,能够让网络设备保持连接状态。

NetworkManager提供的命令行和图形配置工具对网络进行设定, 设定保存的配置文件在/etc/sysconfig/network-scripts目录下, 工具有 nmcli, nmtui, nm-connection-editor。它可以管理网络接口(device)也就是网卡,管理的是物理设备。也可以管理网络的连接类型(网卡的配置文件)。 例如:Ethernet,VLANS,Bridges,Bonds,Teams等。

NetworkManager管理连接(connection)的特点:

1.一个物理设备可以配置多种网络连接类型,但是同一时间只能应用其中某一个网络连接类型。
2.针对物理网络接口, 设定不同的网络连接, 在不同的使用环境中激活相应的网络连接,就可以实现网络配置信息的自动切换了
4.1 nmcli命令管理网卡设备
//查看设备状态
[root@hzz ~]# nmcli device
DEVICE  TYPE      STATE      CONNECTION
ens33   ethernet  connected  ens33
lo      loopback  unmanaged  --

//查看指定设备的详细状态
[root@hzz ~]# nmcli device show ens33
GENERAL.DEVICE:                         ens33
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         00:0C:29:73:01:10
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     ens33
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/1
WIRED-PROPERTIES.CARRIER:               on
IP4.ADDRESS[1]:                         192.168.52.156/24
IP4.GATEWAY:                            192.168.52.2
IP4.DNS[1]:                             192.168.52.2
IP4.DOMAIN[1]:                          localdomain
IP6.ADDRESS[1]:                         fe80::20c:29ff:fe73:110/64
IP6.GATEWAY:                            --
......

//开启设备eth0的连接
nmcli device connect eth0

//断开设备eth0的连接
nmcli device disconnect eth0

//应用设备eth0的配置
nmcli device reapply eth0

//修改设备eth0的配置
nmcli device modify eth0
4.2 nmcli命令管理网卡配置信息
//查看网卡使用的配置文件
[root@hzz ~]# nmcli connection show
NAME   UUID                                  TYPE            DEVICE
ens33  03be31f5-a3c1-4f8d-88b3-aea6e85c869f  802-3-ethernet  ens33 

//查看指定网卡配置文件详细信息
[root@localhost ~]# nmcli connection show ens33
connection.id:                          ens33
connection.uuid:                        03be31f5-a3c1-4f8d-88b3-aea6e85c869f
connection.stable-id:                   --
connection.interface-name:              ens33
connection.type:                        802-3-ethernet
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.timestamp:                   1530455962
connection.read-only:                   no
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
......

//开启连接名称为eth0的连接(使用指定网卡配置文件)
nmcli connection up eth0

//关闭连接名称为eth0的连接(关闭指定网卡配置文件)
nmcli connection down eth0

//重新加载所有连接(重载所有网卡配置)
nmcli connection reload

//修改连接名称为eth0的连接信息
nmcli connection modify eth0

//添加一个连接名称为hzz的连接
nmcli connection add hzz

//删除连接名称为hzz的连接
nmcli connection delete hzz

//操作示例及解释:
nmcli connection add type ethernet ifname eth0 con-name hzz1 ipv4.addresses 192.168.52.157/24 ipv4.gateway 192.168.52.2 ipv4.dns 192.168.52.2 ipv4.method manual autoconnect yes

add             添加
type             连接类型
ifname             设备名称
con-name         连接名称(名称随意,一般凸显此连接所应用的设备)
ipv4.addresses        指定ipv4地址
ipv4.gateway        指定ipv4网关
ipv4.dns         指定ipv4的DNS地址
ipv4.method         指定IP地址的获取方式 manual表示手动设置
autoconnect yes        开启开机自启(自动连接)

//修改连接名称为hzz1的连接,修改IP地址为192.168.52.157/24
nmcli connection modify hzz1 ipv4.addresses 192.168.52.157/24

//修改连接名称为hzz1的连接,添加一个IP地址192.168.52.158/24
nmcli connection modify hzz1 +ipv4.addresses 192.168.52.158/24
4.3 聚合网卡配置
//链路聚合两种类型:bond,team
bond:最多支持2块网卡
team:最多支持8块网卡

bond:负载轮询模式bond0(balance-rr),主备模式bond1(active-backup)

//添加bond类型网卡,设置网卡模式工作于负载轮询模式,创建一个bond0的网卡设备,设置连接名称为con-bond0,设置ipv4地址为192.168.52.140/24,设置网关为192.168.52.2,设置dns为192.168.52.2,选择IP地址获取方式为手动获取,设置连接开机自启
nmcli connection add type bond mode balance-rr ifname bond0 con-name con-bond0 ipv4.addresses 192.168.52.140/24 ipv4.gateway 192.168.52.2 ipv4.dns 192.168.52.2 ipv4.method manual autoconnect yes

//添加一个类型为bond-slave的连接,连接名为bond-slave0,将设备eth0添加至bond0网卡
nmcli connection add type bond-slave con-name bond-slave0 ifname eth0 master bond0

//添加第二个类型为bond-slave的连接,连接名为bond-slave1,将设备eth1添加至bond0网卡
nmcli connection add type bond-slave con-name bond-slave1 ifname eth1 master bond0

//查看bond0状态
cat /proc/net/bonding/bond0

team:主备模式activebackup,负载轮询模式roundrobin,负载均衡loadbalance,广播容错broadcast,lacp 需要交换机支持lacp协议

//添加team类型网卡,创建一个team0的网卡设备,设置连接名称为con-team0,设置网卡模式工作于主备模式,设置ipv4地址为192.168.52.140/24,设置网关为192.168.52.2,设置dns为192.168.52.2,选择IP地址获取方式为手动获取,设置连接开机自启
nmcli connection add type team ifname team0 con-name con-team0 config '{"runner":{"name":"activebackup"}}' ipv4.addresses 192.168.52.140/24 ipv4.gateway 192.168.52.2 ipv4.dns 192.168.52.2 ipv4.method manual autoconnect yes

//添加一个类型为team-slave的连接,连接名为team0-port1,将设备eth0添加至team0网卡
nmcli connection add type team-slave con-name team0-port1 ifname eth0 master team0

//添加一个类型为team-slave的连接,连接名为team0-port2,将设备eth1添加至team0网卡
nmcli connection add type team-slave con-name team0-port2 ifname eth1 master team0

//查看team0网卡工作状态
teamdctl team0 state
5、原生network管理网络
原生network和NetworkManager程序都是使用 /etc/sysconfig/network-scripts 下的配置文件,只不过原生network管理网络需要修改配置文件,而NetworkManager则是使用nmcli命令。

//设置NetworkManger开机不启动, 同时停止NetworkManager服务
[root@hzz ~]# systemctl disable NetworkManager
[root@hzz ~]# systemctl stop NetworkManager

//NetworkManger服务停止就使用传统network管理网络,也就是使用配置文件。
6、添加一块网卡
//添加一块物理网卡,新增加的网卡名称是根据你网卡命名机制来决定。
//但是新增加的物理网卡是没有配置文件的, 需要我们手动新增网络连接配置文件
//复制网卡ens33的配置文件,改为ens37的配置文件。
[root@hzz ~]# cp /etc/sysconfig/network-scripts/{ifcfg-ens33,ifcfg-ens37}

//编辑网卡配置文件
[root@hzz ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
BOOTPROTO=static
NAME=eth1
UUID=03be31f5-a3c1-4f8d-88b3-aea6e85c869f
DEVICE=eth1
NM_CONTROLLED=no
ONBOOT=yes
IPADDR=192.168.52.158
NETMASK=255.255.255.0
GATEWAY=192.168.52.2
DNS1=192.168.52.2

//7.0重启network网络服务加载网络并设置开机启动
[root@localhost ~]# systemctl restart network
[root@localhost ~]# systemctl enable network

//8.0重启NetworkManager网络服务加载网络并设置开机启动
[root@localhost ~]# systemctl restart NetworkManager
[root@localhost ~]# systemctl enable NetworkManager
7、网络检测工具与故障排查
7.1 ping命令
ping命令的目的在于测试另一台主机是否可达, 如果ping不到某台主机,就说明对方主机已经出现了问题, 但是不排除由于链路中的防火墙、ping被丢弃等原因造成ping不通的情况。

//ping命令常用选项:
    -c 指定ping的次数
    -i 指定ping包的发送间隔
    -w 指定ping的时间


//ping 3次后退出
[root@hzz ~]# ping -c 3 192.168.52.2
PING 192.168.52.2 (192.168.52.2) 56(84) bytes of data.
64 bytes from 192.168.52.2: icmp_seq=1 ttl=128 time=0.126 ms
64 bytes from 192.168.52.2: icmp_seq=2 ttl=128 time=0.235 ms
64 bytes from 192.168.52.2: icmp_seq=3 ttl=128 time=0.255 ms

--- 192.168.52.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.126/0.205/0.255/0.057 ms

//每隔两秒ping一次,一共ping3次。
[root@hzz ~]# ping -c 3 -i 2 192.168.52.2
PING 192.168.52.2 (192.168.52.2) 56(84) bytes of data.
64 bytes from 192.168.52.2: icmp_seq=1 ttl=128 time=0.135 ms
64 bytes from 192.168.52.2: icmp_seq=2 ttl=128 time=0.249 ms
64 bytes from 192.168.52.2: icmp_seq=3 ttl=128 time=0.163 ms

--- 192.168.52.2 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 4000ms
rtt min/avg/max/mdev = 0.135/0.182/0.249/0.049 ms

//一共ping3秒,3秒后退出
[root@hzz ~]# ping -w 3 192.168.52.1
PING 192.168.52.1 (192.168.52.1) 56(84) bytes of data.
64 bytes from 192.168.52.1: icmp_seq=1 ttl=128 time=0.495 ms
64 bytes from 192.168.52.1: icmp_seq=2 ttl=128 time=0.374 ms
64 bytes from 192.168.52.1: icmp_seq=3 ttl=128 time=0.297 ms

--- 192.168.52.1 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.297/0.388/0.495/0.084 ms
7.2 host与nslookup
host和nslookup命令用于查询DNS记录。

//host和nslookup命令需要安装
yum -y install bind-utils

//使用host命令查询看DNS解析记录
[root@hzz ~]# host www.baidu.com
www.baidu.com is an alias for www.a.shifen.com.
www.a.shifen.com has address 36.152.44.95
www.a.shifen.com has address 36.152.44.96
www.a.shifen.com has IPv6 address ::1

//使用nslookup命令查询看DNS解析记录,nslookup命令可以看到查询DNS解析的流程
[root@hzz ~]# nslookup www.baidu.com
Server:         192.168.52.2
Address:        192.168.52.2#53

Non-authoritative answer:
www.baidu.com   canonical name = www.a.shifen.com.
Name:   www.a.shifen.com
Address: 36.152.44.96
Name:   www.a.shifen.com
Address: 36.152.44.95
7.3 traceroute命令
traceroute命令用于路由跟踪, 检测网络故障出现在ISP运营商或是对端服务无法响应。

//traceroute命令需要安装
yum -y install traceroute

//traceroute命令只追踪内网路由
[root@hzz ~]# traceroute www.baidu.com
traceroute to www.baidu.com (220.181.38.150), 30 hops max, 60 byte packets
 1  * * *
 2  11.220.137.109 (11.220.137.109)  7.620 ms 11.220.137.45 (11.220.137.45)  6.852 ms  7.284 ms
 3  11.220.136.54 (11.220.136.54)  3.305 ms 11.220.136.122 (11.220.136.122)  2.326 ms 11.220.136.58 (11.220.136.58)  2.092 ms
7.4 netstat命令
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。

//语法:netstat [options]
//常用的options:
    -r:显示路由表
    -n:数字格式
    -t:tcp协议连接
    -u:udp协议连接
    -l:listen状态的连接
    -p:相关的程序及pid
    -a:所有

//显示路由表
[root@hzz ~]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 0          0 ens33
192.168.52.156  0.0.0.0         255.255.255.0   U         0 0          0 ens33

//以数字方式显示路由表
[root@hzz ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         192.168.52.156  0.0.0.0         UG        0 0          0 ens33
192.168.52.156  0.0.0.0         255.255.255.0   U         0 0          0 ens33

//显示建立的tcp连接
[root@hzz ~]# netstat -t
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address            State
tcp        0      0 hzz:ssh                 192.168.52.156:56187       ESTABLISHED
tcp        0      0 hzz:ssh                 192.168.52.156:53808       ESTABLISHED

//显示udp连接
[root@hzz ~]# netstat -u
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State

//显示监听状态的连接
[root@hzz ~]# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN

//显示监听指定的套接字的进程的进程号及进程名
[root@hzz ~]# netstat -p
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 hzz:ssh                 192.168.52.156:56187    ESTABLISHED 2094/sshd: root@pts
tcp        0      0 hzz:ssh                 192.168.52.156:53808    ESTABLISHED 1077/sshd: root@pts

//显示所有状态的连接
[root@hzz ~]# netstat -a
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
tcp        0      0 hzz:ssh                 192.168.52.156:56187    ESTABLISHED
tcp        0      0 hzz:ssh                 192.168.52.156:53808    ESTABLISHED
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN
udp        0      0 0.0.0.0:23511           0.0.0.0:*
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*
udp6       0      0 [::]:35299              [::]:* 


//常用选项
-anltup
[root@hzz ~]# netstat -anltup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1093/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1325/master         
tcp        0      0 192.168.52.156:22       192.168.52.1:50250      ESTABLISHED 3927/sshd: root@pts 
tcp6       0      0 :::22                   :::*                    LISTEN      1093/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1325/master         
udp        0      0 0.0.0.0:20009           0.0.0.0:*                           7632/dhclient       
udp        0      0 0.0.0.0:68              0.0.0.0:*                           7632/dhclient       
udp        0      0 127.0.0.1:323           0.0.0.0:*                           749/chronyd         
udp6       0      0 :::53754                :::*                                7632/dhclient       
udp6       0      0 ::1:323                 :::*                                749/chronyd         

7.5 ss命令
ss是一种网络状态查看工具,取代netstat。

//语法:ss [options]
//常用的options:
    -n:数字格式
    -t:tcp协议相关
    -u:udp协议相关
    -l:listen状态的连接
    -p:相关的程序及pid
    -a:所有

//常见的state:
    //tcp finite state machine:有限状态机
        LISTENING:监听
        ESTABLISHED:已建立的连接

//常用组合:以数字格式查看tcp相关信息
[root@hzz ~]# ss -ant
State      Recv-Q Send-Q                Local Address:Port                               Peer Address:Port
LISTEN     0      128                               *:22                                            *:*
LISTEN     0      100                       127.0.0.1:25                                            *:*
ESTAB      0      0                     172.16.12.128:22                                  172.16.12.1:56187
ESTAB      0      0                     172.16.12.128:22                                  172.16.12.1:53808
LISTEN     0      128                              :::22                                           :::*
LISTEN     0      100                             ::1:25                                           :::* 

//常用组合:以数字格式查看监听的tcp端口
[root@hzz ~]# ss -tanl
State      Recv-Q Send-Q                Local Address:Port                               Peer Address:Port
LISTEN     0      128                               *:22                                            *:*
LISTEN     0      100                       127.0.0.1:25                                            *:*
LISTEN     0      128                              :::22                                           :::*
LISTEN     0      100                             ::1:25                                           :::* 

//常用组合:以数字格式查看监听的tcp端口和进程号
[root@hzz ~]# ss -antlp
State      Recv-Q Send-Q                Local Address:Port                               Peer Address:Port
LISTEN     0      128                               *:22                                            *:*                   users:(("sshd",pid=889,fd=3))
LISTEN     0      100                       127.0.0.1:25                                            *:*                   users:(("master",pid=1007,fd=13))
LISTEN     0      128                              :::22                                           :::*                   users:(("sshd",pid=889,fd=4))
LISTEN     0      100                             ::1:25                                           :::*                   users:(("master",pid=1007,fd=14))

//常用组合:以数字格式查看udp相关信息
[root@hzz ~]# ss -anu
State      Recv-Q Send-Q                Local Address:Port                               Peer Address:Port
UNCONN     0      0                                 *:23511                                         *:*
UNCONN     0      0                                 *:68                                            *:*
UNCONN     0      0                                :::35299                                        :::* 

//常用组合:以数字格式查看udp监听的端口
[root@hzz ~]# ss -anul
State       Recv-Q Send-Q        Local Address:Port                       Peer Address:Port              
UNCONN      0      0                 127.0.0.1:323                                   *:*                  
UNCONN      0      0                       ::1:323                                  :::*    

//常用组合:以数字格式查看监听的tcp和udp端口以及进程pid
[root@hzz ~]# ss -anltup
Netid State      Recv-Q Send-Q      Local Address:Port                     Peer Address:Port              
udp   UNCONN     0      0               127.0.0.1:323                                 *:*                   users:(("chronyd",pid=749,fd=1))
udp   UNCONN     0      0                     ::1:323                                :::*                   users:(("chronyd",pid=749,fd=2))
tcp   LISTEN     0      128                     *:22                                  *:*                   users:(("sshd",pid=1093,fd=3))
tcp   LISTEN     0      100             127.0.0.1:25                                  *:*                   users:(("master",pid=1325,fd=13))
tcp   LISTEN     0      128                    :::22                                 :::*                   users:(("sshd",pid=1093,fd=4))
tcp   LISTEN     0      100                   ::1:25                                 :::*                   users:(("master",pid=1325,fd=14))


//常见端口
http    80/tcp 
https   443/tcp 
ssh     22/tcp 
ftp     20,21/tcp
mysql   3306/tcp
rsync   873/rsync
redis   6379/tcp
8、 网络故障排查
网络故障分为硬件/软件故障
网卡损坏
链路故障
网卡驱动不兼容
网络排查思路
ping本地回环口, 确定本机TCP/IP协议栈是否正常
ping本机IP地址, 确定本地设备以及驱动是否正常
ping同网段主机, 确定二层网络是否正常工作
ping网关地址, 确定本地与网络是否正常
ping公网地址, 确定本地路由是否正常
ping公网域名, 确定DNS客户端是否正常
服务故障排查思路
使用telnet检测端口是否开放
检查服务端防火墙以及SElinux
检查相应的权限是否配置正常
检查日志是否有异常
检查完毕后持续测试
建议:所有的排查思路都从OSI七层模型由下往上逐一进行排查(学会看日志)。

yum/dnf工具
1、yum/dnf工具简介
yum工具(yellowdog update manager)基于RPM进行开发。最大的优势就是能够解决rpm包的依赖问题;yum能够自动解决软件安装时的依赖关系。有优势就有劣势;yum工具也有缺点,如果在未完成安装的情况下强行中止安装过程,下次再安装时将无法解决依赖关系;dnf工具可以解决此问题。

dnf工具是Redhat8和Centos8上用来代替yum的一个工具,其存在的意义就是处理yum的缺陷,其用法与yum是完全一样的,甚至连选项都是一样的,你可以理解为dnf就是yum,只是换了个名字而已。

2、yum/dnf的工作原理
yum工具除了能够解决软件安装时的依赖关系以外,还提供了一个仓库的功能。

yum仓库也叫yum源,类似安卓系统的软件商店;Linux系统配置了yum仓库之后就可以直接从仓库获取rpm包,就不需要去单独下载;yum的工作需要两部分来合作,一部分是yum服务器端,另一部分就是客户端的yum工具。

yum.jpg
yum.jpg

3、yum/dnf工具包含的文件
3.1 yum/dnf元数据(服务端)
存放位置(服务器端repodata目录)
包含的文件及其对应的功能
primary.xml.gz
当前仓库所有rpm包的列表;
依赖关系;
每个rpm包安装生成的文件列表
filelists.xml.gz
当前仓库所有rpm包的所有文件列表
other.xml.gz
额外信息,rpm包的修改日志
repomd.xml
记录的是primary.xml.gz、filelists.xml.gz、other.xml.gz这三个文件的时间戳和校验和
comps*.xml
rpm包分组信息
3.2 yum/dnf的配置文件(客户端)
yum/dnf的配置文件有哪些:

/etc/yum.conf 或 /etc/dnf.conf 作用:为所有仓库提供公共配置
/etc/yum.repos.d/*.repo 作用:为仓库的指向提供配置
4、yum/dnf仓库管理
yum/dnf仓库也叫yum/dnf源,类似安卓系统的软件商店;Linux系统配置了yum/dnf仓库之后就可以直接从仓库获取rpm包,就不需要去单独下载。

4.1 yum/dnf本地仓库配置
配置本地仓库首先我们要有rpm包和仓库的元数据,而Linux的IOS镜像中自带rpm包和元数据,所以我们需要先挂载ISO镜像。
#挂载光盘镜像,临时挂载
[root@hzz ~]# mkdir /mnt/cdrom
[root@hzz ~]# mount /dev/sr0 /mnt/cdrom/
mount: /dev/sr0 写保护,将以只读方式挂载

#永久挂载
[root@hzz ~]# echo "/dev/sr0 /mnt/cdrom iso9660 defaults 0 0" >> /etc/fstab
配置本地仓库Redhat/Centos8.0:/etc/yum.repos.d/*.repo
[root@hzz ~]# cd /etc/yum.repos.d/
[root@hzz yum.repos.d]# ls
redhat.repo

#Redhat8.0以后需要配置两个仓库BaseOS和AppStream,7.0只需要配置一个即可。
[root@hzz yum.repos.d]# vim hzz.repo
[BaseOS]
name=BaseOS
baseurl=file:///media/cdrom/BaseOS
gpgcheck=0
enabled=1

[AppStream]
name=AppStream
baseurl=file:///media/cdrom/AppStream
gpgcheck=0
enabled=1

[root@hzz yum.repos.d]# ls
hzz.repo  redhat.repo

# /etc/yum.repos.d/*.repo配置文件内容详解
[Repo_Name]:仓库标识
name:仓库名称
baseurl:仓库的具体路径,接受以下三种类型
    ftp://
    http://
    file://
gpgcheck:可选值{1|0},1为检查软件包来源合法性,0为不检查来源
    如果gpgcheck设为1,则必须用gpgkey定义密钥文件的具体路径
    gpgkey=/PATH/TO/KEY
enabled:可选值{1|0},1为启用此仓库,0为禁用此仓库
清空本地仓库缓存
[root@hzz ~]# yum clean all
已加载插件:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
正在清理软件源: hzz
Cleaning up everything
Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos
缓存元数据
[root@hzz ~]# yum makecache 
已加载插件:fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
base                                                               | 3.6 kB  00:00:00     
epel                                                               | 4.7 kB  00:00:00     
extras                                                             | 2.9 kB  00:00:00     
mysql-connectors-community                                         | 2.6 kB  00:00:00     
mysql-tools-community                                              | 2.6 kB  00:00:00     
mysql57-community                                                  | 2.6 kB  00:00:00     
updates                                                            | 2.9 kB
列出所有可用仓库
[root@hzz ~]# yum repolist
已加载插件:product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager to register.
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
源标识                                           源名称                                        状态
!hzz                                             hzz                                           4,986
repolist: 4,986
4.2 网络仓库配置
网络仓库获取rpm包就直接从开源镜像站获取即可,配置方式和本地仓库基本一致。

开源镜像站地址:
http://mirrors.163.com
http://mirrors.sohu.com
https://mirrors.tuna.tsinghua.edu.cn
http://mirrors.aliyun.com

配置网络yum仓库
//配置网络yum仓库:/etc/yum.repos.d/*.repo
[root@hzz yum.repos.d]# vim hzz.repo
[BaseOS]
name=BaseOS
baseurl=https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/
gpgcheck=0
enabled=1

[AppStream]
name=AppStream
baseurl=https://mirrors.aliyun.com/centos/8/AppStream/x86_64/os/
gpgcheck=0
enabled=1
部分开源镜像站提供了repo配置文件,我们可以直接下载使用
//阿里云直接提供了centos的repo配置文件,直接复制下面命令即可。
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
EPEL的方式配置网络yum仓库,通过安装rpm包配置网络仓库
//这里下载的是阿里云centos8的EPEL包,安装之后8.0系统即可使用网络仓库。
[root@hzz ~]# wget https://mirrors.aliyun.com/centos/8/BaseOS/x86_64/os/Packages/centos-linux-release-8.3-1.2011.el8.noarch.rpm

[root@hzz ~]# ls
anaconda-ks.cfg  centos-linux-release-8.3-1.2011.el8.noarch.rpm

[root@hzz ~]# rpm -ivh centos-linux-release-8.3-1.2011.el8.noarch.rpm
警告:epel-release-7-11.noarch.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:epel-release-7-11                ################################# [100%]
5、yum/dnf管理软件
5.1 yum/dnf命令
//yum命令语法
yum/dnf [options] [command] [package ...]

//常用的选项
-y                              //自动回答为"yes"
-q                              //静默模式,安装时不输出信息至标准输出
--nogpgcheck                    //使用当gpgcheck=1时会使用gpgkey验证包的来源合法性,此时可以使用此命令跳过检查
--disablerepo=repoidglob        //临时禁用此处指定的repo
--enablerepo=repoidglob         //临时启用此处指定的repo
--noplugins                     //禁用所有插件

//常用的command
list                          //列出所有的包
    all                        //默认项
    available                 //列出仓库中有的,但尚未安装的所有可用的包
    installed                  //列出已经安装的包
    updates                    //可用的升级
    
clean                       //清理缓存
    all                    //清除所有缓存
    packages                //清除包缓存
    headers                //清除头部缓存
    metadata                //清除元数据缓存
    dbcache                //清除数据库缓存
    
repolist                       //显示repo列表及其简要信息
    all                    //列出所有仓库
    enabled                    //默认项,列出开启的仓库
    disabled                //列出关闭的仓库
    
install                     //安装,可以一次安装多个包
    yum install packages [...]

remove                       //卸载,可以一次卸载多个包

grouplist                     //列出可用的组

groupinstall "group name"       //安装一组软件

localinstall                   //安装本地rpm包,自动解决依赖关系

info                       //查看包的信息,显示rpm -qi package的结果
    yum info packages

update                      //升级
    yum update packages [...]
update_to                     //升级为指定版本

downgrade package1 package2     //将package1降级为package2

search string                  //以指定的关键字搜索程序包名以及概要信息

provides | whatprovides         //查看指定的文件或特性是由哪个包安装生成的

deplist package                //显示指定包的依赖关系

history                    //查看yum的历史事务信息
5.2 yum命令使用实例
列出软件包
//列出软件仓库中可用的软件
[root@hzz ~]# yum list all

//进行模糊查找
[root@hzz ~]# yum list all | grep "ftp"
安装软件包
//安装仓库内的软件,只需要给出软件名称
[root@hzz ~]# yum install vsftpd

//安装过程中分析依赖关系后, 直接安装
[root@hzz ~]# yum -y install httpd

//安装本地的rpm包, 如果有依赖关系, 会自动从软件仓库中下载所需依赖
[root@hzz ~]# yum -y localinstall /mnt/cdrom/Packages/httpd-2.4.6-67.el7.x86_64.rpm 

//安装网络上rpm包
[root@localhost ~]# yum install https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/vsftpd-3.0.2-25.el7.x86_64.rpm
与缓存相关的命令
//缓存仓库的元数据文件
[root@hzz ~]# yum makecache

//缓存rpm包
//1.安装yum插件,实现只下载软件包不安装
[root@hzz ~]# yum -y install --downloadonly yum-plugin
//2.将软件下载至指定目录
[root@hzz ~]# yum -y install --downloadonly --downloaddir=/tmp httpd

//清除所有yum缓存
[root@hzz ~]# yum clean all
与软件包组相关的命令
//列出已经安装和所有可使用的软件包组
[root@hzz ~]# yum grouplist

//安装一整个组的软件包
[root@hzz ~]# yum -y groupinstall 'Server with GUI'

//yum删除已安装的某个组的软件
[root@localhost ~]# yum -y groupremove 'Server with GUI'
5.3 YUM签名检查机制
RPM软件包管理器的提供组织Redhat在构建rpm包时, 使用其私钥private key对rpm包进行签名。
客户端在安装rpm包时为了验证其合法性, 可以使用Redhat提供的公钥public key进行签名检查。

方式1:在仓库中指定公钥位置

[root@hzz ~]# vim /etc/yum.repos.d/CentOS-Base.repo
[base]
name=Redhat-$releasever - Base
baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY--redhat-release
enabled=1
方式2:不进行签名验证

//不检查软件包的签名
[root@localhost ~]# yum install httpd --nogpgcheck


1.1 认识磁盘
磁盘是一种计算机的外部存储器设备,由一个或多个覆盖有磁性材料的铝制或玻璃制的碟片组成,用来存储用户的信息,这种信息可以反复地被读取和改写;绝大多数磁盘被永久封存在一个密封的盒子里。

磁盘结构1.jfif
磁盘结构1.jfif

1.2 磁盘运行机理
简单来说就是多个盘片之间靠主轴连接,电机带动主轴做旋转运动,通过多个磁头臂的摇摆和磁盘的旋转,磁头就可以在磁盘旋转的过程中就读取到磁盘中存储的各种数据。

1.3 磁盘的扇区、磁道、柱面
磁道: 磁盘的每个盘面被划分为许多同心圆,这些同心圆的轨道叫做磁道。

扇区: 一个盘面划分为若干个内角相同的扇形,这样盘面上的每个磁道就被分为若干段圆弧,每段圆弧叫做一个扇区。每个扇区中的数据作为一个单元同时被读入或写入。每一个扇区是512字节,其中有64个字节存储的是分区表,一条分区信息占16个字节。

柱面: 每一个盘片同一大小的同心圆可以看成连在一起的柱面,磁盘在分区的时候最小单位是柱面,每一个盘片的上下面都可以读取数据,每一个磁头,不可以跨盘面读取数据。

1.4 磁盘的分类
IDE接口磁盘: 特点价格低廉,兼容性强,性价比高,数据传输较慢,不支持热插拔等。

SCSI接口磁盘: 传输速率高,读写性能好,运行稳定,可连接多个设备;可支持热插拔,占用CPU低,但是价格相对来说比较贵,一般用于工作站或服务器上。

SATA接口磁盘: 结构简单、支持热插拔。

USB接口磁盘: 移动硬盘,随身携带,性能较低。

IDE接口的磁盘在Linux系统中命名为:/dev/hd[a-z]

SCSI、SATA、USB接口的磁盘在Linux系统中命名为:/dev/sd[a-z]

虚拟化磁盘在Linux系统中命名为:/dev/vd[a-z]

打印机设备在Linux系统中命名为:/dev/lp[0-15]

2、磁盘分区
2.1 为什么要分区?
易于管理和使用:
比如说我们把磁盘分成多个盘(分区)sda1、sda2、sda3、sda4,假设sda1盘为系统盘,其他的比如说游戏、办公、软件盘,这样我们想管理哪个盘直接选中操作即可不会影响其他盘;而且根据用途我们也能较快的去使用相应的磁盘。

有利于数据的安全:
通过分区可以降低数据损失的风险;出现硬盘坏道、错误操作、重装系统都有可能造成数据损失,如果分区了,那么我们就可以将损失最小化。

节约寻找文件的时间:
寻找文件的时间是指电脑搜索文件的时间;分区以后,电脑搜索文件时只需要在相对应的分区搜索就可以了,没必要进行全盘搜索,大大节省了寻找文件的时间。

磁盘分区图示:
磁盘分区.jfif
磁盘分区.jfif

2.2 分区类型
MBR(Master Boot Record)和GPT(GUID Partition Table)是在磁盘上存储分区信息的两种不同方式;这些分区信息包含了分区从哪里开始的信息,这样操作系统才知道哪个扇区是属于哪个分区的,以及哪个分区是可以启动的。在磁盘上创建分区时,你必须在MBR和GPT之间做出选择。

MBR是Master Boot Record的简称,也就是主引导记录,是位于磁盘最前边的一段引导(Loader)代码,主要用来引导操作系统的加载与启动。

特点:

MBR支持最大2TB磁盘,它无法处理大于2TB容量的磁盘
只支持最多4个主分区。若想要更多分区,需要创建扩展分区,并在其中创建逻辑分区
GPT磁盘是指使用GUID分区表的磁盘,GUID磁盘分区表(GUID Partition Table,缩写:GPT)其含义为“全局唯一标识磁盘分区表”,是一个实体硬盘的分区表的结构布局的标准。

特点:

GPT对磁盘大小没有限制
最多可以创建128个分区
3、分区工具使用
3.1 查看分区使用情况
df    //命令查看已挂载磁盘或分区使用情况,默认K为单位
-h    //以G或者T或者M人性化方式显示
-i    //查看inode使用情况
-T    //查看文件系统类型

[root@localhost ~]# df -h
设备名称            磁盘大小 已用大小 可用大小 使用百分比 挂载点
Filesystem             Size  Used  Avail   Use%      Mounted on
devtmpfs               1.9G     0   1.9G     0%      /dev
tmpfs                  1.9G     0   1.9G     0%      /dev/shm
tmpfs                  1.9G  9.7M   1.9G     1%      /run
tmpfs                  1.9G     0   1.9G     0%     
 /sys/fs/cgroup
/dev/mapper/rhel-root   55G   14G    42G    26%      /
/dev/sr0               7.9G  7.9G      0   100%      /mnt/cdrom
/dev/nvme0n1p1        1014M  229M   786M    23%      /boot
tmpfs                  376M  4.0K   376M     1%      /run/user/0
tmpfs                  376M  1.2M   375M     1%      /run/user/42

lsblk    //查看所有磁盘和分区使用情况
[root@localhost ~]# lsblk 
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sr0            11:0    1  7.9G  0 rom  /mnt/cdrom
nvme0n1       259:0    0   60G  0 disk 
|-nvme0n1p1   259:1    0    1G  0 part /boot
|-nvme0n1p2   259:2    0   19G  0 part 
| |-rhel-root 253:0    0   55G  0 lvm  /
| `-rhel-swap 253:1    0    2G  0 lvm  [SWAP]
`-nvme0n1p3   259:3    0   40G  0 part 
  `-rhel-root 253:0    0   55G  0 lvm  /

du    //统计文件占用磁盘大小
-s    //列出总和
-h    //人性化显示容量信息

[root@localhost ~]# du -sh /etc/
30M     /etc/
3.2 磁盘分区工具
分区工具有fdisk和gdisk,当硬盘小于2T的时候我们应该用fdisk来分区,而当硬盘大于2T的时候则应用gdisk来进行分区;fdisk默认使用MBR分区表,gdisk默认使用GPT分区表。

//生产分区建议: 如无特殊需求, 直接使用整个磁盘即可, 无需分区
//学习分区建议: 1P+1E(3L) 2P+1E(2L) 3P+1E(1L) (仅适用于练习)      

fdisk    //磁盘分区工具,默认采用MBR分区表
-l    //列出系统中所有磁盘

[root@localhost ~]# fdisk -l            //查看系统中磁盘信息

[root@localhost ~]# fdisk  /dev/sdb        //对/dev/sdb进行分区
Command (m for help): m             //获取帮助
Command action
   a   toggle a bootable flag           //切换分区启动标记
   d   delete a partition                 //删除分区
   l   list known partition types           //显示分区类型
   m   print this menu                  //显示帮助菜单
   n   add a new partition              //新建分区
   o   create a new empty DOS partition table   //创建新的空白分区表
   p   print the partition table               //显示分区表的信息
   q   quit without saving changes          //不保存退出
   t   change a partition's system id       //修改分区ID类型,可以通过l查看id
   w   write table to disk and exit         //保存退出

//创建主分区
Command (m for help): n             //新建分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)  //主分区
   e   extended                 //扩展分区
Select (default p): p               //选择主分区
Partition number (1-4, default 1):          //分区序号
First sector (2048-2097151, default 2048):     //起始扇区位置,回车默认即可
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +50M //结束扇区位置,+50M表示此分区大小为50MB

//创建扩展分区
Command (m for help): n             //新建分区
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended
Select (default p): e               //创建扩展分区
Partition number (2-4, default 2):
First sector (104448-2097151, default 104448):
Using default value 104448
Last sector, +sectors or +size{K,M,G} (104448-2097151, default 2097151):  //回车默认划分所有空间给扩展分区

//创建逻辑分区
Command (m for help): n             //新建分区
Partition type:
   p   primary (1 primary, 1 extended, 2 free)
   l   logical (numbered from 5)
Select (default p): l               //创建逻辑分区
Adding logical partition 5
First sector (106496-2097151, default 106496):
Using default value 106496
Last sector, +sectors or +size{K,M,G} (106496-2097151, default 2097151): +100M  //分配100MB空间

//查看分区创建
Command (m for help): p
Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      104447       51200   83  Linux
/dev/sdb2          104448     2097151      996352    5  Extended
/dev/sdb5          106496      311295      102400   83  Linux

//保存分区
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.

//安装parted, 刷新内核立即生效分区配置,无需重启
[root@localhost ~]# dnf -y install parted
[root@localhost ~]# partprobe /dev/sdb

//检查磁盘是否是MBR分区方式
[root@localhost ~]# fdisk -l /dev/sdb | grep type
Disk label type: dos
gdisk    //磁盘分区工具,默认采用GPT分区表

[root@localhost ~]# gdisk /dev/sdb
Command (? for help): n                 //创建新分区
Partition number (1-128, default 1):
First sector (34-2097118, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-2097118, default = 2097118) or {+-}size{KMGTP}: +500M //分配500M大小

Command (? for help): p             //查看分区情况
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1026047   500.0 MiB   8300  Linux filesystem

Command (? for help): w             //保存分区
Do you want to proceed? (Y/N): y            //确认
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

//检查磁盘是否是gpt格式
[root@localhost /]# fdisk /dev/sdb -l | grep type
Disk label type: gpt

//安装parted, 刷新内核立即生效分区配置,无需重启
[root@localhost ~]# yum -y install parted
[root@localhost ~]# partprobe /dev/sdb
3.2 磁盘格式化
mkfs命令用来格式化磁盘或分区,创建文件系统;磁盘分区后必须格式化创建文件系统才能正常使用。


mkfs    //格式化磁盘或分区
-b    //设定数据区块占用空间大小,目前支持1024、2048、4096 bytes每个块。
-t    //用来指定什么类型的文件系统,可以是ext3,ext4, xfs
-i    //设定inode的大小
-N    //设定inode数量,防止Inode数量不够导致磁盘不足
-L    //预设该分区的标签label

//使用-t指定方式创建xfs文件系统
[root@localhost ~]# mkfs -t xfs  /dev/sdb1

//也可以使用另一种方式格式化sdb1分区为ext4文件系统
[root@localhost ~]# mkfs.ext4  /dev/sdb1
3.3 磁盘挂载
磁盘分区格式化之后, 在Linux中必须进行挂载才能进行使用;挂载分区前需要创建挂载点, 挂载点就是一个目录,如果往挂载点目录写入数据, 实际上会写入到挂载的分区当中;挂载点建议是空目录, 如果不是也不影响挂载分区的使用,但是原有的文件会被隐藏。

挂载分为两种临时挂载和永久挂载;临时挂载即重启之后失效,永久挂载即开机自动挂载。

临时挂载磁盘:

mount        //磁盘挂载命令,实质为文件系统指定访问入口
-t        //指定挂载分区的文件系统类型,如ext3,ext4, xfs
-o        //指定挂载参数
-a        //重新读取/etc/fstab配置文件的所有挂载

//挂载/dev/sdb1至db1目录
[root@localhost ~]# mkdir /mnt/disk1
[root@localhost ~]# mount -t xfs /dev/sdb1  /mnt/disk1

//fstab被损坏情况下,让只读文件系统可写(正常情况下不使用)
[root@localhost ~]# mount -o rw,remount /
永久挂载磁盘:

blkid        //获取所有分区的UUID

//blkid命令获取sdb1分区的UUID
[root@localhost ~]# blkid | grep "sdb1"
/dev/sdb1: UUID="e271b5b2-b1ba-4b18-bde5-66e394fb02d9" TYPE="xfs"

//使用UUID临时挂载磁盘sdb1分区至于db1
[root@localhost ~]# mount UUID="e271b5b2-b1ba-4b18-bde5-66e394fb02d9" /mnt/disk1

//将挂载写入到/etc/fstab中,实现永久挂载, 开机自动挂载
[root@localhost ~]# vim /etc/fstab    
UUID=e271b5b2-b1ba-4b18-bde5-66e394fb02d9 /mnt/disk1 xfs  defaults 0  0

//加载fstab配置文件, 同时检测语法是否有错误
[root@localhost ~]# mount –a
fstab配置文件介绍:

[root@localhost ~]# vim /etc/fstab
分区标识(UUID或设备名)                      挂载点     文件类型  挂载参数    不检查 不备份
UUID=e271b5b2-b1ba-4b18-bde5-66e394fb02d9 /mnt/disk1        xfs  defaults    0     0

//挂载参数, 可写fstab配置文件, 也可以mount时使用-o参数指定
参数             参数意义                                  系统默认值
async            系统每隔一段时间把内存数据写入磁盘中
sync             时时同步内存和磁盘中数据;
suid,nosuid     允许/不允许分区有suid属性                  suid
rw,ro           可以指定文件系统是只读(ro)或可写(rw)        rw
exec,noexec     允许/不允许可执行文件执行,不要挂载根分区    exec
user,nouser     允许/不允许root外的其他用户挂载分区         nouser
auto,noauto     开机自动挂载/不自动挂载                    auto
defaults         默认文件系统挂载设置              rw, suid, dev, exec, auto, nouser, async

//加载fstab配置文件中所有配置
[root@localhost ~]# mount -a
卸载挂载磁盘:

umount        //取消挂载
-lf        //强制取消挂载

//使用站点目录卸载
[root@localhost ~]# umount /mnt/disk1

//使用设备名卸载/dev/sdb1
[root@localhost ~]# umount /dev/sdb1

//umount不能卸载的情况
[root@localhost db1]# umount /db1  
umount: /db1: device is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1)
       
//如上情况解决办法有两种, 切换至其他目录或使用'-l'选项强制卸载    
[root@localhost db1]# umount -lf /db1
4、SWAP交换分区
交换分区SWAP就是LINUX下的虚拟内存分区,它的作用是在物理内存使用完之后,将磁盘空间(也就是SWAP分区)虚拟成内存来使用。交换分区一般指定虚拟内存的大小为实际内存的1~1.5倍。如果实际内存超过8GB,可以直接划分16GB给虚拟内存即可。

//为系统添加SWAP分区

//查看内存和SWAP交换分区的使用情况
[root@localhost ~]# free -mh
              total        used        free      shared  buff/cache   available
Mem:           1.8G        258M        103M         61M        1.4G        1.3G
Swap:             0           0           0 <--- 没有交换分区

//使用磁盘创建一个分区作为SWAP交换分区,并且把分区类型更改为82
[root@localhost ~]# fdisk  /dev/sdb

Command (m for help): n             //新建分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p               //选择主分区
Partition number (1-4, default 1):          //分区序号
First sector (2048-2097151, default 2048):     //起始扇区位置,回车默认即可
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +2G //结束扇区位置,+2G表示此分区大小为2G

Select (default p): t                //修改分区id
Partition number (default 1)            //选择要成为SWAP的分区
Hex code (type L to list all codes):82      //修改成id为82
Changed type of partition 'Linux LVM' to 'Linux swap / Solaris'.

Command (m for help): p

   设备 Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048     2099199     1048576   83  Linux
/dev/sdb2         2099200     6293503     2097152   82  Linux swap / Solaris <---修改成功

Command (m for help): w

//强烈建议对分区做了修改后都刷新一下
[root@localhost ~]# partprobe  /dev/sdb

//把sdb1格式化为交换分区
[root@localhost ~]# mkswap  /dev/sdb1
正在设置交换空间版本 1,大小 = 2097148 KiB
无标签,UUID=ba08eb90-2003-44e6-9769-9a9351aebb05

//启动交换分区
[root@localhost ~]# swapon /dev/sdb1
或者
[root@localhost ~]# swanon -a  //启动所有交换分区

//查看交换分区
[root@localhost ~]# free -mh
              total        used        free      shared  buff/cache   available
Mem:           1.8G        258M        103M         61M        1.4G        1.3G
Swap:            2G           0          2G

//永久挂载交换分区
# blkid /dev/sdb1
/dev/sdb1: UUID="ba08eb90-2003-44e6-9769-9a9351aebb05" TYPE="swap" 

# vim /etc/fstab 
UUID=ba08eb90-2003-44e6-9769-9a9351aebb05  swap    swap    defaults  0 0
5、生产磁盘故障案例
//Inode被占满,导致磁盘有可用的剩余空间也无法继续使用

[root@localhost ~]# dd if=/dev/zero of=/opt/newdisk bs=1k count=1024
[root@localhost ~]# mkfs.ext4 -i 1024 /opt/newdisk
[root@localhost ~]# mkdir /mnt/data
[root@localhost ~]# mount -t ext4 -o loop /opt/newdisk /mnt/data/

//inode被占满
[root@localhost ~]# cd /mnt/data/
[root@localhost data]# touch {1..20000}
touch: cannot touch `19997': No space left on device
touch: cannot touch `19998': No space left on device
touch: cannot touch `19999': No space left on device
touch: cannot touch `20000': No space left on device

//inode被占满,剩余block也是无法继续使用
[root@localhost ~]# df -h|grep data
/opt/newdisk    891K   34K  806K   5% /mnt/data/

[root@localhost ~]# df -i | grep data
/opt/newdisk      1024  1024       0  100% /mnt/data/

//假设现在线上正在运行Nginx服务, Nginx产生的日志已经达到了20个G, 磁盘眼看就看沾满了, 请问不重启Nginx的方式如何处理

//删除文件, 但虽然文件被删除但是Nginx持续占用着文件, 所以空间并不会被释放
rm -f access.log

//正确做法如下, 使用重定向清空该文件即可释放文件内容
> access.log
6、LVM逻辑卷管理
6.1 LVM逻辑卷的作用
许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份、删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足系统的需要。

LVM逻辑卷管理是一个多才多艺的硬盘系统工具;无论在Linux或者其他类似的系统,都是非常的好用。传统分区使用固定大小分区,重新调整大小十分麻烦。但是,LVM可以创建和管理“逻辑”卷,而不是直接使用物理硬盘。可以让管理员弹性的管理逻辑卷的扩大缩小,操作简单,而不损坏已存储的数据。可以随意将新的硬盘添加到LVM,以直接扩展已经存在的逻辑卷。

lvm.jpg
lvm.jpg

6.2 LVM逻辑卷中的名词
Physical Extend:物理拓展简称PE,逻辑卷管理的基本单位,默认大小是4M。

Physical Volume:物理卷简称PV,将一块磁盘或分区拆分为一个个PE,那么这块磁盘或分区就是PV。

Volume Group:卷组简称VG,一个空间池用来装PE;可以把一个或者多个PV加到VG当中,此时VG中就有了存储空间。

Logical Volume:逻辑卷简称LV,VG的空间不能够直接使用需要从VG中将空间提取出来,提取出来的空间就叫LV;LV的大小必须是PE的倍数。

6.3 创建LVM逻辑卷
LVM逻辑卷创建流程:

添加物理磁盘,创建物理卷
创建卷组,将物理卷加入卷组
在卷组中划分逻辑卷
格式化逻辑卷
挂载使用
1.准备物理磁盘
[root@localhost ~]# lsblk |grep "sd[bcd]"
sdb             8:16   0    1G  0 disk
sdc             8:32   0    1G  0 disk
sdd             8:48   0    1G  0 disk

2.将磁盘转换为pv
[root@localhost ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.

//检查pv创建情况
[root@localhost ~]# pvs
PV         VG     Fmt  Attr PSize   PFree
/dev/sdb          lvm2 ---    1.00g 1.00g

3.创建名为datavg的卷组,此卷组包含/dev/sdb物理卷
[root@localhost ~]# vgcreate datavg /dev/sdb
Volume group "datavg" successfully created

//检查卷组
[root@localhost ~]# vgs
VG      #PV #LV #SN Attr   VSize    VFree
datavg   1   0   0 wz--n- 1020.00m 1020.00m

4.创建逻辑卷, 分配名称, 指定大小和卷组
[root@localhost ~]# lvcreate -L 100M -n lv1 datavg
Logical volume "datalv1" created.

//检查逻辑卷
[root@localhost ~]# lvscan
ACTIVE            '/dev/datavg/lv1' [100.00 MiB] inherit

5.格式化文件系统
[root@localhost ~]# mkfs.xfs /dev/datavg/lv1

//挂载并使用
[root@localhost ~]# mkdir /lv1
[root@localhost ~]# mount /dev/datavg/lv1 /lv1/
[root@localhost ~]# df -h
Filesystem                  Size  Used Avail Use% Mounted on
...
/dev/mapper/datavg-lv1   97M  5.2M   92M   6% /lv1
6.4 卷组管理
扩展卷组,扩大卷组空间

1.将新硬盘转换为pv
[root@localhost ~]# pvcreate /dev/sdc

2.使用vgextend扩展,将新的pv加入到vg
[root@localhost ~]# vgextend datavg /dev/sdc
Volume group "datavg" successfully extended
缩减卷组,缩减卷组空间

[root@localhost ~]# vgreduce datavg /dev/sdb
Removed "/dev/sdb" from volume group "datavg"
数据迁移卷组,同一卷组的PV之间才可以进行在线迁移

1.检查当前逻辑卷VG中PV使用情况
[root@localhost ~]# pvs
PV      VG   Fmt  Attr PSize PFree
/dev/sdb vg1 lvm2 a -- 2.00g 1.76g 
/dev/sdc vg1 lvm2 a -- 2.00g 2.00g

2.pvmove将一个pv的数据迁移至其他pv 
[root@localhost ~]# pvmove /dev/sdb /dev/sdc
  /dev/sdb: Moved: 41.33%
  /dev/sdb: Moved: 100.00%

3.检查是否将sdb数据迁移至sdc 
[root@localhost ~]# pvs
PV      VG   Fmt  Attr PSize PFree 
/dev/sdb vg1 lvm2 a -- 2.00g 2.00g 
/dev/sdc vg1 lvm2 a -- 2.00g 1.76g
6.5 逻辑卷管理
逻辑卷扩展,逻辑卷的扩展取决于卷组中的容量,逻辑卷扩展的容量不能超过卷组的容量

[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree 
vg1 2 2 0 wz --n-   1.88g 1.00g

1.扩展lv逻辑卷
//增加800M分配给逻辑卷 {注意: 800M +800M 不一样}
[root@localhost ~]# lvextend -L +800M /dev/datavg/lv1

//分配磁盘池中多少百分比给逻辑卷
[root@localhost ~]# lvextend -l +50%FREE /dev/datavg/lv1

2.扩展xfs文件系统
//xfs扩容
[root@localhost ~]# xfs_growfs /dev/datavg/lv1

//ext扩容
[root@localhost ~]# resize2fs /dev/datavg/lv1
ext4文件系统的逻辑卷容量裁剪

首先自己创建一个1G的逻辑卷作为裁剪的对象
[root@localhost ~]# lvcreate -L 1G -n uplooking finance

[root@localhost ~]# mkfs.ext4 /dev/finance/uplooking 

[root@localhost ~]# mkdir -p /finance/uplooking

[root@localhost ~]# mount /dev/finance/uplooking /finance/uplooking/

1、如果已经挂载,必须先卸载
[root@localhost ~]# umount /dev/finance/uplooking

2、裁剪容量,必须是先检测文件系统
[root@localhost ~]# e2fsck -f /dev/finance/uplooking

[root@localhost ~]# resize2fs /dev/finance/uplooking 512M

3、调整完毕后采取裁剪逻辑卷容量
[root@localhost ~]# lvreduce  -L 512M /dev/finance/uplooking 
WARNING: Reducing active logical volume to 512.00 MiB
THIS MAY DESTROY YOUR DATA (filesystem etc.) 
Do you really want to reduce uplooking? [y/n]: y

4、强烈建议裁剪后,再次检测文件系统
[root@localhost ~]# e2fsck -f /dev/finance/uplooking

5、挂载测试,如果能够挂载,一般说明裁剪成功,文件系统没有损坏
[root@localhost ~]# mount /dev/finance/uplooking /finance/uplooking/
...
/dev/mapper/finance-uplooking  472M  1.6M  435M    1% /finance/uplooking 文件系统容量被刷新了


OpenSSH服务
1、OpenSSH简介
OpenSSH 是 SSH (Secure SHell) 协议的免费开源实现。SSH协议可以用来进行远程控制或在计算机之间传送文件。而实现此功能的传统方式,如telnet、ftp都是极为不安全的,并且会使用明文传送密码。OpenSSH提供了服务端后台程序和客户端工具,用来加密远程控制和文件传输过程中的数据,并由此来代替原来的类似服务。

telnet      //远程登录协议,23/TCP
    认证明文
    数据传输明文

ssh         //Secure SHell,安全外壳协议,22/TCP
    用户认证过程加密
    数据传输过程加密
2、SSH协议版本
SSH协议有两个版本,分别为v1和v2,其特点如下:

v1:基于CRC-32做校验,无法防范中间人攻击(Man-in-the-MiddleAttack)
v2:双方主机协议选择安全的校验方式。基于DH算法做密钥交换,基于RSA或DSA算法实现身份认证

3、SSH 认证方式
OpenSSH有两种认证方式,分别是:

基于密码认证
基于密钥认证
4、OpenSSH 的工作模式
OpenSSH是基于C/S架构工作的。

OpenSSH包含的两个组件:
ssh(命令行界面的客户端工具)、sshd(服务器端程序)

客户端      //ssh,配置文件在/etc/ssh/ssh_config

服务器端    //sshd,配置文件在/etc/ssh/sshd_config

    ssh             //远程登陆命令
    scp             //跨主机安全复制工具
    ssh-keygen      //密钥生成器
    ssh-copy-id     //将公钥传输至远程服务器
5、OpenSSH客户端工具使用
//ssh命令常用选项:
    -p             //指定端口
    -Y             //调用图形化,和"-X"一样不过更安全
    -i             //指定密钥位置

//使用user1用户登录到172.16.12.138主机
[root@localhost ~]# ssh user1@172.16.12.138
user1@172.16.12.138's password:
[user1@localhost ~]$ exit
logout
Connection to 172.16.12.138 closed.

//使用user1用户登录到172.16.12.138主机,执行命令
[root@localhost ~]# ssh user1@172.16.12.138 '/usr/sbin/ip a show ens33'
user1@172.16.12.138's password:
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:f4:5b:87 brd ff:ff:ff:ff:ff:ff
    inet 172.16.12.138/24 brd 172.16.12.255 scope global dynamic ens33
       valid_lft 1666sec preferred_lft 1666sec
    inet6 fe80::20c:29ff:fef4:5b87/64 scope link
       valid_lft forever preferred_lft forever

//w命令可以显示当前登录到计算机的用户列表。这对于显示哪些用户使用ssh从哪些远程位置进行了登录以及执行了何种操作等内容特别有用
[root@localhost ~]# w
 07:49:18 up 18 min,  2 users,  load average: 0.02, 0.02, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    172.16.12.1      07:31    6.00s  0.02s  0.00s w
user1    pts/1    172.16.12.136    07:49    5.00s  0.00s  0.00s -bash

//scp命令常用选项
    -r      //递归复制
    -p      //保持权限
    -a      //相当于-rp
    -P      //大写,指定端口
    -q      //静默模式
    -i      //指定密钥位置

//使用scp命令传送文件到远程主机
[root@localhost ~]# scp test.sh root@172.16.12.138:/tmp
root@172.16.12.138's password:
test.sh                                                       100%   45    29.8KB/s   00:00

//使用scp命令将远程主机上的文件传输到本地
[root@localhost ~]# scp root@172.16.12.138:/tmp/test.sh /root/
root@172.16.12.138's password:
test.sh                                                       100%   45    39.1KB/s   00:00
[root@localhost ~]# ls
a  anaconda-ks.cfg  b  nginx-1.12.2  nginx-1.12.2.tar.gz  nohup.out  outfile  test.sh
6、采用SSH密钥登录
在使用SSH登陆时默认采用密码验证,容易被暴力破解很不安全。那么我们可以采用密钥验证,需要生成一对密钥(私钥,公钥),私钥在客户端使用,服务器端使用公钥;客户端在登陆时必须要有私钥文件,如果没有就算知道密码也不能登陆。

ssh-keygen         //密钥生成命令
选项:
    -t             //指定加密算法rsa或dsa
    -f             //指定生成的密钥文件存放目录
    -N 'password'  //指定密码为password

ssh-copy-id        //密钥传输命令
选项:
    -i             //指定密钥文件的位置

//使用ssh-keygen命令创建密钥对
[root@localhost ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:8VyY3c3UEQvk1Pn95tYIF7sx9enlwG78hDjlX0entN0 root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|            .+.o*|
|           +o..*o|
|        . o o...=|
|         + .  . +|
|        S o  .o+*|
|            .=BBB|
|            o=*XE|
|             .*+B|
|             . oo|
+----[SHA256]-----+

//使用ssh-copy-id命令将公钥复制到远程系统上的正确位置,默认是存放于远程系统的~/.ssh/authorized_keys文件当中。
[root@localhost ~]# ls .ssh/
id_rsa  id_rsa.pub
[root@localhost ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@172.16.12.138
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
The authenticity of host '172.16.12.138 (172.16.12.138)' can't be established.
ECDSA key fingerprint is SHA256:JK5WwrX8hynl3dyWO43e6+lcs6zn9oZn74z1H5X8F90.
ECDSA key fingerprint is MD5:01:4f:4f:4b:0e:45:a9:10:bb:d0:c0:dd:19:9a:9f:96.
Are you sure you want to continue connecting (yes/no)? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@172.16.12.138's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@172.16.12.138'"
and check to make sure that only the key(s) you wanted were added.

注意:使用网络传输的方式不能百分百保证安全性,我们也可以使用U盘的方式将公钥手动导入到~/.ssh/authorized_keys文件当中。

//使用ssh命令使用密钥登录远程主机
[root@localhost ~]# ssh root@172.16.12.138
Last login: Tue Jul 10 18:37:51 2018 from 172.16.12.1
[root@localhost ~]# ip a s ens33
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:f4:5b:87 brd ff:ff:ff:ff:ff:ff
    inet 172.16.12.138/24 brd 172.16.12.255 scope global dynamic ens33
       valid_lft 1377sec preferred_lft 1377sec
    inet6 fe80::20c:29ff:fef4:5b87/64 scope link
       valid_lft forever preferred_lft forever
7、OpenSSH服务端配置
OpenSSH服务配置通常无需修改,但是我们可以对该服务进行简单的优化,可以修改/etc/ssh/sshd_config配置文件进行优化。

//配置文件/etc/ssh/sshd_config中参数配置
PasswordAuthentication {yes|no}     //是否启用密码身份验证,默认启用
PermitRootLogin {yes|no|without-password}    //设置root用户远程登录方式
GSSAPIAuthentication no             //建议关闭该项配置
UseDNS no                           //建议关闭该项配置

Port 22                             //服务监听的端口号
AddressFamily any                   //IP协议簇,默认IPv4,IPv6都启用
ListenAddress 192.168.52.156        //设置本地监听IP地址

AllowUsers hzz                      //允许hzz用户登陆
DenyUsers zzh                       //拒绝zzh用户登陆

//在/etc/hosts.allow添加允许某IP通过ssh登陆
[root@hzz ~]# vim /etc/hosts.allow
sshd:192.168.0.1:allow

//在/etc/hosts.deny添加拒绝某IP通过ssh登陆
[root@hzz ~]# vim /etc/hosts.deny
sshd:192.168.0.1:deny
8、SSH 安全注意事项
密码应该经常换且足够复杂:

//生成20位随机密码
[root@localhost ~]# openssl rand 20 -base64
Di9ry+dyV40xVvBHirsc3XpBOzg=
使用非默认端口
仅监听特定的IP地址
通过IP地址限制客户端登录
禁止管理员直接登录
仅允许有限制用户登录
AllowUsers
AllowGroups
使用基于密钥的认证
禁止使用空密码
禁止使用SSHv1版本
设定空闲会话超时时长
利用防火墙设置ssh访问策略
限制ssh的访问频度和并发在线数
做好日志的备份,经常分析(集中于某台服务器)

systemctl stop firewalld.service 关闭防火墙    systemctl disable firewalld.service  还有还有开机自启
vim /etc/selinux/config 编辑Linux文件子系统, 重启才能生效
setenforce 0 不想重启可以开启宽容模式
export LANG='en_US.UTF-8' 切换man手册中英文

NFS服务
1、nfs服务简介
NFS(Network File System)即网络文件系统,它的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。

1.1 nfs特点
在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
nfs不仅适用于Linux与Unix之间实现文件共享,也能实现Linux与Windows间的文件共享功能。
nfs是运行在应用层的协议,其监听于2049/tcp和2049/udp套接字上(固定端口是2049,nfs还会开启很多端口,而且这些端口不固定)。
客户端认证是基于IP地址(没有用户名和密码的说法),这也是它的缺点之一。
NFS网络文件系统一般用来存储共享视频、图片、附件,用户家目录等资源文件。
1.2 使用nfs的好处
节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地机器就可以减少自身存储空间的使用。
用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。
一些存储设备,如:软驱、CDROM和Zip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。
1.3 nfs架构
nfs服务也是基于C/S架构工作的。

客户机通过TCP/IP网络远程访问存放在NFS服务器上的数据。
在NFS服务器正式启用前,需要根据实际环境和需求,配置一些NFS参数。

NFS_C/S
NFS_C/S

1.4 nfs的应用场景
nfs有很多实际应用场景,以下是一些常用的场景:

多个机器共享一台CDROM或其他设备。这对于在多台机器中安装软件来说更加便宜与方便。
在大型网络中,配置一台中心NFS服务器用来放置所有用户的home目录可能会带来便利。这些目录能被输出到网络以便用户不管在哪台工作站上登录,总能得到相同的home目录。
不同客户端可在NFS上观看影视文件,节省本地空间。
在客户端完成的工作数据,可以备份保存到NFS服务器上用户自己的路径下。
2、nfs工作机制
nfs服务并不是自己单独工作,他需要基于rpc服务来实现网络文件系统共享。

2.1 rpc简介
RPC(Remote Procedure Call Protocol),远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。

RPC服务采用C/S架构。客户端发送调用程序的请求;服务端负责接收客户端的请求,调用相应程序。

2.2 rpc服务作用
nfs服务是通过网络来进行服务器端和客户端之间的数据传输,这两者之间要传输数据就要有相应的网络端口,nfs固定端口号是2049;但由于文件系统非常复杂,因此NFS还有其他的程序去启动额外的端口,这些额外用来传输数据的端口是随机选择的,客户端不知道服务端随机选择的端口是多少;而客户端要连接服务端就必须要知道服务端相关端口才能建立连接,进行数据传输;RPC就是用来统一管理nfs端口的服务,并且将端口信息通知给客户端,这时客户端就可以和nfs服务建立连接。

NFS_Workflow
NFS_Workflow

1)首先服务器端启动RPC服务,并开启111端口。

2)服务器端启动NFS服务,并向RPC注册端口信息。

3)客户端启动RPC,向服务端的RPC服务请求服务端的NFS端口。

4)服务端的RPC服务反馈NFS端口信息给客户端。

5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

3、nfs服务配置文件
nfs最主要的配置文件为:/etc/exports ;该文件是空白的,有的系统可能不存在这个文件,需要手动建立。NFS的配置一般只在这个文件中配置即可。

/etc/exports 配置文件定义NFS系统的输出目录(即共享目录)、访问权限和允许访问的主机等参数。该文件默认为空,没有配置输出任何共享目录,这是基于安全性的考虑,如此即使系统启动了NFS服务也不会输出任何共享资源。

exports文件中每一行提供了一个共享目录的设置,其命令格式为:

  <输出目录> [客户端1(参数1,参数2,...)] [客户端2(参数1,参数2,...)]
常用的选项:

选项    说明
ro    设置输出目录只读
rw    设置输出目录可读写
all_squash    将远程访问的所有普通用户及所属组都映射为匿名用户和用户组(nfsnobody)
no_all_squash    不将远程访问的所有普通用户及所属用户组都映射为匿名用户或用户组(默认设置)
root_squash    将root用户及所属用户组都映射为匿名用户或用户组(默认设置)
no_root_squash    不将root用户及所属用户组都映射为匿名用户或用户组
anonuid=xxx    将远程访问的所有用户都映射为匿名用户,并指定该匿名用户为本地用户帐户(UID=xxx)
anongid=xxx    将远程访问的所有用户组都映射为匿名用户组,并指定该匿名用户组为本地用户组(GID=xxx)
secure    限制客户端只能从小于1024的TCP/IP端口连接NFS服务器(默认设置)
insecure    允许客户端从大于1024的TCP/IP端口连接NFS服务器
sync    将数据同步写入内存缓冲区或磁盘中,效率较低,但可保证数据一致性
async    将数据先保存在内存缓冲区中,必要时才写入磁盘
wdelay    检查是否有相关的写操作,如果有则这些写操作一起执行,可提高效率(默认设置)
no_wdelay    若有写操作则立即执行,应与sync配置使用
subtree_check    若输出目录是一个子目录,则NFS服务器将检查其父目录的权限(默认设置)
no_subtree_check    即使输出目录是一个子目录,NFS服务亦不检查其父目录的权限,可提高效率
nohide    若将一个目录挂载到另一个目录之上,则原来的目录通常就被隐藏起来或看起来像空的一样。要禁用这种行为,需启用hide选项
4、nfs服务配置
4.1 服务安装
//安装rpc和nfs服务
[root@server ~]# yum -y install rpcbind nfs-utils

//设置服务开机自启
[root@server ~]# systemctl enable rpcbind nfs-server

//启动服务,同样启动两个服务,注意启动顺序
[root@server ~]# systemctl start rpcbind nfs-server
4.2 配置nfs共享目录
//创建共享目录,/hzz目录可读可写,/zzh目录只读
[root@server ~]# mkdir /hzz
[root@server ~]# mkdir /zzh

//配置共享目录的访问权限,针对客户端访问的用户设置
[root@server ~]# chmod 777 /hzz/
[root@server ~]# chmod 755 /zzh/

//编辑配置文件,配置共享目录
[root@server ~]# vim /etc/exports
/hzz 192.168.52.157/24(rw)
/zzh 192.168.52.157/24(ro)

//服务端重启服务
[root@server ~]# systemctl restart nfs-server

注意:记得关闭firewalld防火墙和selinux。
4.3 客户端挂载
showmount 命令可以在客户端查看NFS服务器的共享目录列表。

//语法:showmount [选项] [NFS服务器地址]
//常用的选项有:
    -e  //显示指定的NFS服务器上所有输出的共享目录
查看nfs服务器共享了哪些目录。
[root@client ~]# showmount -e 192.168.52.156
Export list for 192.168.52.156:
/zzh 192.168.52.157/24
/hzz 192.168.52.157/24
客户端挂载NFS共享目录:

//客户端需要安装nfs才能挂载
[root@client ~]# yum -y install rpcbind nfs-utils

//在客户端挂载共享目录,先创建挂载点
[root@client ~]# mkdir /mnt/hzz
[root@client ~]# mkdir /mnt/zzh

//使用mount命令临时挂载
[root@client ~]# mount -t nfs 192.168.52.156:/hzz /mnt/hzz/
[root@client ~]# mount -t nfs 192.168.52.156:/zzh /mnt/zzh/

//永久挂载
[root@client ~]# vim /etc/fstab
192.168.52.156:/hzz /mnt/hzz nfs defaults,_netdev 0 0
192.168.52.156:/zzh /mnt/zzh nfs defaults,_netdev 0 0
[root@client ~]# mount -a

//查看挂载情况
[root@client ~]# df -h
文件系统               容量  已用  可用 已用% 挂载点
/dev/mapper/rhel-root   17G  1.1G   16G    7% /
devtmpfs               901M     0  901M    0% /dev
tmpfs                  912M     0  912M    0% /dev/shm
tmpfs                  912M  8.7M  903M    1% /run
tmpfs                  912M     0  912M    0% /sys/fs/cgroup
/dev/sda1             1014M  143M  872M   15% /boot
tmpfs                  183M     0  183M    0% /run/user/0
192.168.52.156:/hzz     17G  1.1G   16G    7% /mnt/hzz
192.168.52.156:/zzh     17G  1.1G   16G    7% /mnt/zzh
4.4 exportfs命令
exportfs 命令主要用于管理当前NFS服务器的文件系统。

exportfs 是在服务端上使用的命令,主要用来操作挂载的目录,比如我们修改了NFS配置文件,需要重启NFS服务,如果客户端正在读写,那么重启NFS服务对客户端是有影响的,因此 exportfs 命令的其中一个功能就是不重启就能重新加载NFS配置文件。

exportfs [选项] [参数]
    -r      //重新读取/etc/exports文件中的设置,并使其立即生效,无需重启服务
    -u      //取消一个或者多个NFS共享文件系统的共享
    -a      //exports配置文件中所有的共享目录
    -v      //显示执行过程

exportfs -r 或 systemctl reload nfs-server 可以实现不重启服务,重新加载服务配置
5、nfs应用实例
5.1 同步用户家目录
//在服务器端创建用户
[root@server ~]# useradd hzz
[root@server ~]# useradd zzh

//编辑配置文件,共享用户家目录
[root@server ~]# vim /etc/exports
/home/hzz 192.168.52.157/24(rw)
/home/zzh 192.168.52.157/24(rw)

//查看目录权限,用户本身对家目录就有权限所以一般不用修改
[root@server ~]# ll /home/
总用量 0
drwx------. 2 hzz hzz 115 4月  29 12:07 hzz
drwx------. 2 zzh zzh  62 4月  29 12:03 zzh

//重新加载服务
[root@server ~]# exportfs -r

//在客户端先创建用户,保证客户端用户和服务端用户uid,gid一致
[root@client ~]# useradd hzz
[root@client ~]# useradd zzh

//在客户端将服务端用户家目录,挂载至本地用户家目录,然后查看
[root@client ~]# vim /etc/fstab
192.168.52.156:/home/hzz /home/hzz nfs defaults,_netdev 0 0
192.168.52.156:/home/zzh /home/zzh nfs defaults,_netdev 0 0
[root@client ~]# mount -a
[root@client ~]# df -h
文件系统               容量  已用  可用 已用% 挂载点
/dev/mapper/rhel-root   17G  1.1G   16G    7% /
devtmpfs               901M     0  901M    0% /dev
tmpfs                  912M     0  912M    0% /dev/shm
tmpfs                  912M  8.7M  904M    1% /run
tmpfs                  912M     0  912M    0% /sys/fs/cgroup
/dev/sda1             1014M  143M  872M   15% /boot
tmpfs                  183M     0  183M    0% /run/user/0
192.168.52.156:/home/hzz   17G  1.1G   16G    7% /home/hzz
192.168.52.156:/home/zzh   17G  1.1G   16G    7% /home/zzh

//在客户端切换hzz用户,然后在家目录创建文件
[hzz@client ~]$ touch hzz
[hzz@client ~]$ ll
总用量 0
-rw-rw----. 1 hzz hzz 0 4月  29 04:31 hzz
 
//在服务端切换hzz用户查看有hzz文件,用户家目录同步成功
[root@server ~]# su - hzz
上一次登录:三 4月 29 04:07:46 CST 2020pts/0 上
[hzz@hzz ~]$ ll
总用量 0
 -rw-rw----+ 1 hzz hzz 0 4月  29 04:31 hzz

vim /etc/hattpd//conf.d/httpd-vhosts.conf 虚拟主机配置
/etc/httpd/conf/httpd.conf 主配置文件

wget 包路径
移动到/usr/local/src/
tar -xf  解压
用绿色可执行文件
./configure --prefix=/usr/local/nginx --with-http_ssl_module 
yum group all
yum groupinstall 'D'
./configure --prefix=/usr/local/nginx --with-http_ssl_module  --with.-pcre
./nginx 启动
临时命令启动 export PATH=$PATH:/usr/local/nginx/sbin/
永久启动 vim /etc/profile.d/ 写入上面这行命令
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值