Fork me on GitHub

Linux调优相关命令汇总

目录

TIPS

本文基于CentOS 7编写,理论支持所有所有版本Linux发行版,部分命令的个别参数在不同版本中可能存在细微的差异。

入门级

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
# 切换目录
cd
# 示例
# 切换到上一层目录
cd ..
# 切换到/opt/software
cd /opt/software


# 显示工作目录
pwd


# 显示指定工作目录下之内容
ls
# 示例
# 列出当前目录中文件及目录的详情
ls -l
# 列出当前目录及其子目录中文件及目录的详情
ls -lR


# 创建目录
mkdir
# 示例
# 创建目录aaa
mkdir aaa
# 在bbb目录下创建目录aaa,如果bbb目录不存在,就创建一个
mkdir -p bbb/aaa


# 删除目录
rmdir
# 示例
# 删除目录aaa
rmdir aaa
# 删除bbb目录下的aaa目录,如果aaa删除后,bbb目录为成为空目录,则将bbb也删除
rmdir -p bbb/aaa


# 将指定文件的访问时间及修改时间设为当前时间,若文件不存在,则会自动创建该文件
touch
# 示例
# 将aaa文件的访问时间及修改时间设为当前时间,如果aaa不存在,则会自动创建该文件
touch aaa


# 删除文件或目录(一旦通过rm命令删除,将无法恢复,务必小心使用)
rm
# 示例
# 删除test.txt(此格式只能rm 文件;如果使用了rm 目录,则会提示是目录,无法删除)
rm test.txt
# 递归删除test_dir目录及其内容
rm -r test_dir


# 为文件或目录改名、或将文件或目录移入其它位置
mv
# 示例
# 将test.txt改名为damu.txt
mv test.txt damu.txt
# 将aaa目录放入bbb目录中;如果bbb目录不存在,则将aaa改名为bbb
mv aaa bbb


# 以树状图列出目录的内容
tree


# 杀死进程
kill
# 示例
# 杀死9999这个进程
kill 9999
# 查看信号
kill -l
# 发送SIGHUP信号杀死9999这个进程
kill -HUP 9999
# 使用SIGKILL信号杀死9999这个进程
kill -9 9999


# 将所有行程以树状图显
pstree
# 示例
# 展示该进程的完整指令及参数
pstree -a


# 关机
# 示例:
shutdown
# 立即关机
shutdown -h now
# 10分钟后关机
shutdown -h 10
# 立即重启
shutdown -r now


# 重启
reboot


# 设置或显示环境变量
export
# 示例
# 列出当前的环境变量
export -p
# 设置环境变量JAVA_HOME=xxx
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home


# 设定权限
# u 表示该文件的拥有者,g 表示与该文件的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
# + 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
# r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该文件是个子目录或者该文件已经被设定过为可执行。
chmod
# 示例
# 将test.txt设为所有人皆可读取
chmod a+r test.txt
# 将文件test1.txt与test2.txt设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
chmod ug+w,o-w test1.txt test2.txt
# 使用数字形式设置权限,语法是chmod abc file。其中a,b,c各为一个数字,分别表示User、Group、及Other的权限。
# r=4,w=2,x=1
# 若要rwx属性则4+2+1=7;
# 若要rw-属性则4+2=6;
# 若要r-x属性则4+1=5
chmod 777 file


# 将指定文件或目录的拥有者改为指定的用户或组
chown
# 示例
# 将的拥有者设为nginx,群体的使用者nginx
chown nginx:nginx nginx.conf
# 递归将当前目录下的所有文件与子目录的拥有者皆设为nginx,群体的使用者为nginx
chown -R nginx:nginx *


# 查找文件里符合条件的字符串
grep
# 示例
# 在当前目录中,查找后缀为txt的文件中,包含test字符串的文件,并打印字符串所属的行
grep test *txt
# 递归查找/opt目录中,包含test字符串的文件,并打印字符串所属的行
grep -r test /opt
# 查找1.txt中不包含test的行
grep -v test 1.txt


# 打开文件并输出
# 示例
# 打开1.txt
cat 1.txt
# 为1.txt添加行号,并输出到2.txt中
cat -n 1.txt > 2.txt


# 查找指定目录下的文件
find
# 查找当前目录下的所有txt文件
find . -name *.txt
# 查找机器中所有大于50M的文件
find / -type f -size +50M
# 查找机器中所有小于50M的文件,并用du -h展示出来
find / -type f -size +50M -exec du -h {} \;

系统

查看操作系统发行版本

不同的Linux发行版(例如CentOS与Debain)、以及不同版本(例如CentOS 6.x与CentOS 7.x)查看版本的方式不同,下面罗列了笔者知道的所有方式,总有一款能适用于你的环境。

  • 方法1:通过 /etc 目录下的文件查看
    • /etc/os-release
    • /etc/system-release
    • /etc/redhat-release
    • /etc/centos-release
    • /etc/issue
  • 方法2:执行 lsb_release -a

uname

作用:

显示系统信息

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Usage: uname [OPTION]...
Print certain system information. With no OPTION, same as -s.

