# 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)功能键
- 插入模式
按「i」切换进入插入模式「insert mode」,按 “i” 进入插入模式后是从光标当前位置开始输入文件;
按「a」进入插入模式后,是从目前光标所在位置的下一个位置开始输入文字;
按「o」进入插入模式后,是插入新的一行,从行首开始输入文字。 - 从插入模式切换为命令行模式
按「ESC」键。 - 移动光标
vi 可以直接用键盘上的光标来上下左右移动,但正规的 vi 是用小写英文字母「h」、「j」、「k」、「l」,分别控制光标左、下、上、右移一格。
按「ctrl」+「b」:屏幕往 “后” 移动一页。
按「ctrl」+「f」:屏幕往 “前” 移动一页。
按「ctrl」+「u」:屏幕往 “后” 移动半页。
按「ctrl」+「d」:屏幕往 “前” 移动半页。
按数字「0」:移到文章的开头。
按「G」:移动到文章的最后。
按「$」:移动到光标所在行的 “行尾”。
按「^」:移动到光标所在行的 “行首”
按「w」:光标跳到下个字的开头
按「e」:光标跳到下个字的字尾
按「b」:光标回到上个字的开头
按「#l」:光标移到该行的第 #个位置,如:5l,56l。 - 删除文字
「x」:每按一次,删除光标所在位置的 “后面” 一个字符。
「#x」:例如,「6x」表示删除光标所在位置的 “后面” 6 个字符。
「X」:大写的 X,每按一次,删除光标所在位置的 “前面” 一个字符。
「#X」:例如,「20X」表示删除光标所在位置的 “前面” 20 个字符。
「dd」:删除光标所在行。
「#dd」:从光标所在行开始删除 #行 - 复制
「yw」:将光标所在之处到字尾的字符复制到缓冲区中。
「#yw」:复制 #个字到缓冲区
「yy」:复制光标所在行到缓冲区。
「#yy」:例如,「6yy」表示拷贝从光标所在的该行 “往下数” 6 行文字。
「p」:将缓冲区内的字符贴到光标所在位置。注意:所有与 “y” 有关的复制命令都必须与 “p” 配合才能完成复制与粘贴功能。 - 替换
「r」:替换光标所在处的字符。
「R」:替换光标所到之处的字符,直到按下「ESC」键为止。 - 回复上一次操作
「u」:如果您误执行一个命令,可以马上按下「u」,回到上一个操作。按多次 “u” 可以执行多次回复。 - 更改
「cw」:更改光标所在处的字到字尾处
「c#w」:例如,「c3w」表示更改 3 个字 - 跳至指定的行
「ctrl」+「g」列出光标所在行的行号。
「#G」:例如,「15G」,表示移动光标至文章的第 15 行行首。
# Last line mode 下命令简介
在使用「last line mode」之前,请记住先按「ESC」键确定您已经处于「command mode」下后,再按「:」冒号即可进入「last line mode」。
- 列出行号
「set nu」:输入「set nu」后,会在文件中的每一行前面列出行号。 - 跳到文件中的某一行
「#」:「#」号表示一个数字,在冒号后输入一个数字,再按回车键就会跳到该行了,如输入数字 15,再回车,就会跳到文章的第 15 行。 - 查找字符
「/ 关键字」:先按「/」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往后寻找到您要的关键字为止。
「? 关键字」:先按「?」键,再输入您想寻找的字符,如果第一次找的关键字不是您想要的,可以一直按「n」会往前寻找到您要的关键字为止。 - 保存文件
「w」:在冒号输入字母「w」就可以将文件保存起来。 - 离开 vi
「q」:按「q」就是退出,如果无法离开 vi,可以在「q」后跟一个「!」强制离开 vi。
「qw」:一般建议离开时,搭配「w」一起使用,这样在退出的时候还可以保存文件。
# vi 命令列表
- 下表列出命令模式下的一些键的功能:
键位 | 功能 |
---|---|
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 | 更改光标所在位置的 #个字 |
- 下表列出行命令模式下的一些指令
键位 | 功能 |
---|---|
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 |
可以使用磁盘直接创建物理卷,也可以使用磁盘分区创建物理卷。两种方法稍微有些差距,下面进行说明。
- 使用磁盘直接创建物理卷
直接使用物理磁盘创建物理卷没有什么需要特别注意的,直接创建即可。
# 使用 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 ~]# |
- 使用磁盘分区创建物理卷
磁盘分区之后,磁盘 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 |
# 创建、扩容卷组
- 创建卷组
# 使用 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 |
- 扩展卷组
如果在使用过程中,发现要使用的空间大于卷组的空间,可以对卷组进行扩容,把新的物理卷 (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 查看结果 |
# 创建、扩容逻辑卷
- 创建逻辑卷
有了卷组,就可以创建逻辑卷 (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 |
- 扩容逻辑卷
使用如下命令进行扩容
# 使用 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% | |
#打印 | |
#使用 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%时,表示设备带宽已经占满. |
# 性能分析
I/O 瓶颈
如果 % iowait 的值过高,表示硬盘存在 I/O 瓶颈
内存不足
% idle 值高,表示 CPU 较空闲,如果 % idle 值高但系统响应慢时,有可能是 CPU 在等待分配内存,此时应加大内存容量
CPU 资源不足
如果 % idle 值持续低于 10,那么系统的 CPU 处理能力相对较低,表明系统中最需要解决的资源是 CPU
IOPS 计算
计算方式: r/s+w/s
I/O per second,即每秒钟可以处理的 I/O 个数。
随机读写频繁的应用(一般指 I/O 小于 64KB 的应用场景),如小文件存储 (图片)、OLTP 数据库、邮件服务器,关注随机读写性能,IOPS 是关键衡量指标。吞吐量 计算
计算方式: 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 #将设施和级别(优先级)编号解码为可读的前缀 |
# 应用举例
- 查看前 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. |
- 查看与内存相关的开机信息
[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 |
- 查看与磁盘相关的开机信息
[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 |
# 十二、文件 / 文件夹相关
- cd
- mkdir
- ls
- pwd
rmdir
rm
cp
#注意:要-r表示递归,如果没有则只能传递文件,不能传递文件夹
nohup cp -r a b &
#排除指定文件
nohup cp !(file1|file2) -r /source /sink &
- mv
mv [选项] 源文件夹 目标文件夹
chmod
touch
cat
less
tail
grep
echo
du
#du 命令是查看文件大小的命令
#列出当前目录下所有文件大小
du -ls
# 十三、防火墙
- 查看防火墙状态
systemctl status firewalld | |
systemctl stop firewalld | |
#系统启动后,自动启动防火墙 | |
systemctl enable firewalld | |
#现在启动防火墙,立即生效 | |
systemctl start firewalld |
- 检查端口,关闭端口访问
# 添加要开放的端口 | |
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 |
- 开放 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 |
- 实际情况使用
#例如我需要除了 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 都会被拦截 |
# 十四、用户 / 用户组相关
- 创建用户
# 十五、系统管理相关
- 日期管理
date [参数选项] | |
#参数选项: | |
-d<字符串> :显示字符串所指的日期与时间,字符串前后必须加上双引号 | |
-s<字符串> :根据字符串来设置日期与时间,字符串前后必须加上双引号,备注:注意权限的问题 | |
-u ;显示GMT | |
--help ;在线帮助 | |
--version :显示版本信息 |
- 显示用户
logname [--help] [--version] 显示登录账号的信息 | |
#参数选项: | |
--help ; 在线帮助 | |
---version : 显示版本信息 |
- 切换用户
su [-fmp] [-c command] [-s shell] [--help][--version][-] [uesr][apg] | |
#实例: | |
su -c ls root 切换到root当中之后,执行ls命令,然后再切换回来 |
- 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。 |
- 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 |
- kill 命令
kill 进程PID 杀死指定进程 | |
kill -9 进程PID 彻底杀死指定进程 | |
kill -9 $(ps -ef|grep 用户名) 杀死指定用户的所有进程 | |
kill -u 用户名 杀死指定用户所有进程 |
- 关机命令
shutdown 不同的版本有所差异 | |
shutdown - h now 立马关机 | |
shutdown +1 "警告信息" 等待一分钟,之后关机,并且出现警告信息 | |
shutdown -r +1 "警告信息" 等待一分钟,之后重启,并且出现警告信息 | |
shutdown -c 取消当前的关机操作 |
- 重启命令
reboot 立马重启 |
- 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) |
- 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 |
- clear 命令
clear 清除当前的屏幕,实际上是之前的内容,顶出屏幕外 |
- 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 ~]# |
- 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 |
- 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 |
- 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地址 和 子网掩码 |
- 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 ~]# |
- df 命令
df 显示整个硬盘的使用情况 | |
df 文件夹 显示文件夹的使用情况 | |
df --total 显示所有的信息 | |
df -h 将结果变成KB,MB,GB形式展示,利用阅读 |
- 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。 |
- 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。通过这些参数可以对网络带宽有更好的了解。 |
- Linux 查询网络传输速度
watch -n 1 ifconfig |
# 十六、其他命令
- 压缩和解压
#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" 扩展名称的压缩文件 |
- 后台运行命令 nohup COMMAND &
#在其他命名结尾出加 '&' | |
#列如: | |
nohup cp -r a b & |
nohup
watch -n 1 "lvs -o+devices"
watch -n 1 "lvs -o+devices" |
- 查看监控系统日志:
监控系统日志:查看系统日志 (/var/log/messages, /var/log/syslog 或 /var/log/syslog.log | |
tail -f /var/log/messages |
- 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 |