文章目录
netstat:显示网络信息
# 或--tcp 显示TCP传输协议的连线状况
netstat -t
# 或--udp 显示UDP传输协议的连线状况
netstat -u
# 只显示监听端口
netstat -l
# 以数字形式显示地址和端口号
netstat -n
# 显示正在使用Socket的程序识别码和程序名称。
netstat -p
# 列出所有 TCP 监听服务器端口
netstat -tlnp
top:动态监测CPU信息
查看系统和进程的整体信息。
常用参数
- -b 批次模式运行,通常用来将top的输出结果传送给其他程式或储存成文件。
- -d 指定每两次屏幕信息刷新之间的时间间隔。可以使用s交互命令来改变之。
- -p 监控指定进程。监控多个进程时,进程ID之间以逗号分隔,只能在命令行下使用。
- -q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
- -S 指定累计模式
- -s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
- -i 使top不显示任何闲置或者僵死进程。
- -c 显示整个命令行而不只是显示命令名
- -n top命令运行n次,一般与-b搭配使用
- -H 显示线程,当这个设定开启时, 将显示所有进程产生的线程。
- -I 显示空闲的进程。
# 可以单独查看某个进程的信息
top -p pid
# 显示一个进程中各个线程CPU的占用率
top -p pid -H
我们通过 top 命令的整体信息部分,就可以判断服务器的健康状态。如果 1 分钟、5 分钟、15分钟的平均负载高于CPU核数,说明系统压力较大。如果物理内存的空闲内存过小,则也证明系统压力较大。
如果一个总核数=8核心的CPU,理论上平均负载达到16,也还可以坚持很长一段时间。
如果1分钟、5分钟以及15分钟全部超过CPU的总核心数(必须引起警觉),这个时候就要查看底部的进程信息了。
执行top命令,前面几行信息如下所示:
top - 15:28:10 up 141 days, 3:52, 1 user, load average: 0.01, 0.02, 0.05
Tasks: 90 total, 1 running, 89 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.5 us, 0.3 sy, 0.0 ni, 99.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 3879592 total, 123704 free, 2393532 used, 1362356 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 999516 avail Mem
第一行:系统负载情况
top - 15:28:10 up 141 days, 3:52, 1 user, load average: 0.01, 0.02, 0.05
Tasks: 90 total | 系统中的进程总数 |
---|---|
1 running | 正在运行的进程数 |
89 sleeping | 睡眠的进程数 |
0 stopped | 正在停止的进程数 |
0 zombie | 僵尸进程数。如果不是 0,则需要手工检查僵尸进程 |
第二行:系统进程情况
Tasks: 90 total, 1 running, 89 sleeping, 0 stopped, 0 zombie
内容 | 说明 |
---|---|
15:28:10 | 系统当前时间 |
up 141 days | 系统的运行时间.本机己经运行141天了 |
1 user | 当前登录了1个用户 |
load average: 0.01, 0.02, 0.05 | 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 |
第三行:系统CPU使用情况
%Cpu(s): 0.5 us, 0.3 sy, 0.0 ni, 99.2 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
如果多个CPU,想查看每一核心分别的负载情况,在top命令下,按数字键"1"可以切换查看
%Cpu0 : 0.0 us, 0.3 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
%Cpu1 : 0.3 us, 0.0 sy, 0.0 ni, 99.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
内容 | 说明 |
---|---|
%Cpu(s): 0.5 us | 用户模式占用的 CPU 百分比 |
0.3 sy | 系统模式占用的 CPU 百分比 |
0.0 ni | 改变过优先级的用户进程占用的 CPU 百分比 |
99.2 id | idle缩写,空闲 CPU 占用的 CPU 百分比 |
0.0 wa | 等待输入/输出的进程占用的 CPU 百分比 |
0.0 hi | 硬中断请求服务占用的 CPU 百分比 |
0.0 si | 软中断请求服务占用的 CPU 百分比 |
0.0 st | st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比 |
第四行:系统物理内存使用情况
KiB Mem : 3879592 total, 123704 free, 2393532 used, 1362356 buff/cache
内容 | 说明 |
---|---|
KiB Mem : 3879592 total | 物理内存的总量,单位为KB |
123704 free | 空闲的物理内存数量 |
2393532 used | 己经使用的物理内存数量 |
1362356 buff/cache | 作为缓冲的内存数量 |
第五行:swap交换分区内存
KiB Swap: 0 total, 0 free, 0 used. 999516 avail Mem
在Linux操作系统分区时,最少需要3个分区:
① /boot
分区 : 系统分区
② swap
交换分区 :一般情况下为内存的1~2倍,但是尽量不要超过2G
③ /
分区 :根分区,所有文件都存放于此。
swap
分区:就是当计算机的内存不足时,系统会自动从硬盘中划出一块区域充当内存使用。
内容 | 说明 |
---|---|
KiB Swap: 0 total | 交换分区(虚拟内存)的总大小 |
0 free | 空闲交换分区的大小 |
0 used | 已经使用的交换分区的大小 |
999516 avail Mem | 可用内存 |
系统的进程信息
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6389 root 20 0 3689916 807876 9668 S 0.3 20.8 640:00.33 java
15839 mysql 20 0 1883872 504880 11036 S 0.3 13.0 986:28.58 mysqld
16120 root 20 0 3586412 310108 8816 S 0.3 8.0 203:50.93 java
......
PID | 进程的ID |
---|---|
USER | 该进程所属的用户 |
PR | 优先级,数值越小优先级越高 |
NI | NICE优先级,数值越小优先级越高,取值范围-20到19,默认都是0 |
VIRT | 该进程使用的虚拟内存的大小,单位为KB |
RES | 该进程使用的物理内存的大小,单位为KB |
SHR | 共享内存大小,单位为KB。计算一个进程实际使用的内存 = 常驻内存(RES)- 共享内存(SHR) |
S | 进程状态。其中S 表示睡眠,R 表示运行 |
%CPU | 该进程占用CPU的百分比 |
%MEM | 该进程占用内存的百分比 |
TIME+ | 该进程共占用的CPU时间 |
COMMAND | 进程名 |
在top
命令下,交互操作快捷键P
(大写),表示将结果按照CPU使用率从高到低进行降序排列。
使用交互快捷键M
(大写):表示将结果按照内存(MEM)从高到低进行降序排列。
按键盘上的q
可以退出top
命令。
free:查看物理内存使用情况
# free [选项]
-m : 用M显示内容使用情况
-h :显示带单位(MB或者GB)易读格式
命令默认的显示单位是KByte
无参数
[root@hecs-169625 ~]# free
total used free shared buff/cache available
Mem: 3879592 2393336 129408 189144 1356848 1007904
Swap: 0 0 0
用M显示内容使用情况
[root@hecs-169625 ~]# free -m
total used free shared buff/cache available
Mem: 3788 2337 126 184 1325 984
Swap: 0 0 0
显示带单位(MB或者GB)易读格式
[root@hecs-169625 ~]# free -h
total used free shared buff/cache available
Mem: 3.7G 2.3G 126M 184M 1.3G 984M
Swap: 0B 0B 0B
df:查看磁盘剩余空间
# df [选项]
-h :以较高的可读性显示磁盘剩余空间大小
# df -h => 显示磁盘剩余空间大小
举例说明:
[root@hecs-169625 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 185M 1.7G 10% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/vda1 40G 7.3G 30G 20% /
tmpfs 379M 0 379M 0% /run/user/0
具体参数如下:
Filesystem | 磁盘名称 |
---|---|
Size | 总大小 |
Used | 被使用的大小 |
Avail | 剩余大小 |
Use% | 使用百分比 |
Mounted on | 挂载路径(相当于Windows 的磁盘符) |
ps:查看系统进程信息
top 动态查看系统进程的信息(每隔3s切换一次)
ps 静态查看系统进程的信息(只能查询运行ps命令瞬间,系统的进程信息)
# ps [选项]
选项说明:
-e : 等价于"A" 表示列出全部(all)的进程
-f : 表示full 显示全部的列(显示全字段)
# ps -ef => 显示当前系统所有进程信息
ps 进程标题解释
[root@hecs-169625 ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 Jul02 ? 00:14:34 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0 0 Jul02 ? 00:00:00 [kthreadd]
......
UID | 该进程执行的用户ID |
---|---|
PID | 进程ID |
PPID | 该进程的父级进程ID,如果找不到,则该进程就被称之为僵尸进程(Parent Process ID) |
C | Cpu的占用率,其形式是百分数 |
STIME | 进程的启动时间 |
TTY | 终端设备,发起该进程的设备识别符号,如果显示“?”则表示该进程并不是由终端设备发起 |
TIME | 进程实际使用CPU的时间 |
CMD | 该进程的名称或者对应的路径 |
ps aux 是 ps -ef 命令的一种补充
[root@hecs-169625 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 125520 3336 ? Ss Jul02 14:34 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S Jul02 0:00 [kthreadd]
......
USER | 该 process 属于哪个使用者账号 |
---|---|
PID | 该 process 的ID |
%CPU | 该 process 使用掉的 CPU 资源百分比 |
%MEM | 该 process 所占用的物理内存百分比 |
VSZ | 该 process 使用掉的虚拟内存量 (Kbytes) |
RSS | 该 process 占用的固定的内存量 (Kbytes) |
TTY | 该 process 是在哪个终端机上面运作,若与终端机无关,则显示 ?,另外, tty1-tty6 是本机上面的登入者程序,若为 pts/0 等等的,则表示为由网络连接进主机的程序。 |
STAT | 该程序目前的状态,主要的状态有 R:该程序目前正在运作,或者是可被运作。S:该程序目前正在睡眠当中 (可说是 idle 状态),但可被某些讯号 (signal) 唤醒。T:该程序目前正在侦测或者是停止了。Z:该程序应该已经终止,但是其父程序却无法正常的终止他,造成 zombie (疆尸) 程序的状态 |
START | 该 process 被触发启动的时间 |
TIME | 该 process 实际使用 CPU 运作的时间 |
COMMAND | 该程序的实际指令 |
kill:结束进程
kill 命令会向操作系统内核发送一个信号(多是终止信号)和目标进程的 PID,然后系统内核根据收到的信号类型,对指定进程进行相应的操作。
根据PID编号结束进程
# kill [选项] PID进程编号
选项说明:
-9 :杀死进程,即强制结束进程。
-15 :正常结束进程,是 kill 命令的默认信号。
经验:kill经常结合ps命令一起使用
文件查看命令
cat
cat 文件名称
: 查看文件内容, 多个文件使用空格隔开。不能用于文件夹。
# 查看单个文件
cat 1.txt
# 查看多个文件
cat 1.txt 2.txt 3.txt
# 多个文件合并到一个文件
cat 1.txt 2.txt 3.txt > 123.txt
head:查看文件前n行
语法:head -n 行数 文件名
# 查看前3行
head -n 3 123.txt
# 查看第1行到倒数第3行
head -n -3 123.txt
tail:查看文件最后n行
语法:tail [选项] [数字] 文件名称
选项 | 说明 |
---|---|
-n | 查看多少行 |
-f | 该参数用于监视File文件增长,默认展示10行,CTRL+C退出。 |
# 查看倒数第3行
tail -n 3 123.txt
# 动态查看一个文件的输出信息
tail -f 123.txt
# 动态查看一个文件的输出信息
tail -100f 123.txt
more:分屏显示文件内容
语法:more 文件名称
。
分屏展示文件内容,且是把文件整个加载再进行展示,若文件过大会造成卡顿
# 分屏展示123.txt
more 123.txt
回车键 | 向下移动一行 |
---|---|
d | 向下移动半页 |
空格键 | 向下移动一页 |
b | 向上移动一页 |
q | 退出more |
lese:分屏显示文件内容
语法:less 文件名称
。
# 分屏展示123.txt
less 123.txt
# 展示行号输出
more -N 123.txt
分屏展示文件内容,且是边展示边加载,不会卡顿
回车键 | 向下移动一行 |
---|---|
d | 向下移动半页 |
空格键 | 向下移动一页 |
b | 向上移动一页 |
/字符串 | 搜索指定字符串 |
上下方向键 | 向上与下平移动 |
q | 退出less |
> 和 >> 区别
> 和 >> 是两个常用的重定向符号,它们用于将命令的输出结果保存到文件中。
> 符号用于将命令的输出结果覆盖写入到指定文件中。如果文件不存在,则会创建一个新文件;如果文件已存在,则会清空文件内容并重新写入。
>> 符号用于将命令的输出结果追加写入到指定文件中。如果文件不存在,则会创建一个新文件;如果文件已存在,则会在文件末尾追加写入内容。
nohup命令
nohup
是一个用于在后台运行命令的Unix
命令。它的主要作用是运行指定的命令,即使用户退出登录或终端关闭,该命令也能够继续运行。通过使用 nohup
命令,可以确保程序在后台持续运行,而不会受到终端会话的影响。
当用nohup
命令执行作业时,缺省情况下该作业的所有输出被重定向到nohup.out
的文件中,除非另外指定了输出文件。
# 默认输出被重定向到nohup.out中
nohup ./test.sh &
# 指定输出文件
nohup ./test.sh > abc.log &
/dev/null
与2>&1
nohup ./test.sh > /dev/null 2>&1 &
nohup ./test.sh > xxx.log 2>&1 &
-
nohup
:表示要以 “no hang up” 的方式运行命令,即使终端关闭也不会中断该命令的执行。 -
./test.sh
:表示要执行的Shell
脚本。 -
>
:表示重定向标准输出。 -
/dev/null
:代表空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。xxx.log
:将输出信息重定向到该文件 -
2>&1
:表示将标准错误(文件描述符 2)重定向到标准输出的同一个地方(文件描述符 1),也就是/dev/null
或者xxx.log
。 -
&
:表示在后台运行命令。
scp文件上传与下载
下载文件或目录
语法:scp [选项] 用户名@远程主机地址:远程路径 本地文件路径
选项 | 说明 |
---|---|
-r | 递归操作,针对目录 |
-P | 大写,如果修改了ssh默认端口需要指定端口下载 |
# 将12.13.14.15主机的 '/lzc/test/123.txt' 文件下载到当前终端目录
scp root@12.13.14.15:/lzc/test/123.txt ./
# 将12.13.14.15主机的 '/lzc/test' 目录下载到当前终端目录
scp -r root@12.13.14.15:/lzc/test ./
上传文件或目录
语法:scp [选项] 本地文件路径 用户名@远程主机地址:远程路径
选项 | 说明 |
---|---|
-r | 递归操作,针对目录 |
-P | 大写,如果修改了ssh默认端口需要指定端口下载 |
# 将本地 'lzc.txt' 文件上传到12.13.14.15主机的 '/lzc/test' 目录下
scp /Users/lizhencheng/lzc/study/lzc.txt root@12.13.14.15:/lzc/test
# 将本地 'abc' 目录上传到12.13.14.15主机的 '/lzc/test' 目录下
scp -r /Users/lizhencheng/lzc/study/abc/ root@12.13.14.15:/lzc/test
grep和egrep
语法格式
grep [option][pattern][file1,file2,...]
grep
默认不支持扩展正则表达式,只支持基础正则表达式,使用grep -E
可以支持扩展表达式,使用egrep
可以使用扩展正则表达式,与grep -E
一样。
option
常用选项
选项 | 说明 |
---|---|
-v | 不显示匹配行信息 |
-i | 搜索时忽略大小写 |
-n | 显示行号 |
-r | 递归搜索,用于搜索目录:grep -r 关键字 目录 |
-E | 支持扩展正则表达式 |
-F | 不按正则表达式匹配,按照字符串字面意思匹配 |
-C number | 匹配的上下文分别显示[number]行 |
不常用选项
选项 | 说明 |
---|---|
-c | 只显示匹配行总数 |
-w | 匹配整词 |
-x | 匹配整行 |
-l | 只显示文件名,不显示内容 |
-s | 不显示错误信息 |
awk
awk
是一个文本处理工具,通常用来处理数据并生成报告
语法格式
awk 'BEGIN{}pattern{commands}END{}' filename
语法格式 | 解释 |
---|---|
BEGIN{} | 正式处理数据之前执行 |
pattern | 匹配模式 |
{commands} | 处理命令,可能多行 |
END{} | 处理完所有匹配数据执行 |
内置变量
例子
-
根据空格分割
awk '{print $1,$2,$3}' filename.txt
这个命令会读取
filename.txt
文件中的每一行,然后将每一行按照空格分割,并打印出前三个元素。$0
打印整行。 -
根据特定分隔符分割字符串
awk -F "," '{print $1,$2,$3}' 2.txt
这个命令会读取
filename.txt
文件中的每一行,然后将每一行按照逗号,
分割,并打印出前两个元素。 -
匹配值
awk '$3=="333" && $4=="rrr" {print $0}' filename.txt
这个命令会读取
filename.txt
文件中的每一行,然后将每一行按照空格分割,找到第三列为333
并且第四列为rrr
,最后打印出整行元素。