-a, --all 打印所有信息
-s, --kernel-name 打印内核名称
-n, --nodename 打印网络节点主机名
-r, --kernel-release 打印内核版本
-v, --kernel-version 打印内核版本
-m, --machine 打印硬件名称
-p, --processor 打印处理器类型
-i, --hardware-platform 打印硬件平台
-o, --operating-system 打印操作系统
--help 帮助
--version 显示版本

使用:

1
2
[root@localhost ~]# uname -a
Linux localhost.localdomain 3.10.0-327.el7.x86_64 #1 SMP Thu Nov 19 22:10:57 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

结果解读:

  • Linux:内核名称
  • localhost.localdomain:主机名
  • 3.10.0-327.el7.x86_64:内核版本
  • #1 SMP Thu Nov 19 22:10:57 UTC 2015:内核版本
  • x86_64:硬件名称
  • x86_64:处理器类型
  • x86_64:硬件平台
  • GNU/Linux:操作系统

常见用法:

1
uname -a

uptime

作用:

展示系统启动运行了多久

语法:

1
2
3
4
5
6
7
8
Usage:
uptime [options]

Options:
-p, --pretty 对输出结果格式化
-h, --help 展示帮助
-s, --since 展示操作系统的启动时间
-V, --version 展示版本

使用:

1
2
[root@localhost ~]# uptime
18:52:01 up 48 days, 18:24, 4 users, load average: 0.00, 0.01, 0.05

结果解读:

  • 18:52:01:当前时间
  • 48 days, 18:24:启动了48 days, 18:24这么久
  • 4 users:当前登录了2个用户
  • load average: 0.00, 0.01, 0.05:平局负载,后面的数字分别是最近1分钟、5分钟、15分钟的平均负载

用户相关

id

作用:展示用户的ID、以及所属群组的ID

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Usage: id [OPTION]... [USER]
Print user and group information for the specified USER,
or (when USER omitted) for the current user.

-a 忽略,只是为了和其他版本兼容
-Z, --context 只打印当前用户的安全上下文
-g, --group 只打印有效的group ID
-G, --groups 打印所有group ID
-n, --name 打印名称而不是号码,和-u/-g/-G配合使用
-r, --real 打印真实ID而非有效ID,和-u/-g/-G配合使用
-u, --user 只打印有效的用户ID
-z, --zero 以NULL而非空格分隔结果
--help 帮助
--version 展示版本

Without any OPTION, print some useful set of identified information.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'id invocation'

使用:

1
2
3
# 查看当前用户相关信息
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root)

结果解读:

  • uid:用户id及名称
  • gid:用户当前所使用的组的id及名称
  • groups:用户拥有的所有组的id及名称

常见用法:

1
2
3
4
# 查看当前用户相关信息
id
# 查看MySQL这个用户的相关信息
id mysql

TIPS

如果大家不知道什么是有效ID、什么是真实ID,可以阅读下这个文章:https://www.annhe.net/article-4458.html

w

作用:

展示当前登录系统的用户信息

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
Usage:
w [options]

Options:
-h, --no-header do not print header
-u, --no-current ignore current process username
-s, --short short format
-f, --from show remote hostname field
-o, --old-style old style output
-i, --ip-addr display IP address instead of hostname (if possible)

--help display this help and exit
-V, --version output version information and exit

使用:

1
2
3
4
5
6
7
[root@localhost ~]# w
18:55:14 up 48 days, 18:28, 4 users, load average: 0.05, 0.03, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 222.94.228.56 18:07 42:34 0.04s 0.04s -bash
root pts/1 222.94.228.56 18:18 24:50 0.25s 0.06s -bash
root pts/2 222.94.228.56 18:41 13:48 0.02s 0.02s -bash
root pts/3 222.94.228.56 18:49 2.00s 0.05s 0.02s w

结果解读:

  • 第一行:类似uptime

  • USER:当前登录的用户有哪些

  • TTY:虚拟终端的别名,可以认为是一个会话的名称

  • FROM:你从那台机器登录进来的

  • LOGIN:什么时候登录的

  • IDLE:空闲时间

  • JCPU:是指连接上这个TTY的所有进程所占用的时间,不包括过去的后台作业时间;

  • PCPU:当前进程所占用的时间

  • WHAT:这个用户当前运行的进程是什么

who

作用:展示当前登录用户的信息

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Usage: who [OPTION]... [ FILE | ARG1 ARG2 ]
Print information about users who are currently logged in.

-a, --all 等价于-b -d --login -p -r -t -T -u
-b, --boot 系统启动时间
-d, --dead 打印死亡的进程
-H, --heading 打印标题
-l, --login 打印系统登录过程
--lookup 尝试通过DNS规范化主机名
-m 相当于who am i
-p, --process 打印由init产生的活动进程
-q, --count 显示登入系统的用户名和总人数
-r, --runlevel 打印当前运行级别
-s, --short 仅打印name, line, time(默认)
-t, --time 打印最近的系统时钟修改
-T, -w, --mesg 将用户的消息状态添加为+,-或?
-u, --users 列出登录的用户
--message 和-T相同
--writable 和-T相同
--help 帮助
--version 版本

If FILE is not specified, use /var/run/utmp. /var/log/wtmp as FILE is common.
If ARG1 ARG2 given, -m presumed: 'am i' or 'mom likes' are usual.

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'who invocation'

使用:

