# Linux 使用

# 一、介绍

Linux,通常称为 GNU/Linux(以强调其与 GNU 软件包的兼容性和合作),是一种免费使用和自由传播的类 UNIX 操作系统。它的内核由林纳斯・本纳第克特・托瓦兹(Linus Benedict Torvalds)于 1991 年 10 月 5 日首次发布。Linux 操作系统受到 Minix 和 Unix 的启发,基于 POSIX 标准,支持多用户、多任务、多线程和多 CPU。它能够运行大多数 Unix 工具软件、应用程序和网络协议,并且支持 32 位和 64 位硬件。

# 二、VI / VIM 使用

# 进入 vi

在系统提示符号输入 vi 及文件名称后,就进入 vi 全屏幕编辑画面:$ vi myfile。不过有一点要特别注意,就是您进入 vi 之后,是处于「命令行模式(command mode)」,您要切换到「插入模式(Insert mode)」才能够输入文字。初次使用 vi 的人都会想先用上下左右键移动光标,结果电脑一直哔哔叫,把自己气个半死,所以进入 vi 后,先不要乱动,转换到「插入模式(Insert mode)」再说吧!

# 切换至插入模式(Insert mode)编辑文件

在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,这时候你就可以开始输入文字了。

# Insert 的切换

您目前处于「插入模式(Insert mode)」,您就只能一直输入文字,如果您发现输错了字!想用光标键往回移动,将该字删除,就要先按一下「ESC」键转到「命令行模式(command mode)」再删除文字。

# 退出 vi 及保存文件

在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,例如:
:w filename (输入 「w filename」将文章以指定的文件名 filename 保存)
:wq (输入「wq」,存盘并退出 vi)
:q! (输入 q!, 不存盘强制退出 vi)

# 命令行模式(command mode)功能键

  1. 插入模式
    按「i」切换进入插入模式「insert mode」,按 “i” 进入插入模式后是从光标当前位置开始输入文件;
    按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
    按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。
  2. 从插入模式切换为命令行模式
    按「ESC」键。
  3. 移动光标
    vi 可以直接用键盘上的光标来上下左右移动,但正规的 vi 是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
    按「ctrl」+「b」:屏幕往 “后” 移动一页。
    按「ctrl」+「f」:屏幕往 “前” 移动一页。
    按「ctrl」+「u」:屏幕往 “后” 移动半页。
    按「ctrl」+「d」:屏幕往 “前” 移动半页。
    按数字「0」:移到文章的开头。
    按「G」:移动到文章的最后。
    按「$」:移动到光标所在行的 “行尾”。
    按「^」:移动到光标所在行的 “行首”
    按「w」:光标跳到下个字的开头
    按「e」:光标跳到下个字的字尾
    按「b」:光标回到上个字的开头
    按「#l」:光标移到该行的第 #个位置,如:5l,56l。
  4. 删除文字
    「x」:每按一次,删除光标所在位置的 “后面” 一个字符。
    「#x」:例如,「6x」表示删除光标所在位置的 “后面” 6 个字符。
    「X」:大写的 X,每按一次,删除光标所在位置的 “前面” 一个字符。
    「#X」:例如,「20X」表示删除光标所在位置的 “前面” 20 个字符。
    「dd」:删除光标所在行。
    「#dd」:从光标所在行开始删除 #行
  5. 复制
    「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
    「#yw」:复制 #个字到缓冲区
    「yy」:复制光标所在行到缓冲区。
    「#yy」:例如,「6yy」表示拷贝从光标所在的该行 “往下数” 6 行文字。
    「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与 “y” 有关的复制命令都必须与 “p” 配合才能完成复制与粘贴功能。
  6. 替换
    「r」:替换光标所在处的字符。
    「R」:替换光标所到之处的字符,直到按下「ESC」键为止。
  7. 回复上一次操作
    「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次 “u” 可以执行多次回复。
  8. 更改
    「cw」:更改光标所在处的字到字尾处
    「c#w」:例如,「c3w」表示更改 3 个字
  9. 跳至指定的行
    「ctrl」+「g」列出光标所在行的行号。
    「#G」:例如,「15G」,表示移动光标至文章的第 15 行行首。

# Last line mode 下命令简介

在使用「last line mode」之前,请记住先按「ESC」键确定您已经处于「command mode」下后,再按「:」冒号即可进入「last line mode」。

  1. 列出行号
    「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。
  2. 跳到文件中的某一行
    「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字 15,再回车,就会跳到文章的第 15 行。
  3. 查找字符
    「/ 关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
    「? 关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。
  4. 保存文件
    「w」:在冒号输入字母「w」就可以将文件保存起来。
  5. 离开 vi
    「q」:按「q」就是退出,如果无法离开 vi,可以在「q」后跟一个「!」强制离开 vi。
    「qw」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。

# vi 命令列表

  1. 下表列出命令模式下的一些键的功能:
键位功能
h左移光标一个字符
l右移光标一个字符
k光标上移一行
j光标下移一行
^光标移动至行首
0(数字 “0”)光标移至文章的开头
G光标移至文章的最后
$光标移动至行尾
Ctrl+f向前翻屏
Ctrl+b向后翻屏
Ctrl+d向前翻半屏
Ctrl+u向后翻半屏
i在光标位置前插入字符
a在光标所在位置的后一个字符开始增加
o插入新的一行,从行首开始输入
ESC从输入状态退至命令状态
x删除光标后面的字符
#x删除光标后的#个字符
X(大写 X)删除光标前面的字符
#X删除光标前面的 #个字符
dd删除光标所在的行
#dd删除从光标所在行数的 #行
yw复制光标所在位置的一个字
#yw复制光标所在位置的 #个字
yy复制光标所在位置的一行
#yy复制从光标所在行数的 #行
p粘贴
u取消操作
cw更改光标所在位置的一个字
#cw更改光标所在位置的 #个字
  1. 下表列出行命令模式下的一些指令
键位功能
w filename储存正在编辑的文件为 filename
wq filename储存正在编辑的文件为 filename,并退出 vi
q!放弃所有修改,退出 vi
set nu显示行号
/ 或?查找,在 / 后输入要查找的内容
n 与 / 或?一起使用如果查找的内容不是想要找的关键字,按 n 或向后(与 / 联用)或向前(与?联用)继续查找,直到找到为止

# 三、使用物理卷 (PV)、逻辑卷 (LV)、卷组 (VG) 管理管理的方式挂载硬盘

# 相关概念

逻辑卷是使用逻辑卷组管理 (Logic Volume Manager) 创建出来的设备,如果要了解逻辑卷,那么首先需要了解逻辑卷管理中的一些概念。

  • 物理卷(Physical Volume,PV):也就是物理磁盘分区,如果想要使用 LVM 来管理这个分区,可以使用 fdisk 将其 ID 改为 LVM 可以识别的值,即 8e。
  • 卷组(Volume Group,VG):PV 的集合
  • 逻辑卷(Logic Volume,LV):VG 中画出来的一块逻辑磁盘

