Linux快速学习-管理篇

Linux 快速学习总结 ( ͡° ͜ʖ ͡° ) 本文档采用 Centos Linux 8.x 学习测试

Linux快速学习-基础篇

       __        __                                      _______            
      /  |      /  |                                    /       \           
      $$ |      $$/  _______   __    __  __    __       $$$$$$$  |  ______  
      $$ |      /  |/       \ /  |  /  |/  \  /  |      $$ |  $$ | /      \ 
      $$ |      $$ |$$$$$$$  |$$ |  $$ |$$  \/$$/       $$ |  $$ |/$$$$$$  |
      $$ |      $$ |$$ |  $$ |$$ |  $$ | $$  $$<        $$ |  $$ |$$ |  $$ |
      $$ |_____ $$ |$$ |  $$ |$$ \__$$ | /$$$$  \       $$ |__$$ |$$ \__$$ |
      $$       |$$ |$$ |  $$ |$$    $$/ /$$/ $$  |      $$    $$/ $$    $$/ 
      $$$$$$$$/ $$/ $$/   $$/  $$$$$$/  $$/   $$/       $$$$$$$/   $$$$$$/  

一、用户管理

Linux 有 用户用户组的概念,用户名 + 密码才能登陆到Linux系统中

用户和用户组是多对多关系,一个用户客户归属到多个用户组,一个用户组包含多个用户

Linux不认识用户名只认识对应的ID

Linux系统中会将所有用户名和ID的对应关系存储在 /etc/passwd

用户组名称也有一个ID与之对应, 存储在/etc/group

passwd文件