1
2
3
[root@localhost ~]# who
root pts/0 2020-06-27 23:51 (222.94.228.56)
root pts/1 2020-06-27 21:54 (222.94.228.56)

结果解读:

  • root:登录的用户是谁
  • pts/0:虚拟终端别名
  • 2020-06-27 23:51 (222.94.228.56):登录时间与远程IP

常见用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 显示当前登录系统的用户
who

# 展示详情,相当于who -b -d --login -p -r -t -T -u
who -a

# 显示自己的信息
who am i

# 打印标题
who -H

# 显示登入系统的用户名和总人数
who -q

whoami

作用:

显示自身用户名称

语法:

1
2
3
4
5
6
7
8
9
Usage: whoami [OPTION]...
Print the user name associated with the current effective user ID.
Same as id -un.

--help 帮助
--version 版本

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
For complete documentation, run: info coreutils 'whoami invocation'

使用:

1
whoami

last

作用:

显示用户最近登录信息

语法:

1
Usage: last [-num | -n num] [-f file] [-t YYYYMMDDHHMMSS] [-R] [-adioxFw] [username..] [tty..]

常用参数:

  • -R:结果省略从哪里登录的一栏
  • -num/-n/num:展示前num条
  • username:展示指定用户的登录信息
  • tty:只显示指定虚拟终端的登录信息

更多参数详见 man last

使用:

1
2
3
4
5
6
[root@localhost ~]# last 
root pts/1 222.94.228.56 Mon Jun 29 22:53 still logged in
root pts/0 222.94.228.56 Mon Jun 29 22:47 still logged in
root pts/5 222.94.228.56 Sat Jun 27 23:58 - 03:07 (03:08)
root pts/0 222.94.228.56 Sat Jun 27 23:51 - 00:56 (01:04)
root pts/4 222.94.228.56 Sat Jun 27 23:39 - 00:56 (01:17)

结果解读:

  • root:谁登陆的
  • pts/1:虚拟终端的别名,可以认为是一个会话的名称
  • 222.94.228.56:展示登录机器的主机名,表示从哪里登陆的
  • Mon Jun 29 22:53 still:登录的起止时间
  • logged in:持续了多久

常见用法:

1
2
3
4
5
6
7
8
# 只显示2条
last -2

# 展示root用户的登录信息
last username root

# 显示虚拟终端别名为pts/1的登录信息
last tty pts/1

CPU相关

cpuinfo

作用:查看CPU信息

使用:

1
cat /proc/cpuinfo

结果解读:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
# 概念:
1. 物理CPU数:主板上实际插入的cpu数量
2. CPU核心数:单块CPU上面能处理数据的芯片组的数量,如双核、四核等
3. 逻辑CPU数:一般来说:
逻辑CPU=物理CPU个数×每颗核数   # 不支持超线程技术或未开启此技术
逻辑CPU=物理CPU个数×每颗核数 *2   # 表示服务器的CPU支持超线程技术(简单来说,它可使处理器中的1 颗内核如2 颗内核那样在操作系统中发挥作用。这样一来,操作系统可使用的执行资源扩大了一倍,提高了系统的整体性能)


# 逻辑处理核心数的编号,从0开始排序
processor : 0
# CPU厂商
vendor_id : GenuineIntel
# CPU产品系列代号
cpu family : 6
# CPU属于其系列中的哪一代的代号
model : 45
# CPU的型号、主频
model name : Intel(R) Xeon(R) CPU E5-2620 0 @ 2.00GHz
# CPU所属制作更新版本
stepping : 7
# 微代码
microcode : 0xffffffff
# CPU当前所使用的主频
cpu MHz : 1999.994
# 二级缓存大小
cache size : 15360 KB
# 物理id
physical id : 0
# 单个物理CPU的逻辑CPU数
siblings : 8
# 当前物理核在其所处CPU中的编号,这个编号不一定连续
core id : 0
# CPU核心数
cpu cores : 8
# 用来区分不同逻辑核的编号,系统中每个逻辑核的此编号必然不同,此编号不一定连续
apicid : 0
# 初始的apicid
initial apicid : 0
# 是否具有浮点运算单元(Floating Point Unit)
fpu : yes
# 是否支持浮点计算异常
fpu_exception : yes
# 执行cpuid指令前,eax寄存器中的值,根据不同的值cpuid指令会返回不同的内容
cpuid level : 13
# 表明当前CPU是否在内核态支持对用户空间的写保护(Write Protection)
wp : yes
# 当前CPU支持的功能
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 popcnt aes xsave avx hypervisor lahf_lm xsaveopt
# 在系统内核启动时粗略测算的CPU速度(Million Instructions Per Second)
bogomips : 3999.98
# 每次刷新缓存的大小单位
clflush size : 64
# 缓存地址对齐单位
cache_alignment : 64
# 可访问地址空间位数
address sizes : 42 bits physical, 48 bits virtual
# 对能源管理的支持
power management:

常见用法:

1
2
3
4
5
6
7
8
9
10
11
# 查询系统有几颗物理CPU(结果有几行说明有几个物理CPU)
cat /proc/cpuinfo | grep "physical id" |sort |uniq

# 查询系统每颗物理CPU的核心数
cat /proc/cpuinfo | grep "cpu cores" | uniq