了解概念之后,逻辑卷是如何产生的就很清晰了:物理磁盘或者磁盘分区转换为物理卷,一个或多个物理卷聚集形成一个或多个卷组,而逻辑卷就是从某个卷组里面抽象出来的一块磁盘空间。具体架构如下:

# 为什么要使用逻辑卷

对于物理磁盘,我们直接分区、格式化为文件系统之后就可以使用,那为什么还需要使用逻辑卷的方式来管理磁盘呢?我认为主要有 2 个原因:

  • 业务上使用大容量的磁盘。举个例子,我们需要在 /data 下挂载 30TB 的存储,对于单个磁盘,是无法满足要求的,因为市面上没有那么大的单块磁盘。但是如果我们使用逻辑卷,将多个小容量的磁盘聚合为一个大的逻辑磁盘,就能满足需求。
  • 扩展和收缩磁盘。在业务初期规划磁盘时,我们并不能完全知道需要分配多少磁盘空间是合理的,如果使用物理卷,后期无法扩展和收缩,如果使用逻辑卷,可以根据后期的需求量,手动扩展或收缩。

# 创建物理卷(PV)

通过上面的逻辑卷架构图,可以知道,如果要创建逻辑卷,需要先有物理磁盘或者磁盘分区,然后使用物理磁盘或磁盘分区创建物理卷,再使用物理卷创建卷组,最后使用卷组创建逻辑卷。接下来一步一步创建逻辑卷。

创建物理卷是创建逻辑卷的第一步,创建物理卷相关命令有:

# pvcreate 用于创建物理卷
pvcreate /dev/sdb
# pvdisplay、pvsca、pvs 用于查看物理卷 pvdisplay
pvdisplay
pvs
pvscan

可以使用磁盘直接创建物理卷,也可以使用磁盘分区创建物理卷。两种方法稍微有些差距,下面进行说明。

  1. 使用磁盘直接创建物理卷

直接使用物理磁盘创建物理卷没有什么需要特别注意的,直接创建即可。