[root@ecs-b208 ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
....

/etc/passwd中每一行表示一个用户记录,记录中用“:” 分割,分表定义了用户的各个属性

第n分割字段含义说明
字段1用户名
字段2密码,用 “x” 表示,真正密码保存在 /etc/shadow 只有root用户才可访问此文件
字段3UID 用户名对应的ID 1-499 系统自用,手动添加的用户必须不小于500
字段4GID 用户对应的组ID,用户有初始组合附加组概念,初始组只能一个,附加组可以多个,创建用户时默认将同时创建和用户名相同的用户组作为该用户的初始组
字段5描述性信息
字段6主目录
字段7默认的shell,如果为 /sbin/nologin 表示这个用户就不能登录了

shadow文件

这个文件存储了用户密码信息,称为“影子文件”,只有root用户可以访问该文件。

[root@ecs-b208 ~]# cat /etc/shadow
root:$6$5dXucC$DY9fCJvQ9/dXMRSG1Wpde1QKiBvTUzqDXHmDzZ0:18199:0:99999:7:::
bin:*:17834:0:99999:7:::
daemon:*:17834:0:99999:7:::
.....

/etc/shadow中每一行表示一个用户密码,记录中用“:” 分割,分表定义了用户密码的各个属性

第n分割字段含义说明
字段1用户名
字段2加密密码,采用的是SHA512散列加密算法,密码前面加"!" “*” “x” 可使密码暂时失效
字段3最后一次修改时间,这里是整数,表示从1970年1月1日算,一天加1,累加今日的值
字段4最小可被修改时间间隔(天),0表示随时可以修改
字段5密码有效期(天)
字段6密码需变更前的告警天数
字段7密码过期后的宽限天数
字段8密码失效的时间,该值同字段3,从1970年1月1日算,一天加1
字段9保留字段

group文件

[root@ecs-b208 ~]# cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
...
第n分割字段含义说明
字段1组名称
字段2密码 ,主要作用是用来指定组管理员
字段3GID 组ID
字段4附加用户列表

gshadow文件

第n分割字段含义说明
字段1组名称 同group文件中的组名
字段2真正的加密密码 ,一般不用,如果显示 “!” 号表示没有组管理员也没有密码
字段3组管理员
字段4附加用户列表 同group文件

添加用户

使用 useradd 命令直接增加用户,有很多参数,但一般直接添加不携带参数

[root@ecs-b208 ~]# useradd student

执行此命令Linux会自动在上述所说的几个文件中添加相应的信息:

[root@ecs-b208 ~]# grep "student" /etc/passwd
student:x:1000:1000::/home/student:/bin/bash

[root@ecs-b208 ~]# grep "student" /etc/shadow
student:!!:18921:0:99999:7:::

[root@ecs-b208 ~]# grep "student" /etc/group
student:x:1000:

[root@ecs-b208 ~]# grep "student" /etc/gshadow
student:!::

再来一个比较常见的指定一些参数的例子:

[root@ecs-b208 student]# useradd -u 550 -g student99 -G root -d /home/student99 -c "用户说明信息" -s /bin/bash  student1

命令说明:

  • 创建了一个用户student1
  • -u 550 指定UID为550
  • -g student99 指定初始组为student99
  • -G root 指定附加组为root
  • -d /home/student99 指定用户主目录
  • -c 说明信息
  • -s 指定用哪一种shell

增加了一个student用户Linux系统所做的工作如下:

  1. linux先后自动在以上4个文件中添加相应的内容。

  2. /etc/shadow中的 “!!” 表示还没有设置合法的密码

  3. 默认创建用户的主目录和邮箱 /var/spool/mail/student

  4. /etc/skel目录中的配置文件复制到用户的主目录中,一般三个文件

[root@ecs-b208 skel]# ls -al
total 20
drwxr-xr-x.  2 root root 4096 Apr 11  2018 .
drwxr-xr-x. 80 root root 4096 Oct 21 14:38 ..
-rw-r--r--.  1 root root   18 Oct 31  2018 .bash_logout
-rw-r--r--.  1 root root  193 Oct 31  2018 .bash_profile
-rw-r--r--.  1 root root  231 Oct 31  2018 .bashrc

  1. useradd 默认值文件主要有两个 /etc/default/useradd 和 /etc/login.defs

查看 /etc/default/useradd 的内容也可以使用命令 useradd -D查看

[root@ecs-b208 student]# useradd -D
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes

/etc/login.defs文件主要是对用户的一些基本属性设置默认值,ID范围,过期时间,密码最大长度等。

总结创建用户的流程:

  1. 读取 /etc/default/useradd 和 /etc/login.defs,在 /etc/passwd /etc/group /etc/shadow /etc/gshadow 中添加用户相关信息
  2. 根据/etc/default/useradd 创建用户主目录
  3. 复制 /etc/skel目录中的配置文件复制到用户的主目录中
  4. 创建用户完成。

设置密码

创建了用户之后需要设置密码才可登录。

[root@ecs-b208 student]# passwd student
Changing password for user student.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

passwd -l 锁定用户 -u 解除锁定

[root@ecs-b208 student]# passwd -l student
Locking password for user student.
passwd: Success
[root@ecs-b208 student]# passwd -u student
Unlocking password for user student.
passwd: Success

其他用户管理命令

修改用户信息 usermod

删除用户信息 userdel 加上-r 表示同时删除用户主目录

查看用户UID 和 GID id 用户名

用户间切换命令

[root@ecs-b208 ~]# su [选项] 用户名

一般选项为 “-” 表示连同当前的环境变量也一并切换

二、文件管理

Linux 一切都是文件

  1. 文件名除“/”之外,所有字符都可以使用
  2. 长度不超过255个字符
  3. 名称“.”开头的表示这是一个隐藏的文件或目录
  4. 名称区分大小写
  5. /dev/目录下为各个设备 /dev/sd 硬盘 /dev/mouse 鼠标 /dev/cdrom 光驱

Linux 文件类型分为普通、目录、设备、符号

常用文件操作命令

cat

cat一次性全部展示文件内容,cat可以合并文件内容到新的文件中,全称 concatenate(连接、连续)

-n 或 --number 输出行数编号

-b 或 --number-nonblank 输出非空行数编号

-s 或 --squeeze-blank 将连续两行以上的空白行代换为一行的空白行

[root@ecs-b208 ~]# cat -n mytest.txt
     1  这是第一行
     2  这是第2行
     3
     4  这是第3行,上面的是空白行
     5
     6
     7
     8  连续几个空白行测试
     9  over 完毕
[root@ecs-b208 ~]# cat -sbn mytest.txt
     1  这是第一行
     2  这是第2行

     3  这是第3行,上面的是空白行

     4  连续几个空白行测试
     5  over 完毕
cat -n textfile1 > textfile2 把 textfile1 的档案内容加上行号后输入 textfile2 这个档案里
cat -b textfile1 textfile2 >> textfile3 把 textfile1 和 textfile2 的档案内容加上行号(空白行不加)之后将内容附加到 textfile3 里

more 或者 less

作业滚屏显示

-n 一次显示的行数

+n 从第n行开始显示文件内容

-c 不滚屏,先清屏后再显示内容

head 和 tail

head 从头开始看, tail从文件尾部开始看

head / tail -n 3  mytest.txt  # 查看前面/尾部 3行内容

touch

创建文件,也可以修改文件时间

文本处理三剑客

grep

过滤来自一个文件或标准输入匹配模式内容

匹配至少三个字符,例如 abc:

# echo -e "a\nabc\nc"   |  grep -E '[a-z]{3}'
sed

流编辑器,过滤和替换文本。

替换 aaa 字符串为 bbb

# tail /etc/services |sed 's/aaa/bbb/'
awk

awk 是一个处理文本的编程语言工具,能用简短的程序处理标准输入或文件、数据排序、计算以及
生成报表等等

打印第二字段,默认以空格分隔:
# tail -n3 /etc/services |awk '{print $2}'
48049/tcp
48128/tcp
48128/udp
指定冒号为分隔符打印第一字段:
# awk -F ':' '{print $1}' /etc/passwd
root
bin
daemon
...

rm

永久性删除文件或目录

rm -f 强制删除

rm -r 级联删除,如果删除目录必须带此参数

rm -ri 询问方式删除

[root@ecs-b208 /]# cd /b/bb/
[root@ecs-b208 bb]# rm -ri /a/aa
rm: remove directory ‘/a/aa’? y
[root@ecs-b208 bb]#

mkdir

创建目录

-p 级联创建目录

[root@ecs-b208 /]# mkdir -p /a/aa  /b/bb
[root@ecs-b208 /]# cd /b/bb/
[root@ecs-b208 bb]#

ls

最常用的命令,列出目录下的文件信息,默认按照文件名称排序

[root@ecs-b208 /]# ls -al
total 172
dr-xr-xr-x.  30 root root  4096 Oct 22 16:14 .
dr-xr-xr-x.  30 root root  4096 Oct 22 16:14 ..
drwxr-xr-x    2 root root  4096 Oct 22 16:16 a
drwxr-xr-x    3 root root  4096 Sep 29  2020 agv-docker-image
drwxr-xr-x    3 root root  4096 Feb 20  2021 api
-rw-r--r--    1 root root     0 Feb 27  2019 .autorelabel
drwxr-xr-x    3 root root  4096 Oct 22 16:16 b
lrwxrwxrwx.   1 root root     7 Feb 27  2019 bin -> usr/bin
dr-xr-xr-x.   5 root root  4096 Feb  3  2020 boot

-a 全部列出,包括隐藏文件

-l 使用列表长格式展示

-S 按照容量大小排序

-h 文件大小 按照 1 KB MB GB展示

-t 按照时间排序

-r 将排序结果翻转

[root@ecs-b208 ~]# ls -lhS
total 2.1G
-rw------- 1 root root 629M Nov 10  2020 java-8.tar
-rw-r--r-- 1 root root 526M Nov  9  2020 mysql.tar
-rw------- 1 root root 516M Nov 10  2020 tomcat-latest.tar
-rw------- 1 root root 153M Sep 30 14:30 middol-rabbitmq.tar
-rw------- 1 root root 139M Nov 10  2020 nginx-1.18.1.tar
-rw-r--r-- 1 root root  97M Oct  4 14:26 redis5.tar
-rw------- 1 root root  40M Nov 10  2020 sjqzhang-go-fastdfs-latest.tar
-rw-r--r-- 1 root root  31M Nov  3  2020 IQMS_HY_M.war
drwxr-xr-x 2 root root 4.0K Oct 19 17:45 abc
drwxr-xr-x 2 root root 4.0K Oct 19 17:45 tdir
-rw-r--r-- 1 root root  718 Oct 20 17:21 qiuxing.sh
....

ln

ln可生成链接文件或目录,链接分为 软链接硬链接

了解一下ext文件系统的架构, 主要分两部分 索引信息(inode) 和 数据块信息(block)

inode-1inode-2inode-n
block1block2block3
block4block5block6
block7blockn

inode 默认大小128字节,记录文件权限、所有者、大小、修改时间等 以及 保存的block编号

block 每一个数据块的大小可以是 1KB 2KB 4KB 默认4KB,block用于实际存储数据包括文件名

每一个文件都独占一个inode,文件内容由inode的记录来指向

查找一个文件,例如 /root/test时,经过如下步骤:

  1. 首先到根目录的inode信息(根目录/的inode是系统预先知道的)

  2. 判断当前用户是否有权限访问 根目录的inode

  3. 如果有权限,则在根目录的inode中找到对应的根目录block

    在根目录block中找到 /root的文件名和对应的inode号

  4. 通过/root的inode号,查找/root的inode信息,从而判断用户是否有权限访问/root目录的block

  5. 如果有权限,从/root目录的block读取 test文件的文件名和对应的inode号

  6. 通过test文件对应的inode号,判断用户是否有权限访问 test文件的block

  7. 如果有权限,则可以读取test文件中block中数据,这样完成了对 /root/test文件的读取访问操作

通过上面的信息,再来看 上面是 软链接硬链接

[root@ecs-b208 ~]# ln -s 源文件 要生成的链接文件名

-s : 生成软链接 不带则表示硬链接

[root@ecs-b208 ~]# cat /root/test
hello, 这是一个链家测试文件
[root@ecs-b208 ~]# ln /root/test /root/file1
[root@ecs-b208 ~]# ln -s /root/test /root/file2

上面源文件是 /root/test

软连接文件是 /root/file2

硬连接文件是 /root/file2

通过 ls -i 查看每一个文件的 inode号,就是文件唯一编号(不同的文件系统-即:分区,inode号是重新计算的

[root@ecs-b208 ~]# ls -il /root/
total 2178632
2371656 -rw-r--r-- 2 root root        38 Oct 22 17:24 file1
2371653 lrwxrwxrwx 1 root root        10 Oct 22 17:37 file2 -> /root/test
2371656 -rw-r--r-- 2 root root        38 Oct 22 17:24 test
....

硬链接和源文件的inode号一样:都是2371656,软连接则重新生成一个inode号。

硬链接和软链接最大区别:硬链接不会建立自己的inode和block,全部指向源文件, 软链接则会建立自己的 inode和block,但block写的不是真正数据,而是源文件的文件名和inode号。

硬链接和软链接的区别总结:

区别点硬链接软链接
修改源文件,链接文件数据是否同时修改
删除源文件,链接文件是否可以继续访问
是否建立新的inode,修改inode总数
是否可以跨分区(文件系统)建立链接文件
是否可以链接目录

文件权限

Linux 常见的文件权限有3个权限位 r( 是否可读) w(是否可写) x( 是否可执行)

ls -l 可以查询每一个文件的权限, 权限分三部分:

[root@ecs-b208 ~]# ls -l
total 2178632
drwxr-xr-x 2 root root      4096 Oct 19 17:45 abc
-rw-r--r-- 1 root root       273 Oct 20 16:06 case-test.sh
...

drwxr-xr-x 除第一位外,后面每3个一分组

所有者权限所属组权限其他人权限
drwxr-xr-x
第一位d代表目录,如果是- 代表普通文件,如果是l代表链接文件,b块文件,c字符文件,root用户可对其进行读写执行与root在一个组的用户可对该文件进行 读或运行其他用户可对该文件进行 读或运行

### chmod

采用chmod修改某文件权限,

[root@ecs-b208 ~]# chmod 权限值  文件名称 

权限值是如何算出的?

权限标识位中, r对应整数4 w对应整数2 x对应整数1 这样可以用来,修改某文件权限

rwx = 4+2+1 =7, r-x=4+1=5 等等,例如下面修改mytest.sh 文件,让所有者或和所有者在一个组的人可读写可执行,其他的用户只能读和执行,不可修改此文件,就可以用如下命令:

[root@ecs-b208 ~]# chmod 775  mytest.sh 

还可以这样,只对单独某个部分增加或清除某个权限值

[root@ecs-b208 ~]# chmod u=rwx, go=rx  mytest.sh 

u:所有者权限

g:所属组权限

o:其他人权限

a:全部,以上三个

chown

修改文件归属的用户或用户组,root用户可以修改任何文件的权限,普通用户只能修改自己的文件

[root@ecs-b208 ~]# chown 所有者  mytest.sh 
[root@ecs-b208 ~]# chown 所有者:所属组  mytest.sh 

三、进程管理

常用的进程管理命令 ps top 等

ps

[root@ecs-b208 ~]# ps -aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root         1  0.0  0.0  51780  2848 ?        Ss    2020  85:54 /usr/lib/systemd/systemd --system --deserialize 15
root         2  0.0  0.0      0     0 ?        S     2020   0:00 [kthreadd]
root         3  0.0  0.0      0     0 ?        S     2020   9:07 [ksoftirqd/0]
root         5  0.0  0.0      0     0 ?        S<    2020   0:00 [kworker/0:0H]
root         7  0.0  0.0      0     0 ?        S     2020   1:53 [migration/0]
root         8  0.0  0.0      0     0 ?        S     2020   0:00 [rcu_bh]
root         9  0.0  0.0      0     0 ?        S     2020 204:30 [rcu_sched]
root        10  0.0  0.0      0     0 ?        S<    2020   0:00 [lru-add-drain]
root        11  0.0  0.0      0     0 ?        S     2020   1:58 [watchdog/0]
root        12  0.0  0.0      0     0 ?        S     2020   1:39 [watchdog/1]
root        13  0.0  0.0      0     0 ?        S     2020   1:44 [migration/1]
root        14  0.0  0.0      0     0 ?        S     2020   8:23 [ksoftirqd/1]
root        16  0.0  0.0      0     0 ?        S<    2020   0:00 [kworker/1:0H]
root        18  0.0  0.0      0     0 ?        S     2020   0:00 [kdevtmpfs]
root        19  0.0  0.0      0     0 ?        S<    2020   0:00 [netns]
root        20  0.0  0.0      0     0 ?        S     2020   0:42 [khungtaskd]
......

-a线上一个终端所有进程

-u显示进程归属用户和内存情况

-x显示没有终端的进程

-e可显示进程的父进程

ps 命令输出的各字段含义

字段含义
USER由哪个用户产生
PID进程ID
%CPUCPU使用率
%MEM物理内存使用率
VSZ占用虚拟内存大小(KB)
RSS占用物理内存大小(KB)
TTY在哪一个终端运行,tty1-tty7代表本地控制台(Alt + F1~F7 组合键切换),tty7是图形终端,pts/0-255一般代表远程连接终端
STAT进程状态, D-进程不可被唤醒通常用于IO
R-进程正在运行
S-进程睡眠,且可被唤醒
T-进程暂停,可能是在调试
W-处于内存交换状态
Z-僵尸进程
<-具备高优先级
s-包含子进程
l-进程有多线程
+-进程位于后台
N-具备低优先级
L-进程被锁入内存
START进程的启动时间
TIME进程占用CPU时间
COMMAND产生进程的命令

ps -elps -l 查看父进程相关信息, 不加e 则表示只查看当前登录的终端产生了哪些进程。

[root@ecs-b208 ~]# ps -l
F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY          TIME CMD
4 S     0 17541 17536  0  80   0 - 29129 do_wai pts/2    00:00:00 bash
0 S     0 17908 17541  0  80   0 -   365 pipe_w pts/2    00:00:00 ps
0 R     0 17909 17908  0  80   0 - 38310 -      pts/2    00:00:00 ps

字段含义
F进程权限标志,1:进程可被复制,但不能被执行 4:进程使用的是root用户权限
S进程状态 同 aux 中的 STAT
UID进程的用户ID
PID进程ID
PPID父进程ID
CCPU占用率
PRI优先级 数值越小优先级越高 ,越被CPU早执行
NI优先级
ADDR内存地址
SZ占用内存大小
WCHAN进程是否在运行 “-” 表示在运行
TTY哪一个终端产生
TIME占用CPU时间
CMD产生进程的命令

pstree

显示程序和进程的关系

[root@ecs-2220 ~]#  pstree  [选项]  [PID 或用户名]

显示某一个java进程的所有pstree信息,包括下面的线程进程信息

[root@middol-dev ~]# pstree -aup 3211280
java,3211280 -Xmx256m -Xms256m -Djava.security.egd=file:/dev/./urandom -jar -Dspring.profiles.active=test ...
  ├─{java},3211321
  ├─{java},3211329
  ├─{java},3211330
  ├─{java},3211331
  ├─{java},3211332
...

-a 显示进程对应的完整指令

-p 显示进程的PID

-u 显示进程用户

top

可以持续跟进当前进程情况:

# top [选项]

选项中可以的参数:

-d 指定top每隔几秒,默认3秒

-p 指定某一个进程的PID

在top展示的信息时,按下指定的大写字母可以有如下结果:

P : CPU占用率排序

M:内存排序

N:pid排序

T:CPU累加时间排序

[root@k8s-master ~]# top
top - 14:04:59 up 287 days, 20:43,  1 user,  load average: 0.08, 0.07, 0.07
Tasks: 141 total,   1 running, 140 sleeping,   0 stopped,   0 zombie
%Cpu(s):  2.5 us,  2.2 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.8 hi,  0.7 si,  0.0 st
MiB Mem :   7541.0 total,    172.2 free,   5272.5 used,   2096.3 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   2003.0 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
1791952 root      20   0 4080852   1.2g  14352 S   3.0  16.0   3144:49 java
 734295 root      20   0 3034416 440076  15916 S   1.0   5.7  17:42.49 java
2511899 root      10 -10  238536  89176  11140 S   1.0   1.2 425:53.50 AliYunDun
3224137 root      20   0 3171100 520132  11600 S   1.0   6.7  95:06.81 java
4078739 root      20   0 2941564 458284  10496 S   1.0   5.9 208:31.61 java
 349825 101       20   0   63808   6996   4388 S   0.3   0.1 284:40.86 nginx
 712594 root      20   0 3158172 592640  10612 S   0.3   7.7 188:15.72 java
1130111 root      20   0       0      0      0 I   0.3   0.0   0:00.21 kworker/0:2-events_power_efficient
3222655 root      20   0 3172480 532652  11536 S   0.3   6.9  91:56.15 java
4078287 root      20   0 2943960 452544  10760 S   0.3   5.9 205:57.33 java
      1 root      20   0  179032  12036   8016 S   0.0   0.2   4:41.94 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:07.43 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H

top的信息前5行显示系统整体情况,从第6行开始是系统的进程情况

第一行

top - 14:04:59 up 287 days, 20:43,  1 user,  load average: 0.08, 0.07, 0.07
内容说明
14:04:59系统当前时间
up 287 days, 20:43已经运行287天20个小时43分钟
1 user当前登录了1 个用户
load average: 0.08, 0.07, 0.07系统过去1分钟,5分钟,15分钟的负载情况,这个值如果超过CPU的核数就表示系统高负荷运行

第二行

Tasks: 141 total,   1 running, 140 sleeping,   0 stopped,   0 zombie
内容说明
141 total系统中总进程数
1 running正在运行的进程数
140 sleeping睡眠的进程数
0 stopped停止的进程数
0 zombie僵尸进程数

第三行CPU信息

%Cpu(s):  2.5 us,  2.2 sy,  0.0 ni, 93.8 id,  0.0 wa,  0.8 hi,  0.7 si,  0.0 st
内容说明
2.5 us用户模式CPU占用率
2.2 sy系统模式CPU占用率
0.0 ni改变过进程优先级的用户进程CPU占用率
93.8 id空闲的CPU占用率
0.0 wa等待输入/输出的进程CPU占用率
0.8 hi硬中断请求服务的CPU占用率
0.7 si软中断请求服务的CPU占用率
0.0 st虚拟机中的CPU等待实际CPU的时间比例

第四行 内存信息

MiB Mem :   7541.0 total,    172.2 free,   5272.5 used,   2096.3 buff/cache
内容说明
7541.0 total,内存总量 KB
172.2 free空闲
5272.5 used已用
2096.3 buff/cache作为缓冲/缓存的内存容量

解释一下什么叫 缓冲(Buffer) 和 缓存(Cache)?

缓存: 硬盘里面数据提前加载到内存中,这样不用再次去硬盘取数据了,目的是加快数据读取

缓冲:先将要写的数据放入缓冲区,然后聚集一起写入硬盘,目的是加大“硬盘”写入的吞吐量

第五行 交换分区信息

MiB Swap:      0.0 total,      0.0 free,      0.0 used.   2003.0 avail Mem
内容说明
0.0 total,内存总量 KB
0.0 free,空闲
0.0 used已用
2003.0 avail Mem

进程信息的各个字段含义:

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND

字段含义
PID进程id
USER用户
PR优先级,数值越小,优先级越高
NI优先级,数值越小,优先级越高
VIRT虚拟内存使用量 KB
RES物理内存使用量 KB
SHR共享内存使用量 KB
S进程状态
%CPUCPU占用率
%MEM内存占用率
TIME+占用CPU的时间
COMMAND进程的命令

lsof

list opened files 的缩写,可以进一步知道这个进程到底在调用哪些文件.

[root@ecs-2220 ~]# lsof  -p 进程号

查看目录被哪些进程调用

[root@ecs-2220 ~]# lsof 目录

进程优先级

2个参数表示进程优先级 PRI 和 NI

PRI( 最终值) = PRI(原始值) + NI

PRI 用户不可修改, 只能修改 NI ,只有root用户可以设置为负数,NI 范围是 -20 ~ 19

普通用户只能调高且大于0,且只能自己的进程

采用 nice 启动程序时一并调整优先级,采用renice 调整已经启动的进程优先级

# nice  -n NI值  启动程序的命令
# nice -n 10  java -jar mytest.jar
# renice 优先级  进程id

kill pkill

kill -9 强制结束

kill -15 正常结束 默认就是 15

killall 结束一个用户下的所有进程

pkill 通过进程名称进行结束进程

[root@ecs-2220 ~]# pkill -9 httpd

四、存储管理

存储设备分类

  1. 机械硬盘 HDD Hard Disk Drive 采用磁性碟片来存储
  2. 固态硬盘 SSD Sold State Disk 闪存颗粒来存储

一般机械磁盘的大小 = 磁头数量 * 柱面数量 * 一个盘面上的扇区数量 * 单扇区大小(一般为4096 字节)

固态硬盘采用存储芯片作为存储介质,一般两种介质:闪存 和 DRAM

主引导记录

MBR (master boot record) 主引导记录是Linux系统初始化的时候,根据此记录来识别硬盘设备。

MBR 占据一块磁盘的第一个磁道的第一个扇区里面。

引导程序 boot loader
(446 字节)
分区表 partition table
(16 x 4 字节)
结束标志
(2 字节)
MBR 结构示意图

分区表 partition table 中存储了 包括分区号、分区起始柱面和分区柱面数量,其中常见的分区号如下:

分区号说明
0x5 或 0xf可扩展分区 extended
0x82交换分区 swap
0x83普通分区 Linux
0x8eLVM 分区 LVM
0xfdRAID 分区 RAID

每一个分区表大小是 16字节,MBR对每一块硬盘的分区表总大小就只有64字节,因此一个硬盘上最多4 个主分区

但是, 一般设置为3个主分区,1个扩展分区,扩展分区部署一个真正分区,是一个16字节的分区表空间指针,指向数个逻辑分区

挂载存储设备

mount [options] [--source] <物理设备存储块> | [--target] <要挂载到的Linux目录>
mount /dev/sdb1   /apps/web

如果要挂载**U盘**, U盘的设备文件名是Linux自动分配的,需要通过 fdisk -l 命令查看具体的名称,然后挂载

假如是 sda1

[root@ecs-2220 ~]# mount -t vfat  /dev/sda1   /apps/upan

因为U盘是Windows分区,需要指定 文件系统格式 为 vfat

如果出现乱码 (因为linux默认 UTF-8编码,U盘在window中保存数据采用的是GBK编码) ,则还需要指定编码格式

[root@ecs-2220 ~]# mount -t vfat  -o iocharset=utf8 /dev/sda1   /apps/upan

开机自动挂载

Linux 默认读取 /etc/fstab 配置文件来自动挂载硬盘

[root@middol-dev ~]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Fri Feb 26 01:24:48 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=d2f8ba84-ffb6-4480-803c-3ae03326c905 /                       ext4    defaults        1 1
UUID=d8c812a4-7fbc-4cb7-803c-7c995b5e0c74 /opt                    ext4    defaults        0 2

fstab文件中每一行一条独立配置信息,每一行分6列,空格隔开

  • 第一列为UUID,此处可通过blkid命令生成磁盘分区的UUID。

  • 第二列为磁盘分区的挂载目录,可以通过df -TH命令查询。

  • 第三列为磁盘分区的文件系统格式, 可以通过df -TH命令查询。

  • 第四列为磁盘分区的挂载选项,此处通常设置为defaults即可。

  • 第五列为Linux dump备份选项

    • 0表示不使用Linux dump备份。现在通常不使用dump备份,此处设置为0即可。
    • 1表示使用Linux dump备份。
  • 第六列为fsck选项,即开机时是否使用fsck检查磁盘。

    • 0表示不检验。

    • 挂载点为(/)根目录的分区,此处必须填写1。

      根分区设置为1,其他分区只能从2开始,系统会按照数字从小到大依次检查下去。

说明:磁盘的UUID(universally unique identifier)是Linux系统为磁盘分区提供的唯一的标识字符串。

执行如下命令,查询磁盘分区的UUID。

[root@ecs-2220 ~]# blkid 磁盘分区

以查询磁盘分区**“/dev/xvdb1”**的UUID为例:

[root@ecs-2220 ~]# blkid  /dev/xvdb1

回显类似如下信息:

[root@ecs-b656 test]# blkid /dev/xvdb1
/dev/xvdb1: UUID="1851e23f-1c57-40ab-86bb-5fc5fc606ffa" TYPE="ext4"

表示**“/dev/xvdb1”**的UUID。

分区

  1. 执行以下命令,查看磁盘的分区信息。
[root@ecs-2220 ~]# fdisk -l

Disk /dev/vda: 85.9 GB, 85899345920 bytes, 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0008d18f

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    83886079    41942016   83  Linux
  1. 执行如下命令之后,进入fdisk分区工具
[root@ecs-2220 ~]# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): 

  1. 输入“n”,按“Enter”,开始新建分区
Command (m for help): n
Partition type:
   p   primary (1 primary, 0 extended, 3 free)
   e   extended

表示磁盘有两种分区类型:

  • “p”表示主要分区。
  • “e”表示扩展分区。
  1. 以创建一个主要分区为例,输入“p”,按“Enter”,开始创建一个主分区
Select (default p): p
Partition number (2-4, default 2): 
  1. 以分区编号选择“2”为例,输入主分区编号“2”,按“Enter”
Partition number (2-4, default 2): 2
First sector (83886080-167772159, default 83886080):
  1. 输入新分区的起始磁柱编号,如设置默认值,按“Enter”
First sector (83886080-167772159, default 83886080):
Using default value 83886080
Last sector, +sectors or +size{K,M,G} (83886080-167772159,default 167772159):

  1. 输入新分区的截止磁柱编号,按“Enter”

    Last sector, +sectors or +size{K,M,G} (83886080-167772159,
    default 167772159):
    Using default value 167772159
    Partition 2 of type Linux and of size 40 GiB is set
    
    Command (m for help): 
    
    
  2. 输入“p”,按“Enter”,查看新建分区

Command (m for help): p

Disk /dev/vda: 85.9 GB, 85899345920 bytes, 167772160 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0008d18f

   Device Boot      Start         End      Blocks   Id  System
/dev/vda1   *        2048    83886079    41942016   83  Linux
/dev/vda2        83886080   167772159    41943040   83  Linux
Command (m for help): 

  1. 输入“w”,按“Enter”,将分区结果写入分区表中
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.

  1. 执行partprobe命令,将新的分区表变更同步至操作系统

执行以下命令,设置新建分区文件系统格式

# 以“ext4” 文件格式为例:
[root@ecs-2220 ~]# mkfs -t ext4 /dev/vda2

# 设置xfs文件系统的操作与ext3或者ext4一样,命令为:
[root@ecs-2220 ~]# mkfs -t xfs /dev/vda2
  1. 将新建分区挂载到需要增加空间的目录下
[root@ecs-bab9 test]# mount /dev/vda2 /opt

磁盘管理

df 命令

查看硬盘使用情况

[root@middol-dev ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        7.8G     0  7.8G   0% /dev
tmpfs           7.8G     0  7.8G   0% /dev/shm
tmpfs           7.8G  770M  7.0G  10% /run
tmpfs           7.8G     0  7.8G   0% /sys/fs/cgroup
/dev/vda1        40G   14G   24G  37% /
tmpfs           1.6G     0  1.6G   0% /run/user/0

du命令

查看目录占用磁盘空间大小

–max-depth : <目录层数> 超过指定层数的目录后,予以忽略。

-h : 以K,M,G为单位,提高信息的可读性。

[root@middol-dev opt]# du -h --max-depth=1  /opt/
16K     /opt/lost+found
22G     /opt/lib
23M     /opt/frp
12K     /opt/containerd
8.9G    /opt/apps
31G     /opt/
[root@middol-dev opt]#

fsck 命令

检查文件系统并尝试修复错误。

磁盘阵列

独立冗余磁盘阵列(Redundant Array of Independent Disks,RAID),是把多块独立的磁盘(物理磁盘)按照一定的方式组合构建磁盘组(逻辑磁盘)。相比单个磁盘,能够提升存储性能和数据可靠性。

常见RAID磁盘阵列介绍

RAID级别简介读写性能安全性能磁盘使用率组建不同RAID阵列所需的最少磁盘数量
RAID0RAID0将数据分条存储在多个磁盘上,可实现并行读写,提供最快的读写速率。多个磁盘并行读写获取更高性能最差没有冗余能力,一个磁盘损坏,整个RAID阵列数据都不可用100%两块
RAID1通过构造数据镜像实现数据冗余,阵列中一半的磁盘容量投入使用,另一半磁盘容量用来做镜像,提供数据备份。读性能:与单个磁盘相同写性能:需要将数据写入是两个磁盘,写性能低于单个磁盘最高提供磁盘数据的完整备份,当阵列中的一个磁盘失效时,系统可以自动采用镜像磁盘的数据50%两块
RAID01结合RAID0和RAID1两种磁盘阵列,先将一半磁盘组建成RAID0分条存储数据,再用另一半磁盘做RAID1镜像。读性能:和RAID0相同写性能:和RAID1相同比RAID10的安全性能低50%四块
RAID10结合RAID1和RAID0两种磁盘阵列,先将磁盘两两组建成RAID1镜像,再组建RAID0将数据分条存储。读性能:RAID0相同写性能:RAID1相同和RAID1的安全性能相同50%四块
RAID5RAID5不需要单独指定数据校验磁盘,而是将每块磁盘生成的校验信息分块存储至阵列中的每块磁盘中。读性能:和RAID0相同写性能:由于要写入奇偶校验信息,写性能低于单个磁盘比RAID10的安全性能低75%三块

通过mdadm工具创建RAID阵列,以RAID10为例:

参考华为云手册:

https://support.huaweicloud.com/bestpractice-evs/evs_02_0019.html

五、设备管理

设备文件

Linux系统中,用户通过文件系统和设备连接的,设备文件的目录在 /dev下面

设备的文件名由两部分组成: 主设备号次设备号

主设备号代表设备类型,次设备号代表同一类型中的当前第几个设备

例如 /dev/sda /dev/sdb … 代表SCSI第1块硬盘和第2块硬盘

硬盘设备文件 /dev/sda5 各组成部分说明:

/dev /sda5
硬件设备文件所在目录sd表示SCSI设备硬盘的编号,以字母a,b,c…表示分区编号,以数字1,2,3,4,5…表示, 1-4表示主分区,5开始表示逻辑分区

Linux中 设备文件可分物理设备文件虚拟设备文件

虚拟设备文件没有对应具体的物理设备,它们有专门的用处,下面列举常见的虚拟设备:

/dev/null 表示空设备,所有写入此设备的信息都将丢失

/dev/zero 是一个伪文件系,可以连续产生null流(二进制的零流)

/dev/full 特殊的设备文件,想起写入内容时,总返回"设备无剩余空间"的信息。

[root@ecs-s6 dev]# echo 'test' > /dev/full
-bash: echo: write error: No space left on device

常用的设备命令

查看CPU信息命令

lscpu 查看CPU的处理单元信息,它从 sysfs/proc/cpuinfo收集CPU体系结构信息。

[root@ecs-s6 tmps]# lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                4
On-line CPU(s) list:   0-3
Thread(s) per core:    2
Core(s) per socket:    2
Socket(s):             1
NUMA node(s):          1
Vendor ID:             GenuineIntel
CPU family:            6
Model:                 85
Model name:            Intel(R) Xeon(R) Gold 6278C CPU @ 2.60GHz
Stepping:              7
CPU MHz:               2600.000
BogoMIPS:              5200.00
Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              1024K
L3 cache:              36608K
NUMA node0 CPU(s):     0-3

主要字段说明说明
Architecture架构
Vendor IDCPU厂商ID
Thread(s) per core单个核线程数
Core(s) per socketCPU核数
CPU familyCPU系列
CPU MHz主频
Virtualization type支持的虚拟化技术
L1d cache一级缓存 L1数据缓存
L1i cache一级缓存 L1指令缓存

查看内存信息命令

采用 free命令查看内存使用情况。

[root@ecs-s6 tmps]# free -h
              total        used        free      shared  buff/cache   available
Mem:           7.6G        1.5G        159M        357M        6.0G        5.5G
Swap:            0B          0B          0B
[root@ecs-s6 tmps]#

第一列
Mem 内存的使用信息
Swap 交换空间的使用信息

第一行
total 系统总的可用物理内存大小
used 已被使用的物理内存大小
free 还有多少物理内存可用
shared 被共享使用的物理内存大小
buff/cache 被 buffer 和 cache 使用的物理内存大小
available 还可以被 *应用程序* 使用的物理内存大小

其中有两个概念需要注意

free 与 available 的区别

free 是真正尚未被使用的物理内存数量。
available 是应用程序认为可用内存数量,available = free + buffer + cache (:大概的计算方法)

Linux 为了提升读写性能,会提前申请一些内存空间作为缓存和缓冲,

对于内核来说,buffer 和 cache 其实都属于已经被使用的内存。

但当应用程序申请内存时,如果free内存不够,内核就会回收buffer和cache的内存来满足应用程序的请求

解释一下什么叫 缓冲(Buffer) 和 缓存(Cache)?

缓存: 硬盘里面数据提前加载到内存中,这样不用再次去硬盘取数据了,目的是加快数据读取

缓冲:先将要写的数据放入缓冲区,然后聚集一起写入硬盘,目的是加大“硬盘”写入的吞吐量

内存分析

如果你进一步向了解物理内存和虚拟内存使用情况,可使用 vmstat 命令:

[root@ecs-s6 tmps]# vmstat 1 10
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 161316 435760 5821112    0    0     0     2    0    0 14  6 79  0  0
 0  0      0 161324 435760 5821112    0    0     0    32  403  599  1  0 100  0  0
 0  0      0 161324 435760 5821112    0    0     0     0  291  494  0  0 100  0  0
 0  0      0 161324 435760 5821112    0    0     0     0  291  480  0  0 100  0  0
 0  0      0 161324 435760 5821112    0    0     0    56  222  410  0  0 100  0  0
 0  0      0 161324 435760 5821112    0    0     0     0  202  383  0  0 100  0  0
 0  0      0 161324 435760 5821112    0    0     0     0  236  443  0  0 100  0  0
 0  0      0 161324 435760 5821112    0    0     0    12  198  382  0  0 100  0  0
 0  0      0 161324 435760 5821112    0    0     0     0  200  373  0  0 100  0  0
 0  0      0 161324 435760 5821112    0    0     0     0  179  345  0  0 100  0  0

vmstat 1 10 表示每隔1秒刷新一次,一共刷新10次

字段项说明
procsr : 当前运行或等待CPU的进程数 , 如果长期大于CPU核数则表示需要增加CPU
b: 等待其他资源(例如 I/O)的进程数
memberswpd : 虚拟内存已使用容量
free: 空闲物理内存
buff: 缓冲区大小
cache : 缓存区大小
swapsi: 这一秒磁盘进入内存的大小 <br/ > so : 这一秒内存进入磁盘的大小
iobi 这一秒写磁盘总量 bo这一秒读磁盘总量 bi+bo 值过大,且wa值较大,则表示系统 I/0性能瓶颈
systemin : 某一时间检测到的设备总数
cs: 每一秒产生的上下文切换数量
cpuus : 用户进程消耗CPU时间比
sy: 系统内核进程消耗CPU时间比例,一般 us+sy 值大于80%则说明CPU瓶颈
id: CPU空闲的时间比
wa:I/0等待所占用CPU的时间比例 , 参考值为 20% ,超过则可能是IO瓶颈
st: 虚拟机 占用CPU的百分比

查看块设备信息

dmesg

查看内核产生的信息,内核在系统启动过程中,检测并加载驱动程序时,信息一闪而过,之后可以通过dmesg 命令查看具体信息

查看第一块网卡信息:

[root@ecs-s6 tmps]# dmesg |grep eth0

查看CPU信息

[root@ecs-s6 tmps]# dmesg |grep CPU

lsblk

查看可用块设备且显示他们之间的依赖关系。

[root@ecs-s6 tmps]# lsblk
NAME   MAJ:MIN  RM   SIZE   RO   TYPE   MOUNTPOINT
vda     253:0    0   50G    0    disk
└─vda1 253:1    0   50G    0    part      /
vdb     253:16   0  100G    0     disk
└─vdb1 253:17   0  100G    0     part     /opt
列名含义
NAME块设备名
MAJ:MIN主:次设备号
RM是否是移动设备 1表示是 0表示否
SIZE存储空间大小
RO是否只读
TYPE是否是一个分区, dist表示磁盘 part表示一个分区
MOUNTPOINT设备挂载点

六、网络管理

网络管理主要包括:网络接口管理、基本IP路由和网关、配置DNS、网络诊断等

网络接口

  1. 网络接口卡(NIC

  2. 网络接口

    Linux系统通过网络接口访问NIC,每一个NIC,内核都生成一个网络接口,并且按照eth0、eth1命名

    字母表示数据连接技术,数字表示这个技术的第几个接口卡

    eth代表以太网,例如fddi0 代表光纤、tr0代表令牌环

ifconfig

利用 ifconfig检测接口、配置接口,默认列出活跃的接口, 加参数-a列出所有接口信息

[root@middol-dev /]# ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        inet6 fe80::42:6dff:fe2a:8d6b  prefixlen 64  scopeid 0x20<link>
        ether 02:42:6d:2a:8d:6b  txqueuelen 0  (Ethernet)
        RX packets 435533321  bytes 156706844872 (145.9 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 335468853  bytes 151352883542 (140.9 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.0.9  netmask 255.255.255.0  broadcast 192.168.0.255
        inet6 fe80::f816:3eff:fe03:2833  prefixlen 64  scopeid 0x20<link>
        ether fa:16:3e:03:28:33  txqueuelen 1000  (Ethernet)
        RX packets 348076396  bytes 116815739938 (108.7 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 430972181  bytes 205118804741 (191.0 GiB)
        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 1000  (Local Loopback)
        RX packets 596689  bytes 1366705050 (1.2 GiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 596689  bytes 1366705050 (1.2 GiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ifconfig可以做网络接口的配置操作,例如:up down 操作

使eth1 网络接口禁用

[root@middol-dev /]# ifconfig eth1 down

接口配置文件

Linux 网络接口配置文件 在: /etc/sysconfig/network-scripts/中,按照ifcfg-<interface> 这样的格式命名的配置文件。

例如: vi /etc/sysconfig/network-scripts/ifcfg-eth0

[root@localhost ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0  
    DEVICE=eth0  #网卡设备名称   
    ONBOOT=yes  #启动时是否激活 yes | no  
    BOOTPROTO=static  #协议类型 dhcp bootp none  
    IPADDR=192.168.1.90  #网络IP地址  
    NETMASK=255.255.255.0  #网络子网地址  
    GATEWAY=192.168.1.1  #网关地址  
    BROADCAST=192.168.1.255  #广播地址  
    HWADDR=00:0C:29:FE:1A:09  #网卡MAC地址  
    TYPE=Ethernet  #网卡类型为以太网

网络基础知识

网络七层模型

复习一下,网际互联及OSI七层模型:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

参考博客:https://blog.csdn.net/taotongning/article/details/81352985

每一层都是承上启下的作用,接受上层或下层的数据

发送数据端从应用层 ------》物理层,

接受数据端从物理层-----》应用层。

OSI模型说明举例
应用层为应用软件提供了很多服务FTP协议,SSH远程登录协议,SMTP/POP3邮件协议,HTTP协议等
表示层格式化数据数据的格式化,变成 JPG、GIF格式的数据,数据加密解密等,数据解压缩等
会话层控制会话,建立管理终止应用程序会话各类软件中 session的概念
传输层提供可靠和尽力而为的端到端的数据传输TCP、UDP协议,3次握手建立连接,负责网络传输和会话建立。
网络层IP选址和路由选择链路层 通过MAC地址进行数据通讯,必须同一个局域网,数据完全广播传输。IP地址的出现就是解决不同局域网之间的数据通讯,网关负责转发。
链路层定义如何格式化二进制数据流,支持错误检测以太网协议规定一组电信号称之为一个数据包,或者叫做一个**“帧”**。[head头部 发送接收的MAC地址] + [data数据部分 最短46字节,最长1500字节] 举例:交换机通过MAC地址转发数据,逻辑链路控制
物理层物理传输、硬件、物理特性二进制数据流0110…,光纤,网线,无线电波等,该层没有寻址的概念

MAC 地址

以太网硬件物理地址-MAC地址,主要工作在链路。

以太网接口的地址有两个 IP地址硬件MAC地址

MAC地址用于同一个局域网间的主机通讯,同一个局域网内MAC地址不可重复

C:\Windows\system32>ipconfig  /all
....

以太网适配器 以太网 4:

   媒体状态  . . . . . . . . . . . . : 媒体已断开连接
   连接特定的 DNS 后缀 . . . . . . . :
   描述. . . . . . . . . . . . . . . : Sangfor SSL VPN CS Support System VNIC
   物理地址. . . . . . . . . . . . . : 00-FF-25-16-00-F8
   DHCP 已启用 . . . . . . . . . . . : 否
   自动配置已启用. . . . . . . . . . : 是
...

上面的 物理地址 00-FF-25-16-00-F8 就是MAC地址。

IP地址

IP地址用于网络层,对于不同的局域网采用IP地址+网关进行寻址通讯,例如路由器担任网络的网关工作。

  1. 每一个ip地址分成四个部分,每个部分是一个字节即8位比特位 0~255:

    例如一个IP地址 192.118.12.66的组成和表示格式如下:

表现格式第1段第2段第3段第4段
十进制1921181266
二进制11000000101010000000110001000010
十六进制C0A80C42
  1. 每一个ip地址分为 网络地址部分主机地址部分

    如何识别网络部分和主机部分? 答案是采用子网掩码(Netmask)

    子网掩码说白了就是,组成IP地址的四个部分有多少位置是1,多少位置是0,从头开始数,全部1的部分就表示这个IP地址的网络部分。

    网络地址部分 = IP地址 与运算(&) 子网掩码

第1段第2段第3段第4段
IP地址1921181266
子网掩码-二进制11111111111111110000000000000000
子网掩码-十进制25525500
& 计算得到网络地址19211800
  1. IP地址分类
类别子网掩码IP地址示例得到的网络地址部分
A类255.0.0.0192.118.12.66192.0.0.0
B类255.255.0.0192.118.12.66192.118.0.0
C类255.255.255.0192.118.12.66192.118.12.0
划分了子网类255.255.128.0192.118.129.66192.118.128.0
划分了子网类255.255.128.0192.118.127.66192.118.0.0

备注: 子网络类,就是在现有基础A/B/C类网络位上,向主机位借1或几位

上面的例子,最后两个 子网掩码是 255.255.128.0 , 其实就是 B类网络 255.255.0.0 向主机位借了 1 位 。

第1段第2段第3段第4段
划分了子网络的子网掩码1921181280
对应的十进制数据2552551280
对应的二进制数 据2552551000000000000000
说明原B类子网掩码原B类子网掩码向原主机位借了1位充当子网络标识位,划分了两个子网络 192.118.0.0/17192.118.128.0/170

备注: 192.118.0.0/17 这里面的 /17 代表 子网掩码位数为17位, 即从第一部分开始1的个数,例如A类是/8, B类是/16, C类是/24

主机间的通讯过程

1. 同一个局域内网通讯

例如 源主机 192.168.10.51 和 目的主机 192.168.10.8 之间的通讯过程。

(1)验证目的主机是否和自己在同一个网络上

​ 验证方法:自己的子网掩码 与运算目的主机ip判断 网络部分是一致

(2)如果是同一网络上,接下来获得目的主机的MAC地址

​ 获得方法:使用本地网络的底层协议 ARP ( Address Resolution Protocol )地址解析协议,

​ 源主机会群发广播整个本地网络:“告诉我(192.168.10.51)谁是 192.168.10.8 的主机,收到消息后把你的MAC地址给我,谢谢!”

(3) 本地网络中只有 192.168.10.8 的主机会回复 源主机 192.168.10.51 ,并且把MAC地址给源主机。

(4) 源主机获得目的主机的MAC地址后,即可通讯开始,另外也会缓存目的地址的MAC地址

​ 通过 arp -a 查看一台主机内的ARP缓存

[root@ecs-b208 ~]# arp -a
? (172.16.0.254) at fa:fa:fa:fa:fa:01 [ether] on eth0
? (172.17.0.6) at <incomplete> on docker0
? (172.17.0.2) at 02:42:ac:11:00:02 [ether] on docker0
? (172.17.0.4) at 02:42:ac:11:00:04 [ether] on docker0
? (172.16.0.156) at fa:16:3e:d2:2a:d9 [ether] on eth0
? (172.17.0.3) at 02:42:ac:11:00:03 [ether] on docker0
gateway (172.16.0.1) at fa:16:3e:af:61:8d [ether] on eth0
? (172.17.0.5) at 02:42:ac:11:00:05 [ether] on docker0
2. 远程主机通讯

和 上面类似,就是第2步开始,由于不是同一个网络, 这时源主机只能将请求发往它的默认网关

如果源主机还不知道默认网关是谁,他还是通过 ARP协议 找寻他的网关。

网关有多个网卡,连接内部和外部网络,并且还有路由转发功能

网关路由

路由表

每一个Linux内核都会有一个内部表格,即路由表。路由表定义了本地网络接口上的数据转发规则。

[root@ecs-b208 ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.16.0.1      0.0.0.0         UG    100    0        0 eth0
169.254.169.254 172.16.0.1      255.255.255.255 UGH   100    0        0 eth0
172.16.0.0      0.0.0.0         255.255.255.0   U     100    0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
  • Destination 目标网段或者主机
  • Gateway 网关地址,”*”表示目标是本主机所属的网络,不需要路由
  • Genmask 网络掩码,对于主机路由是 255.255.255.255 ,对于默认路由是 0.0.0.0。如果忽略,则使用子网掩码 255.255.255.255
  • Flags U — 路由是活动的 H— 目标是一个主机 G— 路由指向网关!— 拒绝路由
  • Iface 该路由表项对应的输出网络接口

linux 系统中,可以自定义从1-252个路由表,其中,linux系统维护了4个路由表:

  • 0#表: 系统保留表
  • 253#表: defulte table 没特别指定的默认路由都放在改表
  • 254#表: main table 没指明路由表的所有路由放在该表
  • 255#表: locale table 保存本地接口地址,广播地址、NAT地址 由系统维护,用户不得更改

路由表序号和表名的对应关系在 /etc/iproute2/rt_tables 文件中,可手动编辑

路由表的查看可有以下二种方法:

  • ip route list table table_number
  • ip route list table table_name
[root@ecs-b208 ~]# ip route list table 255
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 172.16.0.0 dev eth0 proto kernel scope link src 172.16.0.34
local 172.16.0.34 dev eth0 proto kernel scope host src 172.16.0.34
broadcast 172.16.0.255 dev eth0 proto kernel scope link src 172.16.0.34
broadcast 172.17.0.0 dev docker0 proto kernel scope link src 172.17.0.1
local 172.17.0.1 dev docker0 proto kernel scope host src 172.17.0.1
broadcast 172.17.255.255 dev docker0 proto kernel scope link src 172.17.0.1

根据子网掩码,可以将路由分为三种类型:

  • 主机路由

    机路由是路由选择表中指向单个IP地址或主机名的路由记录。主机路由的Flags字段为H

Destination    Gateway       Genmask Flags     Metric    Ref    Use    Iface
-----------    -------     -------            -----     ------    ---    ---    -----
10.0.0.10     192.168.1.1    255.255.255.255   UH       0    0      0    eth0
  • 网络路由

    网络路由是代表主机可以到达的网络。网络路由的Flags字段为N。例如,在下面的示例中,本地主机将发送到网络192.19.12的数据包转发到IP地址为192.168.1.1的路由器

Destination    Gateway       Genmask Flags    Metric    Ref     Use    Iface
-----------    -------     -------         -----    -----   ---    ---    -----
192.19.12     192.168.1.1    255.255.255.0      UN      0       0     0    eth0
  • 默认路由

    当主机不能在路由表中查找到目标主机的IP地址或网络路由时,数据包就被发送到默认路由(默认网关)上。默认路由的Flags字段为G。例如,在下面的示例中,默认路由是IP地址为192.168.1.1的路由器

Destination    Gateway       Genmask Flags     Metric    Ref    Use    Iface
-----------    -------     ------- -----      ------    ---    ---    -----
default       192.168.1.1     0.0.0.0    UG       0        0     0    eth0

配置路由表

路由表中保存着子网的标志信息、网上路由器的个数和下一个路由器的名字等内容。路由表根据其建立的方法,可以分为动态路由表静态路由表

1. 静态路由

静态路由是指由用户或网络管理员手工配置的路由信息

route  [add|del] [-net|-host] target [netmask Nm] [gw Gw] [[dev] If]
  • add : 添加一条路由规则,del : 删除一条路由规则,
  • -net : 目的地址是一个网络,-host : 目的地址是一个主机,
  • target : 目的网络或主机
  • netmask : 目的地址的网络掩码,
  • gw : 路由数据包通过的网关,dev : 为路由指定的网络接口

举例:

(1)添加一条网络路由 ( 发往192.168.62这个网段的全部要经过网关192.168.1.1 )

route add   -net 192.168.62.0    netmask 255.255.255.0     gw 192.168.1.1

(2)删除一条路由

# 删除的时候不用写网关
route del   -net 192.168.62.0    netmask 255.255.255.0  

(3) 添加一条主机路由 ( 发往192.168.1.110 的数据包从 eth0网络接口出去 )

route add –host 192.168.1.110 dev eth0
2. 动态路由

动态路由是指路由器能够自动地建立自己的路由表,并且能够根据实际情况的变化适时地进行调整

路由器能够根据路由器之间的交换的特定路由信息自动地建立自己的路由表,并且能够根据链路和节点的变化适时

地进行自动调整。当网络中节点或节点间的链路发生故障,或存在其它可用路由时,动态路由可以自行选择最佳可用的路由继续转发报文。

常见的动态路由协议有以下几个:路由信息协议(RIP)、OSPF(Open Shortest Path First开放式最短路径优先)、IS-IS(Intermediate System-to-Intermediate System,中间系统到中间系统)、边界网关协议(BGP)是运行于 TCP 上的一种自治系统的路由协议。

3. 设置包转发

在 CentOS 中默认的内核配置已经包含了路由功能,但默认并没有在系统启动时启用此功能。开启 linux 的路由功

能可以通过调整内核的网络参数来实现。要配置和调整内核参数可以使用 sysctl 命令。例如:要开启 Linux 内核的

数据包转发功能可以使用如下的命令:

sysctl -w net.ipv4.ip_forward=1  

这样设置之后,当前系统就能实现包转发,但下次启动计算机时将失效。为了使在下次启动计算机时仍然有效,需

要将下面的行写入配置文件 /etc/sysctl.conf

# vi /etc/sysctl.conf  
net.ipv4.ip_forward = 1

用户还可以使用如下的命令查看当前系统是否支持包转发

sysctl net.ipv4.ip_forward

ip rule,ip route,iptables 三者之间的关系

这部分属于专业网络管理知识,推荐博客:

Linux下ip route、ip rule、iptables的关系
https://www.cnblogs.com/sammyliu/p/4713562.html

linux下IPTABLES配置详解
https://www.cnblogs.com/klb561/p/9011546.html

iptables和firewalld防火墙总结(史上最全)
https://www.cnblogs.com/wdp-home/p/11651855.html

路由表和iptables - Linux实现路由器
https://blog.csdn.net/melancholy123/article/details/80782567

这里重点说一下 iptables/NAT 网络地址转换技术

  • DNAT 用于目标地址转换,例如公网访问内网资源
  • SNAT 用于源地址转换,例如内网访问公网资源

DNS 配置

DNS IP地址和域名直接的转换服务

1. 静态查询

通过查询 /etc/hosts

LInux 中 IP地址和 主机名直接的对应关系在此文件中。

2. 动态查询

通过查询 /etc/resolv.conf

[root@ecs-b208 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
# domain mydomain.com
# search google.com  baidu.com
nameserver 100.125.135.29
nameserver 100.125.17.29
options single-request-reopen
  • nameserver 指定DNS服务器的IP地址 一个文件中最多配置3个,第一个为主域名,后面备用域名
  • search nameserver解析失败时会在域名后加上search部分然后再解析, 比如域名为www.abc,nameserver解析失败后加上search后为 www.abc.google.com、www.abc.baidu.com, 一直尝试到search列表结束。该选项可以用来指定多个域名,中间用空格或tab键隔开。
  • domain 充当search的默认值外,没有其它用途。也就说一旦配置search,那domain就没用了

网络诊断工具

常用的网络诊断工具 ping host traceroute tcpdump

常用工具 telnet

telnet命令通常用来远程登录,继而可以查看 端口是否开放,默认端口号为23/tcp

例如:查看远方服务器ssh端口是否开放:

telnet 192.168.25.133 22

常用工具 tcping

超简单查看服务器端口是否开放

[root@DB-Server ~]# tcping  192.168.27.57 1433

192.168.27.57 port 1433 open.

常用工具 traceroute

traceroute指令让你追踪网络数据包的路由途径,预设数据包大小是40或60Bytes,用户可另行设置。

traceroute原理参考:https://www.jianshu.com/p/75a5822d0eec

具体参数格式:

traceroute [-dFlnrvx] [-f<存活数值>] [-g<网关>...] [-i<网络界面>] [-m<存活数值>] [-p<通信端口>]

​ [-s<来源地址>] [-t<服务类型>] [-w<超时秒数>] [主机名称或IP地址] [数据包大小]

命令参数:

-d 使用Socket层级的排错功能。

-f 设置第一个检测数据包的存活数值TTL的大小。

-F 设置勿离断位。

-g 设置来源路由网关,最多可设置8个

-i 使用指定的网络界面送出数据包。

-I 使用ICMP回应取代UDP资料信息。

-m 设置检测数据包的最大存活数值TTL的大小。

-n 直接使用IP地址而非主机名称。

-p 设置UDP传输协议的通信端口。

-r 忽略普通的Routing Table,直接将数据包送到远端主机上。

-s 设置本地主机送出数据包的IP地址。

-t 设置检测数据包的TOS数值。

-v 详细显示指令的执行过程。

-w 设置等待远端主机回报的时间。

-x 开启或关闭数据包的正确性检验。

-q 每次TTL发送几个数据包,默认3次

Linux 上使用 traceroute

[root@localhost ~]# traceroute www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 40 byte packets
1  192.168.74.2 (192.168.74.2)  2.606 ms  2.771 ms  2.950 ms
2  211.151.56.57 (211.151.56.57)  0.596 ms  0.598 ms  0.591 ms
3  211.151.227.206 (211.151.227.206)  0.546 ms  0.544 ms  0.538 ms
4  210.77.139.145 (210.77.139.145)  0.710 ms  0.748 ms  0.801 ms
5  202.106.42.101 (202.106.42.101)  6.759 ms  6.945 ms  7.107 ms
6  61.148.154.97 (61.148.154.97)  718.908 ms * bt-228-025.bta.net.cn (202.106.228.25) 5.177 ms
7  124.65.58.213 (124.65.58.213)  4.343 ms  4.336 ms  4.367 ms
8  202.106.35.190 (202.106.35.190) 1.795 ms 61.148.156.138 (61.148.156.138)  1.899 ms 1.951 ms
9  * * *
30  * * *
[root@localhost ~]# 

控制台信息说明

  1. 每一行信息代表一次TTL,TTL的值等于行号,行号代表能到达第几站路由,可使用参数-m控制
  2. 每一行的ip代表到达的路由/目标主机地址
  3. 每一行 3个时间表示先后发3个UDP数据包到该站路由,每个包到达所需要的时间, 个数由 -q控制
  4. 有的行信息展示 "*" 信息,其实这个时候数据包已经到达目标服务器了,因为安全问题大部分的服务器不提供UDP服务(或者被防火墙挡掉),所以我们拿不到服务器的任何返回只能展示 "*" 号,程序就理所当然的认为还没有结束,一直尝试增加数据包的TTL,努力尝试让数据包到底目标主机。

当然也许你会看到每一行网关的ip地址都不一样,一行有3个不一样的路由IP,表示到达目标主机的路径不是唯一的,可以并行网关选择其中一条路径进行继续传递数据包。

[root@k8s-master ~]# traceroute  www.baidu.com
traceroute to www.baidu.com (112.80.248.75), 30 hops max, 60 byte packets
 1  10.90.183.122 (10.90.183.122)  2.361 ms  2.450 ms  2.383 ms
 2  11.73.1.149 (11.73.1.149)  6.378 ms * 11.73.1.185 (11.73.1.185)  5.514 ms
 3  11.228.249.26 (11.228.249.26)  1.964 ms 11.228.249.18 (11.228.249.18)  1.922 ms 10.255.100.117 (10.255.100.117)  14.495 ms
 4  103.41.142.70 (103.41.142.70)  2.604 ms 103.52.72.126 (103.52.72.126)  2.658 ms 103.41.142.54 (103.41.142.54)  3.718 ms
 5  116.251.113.213 (116.251.113.213)  2.878 ms 10.54.37.238 (10.54.37.238)  2.818 ms 140.205.50.229 (140.205.50.229)  2.953 ms
 6  140.206.207.69 (140.206.207.69)  4.789 ms 140.206.207.81 (140.206.207.81)  13.156 ms *
 7  139.226.213.121 (139.226.213.121)  16.261 ms 140.206.207.58 (140.206.207.58)  4.207 ms 139.226.230.157 (139.226.230.157)  5.219 ms
......

window 上使用 tracert,可以看出:

C:\Windows\system32>tracert www.baidu.com

通过最多 30 个跃点跟踪
到 www.a.shifen.com [180.101.49.12] 的路由:

  1     2 ms     1 ms     1 ms  192.168.1.1
  2     8 ms     9 ms     6 ms  1.168.78.124.broad.xw.sh.dynamic.163data.com.cn [124.78.168.1]
  3     7 ms     4 ms     3 ms  61.152.4.185
  4     3 ms     4 ms     *     61.152.24.54
  5     5 ms     5 ms     5 ms  202.97.19.242
  6     *        *        8 ms  58.213.95.158
  7    10 ms     9 ms     *     58.213.95.134
  8     9 ms     7 ms     8 ms  58.213.96.122
  9     *        *        *     请求超时。
 10     *        *        *     请求超时。
 11     *        *        *     请求超时。
 12     8 ms     8 ms     8 ms  180.101.49.12

跟踪完成。

为了到达目标主机 www.baidu.com(180.101.49.12) 一共走了12步,进过了11个路由网关。

常用工具 tcpdump

tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具。

tcpdump 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

参考博客:https://www.jianshu.com/p/d9162722f189

例如:

监视指定网络接口的数据包

tcpdump -i ens33

监视指定主机的数据包,例如所有进入或离开node1的数据包

tcpdump -i ens33  host node1

七、系统服务与日志

系统服务

Linux 系统服务有时也称为守护程序,守护程序可分为 独立启动的服务通过一个总管程序来统一管理的服务

  • Stand Alone 独立启动的服务

  • Super Daemon 通过一个总管程序来统一管理的服务

独立发服务想要启动,主要有两种方法:

  1. 使用 /etc/init.d/ 目录中的启动脚本来启动独立服务

  2. 使用 service 命令来启动独立的服务

    service 命令实际上只是一个脚本,底层还是调用 /etc/init.d/ 中的启动脚本来启动服务。

    service Red Linux 系统专有的命令。

系统日志

绝大多数日志文件是由 rsyslogd 服务来统一管理的,只要各个进程的信息输出给这个服务,都会按照统一格式记录到不同的日志文件中。

/var/log/目录就是系统日志文件保持的位置。

[root@k8s-master ~]# ls -al /var/log/
total 8668
drwxr-xr-x. 13 root   root               4096 Nov 14 03:10 .
drwxr-xr-x. 21 root   root               4096 Nov 20  2020 ..
drwxr-xr-x.  2 root   root                282 Nov 20  2020 anaconda
drwx------.  2 root   root                 99 Oct 14 06:10 audit
-rw-------   1 root   root                  0 Jan 10  2021 boot.log
-rw-------   1 root   root              20555 Dec 30  2020 boot.log-20201230
-rw-------   1 root   root               5187 Jan 10  2021 boot.log-20210110
-rw-------   1 root   utmp              38784 Nov 14 19:16 btmp
-rw-------   1 root   utmp              89472 Oct 31 18:16 btmp-20211101
drwxr-xr-x.  2 chrony chrony                6 Nov 19  2019 chrony
-rw-r--r--   1 root   root                  0 Nov 20  2020 cloudinit-deploy.log
-rw-r--r--   1 root   adm              323212 Jan  9  2021 cloud-init.log
-rw-r--r--   1 root   root               9593 Jan  9  2021 cloud-init-output.log
drwxr-xr-x   2 root   root               4096 Jan 10  2021 containers
-rw-------   1 root   root              10454 Nov 15 15:01 cron
-rw-------   1 root   root              49736 Oct 24 03:01 cron-20211024
-rw-------   1 root   root              50016 Oct 31 03:01 cron-20211031
-rw-------   1 root   root              50015 Nov  7 03:01 cron-20211107
-rw-------   1 root   root              49366 Nov 14 03:01 cron-20211114
-rw-------   1 root   root              27398 Nov 15 14:43 dnf.librepo.log
-rw-------   1 root   root             120570 Oct 24 02:08 dnf.librepo.log-20211024
-rw-------   1 root   root             125314 Oct 31 03:11 dnf.librepo.log-20211031
.....

查看某一个日志文件中的内容:

[root@k8s-master ~]# cat /var/log/cron-20211114
Nov  7 03:36:01 k8s-master anacron[3777128]: Job `cron.daily' started
Nov  7 03:36:01 k8s-master run-parts[3782009]: (/etc/cron.daily) starting logrotate
Nov  7 03:36:01 k8s-master run-parts[3782009]: (/etc/cron.daily) finished logrotate
Nov  7 03:36:01 k8s-master anacron[3777128]: Job `cron.daily' terminated
Nov  7 03:36:01 k8s-master anacron[3777128]: Normal exit (1 job run)
Nov  7 04:01:01 k8s-master CROND[3785480]: (root) CMD (run-parts /etc/cron.hourly)
Nov  7 04:01:01 k8s-master run-parts[3785480]: (/etc/cron.hourly) starting 0anacron
Nov  7 04:01:01 k8s-master run-parts[3785480]: (/etc/cron.hourly) finished 0anacron
Nov  7 05:01:01 k8s-master CROND[3793825]: (root) CMD (run-parts /etc/cron.hourly)

一共4列:

  1. 日志产生时间
  2. 服务器的主机名
  3. 产生日志的服务名或程序名
  4. 日志产生的具体位置

rsyslogd 服务依赖配置文件 /etc/rsyslog.conf来确定各个服务不同等级的日志信息被记录的位置。

CentOS 中,自带了一个日志分析工具, 就是 logwatch

[root@localhost Packages]# yum -y install logwatch

安装完成之后,需要手工生成 logwatch 的配置文件。默认配置文件是 /etc/logwatch/conf/logwatch.conf,不过这个配置文件是空的,需要把模板配置文件复制过来。命令如下:

[root@localhost ~]# cp /usr/share/logwatch/default.conf/logwatch.conf /etc/logwatch/conf/logwatch.conf
#复制配置文件

这个配置文件的内容中绝大多数是注释,我们把注释去掉,那么这个配置文件的内容如下所示:

[root@localhost ~]# vim /etc/logwatch/conf/logwatch.conf
#查看配置文件
LogDir = /var/log
#logwatch会分析和统计/var/log/中的日志
TmpDir = /var/cache/logwatch
#指定logwatch的临时目录
MailTo = root
#日志的分析结果,给root用户发送邮件
MailFrom = Logwatch
#邮件的发送者是Logwatch,在接收邮件时显示
Print =
#是否打印。如果选择“yes”,那么日志分析会被打印到标准输出,而且不会发送邮件。我们在这里不打印,#而是给root用户发送邮件
#Save = /tmp/logwatch
#如果开启这一项,日志分析就不会发送邮件,而是保存在/tmp/logwatch文件中
#如果开启这一项,日志分析就不会发送邮件,而是保存在/tmp/logwatch文件中
Range = yesterday
#分析哪天的日志。可以识别“All”“Today”“Yesterday”,用来分析“所有日志”“今天日志”“昨天日志”
Detail = Low
#日志的详细程度。可以识别“Low”“Med”“High”。也可以用数字表示,范围为0~10,“0”代表最不详细,“10”代表最详细
Service = All
#分析和监控所有日志
Service = "-zz-network"
#但是不监控“-zz-network”服务的日志。“-服务名”表示不分析和监控此服务的日志
Service = "-zz-sys"
Service = "-eximstats"

这个配置文件基本不需要修改(我在实验时把 Range 项改为了 All,否则一会儿的实验可以分析的日志过少),它就会默认每天执行。

使用参考:http://c.biancheng.net/view/1108.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值