Linux Command
一、命令
1.grep
grep(Global Regular Expression Print)是全局正则表达式搜索,它在一个或多个文件中搜索字符串模板。如果
模板包括空格,则需要用""
包裹,模板后的所有字符串被看作文件名,不影响原文件内容。
常与ps、cat命令一起使用,grep的输出为其他命令的输入
grep [options]
-A n 显示匹配字符后n行
-B n 显示匹配字符前n行
-C n 显示匹配字符前后n行
-c 计算符合样式的列数
-i 忽略大小写
-n 显示匹配内容的所在文件中行数
-R 递归查找文件夹
-v 反向过滤文本行的搜索
模板规则表达式:
^ 匹配所有以x开头的行 如:'^grep'匹配所有以grep开头的行
$ 匹配所有以x结束的行 如:'grep$'匹配所有以grep结尾的行
. 匹配一个非换行符的字符 如:'gr.p'匹配gr后接一个任意字符,然后是p
* 匹配零个或多个先前字符 如:'*grep'匹配所有一个或多个空格后紧跟grep的行
.* 匹配任意字符
[] 匹配一个指定范围内的字符 如'[Gg]rep'匹配Grep和grep
2.free
显示内存的使用情况
free [options]
-b 以Byte为单位显示内存使用情况
-k 以KB为单位显示内存使用情况
-m 以MB为单位显示内存使用情况]
-h 以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值(常用)
单位有:
B = bytes
K = kilos
M = megas
G = gigas
T = teras
-s<间隔秒数> 持续观察内存使用状况
-t 显示内存总和列
-V 显示版本信息
3.top
显示当前系统正在执行的进程的相关信息,包括进程ID、内存占用率、CPU占用率等
top [options]
-d 指定信息刷新的时间间隔
-p 指定监控进程的ID
-i 不显示任何闲置或者僵死进程
-c 不显示命令
前五行是当前系统情况整体的统计信息区:
1.第一行为任务队列信息和uptime
命令一样
当前系统时间 | 系统以运行的时间 | 当前系统登录用户个数 | 1分钟、5分钟、15分钟负载情况
load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以
逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了
2.第二行为任务(进程)信息,一共110个进程,3个在运行,106个再休眠,1个停止,0个处于僵尸状态
3.第三行为cpu状态信息
2.6% us——用户空间占用CPU的百分比
2.6% sy——内核空间占用CPU的百分比
0.0% ni — 改变过优先级的进程占用CPU的百分比
94.7% id — 空闲CPU百分比
0.0% wa — IO等待占用CPU的百分比
4.第四行为内存状态,包括物理内存总量、使用的内存总量、空闲内存总量、缓存的总量
5.第五行为swap交换分区信息,包括交换区总量、空闲交换区总量、使用交换区总量、缓冲的交换区总量
4.ps
ps -ef | grep 进程名 //查看进程pid
第二列为进程pid
5.vmstat
显示进程和CPU的统计信息
procs
-
r :运行和等待CPU时间片的进程数
-
b :等待资源的进程数
cpu
-
us:用户进程消耗CPU的时间百分比
-
sy:内核进程消耗CPU的时间百分比
-
id:处于空闲的CPU时间百分比
-
wa:系统等待IO的CPU时间百分比
-
st:来自一个虚拟机偷取CPU的时间百分比
(如果us + sy大于80%说明CPU可能不足)
6.mpstat
查看多核CPU每个计算核心的使用情况
mpstat [-P {|ALL}] [internal [count]]
-P {|ALL} 表示监控哪个CPU, cpu在[0,cpu个数-1]中取值
internal 相邻的两次采样的间隔时间
count 采样的次数
7.pidstat
查看指定进程的cpu、内存、线程、设备IO等系统资源的占用情况
pidstat [options] [internal [count]]
-u 默认的参数,显示各个进程的CPU使用统计
-r 显示各个进程的内存使用统计
-d 显示各个进程的IO使用情况
-p 指定进程号
8.iostat
查看系统设备的IO负载情况
iostat [options] [internal [count]]
-c 显示CPU使用情况
-d 显示磁盘使用情况
-k 以 KB 为单位显示
-m 以 M 为单位显示
-x 显示详细信息
9.ifstat
查看设备网络IO负载情况
10.netstat
显示网络状态
netstat [options]
-r或--route 显示Routing Table
-t或--tcp 显示TCP传输协议的连线状况
-u或--udp 显示UDP传输协议的连线状况
netstat -a //显示详细的网络状况
netstat -at //显示TCP端口号的使用情况
netstat -apu //显示UDP端口号的使用情况
netstat -nap | grep 进程pid //通过进程pid查看占用端口
netstat -nap | grep 端口号 //通过端口查看进程pid
11.df
查看文件系统的磁盘空间占用情况
df -h //以容易理解的格式输出文件系统大小
12.ping
检测主机网络
ping [options] destination
-c <完成次数> 设置完成要求回应的次数
-i<间隔秒数> 指定收发信息的间隔时间
-R 记录路由过程
13.tar
用来建立和还原备份文件 / 文件夹,不会删除原始的文件
tar [options] file
-A 新增压缩文件到已存在的压缩-c建立新的压缩文件
-c或--create 建立新的备份文件
-f<备份文件>或--file=<备份文件> 指定备份文件
-d 记录文件的差别
-r 添加文件到已经压缩的文件
-u 添加改变了和现有的文件到已经存在的压缩文件
-x 从压缩的文件中提取文件
-t 显示压缩文件的内容
-z 支持gzip解压文件
-j 支持bzip2解压文件
-z 支持compress解压文件
-v 显示操作过程
-l 文件系统边界设置
-k 保留原有文件不覆盖
-m 保留文件不被覆盖
-w 确认压缩文件的正确性
tar -cf file.tar file //压缩为file.tar
tar -jcf file.tar.bz2 file //压缩打包文件为file.tar.bz2
tar -czf file.tar.gz file //压缩文件为file.tar. gz
tar -tvf test.tar.gz //列出压缩文件内容
14.gzip
压缩文件,添加后缀.gz
,并删除原始的文件,不能压缩文件夹
gzip [options] file
-d或--decompress或----uncompress 解开压缩文件
-v或--verbose 显示指令执行过程
gzip -dv file.gz //解压文件,并列出详细信息
15.bzip2
压缩文件,添加.bz2
的压缩文件,并删除原始的文件,不能压缩文件夹
bzip2 [options] file
-d 执行解压缩
-f 在压缩或解压缩时,若输出文件与现有文件名相同,则覆盖现有文件
-k 在压缩或解压缩后保留源文件
-v 压缩或解压缩文件时,显示详细的信息
bzip2 file //压缩不保留源文件
bzip2 -k file //压缩保留源文件
bzip2 -d file //解压缩
bunzip2 file //解压缩
16.zip / unzip
压缩文件 / 文件夹后缀为zip
,并不会删除原始的文件
zip [options] file.zip file
-m 压缩文件后删除源文件
-P<密码> 使用zip的密码选项
-o 将压缩文件的更改时间设成和该文件相同
-d 从压缩文件内删除指定的文件
-v 显示指令执行过程
-q 不显示指令执行过程
-r 将指定目录下的所有文件和子目录一并压缩
-x<范本样式> 压缩时排除符合条件的文件
zip -P 密码 file.zip file //压缩文件或文件夹
zip -dv test.zip test/test.txt //删除zip压缩包中的文件
unzip [options] file.zip
-n 解压缩时不要覆盖原有的文件
-P<密码> 使用zip的密码选项
-d<目录> 指定文件解压缩后所要存储的目录
unzip file.zip //解压文件
unzip -n text.zip -d /tmp //指定解压到哪个地方并且不覆盖原有文件
17.sed
利用脚本来处理文本文件,自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等
sed [options] {script} file
脚本规则:
a 新增
c 取代
d 删除
i 插入
p 打印
s 替换 配合正则表达式
在第一行添加一行字符串"1":
删除第一行:
打印第三行:
在第二行插入一行字符串"asd":
用“?”取代一二行:
以上操作不会修改文件内容,需要添加参数-i
sed -i "s/查找字段/替换字段/g" 文件名
18.vi
vi是所有Unix及Linux系统下标准的编辑器
基本上分为三种状态,分别是:
-
命令模式(command mode)
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式和底行模式
-
插入模式(Insert mode)
输入文字,按
ESC
键可回到命令行模式 -
底行模式(last line mode)
将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号等
vi file //编辑文件,进入命令模式
命令模式快捷键:
- i:进入插入模式,从光标当前位置开始输入
- a:进入插入模式,从目前光标所在位置的下一个位置开始输入
- o:进入插入模式,向下插入新的一行,从行首开始输入
- ctrl + b:屏幕往后移动一页
- ctrl + f:屏幕往前移动一页
- ctrl + u:屏幕往后移动半页
- ctrl + d:屏幕往前移动半页
- G:移动到文章的最后
- $:移动到光标所在行的行尾
- ^:移动到光标所在行的行首
- w:光标跳到下个字的开头
- b:光标回到上个字的开头
- x:每按一次,删除光标所在位置的后面一个字符
- #x:删除光标所在位置的后面#个字符
- X:大写的X,每按一次,删除光标所在位置的前面一个字符
- #X:#X表示删除光标所在位置的前面#个字符
- dd:删除光标所在行
- #dd:从光标所在行开始删除#行
- yw:将光标所在之处到字尾的字符复制到缓冲区中
- #yw:复制#个字到缓冲区
- yy:复制光标所在行到缓冲区
- #yy:表示拷贝从光标所在的该行往下数#行文字
- p:将缓冲区内的字符贴到光标所在位置
- r:替换光标所在处的字符
- R:替换光标所到之处的字符,直到按下ESC键为止。
- u:撤回操作
- ctrl + g:列出光标所在行的行号
- #G:表示移动光标至第#行行首
底行命令快捷键:
esc
键确定处于命令模式后,再按:
键进入底行命令模式
- set nu:在文件中的每一行前面列出行号
- #:在冒号后输入一个数字,再按回车键就会跳到该行了
- / 关键字:先按
/
键,再输入寻找的字符,可以按n
往后寻找到您要的关键字为止 - ? 关键字:先按
?
键,再输入寻找的字符,可以一直按n
往前寻找到您要的关键字为止 - w:保存文件
- q:退出vi,可以在q后跟一个
!
强制离开 - qw:保存并退出
19.find
用来在指定目录下查找文件
find path [options] []
-name filename 根据文件名查询,iname会忽略大小写
-user user 查找所属用户为user的所有文件
-type 根据类型查找
d: 目录
c: 字型装置文件
b: 区块装置文件
p: 管道文件
f: 文件
l: 符号连结
s: socket
二、生产问题
1.CPU占用过高
运行死循环java程序
先使用top命令查看CPU占比最高的进程
top
定位到是哪一个程序
jps -l
ps -ef|grep java|grep -v grep //grep -v 不显示自身
定位到具体的线程或代码
ps -mp pid -o THREAD,tid,time //显示pid进程下的所有线程信息
将具体的线程id转换为16进制,定位到具体代码行
printf "%x\n" 线程id
jstack pid |grep 线程id(16进制) -A60 //显示进程对应线程的前60行栈信息