# 使用 fdisk -l 确认磁盘,可以看到 /dev/sdb 未做分区处理
[root@masterdb ~]# fdisk -l /dev/sdb
Disk /dev/sdb: 2147 MB, 2147483648 bytes, 4194304 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
# 使用 pvcreate 将 sdb 磁盘创建为物理卷
[root@masterdb ~]# pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
# 使用 pvdisplay 确认物理卷信息
[root@masterdb ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda3
  VG Name               centos
  PV Size               <68.73 GiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              17593
  Free PE               0
  Allocated PE          17593
  PV UUID               FRxq7G-1XWu-dPeW-wEwO-322y-M9XR-0ExebA
   
  "/dev/sdb" is a new physical volume of "2.00 GiB"
  --- NEW Physical volume ---
  PV Name               /dev/sdb
  VG Name               
  PV Size               2.00 GiB
  Allocatable           NO
  PE Size               0   
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               nsL75f-o3fD-apyz-SSY0-miUi-4RYf-zVLIT6
   # 也可以使用 pvs 确认物理卷信息,不过能够看到的信息比 pvdisplay 少
[root@masterdb ~]# pvs 
  PV         VG     Fmt  Attr PSize  PFree
  /dev/sda3  centos lvm2 a--  68.72g    0 
  /dev/sdb          lvm2 ---   2.00g 2.00g
[root@masterdb ~]#
  1. 使用磁盘分区创建物理卷

磁盘分区之后,磁盘 id 为 83,如果要使用逻辑卷管理,需要将 id 改为 8e,才能创建物理卷。

#修改分区类型为 8e
[root@masterdb ~]# fdisk /dev/sdc 
 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): t     #t 可以修改分区代码
 Partition number (1,2, default 2): 1            #选择 1 分区进行修改
 Hex code (type L to list all codes): L          #如果不知道类型,可以用”L” 列出可以选择的修改代码
  0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
  1  FAT12           27  Hidden NTFS Win 82  Linux swap / So c1  DRDOS/sec (FAT-
  2  XENIX root      39  Plan 9          83  Linux           c4  DRDOS/sec (FAT-
  3  XENIX usr       3c  PartitionMagic  84  OS/2 hidden C:  c6  DRDOS/sec (FAT-
  4  FAT16 <32M      40  Venix 80286     85  Linux extended  c7  Syrinx         
  5  Extended        41  PPC PReP Boot   86  NTFS volume set da  Non-FS data    
  6  FAT16           42  SFS             87  NTFS volume set db  CP/M / CTOS / .
  7  HPFS/NTFS/exFAT 4d  QNX4.x          88  Linux plaintext de  Dell Utility   
  8  AIX             4e  QNX4.x 2nd part 8e  Linux LVM       df  BootIt         
  9  AIX bootable    4f  QNX4.x 3rd part 93  Amoeba          e1  DOS access     
  a  OS/2 Boot Manag 50  OnTrack DM      94  Amoeba BBT      e3  DOS R/O        
  b  W95 FAT32       51  OnTrack DM6 Aux 9f  BSD/OS          e4  SpeedStor      
  c  W95 FAT32 (LBA) 52  CP/M            a0  IBM Thinkpad hi eb  BeOS fs        
  e  W95 FAT16 (LBA) 53  OnTrack DM6 Aux a5  FreeBSD         ee  GPT            
  f  W95 Ext'd (LBA) 54  OnTrackDM6      a6  OpenBSD         ef  EFI (FAT-12/16/
 10  OPUS            55  EZ-Drive        a7  NeXTSTEP        f0  Linux/PA-RISC b
 11  Hidden FAT12    56  Golden Bow      a8  Darwin UFS      f1  SpeedStor      
 12  Compaq diagnost 5c  Priam Edisk     a9  NetBSD          f4  SpeedStor      
 14  Hidden FAT16 <3 61  SpeedStor       ab  Darwin boot     f2  DOS secondary  
 16  Hidden FAT16    63  GNU HURD or Sys af  HFS / HFS+      fb  VMware VMFS    
 17  Hidden HPFS/NTF 64  Novell Netware  b7  BSDI fs         fc  VMware VMKCORE 
 18  AST SmartSleep  65  Novell Netware  b8  BSDI swap       fd  Linux raid auto
 1b  Hidden W95 FAT3 70  DiskSecure Mult bb  Boot Wizard hid fe  LANstep        
 1c  Hidden W95 FAT3 75  PC/IX           be  Solaris boot    ff  BBT            
 1e  Hidden W95 FAT1 80  Old Minix      
 Hex code (type L to list all codes): 8e         #选择8e
 Changed type of partition 'Linux' to 'Linux LVM'
Command (m for help): w               # 保存
 The partition table has been altered!
Calling ioctl() to re-read partition table.
 Syncing disks.
 [root@masterdb ~]#
 
#接着进行创建物理卷(PV)
pvcreate /dev/sdc1
pvcreate /dev/sdc2

# 创建、扩容卷组

  1. 创建卷组
# 使用 vgcreate 创建卷组
vgcreate VG_NAME device1 ... devicen
# 使用 vgdosplay、vgscan、vgs 命令查看卷组
vgdisplay
vgscan
vgs
## 演示创建卷组
# 使用 vgcreate 创建卷组 VG_TEST, 包含物理卷:/dev/sdb 和 /dev/sdc1
vgcreate VG_TEST /dev/sdb /dev/sdc1
  Volume group "VG_TEST" successfully created
# 查看方法一:使用 vgdisplay 查看卷组信息 [root@masterdb ~]# vgdisplay
  --- Volume group ---
  VG Name               VG_TEST
  System ID             
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               2.99 GiB
  PE Size               4.00 MiB
  Total PE              766
  Alloc PE / Size       0 / 0   
  Free  PE / Size       766 / 2.99 GiB
  VG UUID               DmY2Nz-ietc-2Y8Y-7A1b-1cpT-qEeV-XrgURn
...  
   
# 查看方法二:使用 vgscan 查看卷组信息
[root@masterdb ~]# vgscan
  Reading volume groups from cache.
  Found volume group "VG_TEST" using metadata type lvm2
  Found volume group "centos" using metadata type lvm2
# 查看方法三:使用 vgs 查看卷组信息
[root@masterdb ~]# vgs 
  VG      #PV #LV #SN Attr   VSize  VFree
  VG_TEST   2   0   0 wz--n-  2.99g 2.99g
  centos    1   4   0 wz--n- 68.72g    0
  1. 扩展卷组

如果在使用过程中,发现要使用的空间大于卷组的空间,可以对卷组进行扩容,把新的物理卷 (PV) 加入到卷组中,语法为

vgextend VG_NAME device1 ... devicen
## 接下来演示将 sdc2 加入到卷组 VG_TEST 中。
# 使用 vgextend 扩容卷组 VG_TEST
[root@masterdb ~]# vgextend VG_TEST /dev/sdc2  
  Volume group "VG_TEST" successfully extended
#通过 vgdisplay 查看结果

# 创建、扩容逻辑卷

  1. 创建逻辑卷

有了卷组,就可以创建逻辑卷 (LV) 了,创建逻辑卷相关命令有:

# 使用 lvcreate 创建逻辑卷
lvcreate –L SIZE –n LV_NAME VG_NAME
使用lvdisplay、lvscan、lvs查看逻辑卷
lvdisplay
lvscan
lvs
# 接下来演示使用 VG_TEST 创建逻辑卷 lv_test
# 使用 lvcreate 创建逻辑卷 lv_test
[root@masterdb ~]# lvcreate -L 1g -n lv_test VG_TEST
  Logical volume "lv_test" created.
# 查看方法一:使用 lvdisplay 查看逻辑卷 [root@masterdb ~]# lvdisplay 
  --- Logical volume ---
  LV Path                /dev/VG_TEST/lv_test
  LV Name                lv_test
  VG Name                VG_TEST
  LV UUID                RqWMOG-wCJJ-deu4-dIgv-c5hI-Bsqa-FHgh4E
  LV Write Access        read/write
  LV Creation host, time masterdb, 2020-05-13 22:42:45 +0800
  LV Status              available
  # open                 0
  LV Size                1.00 GiB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:4
...
   
# 查看方法二:使用 lvscan 查看逻辑卷  
[root@masterdb ~]# lvscan 
  ACTIVE            '/dev/VG_TEST/lv_test' [1.00 GiB] inherit
  ACTIVE            '/dev/centos/mysql' [<45.00 GiB] inherit
  ACTIVE            '/dev/centos/swap' [<3.73 GiB] inherit
  ACTIVE            '/dev/centos/home' [10.00 GiB] inherit
  ACTIVE            '/dev/centos/root' [10.00 GiB] inherit
  
# 查看方法三:使用 lvs 查看逻辑卷  
[root@masterdb ~]# lvs 
  LV      VG      Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_test VG_TEST -wi-a-----   1.00g                                                    
  home    centos  -wi-ao----  10.00g                                                    
  mysql   centos  -wi-ao---- <45.00g                                                    
  root    centos  -wi-ao----  10.00g                                                    
  swap    centos  -wi-ao----  <3.73g

创建完 lv 之后,格式化挂载即可使用

# 创建文件系统
[root@masterdb ~]# mkfs.ext4 /dev/VG_TEST/lv_test 
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
 OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
 Stride=0 blocks, Stripe width=0 blocks
 65536 inodes, 262144 blocks
 13107 blocks (5.00%) reserved for the super user
 First data block=0
 Maximum filesystem blocks=268435456
 8 block groups
 32768 blocks per group, 32768 fragments per group
 8192 inodes per group
 Superblock backups stored on blocks: 
     32768, 98304, 163840, 229376
Allocating group tables: done                            
 Writing inode tables: done                            
 Creating journal (8192 blocks): done
 Writing superblocks and filesystem accounting information: done
# 创建挂载点 [root@masterdb ~]# mkdir /test 
# 挂载文件系统
[root@masterdb ~]# mount /dev/VG_TEST/lv_test /test
# 确认结果
[root@masterdb ~]# df –h 
 Filesystem                   Size  Used Avail Use% Mounted on
 /dev/mapper/centos-root       10G  4.1G  5.9G  42% /
 ...
 /dev/mapper/VG_TEST-lv_test  976M  1.3M  924M   1% /test
  1. 扩容逻辑卷

使用如下命令进行扩容

# 使用 lvextend 扩容 lv,+SIZE 代表增加的空间
lvextend -L +SIZE lv_device
# 调整文件系统的大小
resize2fs device lv_device
#接下来演示使用对逻辑卷 lv_test 扩容 500M。
#进行扩容操作:
# 对 lv 进行扩容,增加 500M 空间
[root@masterdb ~]# lvextend -L +500M /dev/VG_TEST/lv_test 
  Size of logical volume VG_TEST/lv_test changed from 1.00 GiB (256 extents) to <1.49 GiB (381 extents).
  Logical volume VG_TEST/lv_test successfully resized.
#之后查看大小,实际是未发生改变
#需要调整文件系统的大小
# 使用 resize2fs 调整文件系统的大小
[root@masterdb ~]# resize2fs /dev/VG_TEST/lv_test 
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/VG_TEST/lv_test is mounted on /test; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 1
The filesystem on /dev/VG_TEST/lv_test is now 390144 blocks long.
#确认是否发生变法

<span style="color: red;"> 注意:</span > 如果遇到大磁盘的情况(超过 2T)需要换一种分区方式

#查看磁盘
df -h
#查看磁盘分区挂载情况
lsblk
#fdisk 和 parted 都是磁盘分区工具 大于 2t 的只能用 parted,我这里用 parted
#进入 parted 命令交互后,将 /dev/sdb 进行分区
parted /dev/vdb
#新建磁盘标签类型为 GPT
mklabel gpt
#命令格式
#mkpart PART-TYPE [FS-TYPE] START END
mkpart vdb1 ext4 0% 50%  
mkpart vdb2 ext4 50% 100% 
#打印
print
#使用 toggle 更改硬盘类型
toggle 1 lvm
#退出
quit

# 四、虚拟内存设置

https://www.cnblogs.com/yuanyongqiang/p/15650176.html

# 1、增加

# 查看当前虚拟内存的状态
$ swapon -s		
# 创建一个用于存放虚拟内存文件的目录,可以是其它文件名,已存在则不需要创建
$ mkdir /swap	
# 创建一个占用空间大小为 64GB 的文件
$ fallocate -l 64G /swap/swapfile	
# 将创建的文件制作成虚拟内存文件
$ mkswap /swap/swapfile	
# 激活虚拟内存
$ swapon /swap/swapfile

# 2、删除

# 关闭所有虚拟内存
$ swapoff -a 	
# 关闭指定虚拟内存
$ swapoff /swap/swapfile

# 3、设置开机自动启动虚拟内存

编辑 /etc/fstab 文件,在尾部添加以下内容:

/swap/swapfile   swap  swap  defaults  0  0

# 五、ssh /scp

# ssh root@192.168.0.16

# 六、内存使用情况 / 性能

free -h
top
vmstats
sar -r 1
iostat -x 1
#查看系统进程中,进程使用内存情况
#下面这个命令会显示所有进程,并按照内存使用量(第四列,以 KB 为单位)进行排序。
ps -aux | sort -nk +4
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root     13212  0.0  0.1  52420  2264 ?        Ss   May17   0:00 nginx: master process ./nginx
nobody   24925  0.0  0.3  52552  5584 ?        S    Nov05   0:08 nginx: worker process
root     15755  0.0  0.7 1302344 12688 ?       Ssl  Jul16   8:22 /home/software/alist/alist server
root      1979  0.0  8.4 1105476 152380 ?      Sl   Jul26  42:10 hexo
polkitd  30698  0.6 18.1 1829444 325884 ?      Ssl  Aug24 713:27 mysqld
root     23251  0.2 45.7 3109904 822624 ?      Sl   Nov05  10:30 java -Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom -jar app.jar --spring.profiles.active=prod

# 七、CPU 使用情况 / 性能

#通过 top 命令查看
top -H
[root@localhost ~]# top -H
top - 17:42:43 up 4 days,  6:03,  2 users,  load average: 109.27, 109.27, 108.97
Threads: 559 total,   1 running, 558 sleeping,   0 stopped,   0 zombie
%Cpu(s):  1.9 us,  1.9 sy,  0.0 ni, 96.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem : 49036764 total, 34196168 free,  6335496 used,  8505100 buff/cache
KiB Swap:  8126460 total,  8126460 free,        0 used. 41746884 avail Mem

在 Linux 系统中, top 命令输出的 %Cpu(s) 行提供了 CPU 使用情况的统计信息。这些值的含义如下:

  • us:用户空间占用 CPU 的百分比(User Space)。运行用户进程所花费的 CPU 时间比例。
  • sy:系统空间占用 CPU 的百分比(System Space)。运行系统进程所花费的 CPU 时间比例。
  • ni:改变过优先级的进程占用 CPU 的百分比(Nice)。使用 nice 命令或优先级修改过的用户进程所占用的 CPU 时间比例。
  • id:空闲 CPU 百分比(Idle)。CPU 空闲时间比例。
  • wa:等待输入输出的 CPU 时间百分比(Wait I/O)。CPU 等待输入输出操作完成所花费的时间比例。
  • hi:硬件中断百分比(Hardware IRQ)。处理硬件中断所花费的时间比例。
  • si:软件中断百分比(Software IRQ)。处理软件中断所花费的时间比例。
  • st:虚拟机偷取时间百分比(Stolen Time)。运行虚拟机监视器的 CPU 时间比例。

根据你提供的信息:

%Cpu(s):  1.9 us,  1.9 sy,  0.0 ni, 96.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
  • 用户空间 ( us ): 1.9%
  • 系统空间 ( sy ): 1.9%
  • Nice ( ni ): 0.0%
  • 空闲 ( id ): 96.3%
  • 等待 I/O ( wa ): 0.0%
  • 硬件中断 ( hi ): 0.0%
  • 软件中断 ( si ): 0.0%
  • 虚拟机偷取时间 ( st ): 0.0%

当前 CPU 占用率是用户空间、系统空间和 Nice 值的总和,即:

CPU 占用率 = us+sy+ni=1.9%+1.9%+0.0%=3.8%

所以,当前系统的 CPU 占用率是 3.8%。

# 九、硬盘使用情况

# 语法

Usage: iostat [ options ] [ [ ] ]
Options are:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | … } ]
[ [ -T ] -g <group_name> ] [ -p [ [,…] | ALL ] ]
[ […] | ALL ]

主要分为 4 个部分:iostat [选项] [< 时间间隔 > < 次数 > ]

# 参数详解

-c: 仅显示CPU统计信息,与-d选项互斥
-d:仅显示磁盘统计信息,与-c选项互斥
-h:使用NFS(Network File System网络文件系统)的输出报告,更加友好可读。需要使用-n参数开启NFS。
-k:以 kb 为单位显示,默认情况下,iostat的输出是以block作为计量单位,加上这个参数可以以kb作为计量单位显示。(该参数仅在linux内核版本2.4以后数据才是准确的)
-m:以 mb 为单位显示(该参数仅在linux内核版本2.4以后数据才是准确的)
-N:显示磁盘阵列(LVM) 信息。
-V:显示版本信息
-x:显示更详细的磁盘报告信息,默认只显示六列,加上该参数后会显示更详细的信息(该参数仅在linux内核版本2.4以后数据才是准确的)
-n:显示NFS(Network File System网络文件系统) 使用情况(该参数仅在linux内核版本2.6.17以后有效)
-t:输出报告时显示系统时间
-p:[ { device [,…] | ALL } ] 显示磁盘分区的相关统计信息(默认粒度只到磁盘,没有显示具体的逻辑分区)
-y:跳过不显示第一次报告的数据,因为iostat使用的是采样统计,所以iostat的第一次输出的数据是自系统启动以来的累计的数据
iostat -d -k -x 1 10 命令查询(查询磁盘使用情况的详细信息,以KB为单位,每秒刷新一次,共刷新10次)
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.01     0.01    0.67    0.29    76.85     1.99   165.34     0.02   16.12   15.23   18.20   3.02   0.29
sdb               0.11    19.75    4.38   17.47   327.72   370.36    63.91     0.32   14.41   29.11   10.73   6.45  14.10
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sda               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00    0.00    0.00   0.00   0.00
sdb               0.00     0.00    0.00    0.00     0.00     0.00     0.00     1.00    0.00    0.00    0.00   0.00 100.00
  iostat输 出项目说明
              rrqm/s
  将读入请求合并后,每秒发送到设备的读入请求数.
              wrqm/s
  将写入请求合并后,每秒发送到设备的写入请求数.
              r/s
  每秒发送到设备的读入请求数.
              w/s
  每秒发送到设备的写入请求数.
              rsec/s
  每秒从设备读入的扇区数.
              wsec/s
  每秒向设备写入的扇区数.
              rkB/s
  每秒从设备读入的数据量,单位为K.
              wkB/s
  每秒向设备写入的数据量,单位为K.
              avgrq-sz
  发送到设备的请求的平均大小,单位是扇区.
              avgqu-sz
  发送到设备的请求的平均队列长度.
              await
  I/O请求平均执行时间.包括发送请求和执行的时间.单位是毫秒.
              svctm
  发送到设备的I/O请求的平均执行时间.单位是毫秒.
              %util
  在I/O请求发送到设备期间,占用CPU时间的百分比.用于显示设备的带宽利用率.
  当这个值接近100%时,表示设备带宽已经占满.

# 性能分析

  1. I/O 瓶颈

    如果 % iowait 的值过高,表示硬盘存在 I/O 瓶颈

  2. 内存不足

    % idle 值高,表示 CPU 较空闲,如果 % idle 值高但系统响应慢时,有可能是 CPU 在等待分配内存,此时应加大内存容量

  3. CPU 资源不足

    如果 % idle 值持续低于 10,那么系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU

  4. IOPS 计算

    计算方式: r/s+w/s
    I/O per second,即每秒钟可以处理的 I/O 个数。
    随机读写频繁的应用(一般指 I/O 小于 64KB 的应用场景),如小文件存储 (图片)、OLTP 数据库、邮件服务器,关注随机读写性能,IOPS 是关键衡量指标。

  5. 吞吐量 计算

    计算方式: rkB/s+wkB/s
    顺序读写频繁的应用,传输大量连续数据,如电视台的视频编辑,视频点播 VOD (Video On Demand),关注连续读写性能。数据吞吐量是关键衡量指标。

# 十、dmesg 命令

# 命令语法

dmesg [options]

# 选项说明

-c  #显示信息后,清除ring buffer中的内容
-s<缓冲区大小>  #默认值为8196,刚好等于ring buffer的大小
-n  #设置记录信息的层级
-D  #禁用打印消息到控制台
-E  #启用打印消息到控制台
-h  #打印帮助文本并退出
-k  #打印内核消息
-n  #设置将消息记录到控制台的级别
-r  #打印原始消息缓冲区
-s  #使用多少大小的缓冲区来查询内核环缓冲区。 默认情况下为16392
-T  #打印人类可读时间戳
-t  #不打印内核的时间戳
-u  #打印用户空间消息
-V  #输出版本信息并退出
-x  #将设施和级别(优先级)编号解码为可读的前缀

# 应用举例

  1. 查看前 20 行开机信息
[root@centos7 ~]# dmesg | head -n 20
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 3.10.0-1127.18.2.el7.x86_64 (mockbuild@kbuilder.bsys.centos.org) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC) ) #1 SMP Sun Jul 26 15:27:06 UTC 2020
[    0.000000] Command line: BOOT_IMAGE=/vmlinuz-3.10.0-1127.18.2.el7.x86_64 root=/dev/mapper/centos-root ro crashkernel=auto spectre_v2=retpoline rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet LANG=en_US.UTF-8
[    0.000000] Disabled fast string operations
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000009ebff] usable
[    0.000000] BIOS-e820: [mem 0x000000000009ec00-0x000000000009ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000000dc000-0x00000000000fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000003fedffff] usable
[    0.000000] BIOS-e820: [mem 0x000000003fee0000-0x000000003fefefff] ACPI data
[    0.000000] BIOS-e820: [mem 0x000000003feff000-0x000000003fefffff] ACPI NVS
[    0.000000] BIOS-e820: [mem 0x000000003ff00000-0x000000003fffffff] usable
[    0.000000] BIOS-e820: [mem 0x00000000f0000000-0x00000000f7ffffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fec00000-0x00000000fec0ffff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fee00000-0x00000000fee00fff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000fffe0000-0x00000000ffffffff] reserved
[    0.000000] NX (Execute Disable) protection: active
[    0.000000] SMBIOS 2.4 present.
  1. 查看与内存相关的开机信息