# 每颗物理CPU核心是否启用超线程技术。如果启用此技术那么,每个物理核心又可分为两个逻辑处理器
cat /proc/cpuinfo | grep -e "cpu cores" -e "siblings" | sort | uniq

# 查询系统具有多少个逻辑CPU
cat /proc/cpuinfo | grep "processor" | wc -l

TIPS

参考:https://www.cnblogs.com/wxxjianchi/p/10522049.html

top

作用:

显示、管理执行中的程序

语法:

1
2
Usage:
top -hv | -bcHiOSs -d secs -n max -u|U user -p pid(s) -o field -w [cols]

常用参数:

  • d : 改变显示的更新速度,或是在交谈式指令列( interactive command)按 s
  • q : 没有任何延迟的显示速度,如果使用者是有 superuser 的权限,则 top 将会以最高的优先序执行
  • c : 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称S : 累积模式,会将己完成或消失的子行程 ( dead child process ) 的 CPU time 累积起来
  • s : 安全模式,将交谈式指令取消, 避免潜在的危机
  • i : 不显示任何闲置 (idle) 或无用 (zombie) 的行程
  • n : 更新的次数,完成后将会退出 top
  • b : 批次档模式,搭配 “n” 参数一起使用,可以用来将 top 的结果输出到档案内

使用:

1
2
3
4
5
6
7
8
9
10
11
12
[root@localhost ~]# top
top - 18:57:49 up 48 days, 18:30, 4 users, load average: 0.02, 0.03, 0.05
Tasks: 288 total, 1 running, 279 sleeping, 8 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.1 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 1009368 total, 74540 free, 519392 used, 415436 buff/cache
KiB Swap: 1048572 total, 570600 free, 477972 used. 249136 avail Mem

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2737 mongod 20 0 1571560 64216 5156 S 1.0 6.4 534:08.38 mongod
1783 root 20 0 148336 2260 1428 R 0.7 0.2 0:00.10 top
14047 root 20 0 0 0 0 S 0.3 0.0 0:21.71 kworker/6:2
1 root 20 0 49860 2212 1300 S 0.0 0.2 28:02.47 systemd

结果解读:

  • 第一行:展示了系统运行的时间、有几个用户,平均负载等信息。这个结果和uptime一样
  • 第二行:展示了任务的相关信息,包括总共有多少任务、多少任务在任务在运行;多少在睡眠、多少停止了,多少个僵尸状态的任务等
  • 第三行:CPU状态
    • us(user):运行用户进程的CPU时间
    • sy(system):运行内核进程的CPU时间
    • ni(niced):运行已调整优先级的用户进程的CPU时间
    • id(idle):空闲时间
    • wa(IO wait):用于等待IO完成的CPU时间
    • hi:处理硬件中断的CPU时间
    • si:处理软件中断的CPU时间
    • st:被hypervisor偷去的CPU时间
  • 第四行:内存状态,包括全部可用内存、已使用内存、空闲内存、缓冲内存
  • 第七行开始:各个进程任务的的状态监控
    • PID:进程号
      • USER:运行这个进程的用户是谁
      • PR:展示进程的实时优先级,取值0-99,越大则会持有更多的CPU时间片。
      • NI:展示进程的nice值,值越小,优先级越高。意味着越高的优先级
      • VIRT:virtual memory usage,进程使用的虚拟内存。VIRT = SWAP + RES
      • RES:resident memory usage,常驻内存,驻留内存是进程使用的非交换物理内存。RES = CODE + DATA
      • SHR:shared memory,共享内存
      • S:进程状态,取值如下:
        • D:不可中断的睡眠态。
        • R:运行态
        • S:睡眠态
        • T:被跟踪或已停止
        • Z:僵尸态
      • CPU:自从上一次更新时到现在任务所使用的CPU时间百分比
      • MEM:进程使用的可用物理内存百分比
      • TIME:进程使用的总CPU时间,精确到0.01秒
      • COMMAND:进程所使用的命令

常见用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 展示完整命令(COMMAND)
top -c

# 设置更新次数(更新2次后就退出)
top -n 2

# 指定更新周期(每隔3秒刷新一次)
top -d 3

# 查看指定进程的信息
top -p 139

# 显示指定进程中线程的运行信息
top -Hp 139

参考文章:https://www.cnblogs.com/fuqu/p/10230385.html

进程相关

ps

作用:

展示程序运行情况

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
Usage:
ps [options]

Basic options:
-A, -e all processes
-a all with tty, except session leaders
a all with tty, including other users
-d all except session leaders
-N, --deselect negate selection
r only running processes
T all processes on this terminal
x processes without controlling ttys

Selection by list:
-C <command> command name
-G, --Group <GID> real group id or name
-g, --group <group> session or effective group name
-p, p, --pid <PID> process id
--ppid <PID> parent process id
-q, q, --quick-pid <PID>
process id (quick mode)
-s, --sid <session> session id
-t, t, --tty <tty> terminal
-u, U, --user <UID> effective user id or name
-U, --User <UID> real user id or name

The selection options take as their argument either:
a comma-separated list e.g. '-u root,nobody' or
a blank-separated list e.g. '-p 123 4567'

