TIPS
本文基于CentOS 7编写,理论支持所有所有版本Linux发行版,部分命令的个别参数在不同版本中可能存在细微的差异。
本文来自于课程:《Java架构师体系课:跟随千万级项目从0到100全过程高效成长》
入门级
# 切换目录
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
作用:
显示系统信息
语法:
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 显示版本
使用:
[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:操作系统
常见用法:
uname -a
uptime
作用:
展示系统启动运行了多久
语法:
Usage:
uptime [options]
Options:
-p, --pretty 对输出结果格式化
-h, --help 展示帮助
-s, --since 展示操作系统的启动时间
-V, --version 展示版本
使用:
[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
语法:
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'
使用:
# 查看当前用户相关信息
[root@localhost ~]# id
uid=0(root) gid=0(root) groups=0(root)
结果解读:
- uid:用户id及名称
- gid:用户当前所使用的组的id及名称
- groups:用户拥有的所有组的id及名称
常见用法:
# 查看当前用户相关信息
id
# 查看MySQL这个用户的相关信息
id mysql
TIPS
如果大家不知道什么是有效ID、什么是真实ID,可以阅读下这个文章:https://www.annhe.net/article-4458.html
w
作用:
展示当前登录系统的用户信息
语法:
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
使用:
[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
作用:展示当前登录用户的信息
语法:
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'
使用:
[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
常见用法:
# 显示当前登录系统的用户
who
# 展示详情,相当于who -b -d --login -p -r -t -T -u
who -a
# 显示自己的信息
who am i
# 打印标题
who -H
# 显示登入系统的用户名和总人数
who -q
whoami
作用:
显示自身用户名称
语法:
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'
使用:
whoami
last
作用:
显示用户最近登录信息
语法:
Usage: last [-num | -n num] [-f file] [-t YYYYMMDDHHMMSS] [-R] [-adioxFw] [username..] [tty..]
常用参数:
- -R:结果省略从哪里登录的一栏
- -num/-n/num:展示前num条
- username:展示指定用户的登录信息
- tty:只显示指定虚拟终端的登录信息
更多参数详见
man last
使用:
[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:持续了多久
常见用法:
# 只显示2条
last -2
# 展示root用户的登录信息
last username root
# 显示虚拟终端别名为pts/1的登录信息
last tty pts/1
CPU相关
cpuinfo
作用:查看CPU信息
使用:
cat /proc/cpuinfo
结果解读:
# 概念:
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:
常见用法:
# 查询系统有几颗物理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
top
作用:
显示、管理执行中的程序
语法:
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 的结果输出到档案内
使用:
[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:进程所使用的命令
- PID:进程号
常见用法:
# 展示完整命令(COMMAND)
top -c
# 设置更新次数(更新2次后就退出)
top -n 2
# 指定更新周期(每隔3秒刷新一次)
top -d 3
# 查看指定进程的信息
top -p 139
# 显示指定进程中线程的运行信息
top -Hp 139
进程相关
ps
作用:
展示程序运行情况
语法:
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吧,没动力翻译了……
示例:
# 全格式展示所有进程
ps -ef
# 显示较详细的信息,比如进程占用的CPU、内存等
ps -au
# 显示所有包含其他使用者的行程
ps -aux
jobs
个人经验,使用较少
作用:
显示Linux中的任务列表及任务状态
- 按Ctrl+Z组合键将当前进程挂起(调入后台并停止运行),这种操作在需要暂停当前进程并进行其他操作时特别有用。例如,我们使用windows系统是有时候在本地计算机搜索东西时,发现他搜索的老慢了甚至电脑都有点卡,我们突然不想让它搜了,就想马上让它停止搜索,就是这种感觉。使用jobs命令,可以查看当前终端在后台的进程任务
- 任务号是以普通用户的角度进行的,而进程号则是从系统管理员的角度来看的。一个任务可以对应于一个或者多个进程号
语法:
jobs [-lnprs] [ jobspec ... ]
jobs -x command [ args ... ]
第一种格式列出活动的任务,选项含义如下:
-l 除常规信息外,还列出进程号
-n 仅显示有关自从上次通知用户状态以来,更改状态的任务信息
-p 只显示任务的进程组leader的进程id
-r 只显示正在运行的任务
-s 只显示已停止的任务
如果指定了jobspec,则只展示jobspec的相关信息
如果指定了-x选项,则job会替换在command或args中找到的所有jobspec与相应的进程组id,并将其传递给command
常见用法:
jobs -l
pgrep
作用:根据特定条件查询进程PID信息
语法:
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 版本
使用:
# 展示命令行为java的进程的进程号
pgrep java
# 查找命令行为java的进程,并列出完整命令行
pgrep -a java
# 查看root用户运行的所有进程
pgrep -U root
# 组合使用
pgrep -a -U root
内存相关
meminfo
作用:查看内存信息
使用:
cat /proc/meminfo
结果解读:
# 总内存
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
- 在Linux文档中有更加详细的描述,详见:https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.rst
- Buffer与Cache:
free
作用:查看内存运行情况
语法:
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).
示例:
[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活动等进行监视
语法:
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).
使用:
[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时间百分比
常见用法:
# 每隔一秒展示一次
vmstat 1
vmstat -a
磁盘相关
df
作用:
展示磁盘使用情况
语法:
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 显示版本
使用:
df
结果解读:
- Filesystem:文件系统的名称
- 1K-blocks:占用多少个1K-block,相当于展示占用了多少Kb的磁盘
- Used:使用了多少磁盘
- Avail:可用磁盘
- Use:使用的百分比
- Mounted on:挂载点
常见用法:
# 自动以合适的单位显示磁盘使用情况
df -h
# 查看gc.log这个文件所属的文件系统信息
df gc.log
# 指定输出格式
df --output=source,fstype,itotal,iused,iavail,ipcent,size,used,avail,pcent,file,target
du
作用:
显示目录或文件的大小
语法:
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 版本
常见用法:
# 当前目录及子目录的大小,以及大小汇总
du
# 展示1.txt文件的大小
du 1.txt
# 自动以合适的单位显示目录的大小
du -h some_dir
# 排除 < 1000m的文件,展示当前目录及子目录的大小,以及大小汇总
du -t 1000m
# 以合适的单位展示指定目录的大小
du -sh some_dir
网络相关
netstat
作用:展示网络状态
语法:
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)
使用:
netstat
结果解读:
使用不同参数,展示的结果不用,详情大家看下 man netstat里面的结果吧
常见用法:
# 查看全部的socket
netstat -a
# 查看使用tcp协议的网络信息
netstat -t
# 查看使用udp协议的网络信息
netstat -u
# 展示所有所有状态的tcp监听,并打印程序名称
netstat -antp
route
作用:显示和操作路由表
语法:
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
作用:列出当前系统当前打开的文件
语法:
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.
常见用法:
# 列出所有打开的文件
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
学习更多:
慕课网为大家准备了一门按演进思路进行讲授的课程:《Java架构师体系课:跟随千万级项目从0到100全过程高效成长》 希望能够帮助大家在演进的过程跟随千万级项目从0到100全过程高效成长。