[root@centos7 ~]# dmesg | grep -i memory
[    0.000000] Base memory trampoline at [ffff9102c0098000] 98000 size 24576
[    0.000000] crashkernel=auto resulted in zero bytes of reserved memory.
[    0.000000] Early memory node ranges
[    0.000000] PM: Registered nosave memory: [mem 0x0009e000-0x0009efff]
[    0.000000] PM: Registered nosave memory: [mem 0x0009f000-0x0009ffff]
[    0.000000] PM: Registered nosave memory: [mem 0x000a0000-0x000dbfff]
[    0.000000] PM: Registered nosave memory: [mem 0x000dc000-0x000fffff]
[    0.000000] PM: Registered nosave memory: [mem 0x3fee0000-0x3fefefff]
[    0.000000] PM: Registered nosave memory: [mem 0x3feff000-0x3fefffff]
[    0.000000] Memory: 972140k/1048576k available (7784k kernel code, 524k absent, 75912k reserved, 5958k data, 1980k init)
[    0.000000] please try 'cgroup_disable=memory' option if you don't want memory cgroups
[    0.755288] Initializing cgroup subsys memory
[    1.619645] x86/mm: Memory block size: 128MB
[    3.669071] Freeing initrd memory: 20628k freed
[    3.933907] Non-volatile memory driver v1.3
[    3.935079] crash memory driver: version 1.1
[    4.000261] Freeing unused kernel memory: 1980k freed
[    4.001692] Freeing unused kernel memory: 396k freed
[    4.003171] Freeing unused kernel memory: 540k freed
[    5.956205] [drm] Max dedicated hypervisor surface memory is 0 kiB
[    5.956206] [drm] Maximum display memory size is 32768 kiB
[    5.968934] [TTM] Zone  kernel: Available graphics memory: 497842 kiB
  1. 查看与磁盘相关的开机信息