Output formats:
-F extra full
-f full-format, including command lines
f, --forest ascii art process tree
-H show process hierarchy
-j jobs format
j BSD job control format
-l long format
l BSD long format
-M, Z add security data (for SELinux)
-O <format> preloaded with default columns
O <format> as -O, with BSD personality
-o, o, --format <format>
user-defined format
s signal format
u user-oriented format
v virtual memory format
X register format
-y do not show flags, show rss vs. addr (used with -l)
--context display security context (for SELinux)
--headers repeat header lines, one per page
--no-headers do not print header at all
--cols, --columns, --width <num>
set screen width
--rows, --lines <num>
set screen height

Show threads:
H as if they were processes
-L possibly with LWP and NLWP columns
-m, m after processes
-T possibly with SPID column

Miscellaneous options:
-c show scheduling class with -l option
c show true command name
e show the environment after command
k, --sort specify sort order as: [+|-]key[,[+|-]key[,...]]
L show format specifiers
n display numeric uid and wchan
S, --cumulative include some dead child process data
-y do not show flags, show rss (only with -l)
-V, V, --version display version information and exit
-w, w unlimited output width

--help <simple|list|output|threads|misc|all>
display help and exit

常用参数:

  • -A或e:列出所有的行程
  • -w:显示加宽可以显示较多的资讯
  • -f:“全格式”展示,返回的字段较多
  • a:展示当前运行的所有程序,包括其他用户的程序
  • …其他的大家自己看下help吧,没动力翻译了……

示例:

1
2
3
4
5
6
7
8
# 全格式展示所有进程
ps -ef

# 显示较详细的信息,比如进程占用的CPU、内存等
ps -au

# 显示所有包含其他使用者的行程
ps -aux

jobs

个人经验,使用较少

作用:

显示Linux中的任务列表及任务状态

  • Ctrl+Z组合键将当前进程挂起(调入后台并停止运行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,我们使用windows系统是有时候在本地计算机搜索东西时,发现他搜索的老慢了甚至电脑都有点卡,我们突然不想让它搜了,就想马上让它停止搜索,就是这种感觉。使用jobs命令,可以查看当前终端在后台的进程任务
  • 任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号

语法:

1
2
3
4
5
6
7
8
9
10
11
12
jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]

第一种格式列出活动的任务,选项含义如下:
-l 除常规信息外,还列出进程号
-n 仅显示有关自从上次通知用户状态以来,更改状态的任务信息
-p 只显示任务的进程组leader的进程id
-r 只显示正在运行的任务
-s 只显示已停止的任务
如果指定了jobspec,则只展示jobspec的相关信息

如果指定了-x选项,则job会替换在command或args中找到的所有jobspec与相应的进程组id,并将其传递给command

常见用法:

1
jobs -l

pgrep

作用:根据特定条件查询进程PID信息

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Usage:
pgrep [options] <pattern>

Options:
-d, --delimiter <string> 指定分隔符
-l, --list-name 列出PID和进程名称
-a, --list-full 列出PID和完整命令行
-v, --inverse 反向匹配,展示不匹配条件的结果
-w, --lightweight 列出所有TID
-c, --count 展示匹配的进程个数
-f, --full 使用完整进程名进行匹配
-g, --pgroup <PGID,...> 展示匹配的进程组id
-G, --group <GID,...> 展示匹配的GID
-n, --newest 展示最近启动的进程
-o, --oldest 展示启动的进程
-P, --parent <PPID,...> 只匹配指定PPID的子进程
-s, --session <SID,...> 匹配SID
-t, --terminal <tty,...> 匹配tty
-u, --euid <ID,...> 匹配有效用户id
-U, --uid <ID,...> 匹配真实id
-x, --exact 与命令名称完全匹配
-F, --pidfile <file> 从文件中读取PID
-L, --logpidfile 如果未锁定PID文件则失败
--ns <PID> 匹配和PID属于指定namespace的进程
--nslist <ns,...> 列出指定的namespace的信息。可选那么space:ipc, mnt, net, pid, user, uts

-h, --help 帮助
-V, --version 版本

使用:

1
2
3
4
5
6
7
8
9
10
11
# 展示命令行为java的进程的进程号
pgrep java

# 查找命令行为java的进程,并列出完整命令行
pgrep -a java

# 查看root用户运行的所有进程
pgrep -U root

# 组合使用
pgrep -a -U root

内存相关

meminfo

作用:查看内存信息

使用:

1
cat /proc/meminfo

