栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

Linux快速学习-管理篇

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux快速学习-管理篇

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

目录
  • 一、用户管理
    • passwd文件
    • shadow文件
    • group文件
    • gshadow文件
    • 添加用户
    • 设置密码
    • 其他用户管理命令
    • 用户间切换命令
  • 二、文件管理
    • 常用文件操作命令
      • cat
      • more 或者 less
      • head 和 tail
      • touch
      • 文本处理三剑客
        • grep
        • sed
        • awk
      • rm
      • mkdir
      • ls
      • ln
    • 文件权限
      • chown
  • 三、进程管理
    • ps
    • pstree
    • top
    • lsof
    • 进程优先级
    • kill pkill
  • 四、存储管理
    • 存储设备分类
    • 主引导记录
    • 挂载存储设备
    • 开机自动挂载
    • 分区
    • 磁盘管理
      • df 命令
      • du命令
      • fsck 命令
    • 磁盘阵列
  • 五、设备管理
    • 设备文件
    • 常用的设备命令
      • 查看CPU信息命令
      • 查看内存信息命令
      • 内存分析
    • 查看块设备信息
      • dmesg
      • lsblk
  • 六、网络管理
  • 七、系统服务与日志

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

一、用户管理

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 "anabcnc"   |  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 -el 或 ps -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行开始是系统的进程情况

第一行

内容说明
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的核数就表示系统高负荷运行

第二行

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

第三行CPU信息

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)?

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

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

第五行 交换分区信息

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: 这一秒磁盘进入内存的大小
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设备挂载点
六、网络管理

持续更新中

七、系统服务与日志

持续更新中

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/361985.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号