[root@centos7 ~]# dmesg | grep -i disk
[    0.000000] RAMDISK: [mem 0x357a7000-0x36bcbfff]
[    3.738914] VFS: Disk quotas dquot_6.5.2
[    4.013333] systemd[1]: Running in initial RAM disk.
[    6.295432] sd 0:0:0:0: [sda] Attached SCSI disk
[root@centos7 ~]# dmesg | grep -i sda
[    6.291698] sd 0:0:0:0: [sda] 41943040 512-byte logical blocks: (21.4 GB/20.0 GiB)
[    6.291830] sd 0:0:0:0: [sda] Write Protect is off
[    6.291831] sd 0:0:0:0: [sda] Mode Sense: 61 00 00 00
[    6.292032] sd 0:0:0:0: [sda] Cache data unavailable
[    6.292033] sd 0:0:0:0: [sda] Assuming drive cache: write through
[    6.294046]  sda: sda1 sda2
[    6.295432] sd 0:0:0:0: [sda] Attached SCSI disk
[   15.843965] XFS (sda1): Mounting V5 Filesystem
[   16.778908] XFS (sda1): Starting recovery (logdev: internal)
[   16.801659] XFS (sda1): Ending recovery (logdev: internal)

dmesg | egrep -i -B100 'killed process'

# 十一、source

source 命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录

vi /etc/profile
#通常用于改了环境变量配置文件后时期立即生效
source /etc/profile