结果解读:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# 总内存
MemTotal: 1009368 kB
# 空闲内存
MemFree: 77320 kB
# 可用内存
MemAvailable: 268716 kB
# Buffer使用的大小
Buffers: 0 kB
# Cache使用的大小
Cached: 329420 kB
# 被高速缓冲存储用的交换空间大小
SwapCached: 18440 kB
# 活跃中的高速缓冲存储器页面文件大小
Active: 493144 kB
# 不活跃的高速缓冲存储器页面文件大小
Inactive: 268208 kB
Active(anon): 245240 kB
Inactive(anon): 237316 kB
Active(file): 247904 kB
Inactive(file): 30892 kB
Unevictable: 0 kB
Mlocked: 0 kB
# 交换区总大小
SwapTotal: 1048572 kB
# 空闲交换区大小
SwapFree: 570568 kB
# 等待被写回到磁盘的大小
Dirty: 52 kB
# 正在被写回的大小
Writeback: 0 kB
# 未映射的页的大小
AnonPages: 421380 kB
# 设备和文件映射的大小
Mapped: 27068 kB
Shmem: 50624 kB
# 内核数据结构缓存的大小,可减少申请和释放内存带来的消耗
Slab: 99168 kB
# 可收回slab的大小
SReclaimable: 50444 kB
# 不可收回的slab的大小
SUnreclaim: 48724 kB
KernelStack: 6992 kB
# 管理内存分页的索引表的大小
PageTables: 7496 kB
# 已经发给NFS服务器,但尚未被确认(committed)写入到稳定存储的页表
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 1553256 kB
Committed_AS: 1597364 kB
# 虚拟内存大小
VmallocTotal: 34359738367 kB
# 已使用的虚拟内存大小
VmallocUsed: 53608 kB
# 在vmalloc区域中可用的最大的连续内存块的大小
VmallocChunk: 34359681024 kB
HardwareCorrupted: 0 kB
AnonHugePages: 229376 kB
# 大页面的分配
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 63424 kB
DirectMap2M: 985088 kB

TIPS

free

作用:查看内存运行情况

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Usage:
free [options]

Options:
-b, --bytes 以Byte为单位显示内存使用情况
-k, --kilo 以KB为单位显示内存使用情况
-m, --mega 以MB为单位显示内存使用情况
-g, --giga 以GB为单位显示内存使用情况
--tera 以TB为单位显示内存使用情况
-h, --human 自动以合适的单位显示内存使用情况
--si 以1000为底而非1024
-l, --lohi 展示最低/最高内存的统计信息
-t, --total 显示内存总和(RAM + swap)
-s N, --seconds N 每隔N秒刷新
-c N, --count N 打印N次后退出
-w, --wide 宽屏模式打印,将buff和cache分开显示

--help 帮助
-V, --version 展示版本

For more details see free(1).

示例:

1
2
3
4
[root@localhost ~]# free
total used free shared buff/cache available
Mem: 1009368 519640 77092 50732 412636 250392
Swap: 1048572 477968 570604

结果解读:

  • total:物理内存总量
  • used:已使用的内存,used = total - free - buffers - cache
  • free:空闲的内存数
  • shared:多个进程共享的内存
  • buff/cache:代表的是 buff(对应/proc/meminfo里的Buffers)和cache的内存(对应/proc/meminfo 里的Cached and Slab)。
  • available:在CentOS 7中,available是真正可用内存。available包括了buff/cache中一些可以被释放的内存,当物理内存不够用的时候,内核会把非活跃的数据清空。
  • Mem:

TIPS

不同版本的CentOS,free结果不同。可参考:https://www.cnblogs.com/operationhome/p/10362776.html

vmstat

作用:全称Virtual Meomory Statistics(虚拟内存统计),可对操作系统的虚拟内存、进程、IO读写、CPU活动等进行监视

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Usage:
vmstat [options] [delay [count]]

Options:
-a, --active 展示active/inactive的内存
-f, --forks 显示此系统启动以来的forks的总数,包括fork、vfork和clone system calls
-m, --slabs 展示slabinfo信息
-n, --one-header 只展示1次header,而非周期展示
-s, --stats 显示各种事件计数器和内存统计(只显示1次)
-d, --disk 展示磁盘信息
-D, --disk-sum 显示磁盘统计数据
-p, --partition <dev> 展示分区详情
-S, --unit <char> 控制输出的单位,k(1000字节) K(1024字节) 或 M(1048576字节),默认为K
-w, --wide 宽屏输出模式
-t, --timestamp 打印时间戳

-h, --help 帮助
-V, --version 版本

For more details see vmstat(8).

使用:

1
2
3
4
[root@localhost ~]# vmstat
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 478632 93272 0 390596 0 0 0 1 0 0 0 0 100 0 0

结果解读:

  • procs
    • r:可运行的进程数(runnable processes),包括了running的进程和等待运行的进程(running or waiting for run time)。如果此值过大,则意味着CPU非常繁忙。如果此参数长期 >= 逻辑CPU个数,则表示CPU可能存在瓶颈,考虑增加CPU
    • 处在非终端睡眠(uninterruptible sleep)状态的进程数。此值表示被阻塞的进程数。主要是指被资源阻塞的进程对列数(比如IO资源、页面调度等)
  • memory
    • swpd:已使用的虚拟内存大小
    • free:空闲内存大小
    • buff:用做buffer的内存大小
    • cache:用来做cache的内存大小
    • inact:inactive的内存总量(-a)
    • active:active的内存总量(-a)
  • swap
    • si:每秒从磁盘交换到内存的大小,单位:KB/秒
    • so:每秒从内存交换到磁盘的大小,单位:KB/秒
    • 当内存够用时,这两个值都是0。如果这两个值长期大于0,则会影响系统性能,磁盘IO和CPU资源都会被消耗。 当看到空闲内存(free)很少的或接近于0时,就认为内存不够用了,是不正确的。不能光看这一点,还要结合si和so。如果free很少,但是si和so也很少(大多时候是0),可以不用担心。此时,系统性能不会受到影响的。
  • io
    • bi:每秒从块存储设备接收到的块数
    • bo:每秒发送到块存储设备的块数
    • 随机磁盘读写的时候,这2个值越大(如超出1024k),能看到CPU在IO等待的值也会越大
  • system
    • in:每秒中断数,包括时钟中断
    • cs:每秒上下文切换数
    • 这两个值越小越好
  • cpu
    • us:用户CPU时间(非内核进程占用时间)百分比
    • sy:系统使用的CPU时间百分比
    • id:空闲CPU时间百分比
    • wa:等待IO的CPU时间百分比
    • st:被虚拟机偷去的CPU时间百分比

常见用法:

1
2
3
4
# 每隔一秒展示一次
vmstat 1

vmstat -a

磁盘相关

df

作用:

展示磁盘使用情况

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Usage: df [OPTION]... [FILE]...

Mandatory arguments to long options are mandatory for short options too.
-a, --all 包含具有0Blocks的文件系统
-B, --block-size=SIZE 指定打印单位,可用单位: K, M, G, T, P, E, Z, Y (以1024为底) ;也可用KB, MB, ... (以1000为底)。例如-BM表示以MB为单位打印
--direct 显示文件的统计信息而不是挂载点
--total 在末尾产生一个汇总行
-h, --human-readable 自动以合适的单位显示磁盘使用情况
-H, --si 以1000为底而非1024
-i, --inodes 列出inode的信息,而非block的使用信息
-k 相当于--block-size=1K
-l, --local 将列表限制为本地文件系统
--no-sync 在获取使用情况信息之前不调用同步(默认)
--output[=FIELD_LIST] 使用FIELD_LIST定义的打印格式,如果省略FIELD_LIST则打印所有字段。FIELD_LIST是一个以逗号分隔的字段列表,可选的字段有:'source', 'fstype', 'itotal', 'iused', 'iavail', 'ipcent', 'size', 'used', 'avail', 'pcent', 'file','target'
-P, --portability 使用POSIX输出格式
--sync 在获取使用情况信息之前调用同步
-t, --type=TYPE 将列表限制为TYPE类型的文件系统。
-T, --print-type 在结果中,多出来一个Type列,其中打印文件系统类型
-x, --exclude-type=TYPE 将列表限制为非TYPE类型的文件系统
-v (忽略)
--help 帮助
--version 显示版本

使用:

1
df

结果解读:

  • Filesystem:文件系统的名称
  • 1K-blocks:占用多少个1K-block,相当于展示占用了多少Kb的磁盘
  • Used:使用了多少磁盘
  • Avail:可用磁盘
  • Use:使用的百分比
  • Mounted on:挂载点

常见用法:

1
2
3
4
5
6
7
8
# 自动以合适的单位显示磁盘使用情况
df -h

# 查看gc.log这个文件所属的文件系统信息
df gc.log

# 指定输出格式
df --output=source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target

拓展阅读:

Linux 深入理解inode/block/superblock

du

作用:

显示目录或文件的大小

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Usage: du [OPTION]... [FILE]...
or: du [OPTION]... --files0-from=F

Mandatory arguments to long options are mandatory for short options too.
-0, --null 以0字节而不是换行符结束每条输出(即:直接输出下一行,不换行)
-a, --all 显示所有文件大小,不限于目录
--apparent-size 打印“apparent size”,而非磁盘占用情况
-B, --block-size=SIZE 指定打印单位,可用单位: K, M, G, T, P, E, Z, Y (以1024为底) ;也可用KB, MB, ... (以1000为底)。例如-BM表示以MB为单位打印
-b, --bytes 相当于'--apparent-size --block-size = 1'
-c, --total 在末尾产生一个汇总行
-D, --dereference-args 取消引用命令行上列出的符号链接
-d, --max-depth=N 指定要展示的最大深度,--max-depth=0相当于--summarize
--files0-from=F 总结文件F中指定的NUL终止文件名的磁盘使用情况;如果F为-,则从标准输入中读取名称
-H 等价于--dereference-args (-D)
-h, --human-readable 自动以合适的单位显示磁盘使用情况
--inodes 列出inode的信息,而非block的使用信息
-k 相当于--block-size=1K
-L, --dereference 取消引用所有符号链接
-l, --count-links 如果是硬链接,则计数很多次
-m 相当于--block-size=1M
-P, --no-dereference 不遵循任何符号链接(这是默认设置)
-S, --separate-dirs 不统计子目录的大小
--si 类似于-h,但以1000为底而非1024
-s, --summarize 只展示每个参数的统计信息
-t, --threshold=SIZE 如果SIZE为正,则排除小于SIZE的条目;如果为负,则排除大于SIZE的条目
--time 展示文件的修改时间
--time=WORD 在time字段展示WORD字段而非修改时间,WORD取值:atime, access, use, ctime or status
--time-style=STYLE 指定时间的显示格式,取值:full-iso, long-iso, iso, 或+FORMAT,FORMAT的解释类似于“date”
-X, --exclude-from=FILE 排除匹配FILE中的正则的文件
--exclude=PATTERN 排除匹配正则的文件
-x, --one-file-system 跳过不同文件系统上的目录
--help 帮助
--version 版本