# 十二、文件 / 文件夹相关

  1. cd

  1. mkdir

  1. ls

  1. pwd

  1. rmdir

  2. rm

  3. cp

#注意:要-r表示递归,如果没有则只能传递文件,不能传递文件夹
nohup cp -r a b &

#排除指定文件
nohup cp !(file1|file2) -r /source /sink &
  1. mv
mv [选项] 源文件夹 目标文件夹
  1. chmod

  2. touch

  3. cat

  4. less

  5. tail

  6. grep

  7. echo

  8. du

#du 命令是查看文件大小的命令

#列出当前目录下所有文件大小
du -ls

# 十三、防火墙

  1. 查看防火墙状态
systemctl status firewalld
systemctl stop firewalld
#系统启动后,自动启动防火墙
systemctl enable firewalld
#现在启动防火墙,立即生效
systemctl start firewalld
  1. 检查端口,关闭端口访问
# 添加要开放的端口
firewall-cmd --zone=public --add-port=8080/tcp --permanent
#添加要开放的端口(范围)
firewall-cmd --zone=public --add-port=1-8080/tcp --permanent
# 关闭端口
firewall-cmd --zone=public --remove-port=8080/tcp --permanent
# 重新载入防火墙设置,使设置生效
firewall-cmd --reload
# 查询打开的端口
firewall-cmd --zone=public --list-ports
  1. 开放 IP 地址和端口
# 允许 ip 192.168.1.1 访问 1521 端口
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="1521" accept"
#删除规则
firewall-cmd --permanent --remove-rich-rule="rule family="ipv4" source address="192.168.1.1" port protocol="tcp" port="1521" accept"
# 重新载入防火墙
firewall-cmd --reload
# 查看已经设置的规则
firewall-cmd --zone=public --list-rich-rules
  1. 实际情况使用
#例如我需要除了 8080 端口对所有 ip 开放, 8080 端口只对指定 ip 开放
systemctl enable firewalld
systemctl start firewalld
#开放除 8080 所有端口对所有 ip 使用, 这里指定了端口范围
firewall-cmd --zone=public --add-port=1-8079/tcp --permanent
firewall-cmd --zone=public --add-port=8081-65535/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
[root@localhost ~ ]# firewall-cmd --zone=public --list-ports
1-8079/tcp 8081-65535/tcp
#开放 8080 对指定 ip 使用
firewall-cmd --permanent --add-rich-rule="rule family="ipv4" source address="192.168.1.29" port protocol="tcp" port="8080" accept"
firewall-cmd --reload
[root@localhost ~ ]# firewall-cmd --zone=public --list-rich-rules
1-8079/tcp 8081-65535/tcp
rule family="ipy4" source address="192.168.1.29" port port="8080" protocol="tcp" accept
#通过上面的配置最后达到了效果 只有 192.168.1.29 才能访问 8080 端口,其他 ip 都会被拦截

# 十四、用户 / 用户组相关

  1. 创建用户

# 十五、系统管理相关

  1. 日期管理
date [参数选项]
#参数选项:
-d<字符串>  :显示字符串所指的日期与时间,字符串前后必须加上双引号
-s<字符串> :根据字符串来设置日期与时间,字符串前后必须加上双引号,备注:注意权限的问题
-u        ;显示GMT
--help    ;在线帮助
--version :显示版本信息
  1. 显示用户
logname [--help] [--version] 显示登录账号的信息
#参数选项:
--help    ; 在线帮助
---version : 显示版本信息
  1. 切换用户
su [-fmp] [-c command] [-s shell] [--help][--version][-] [uesr][apg]
#实例:
su -c ls root 切换到root当中之后,执行ls命令,然后再切换回来
  1. top 命令
##top 命令经常用来监控 Linux 系统 CPU、内存的使用情况
top           实时显示所有的进程信息
top  -c       实现显示所有的进程信息(显示完整命令)
top  -p   pid 实时显示指定进程的信息
top -H        实时显示
结束监控的快捷键:  q
#常用:
top -c -H
top -H -p 20589 (监控指定pid的内存使用情况等)
asks: 426 total,   1 running, 417 sleeping,   0 stopped,   8 zombie
%Cpu(s):  0.3 us,  0.3 sy,  0.0 ni, 99.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :  64098.3 total,  55477.2 free,   4243.6 used,   4377.4 buff/cache
MiB Swap:   4131.9 total,   4131.9 free,      0.0 used.  59217.4 avail Mem 
    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND                                            
      1 root      20   0  176320  20096   9728 S   0.0   0.0   0:04.01 systemd                                            
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.10 kthreadd 
第2行显示 CPU 相关信息,当前用户空间占用 CPU 百分比为 0.0%;内核空间占用 CPU 百分比为 0.0%,用户进程空间内改变过优先级的进程占用 CPU 百分比为 0.0%,空闲 CPU 百分比为 100.0%,等待输入输出的 CPU 时间百分比为 0.0%,CPU 服务于硬件中断所耗费的时间总额为 0.0%,CPU 服务软中断所耗费的时间总额为 0.0%,虚拟机被 hypervisor 偷去的 CPU 时间为 0.0
  1. ps 命令
ps              显示当前正在运行的进程信息
ps    -A        显示系统当中所有的进程信息
ps   -ef        显示系统当中所有的进程信息(完整信息)
ps   -u  用户名  显示指定用户的进程信息
#常用结合 grep 命令
ps -ef | grep tomcat
[root@localhost ~]# ps -ef | grep java
root      11188  11061  0 3月06 ?       00:00:03 ./xjar java -Xms512m -Xmx512m -Djava.security.egd=file:/dev/./urandom -jar martin-extension-ncnb.xjar
  1. kill 命令
kill  进程PID      杀死指定进程
kill  -9   进程PID  彻底杀死指定进程 
kill  -9  $(ps    -ef|grep 用户名)    杀死指定用户的所有进程
kill  -u   用户名     杀死指定用户所有进程
  1. 关机命令
shutdown                    不同的版本有所差异
shutdown  - h now           立马关机
shutdown   +1 "警告信息"      等待一分钟,之后关机,并且出现警告信息
shutdown  -r  +1 "警告信息"   等待一分钟,之后重启,并且出现警告信息
shutdown  -c                 取消当前的关机操作
  1. 重启命令
reboot                   立马重启
  1. who 命令
who                  显示当前登录系统的用户
who  -H              显示明细(标题)信息
#例如
[root@localhost ~]# who
root     pts/0        2024-03-25 16:24 (192.168.0.44)
[root@localhost ~]# who -H
名称   线路       时间           备注
root     pts/0        2024-03-25 16:24 (192.168.0.44)
  1. timedatectl 命令
timedatectl status                          显示系统的当前时间和日期
timedatectl list-timezones                  查看所有可用的时区
timedatectl set-timezones  "ASia/ShangHai"  设置本地时区
timedatectl set-ntp false                   禁止时间同步
timedatectl set-time "2019-03-11 20:45:00"  设置时间
timedatectl set-ntp true                    启用时间同步
#例如
[root@localhost ~]# timedatectl status
      Local time: 一 2024-03-25 19:34:55 CST
  Universal time: 一 2024-03-25 11:34:55 UTC
        RTC time: 一 2024-03-25 11:34:58
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: yes
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
[root@localhost ~]# timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
  1. clear 命令
clear       清除当前的屏幕,实际上是之前的内容,顶出屏幕外
  1. ping 命令
ping  网址/IP地址
ping  - c 次数   网址/IP地址
#例如
[root@localhost ~]# ping 192.168.0.44
PING 192.168.0.44 (192.168.0.44) 56(84) bytes of data.
64 bytes from 192.168.0.44: icmp_seq=1 ttl=64 time=0.386 ms
64 bytes from 192.168.0.44: icmp_seq=2 ttl=64 time=0.300 ms
^C #手动 ctrl+c 结束 
--- 192.168.0.44 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.300/0.343/0.386/0.043 ms
[root@localhost ~]# ping -c 1 192.168.0.44
PING 192.168.0.44 (192.168.0.44) 56(84) bytes of data.
64 bytes from 192.168.0.44: icmp_seq=1 ttl=64 time=0.540 ms
--- 192.168.0.44 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.540/0.540/0.540/0.000 ms
[root@localhost ~]#
  1. telnet 命令
telnet ip 端口       测试指定ip的端口是否可以连通
#列如
#不能连通的情况
[root@localhost ~]# telnet 192.168.0.44 8888
Trying 192.168.0.44...
telnet: connect to address 192.168.0.44: Connection refused
#能连通的情况
[root@localhost ~]# telnet 192.168.0.44 3306
Trying 192.168.0.44...
Connected to 192.168.0.44.
Escape character is '^]'.
N
5.7.29-logml_p5#dG7!k
;Wmysql_native_password
  1. netstat 命令

Linux 中的 netstat 命令用于显示与 IP、TCP、UDP 和 ICMP 协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat 是在内核中访问网络及相关信息的程序,它能提供 TCP 连接,TCP 和 UDP 监听,进程内存管理的相关报告。

netstat  -a   显示详细的连接状况
netstat  -i   显示网卡列表
#结合 grep 命令
netstat -ap | grep ssh        找出程序运行的端口
netstat -anpt | grep ':8888'  找出运行在指定端口的进程
#列如
[root@localhost ~]# netstat -anpt | grep ':8888'
tcp6       0      0 :::8888                 :::*                    LISTEN      159011/java
  1. ifconfig
1. 语法:
    ifconfig
    ifconfig  网卡名称  down
    ifconfig  网卡名称  up
    ifconfig  网卡名称  ip地址
    ifconfig  网卡名称  ip地址   netmask  子网掩码
        
2. 说明:
    ifconfig                        显示激活的网卡信息
    ifconfig  ens37  down           关闭网卡 ens37
    ifconfig  ens37  up             启动网卡 ens37
    ifconfig  ens37  192.168.0.44  配置网卡 ens37 的IP地址
    ifconfig  ens37  192.168.0.44  netmask  255.255.255.0   配置网卡 ens37 的IP地址 和 子网掩码

  1. lsblk 命令
lsblk      列出硬盘的使用情况
lsblk  -f  显示系统信息
#例如
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda             8:0    0   931G  0 disk 
├─sda1          8:1    0   200M  0 part /boot/efi
├─sda2          8:2    0     1G  0 part /boot
└─sda3          8:3    0 929.8G  0 part 
  ├─nlas-root 253:0    0    50G  0 lvm  /
  ├─nlas-swap 253:1    0   7.8G  0 lvm  [SWAP]
  └─nlas-home 253:2    0   872G  0 lvm  /home
sr0            11:0    1  1024M  0 rom  
[root@localhost ~]#
  1. df 命令
df             显示整个硬盘的使用情况
df  文件夹      显示文件夹的使用情况
df  --total    显示所有的信息
df   -h        将结果变成KB,MB,GB形式展示,利用阅读
  1. vmstat 命令
##vmstat 是 Virtual Meomory Statistics(虚拟内存统计)的缩写,可对操作系统的虚拟内存、进程、IO 读写、CPU 活动等进行监视,在某系统中输入 vmstat 命令之后显示结果如下所示:
[root@host-19-112-71-216 ~]# vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 0  0      0 56813440 211328 4271232    0    0     1     1   12    7  0  0 100  0  0
 
指标解读如下:
    memory
(1)swpd :如果 swap 的值不为 0,或者比较大,比如超过 100 MB ,但是 si 和 so 的值长期为 0,这种情况不会影响系统性能。
(2)free :空闲内存 (free) 很少或接近于 0 时,并不能认定为内存不够用,Linux 是抢占内存的 OS,还要结合 si 和 so;如果 free 很少,si 和 so 也很少(大多时候是 0),系统性能在这种情况下不会受到影响。
(3)cache :如果 cache 的值大的时候,说明 cache 处的文件数多,如果频繁访问到的文件都能被 cache,那么磁盘读 IO 的 bi 会非常小。
    swap:内存够用的时候,si 和 so 这 2 个值都是 0,如果这两个个值长期大于 0 ,系统性能会受到影响,磁盘 IO 和 CPU 资源都会被消耗。
    
 
CPU 是计算机系统的大脑,其重要性不可置否。在性能优化的过程中,CPU 的性能指标是很重要的。本节主要介绍 CPU 性能分析命令,以及 CPU 性能分析方法。
CPU 以百分比显示,用户进程执行时间 2%,系统进程执行时间 1% ,空闲时间 97% ,等待 IO 时间 0%,被偷走的 CPU 时间所占百分比 0%。us + sy + id + wa =100%,近似为 100%。
## 使用 vmstat 检测,每隔 1 秒刷新一次,共刷新 5 次。
vmstat 1 5
[root@host-19-112-71-216 ~]# vmstat 1 5
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 56810752 211328 4271360    0    0     1     1   12    7  0  0 100  0  0
 0  0      0 56809600 211328 4271360    0    0     0     0  455  817  0  0 100  0  0
 0  0      0 56809664 211328 4271360    0    0     0     0  449  818  0  0 100  0  0
 0  0      0 56809664 211328 4271360    0    0     0     0  474  866  0  0 100  0  0
指标解读如下:
1. Procs
    r:如果在 procs 中运行的序列 (processr) 是连续的大于在系统中的 CPU 的个数,表示 CPU 比较忙,系统现在运行比较慢,有多数的进程等待 CPU。如果 r 的输出数大于系统中可用 CPU 个数的 4 倍,则系统面临着 CPU 短缺的问题,或者是 CPU 的速率过低,系统中有多数的进程在等待 CPU,造成系统中进程运行过慢。
    b:在 procs 中运行的序列 (processb),即处于不可中断状态的进程数,如果连续为 CPU 的 2~3 倍,就表明 CPU 排队比较严重。
如果 r 连续大于 CPU 的个数,甚至是 CPU 个数的几倍;b 也持续有值,甚至是 CPU 的 2~3 倍,并且 id 也持续小于 50%,wa 也比较小,这就表明 CPU 负荷很严重。
2. SYSTEM
    in:每秒产生的中断次数。
    cs:每秒产生的上下文切换次数。