常见用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 当前目录及子目录的大小,以及大小汇总
du

# 展示1.txt文件的大小
du 1.txt

# 自动以合适的单位显示目录的大小
du -h some_dir

# 排除 < 1000m的文件,展示当前目录及子目录的大小,以及大小汇总
du -t 1000m

# 以合适的单位展示指定目录的大小
du -sh some_dir

网络相关

netstat

作用:展示网络状态

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
usage: netstat [-vWeenNcCF] [<Af>] -r         netstat {-V|--version|-h|--help}
netstat [-vWnNcaeol] [<Socket> ...]
netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]

-r, --route 展示路由表
-I, --interfaces=<Iface> 展示网卡Iface的信息
-i, --interfaces 展示网卡信息列表
-g, --groups 显示多播组的成员信息
-s, --statistics 展示网卡网络统计信息
-M, --masquerade 显示伪装的网络连接(masqueraded connections)

-v, --verbose 展示更多详情信息
-W, --wide 不截断IP地址
-n, --numeric 不解析名称
--numeric-hosts 不解析主机名
--numeric-ports 不解析端口
--numeric-users 不解析
-N, --symbolic 解析硬件名称
-e, --extend 展示更多信息
-p, --programs 为socket展示PID或程序名称
-o, --timers 在结果中显示Timer列
-c, --continuous 持续列出结果

-l, --listening 展示监听的服务器socket
-a, --all 展示所有的socket(默认connected,指定-a则会展示监听/为监听的socket)
-F, --fib 展示转发信息库(Forwarding Information Base)(default)
-C, --cache 展示路由缓存而非FIB
-Z, --context 为socket展示SELinux安全上下文

<Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
{-x|--unix} --ax25 --ipx --netrom
<AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)

使用:

1
netstat

结果解读:

使用不同参数,展示的结果不用,详情大家看下 man netstat里面的结果吧

常见用法:

1
2
3
4
5
6
7
8
9
10
11
# 查看全部的socket
netstat -a

# 查看使用tcp协议的网络信息
netstat -t

# 查看使用udp协议的网络信息
netstat -u

# 展示所有所有状态的tcp监听,并打印程序名称
netstat -antp

route

作用:显示和操作路由表

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Usage: route [-nNvee] [-FC] [<AF>]           列出内核路由表
route [-v] [-FC] {add|del|flush} ... Modify routing table for AF.

route {-h|--help} [<AF>] 修改AF的路由表
route {-V|--version} 展示版本

-v, --verbose 展示更多详情信息
-n, --numeric 不解析名称
-e, --extend 展示更多信息
-F, --fib 展示转发信息库(Forwarding Information Base)(default)
-C, --cache 展示路由缓存而非FIB

<AF>=Use -4, -6, '-A <af>' or '--<af>'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)

使用:详见 https://blog.csdn.net/u011857683/article/details/83795435 里面有非常详细的描述

lsof

作用:列出当前系统当前打开的文件

语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 usage: [-?abhKlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
[-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.
-?|-h list help -a AND selections (OR) -b avoid kernel blocks
-c c cmd c ^c /c/[bix] +c w COMMAND width (9) +d s dir s files
-d s select by FD set +D D dir D tree *SLOW?* +|-e s exempt s *RISKY*
-i select IPv[46] files -K list tasKs (threads) -l list UID numbers
-n no host names -N select NFS files -o list file offset
-O no overhead *RISKY* -P no port names -R list paRent PID
-s list file size -t terse listing -T disable TCP/TPI info
-U select Unix socket -v list version info -V verbose search
+|-w Warnings (+) -X skip TCP&UDP* files -Z Z context [Z]
-- end option scan
+f|-f +filesystem or -file names +|-f[gG] flaGs
-F [f] select fields; -F? for help
+|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)
+m [m] use|create mount supplement
+|-M portMap registration (-) -o o o 0t offset digits (8)
-p s exclude(^)|select PIDs -S [t] t second stat timeout (15)
-T qs TCP/TPI Q,St (s) info
-g [s] exclude(^)|select and print process group IDs
-i i select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
+|-r [t[m<fmt>]] repeat every t seconds (15); + until no files, - forever.
An optional suffix to t is m<fmt>; m must separate t from <fmt> and
<fmt> is an strftime(3) format for the marker line.
-s p:s exclude(^)|select protocol (p = TCP|UDP) states by name(s).
-u s exclude(^)|select login|UID set s
-x [fl] cross over +d|+D File systems or symbolic Links
names select named files or files on named file systems
Anyone can list all files; /dev warnings disabled; kernel ID check disabled.

常见用法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 列出所有打开的文件
lsof

# 查看哪些进程正在使用1.txt
lsof 1.txt

# 递归查看test_dir目录及其文件的信息
lsof +D test_dir

# 查看java进程打开的文件
lsof -c mysql

# 查看java或mysql打开的文件
lsof -c java -c mysql

# 列出所有的网络连接
lsof -i

# 列出所有tcp连接
lsof -i tcp

# 列出所有udp连接
lsof -i udp

# 列出谁在使用8080端口
lsof -i:8080

# 列出谁在用tcp协议使用8080端口
lsof -i tcp:8080

相关文章

评论系统未开启,无法评论!