in 和 cs 这两个值越大,由内核消耗的 CPU 时间会越大。
3. CPU
    us:用户进程消耗的 CPU 时间百分比。us 的值比较高时,说明用户进程消耗的 CPU 时间多,在服务高峰期持续大于 50~60,是可以接受的范围,但是如果长期超过 50% ,就需要考虑优化程序算法。
    sy:内核进程消耗的 CPU 时间百分比。sy 的值比较高时,说明系统内核消耗的 CPU 资源多,对于这种非良性表现需要检查原因。
    wa:IO 等待消耗的 CPU 时间百分比。wa 的值比较高时,说明 IO 等待比较严重,可能是由于磁盘大量做随机访问造成的,也有可能是磁盘出现了瓶颈(块操作)。
    id:CPU 处于空闲状态时间百分比,如果空闲时间 (cpu id) 持续为 0 并且系统时间 (cpu sy) 是用户时间的两倍 (cpu us) ,系统则面临着 CPU 资源的短缺,如果在服务高峰期持续小于 50,是可以接受的范围。
除此之外,还可以用以下方法分析 CPU 性能:
    观察 CPU 的使用率和 CPU 运行进程队列长度及负载,可以使用命令:sar -u 1 5、sar -q 1 5
    查看具体是什么进程在消耗 CPU,可以使用命令:top、ps -auxw|more。
    知道了某个进程消耗大量的 CPU,想了解该进程详细内容,可以使用命令:strace。
  1. ethtool 命令(网络相关)
#使用 ethtool 命令可以查看指定网口对应的网络传输速率
ethtool ens33
结果解读:
    Supported link modes 为网卡支持的连接模式。
    speed 和 duplex 字段为当前网络速率和模式。
-----分析方法
    使用 ping 命令测试网络的连通性和响应时间。
ping 发送 ICMP echo 数据包来探测网络的连通性,除了能直观地看出网络的连通状况外,还能获得本次连接的往返时间(RTT 时间),丢包情况,以及访问的域名所对应的 IP 地址(使用 DNS 域名解析)。
ping -c 4 baidu.com
## 参数 -c 表示指定发包数。
[root@host-19-112-71-216 ~]# ping -c 4 192.168.0.77
PING 19.112.71.9 (19.112.71.9) 56(84) bytes of data.
64 bytes from 192.168.0.77: icmp_seq=1 ttl=64 time=0.335 ms
64 bytes from 192.168.0.77: icmp_seq=2 ttl=64 time=0.270 ms
64 bytes from 192.168.0.77: icmp_seq=3 ttl=64 time=0.642 ms
64 bytes from 192.168.0.77: icmp_seq=4 ttl=64 time=0.165 ms
--- 192.168.0.77 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3052ms
rtt min/avg/max/mdev = 0.165/0.353/0.642/0.177 ms
解析到 192.168.0.77 的一台服务器 IP 地址为 192.168.0.77。RTT 时间的最小、平均、最大和算术平均差分别是 0.165ms、0.353ms、0.642ms 和 0.177ms。
    使用 sar 命令测试网络带宽。
sar 命令使用 -n 选项可以汇报网络相关信息。
sar -n DEV 1 3
在某系统中输入此命令之后显示结果如下所示
在上图中可以看到每秒钟接收到的包数目为 1,每秒钟发送出去的包数目为 1,每秒钟接收到的字节数为 0.06,每秒钟发送出去的字节数为 0.19,每秒钟接收到的压缩包数目为 0,每秒钟接收到的多播包的包数目为 0。通过这些参数可以对网络带宽有更好的了解。
  1. Linux 查询网络传输速度
watch -n 1 ifconfig

# 十六、其他命令

  1. 压缩和解压
#gzip   压缩文件变成 gz 格式
1. 语法:
    gzip   文件名称
    gzip   *
    gzip   -dv  文件名称
2. 说明:
    gzip  aa.txt    压缩文件 aa.txt 压缩之后,文件 aa.txt 将会消失, 同时产生一个文件 名称叫做 aa.txt.gz
    gzip  *         压缩当前文件夹下面所有的文件和目录
    gzip  -dv  bb.txt.gz    解压文件 bb.txt.gz  解压之后,文件 bb.txt.gz 将会消失, 同时产生一个文件 名称叫做 bb.txt 并且给出了解压信息
#列如:
#gunzip  解压缩 gz 格式的文件
1. 语法:
    gunzip  压缩文件的名称
2. 说明:
    gunzip  aa.txt.gz    解压文件 aa.txt.gz  解压之后,文件 aa.txt.gz 会消失。 同时出现文件  aa.txt
#tar     压缩或解压 gz 格式文件
#解压
1. 语法:
    tar  -zcvf  压缩文件名称   文件名称或者文件夹名称
    tar  -ztvf  压缩文件名称
    tar  -zxvf  压缩文件名称
#压缩
2. 说明:
    tar  -zcvf  bbb.gz   aaa        压缩目录文件夹 aaa 压缩之后, 压缩文件的名称叫做 bbb.gz
    tar  -ztvf  bbb.gz              查看压缩文件 bbb.gz 当中存在文件或者目录文件夹
    tar  -zxvf  bbb.gz              解压压缩文件 bbb.gz 解压之后, 目录名称叫做 bbb
#zip
1. 语法:
    zip   -q   -r   压缩之后文件的名称   需要压缩的文件夹
2. 说明:
    zip  -q  -r  aaa.zip  bbb   将bbb文件夹,压缩成为 aaa.zip 文件
#unzip
1. 语法:
    unzip  -l  压缩文件的名称
    unzip  -d  压缩文件的名称
2. 说明:
    unzip  -l  aaa.zip   查看压缩文件里面的文件信息
    unzip  -d  aaa.zip   解压文件 aaa.zip
3. 备注:
    需要注意一点, unzip 只能解压 "zip" 扩展名称的压缩文件
  1. 后台运行命令 nohup COMMAND &
#在其他命名结尾出加 '&'
#列如:
nohup cp -r a b &
  1. nohup

  2. watch -n 1 "lvs -o+devices"

watch -n 1 "lvs -o+devices"
  1. 查看监控系统日志:
监控系统日志:查看系统日志 (/var/log/messages, /var/log/syslog 或 /var/log/syslog.log
tail -f /var/log/messages
  1. lsblk 命令
#lsblk 指令主要用于展示块设备(block devices)的信息
[root@localhost ~]# lsblk
NAME          MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda             8:0    0   931G  0 disk 
├─sda1          8:1    0   200M  0 part /boot/efi
├─sda2          8:2    0     1G  0 part /boot
└─sda3          8:3    0 929.8G  0 part 
  ├─nlas-root 253:0    0    50G  0 lvm  /
  ├─nlas-swap 253:1    0   7.8G  0 lvm  [SWAP]
  └─nlas-home 253:2    0   872G  0 lvm  /home
sr0            11:0    1  1024M  0 rom