三剑客
grep(global regular expressions print)
grep命令能够在一个或多个文件中,搜索某一特定的字符模式,包含指定字符模式的每一行内容,都会被打印(显示)到屏幕上
搜索多个文件,grep 命令的搜索结果只显示文件中发现匹配模式的文件名
grep [选项] 模式 文件名
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mjGLpPrN-1587027725134)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583761333257.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ht0EtnlH-1587027725137)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583761368799.png)]
sed
按照定义的规则流编辑(替换、删除、输出)文本模式
awk
类似sed,但支持编程
得到一个文件的100到200行
sed -n ‘100,200p’ inputfile
awk ‘NR>=100&&NR<=200{print}’ inputfile
head -200 inputfile|tail -100
日志文件很大,怎么快速搜索某个内容
使用grep命令查找到指定关键字所在行号
[root@excbjdcpapp01 logs]# grep -n -e "refundInterTicket" -e "2017122900237918" ws.log | head -n 3
-n参数的作用是显示查找结果的所在行号
-e参数表示我们需要搜索的关键字,多个关键字就用多个 -e 参数
ws.log表示待搜索的大日志文件
head -n 3 表示显示前面查询结果的前三条记录
(2)使用vim命令打开文件的指定行:
vim打开文件的时候可以使用“+行号”的形式打开文件的指定行
[root@excbjdcpapp01 logs]# vim +27796016 ws.log
磁盘存储查询
df
命令报告我们拥有多少磁盘空间(空闲磁盘空间)du
命令报告被文件和目录占用了多少磁盘空间。
df(disk free)
- 查看整个文件系统磁盘空间使用情况
$ df -h 以人类友好的方式呈现
- 查看目录所使用的文件系统磁盘空间使用情况
$ df -h /usr/
- 列出整个文件系统节点使用情况
$ df -i
du(disk usage)
- 查看当前目录下面所有子目录的目录大小和当前目录的所占空间
du -h
- 查看指定文件所占空间
du -h log2020.log
- 查看当前目录每个设定深度的文件夹的所占空间
du --max-depth=1 -h /usr/
top使用方法
- 动态刷新,3秒一个间隔
- 第一部分,整体资源使用情况
- 第二部分进程信息
- 第一行任务队列信息。四核CPU平均负载超过超过4即为高负载
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iMEbVCLg-1587027725141)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583932687240.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Cll7sdg3-1587027725144)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583932806218.png)]
- 第二行进程信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zB4bhN1f-1587027725148)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583932890180.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eXhHr6IR-1587027725151)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583932875684.png)]
- 第三行CPU信息
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DZwelaO4-1587027725154)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583932954246.png)]
- 第四行物理内存
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-29SA8Kno-1587027725157)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583933046093.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jYpRCVWW-1587027725160)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583933006411.png)]
- 第五行swap交换分区,虚拟内存
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xmOoAD75-1587027725162)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583933058736.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u011O20U-1587027725165)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583933020616.png)]
- 第二部分
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yKb4Otdw-1587027725169)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583933140167.png)]
- top -p 2734 查看某个进程信息
- top -b -n 1 > /root/top.log top命令只执行一次,然后把执行结果保存到top.log文件中
内存使用查询
- 查看内存使用情况
- buffer (Buffer Cache) 存放在内存中要输出到磁盘的数据
- cache(Page Cache) 是从磁盘读出存放到内存中的数据
- swap,交换分区,物理内存的不足利用磁盘空间虚拟出的一块逻辑内存,用作虚拟内存的磁盘空间被称为交换空间(Swap Space)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uelYfKSK-1587027725176)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583917740182.png)]
CPU信息查询
cat /proc/cpuinfo
processor 逻辑处理器的id。
physical id 物理封装的处理器的id。
core id 每个核心的id。
cpu cores 位于相同物理封装的处理器中的内核数量。
siblings 位于相同物理封装的处理器中的逻辑处理器的数量。
sar(System Activity Reporter)
- sar -u 1 3 间隔1s采集三次cpu使用
- sar -P 0 -u 1 5 指定某个cpu查看
- sar -b 1 3 IO传输速率查看
- sar -n DEV 1 1 // 网路设备的状态信息
- sar -n SOCK 1 1 // SOCK的使用情况
- sar -n TCP 1 1 TCP连接统计
netstat网络信息查询
列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字
-
列出所有连接(tcp、udp、unix)
$netstat -a
-
只列出 TCP 或 UDP 协议的连接
$ netstat -at tcp
$ netstat -au udp
-
只列出监听中的连接
$ netstat -tnl tcp -n使用ip显式而不是域名
$ netstat -unl udp
-
获取端口连接进程名、进程号以及用户 ID
$ sudo netstat -nlpt 列出tcp监听的进程号和端口号
-
统计网络数据
$ netstat -s 列出所有网络包的收发请求统计情况
$ netstat -st 列出tcp包的统计情况
-
获取内核路由信息
$ netstat -rn -n是nu’meric打印ip而不是域名
-
获取网络设备
$ netstat -i
-
端口使用情况
$ netstat -pan | grep 5632 查询5632端口号的使用情况
-
linux哪个命令知道多少客户端连接服务器的数量
$ netstat -na|wc -l wc -l 计算有几行连接数
$ netstat -na| grep ESTABLISHED | wc -l wc -l 计算有几行有效连接数
ps(process stastic)查看进程id
-a,查看所有
-u,以用户(user)的格式显示
-x, 显示后台进程运行参数
-ef,以全格式显示进程所有信息,包括父进程Pid,创建人,创建时间,进程号
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JlDN2BhG-1587027725179)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583996359702.png)]
USER :进程的所属用户,
PID :进程的进程ID号,
%CPU :进程占用的 CPU资源 百分比,
%MEM :进程占用的 物理内存 百分比,
VSZ :进程使用掉的虚拟内存量 (Kbytes) ,
RSS :进程占用的固定的内存量 (Kbytes) ,
TTY :与进程相关联的终端(tty),?代表无关,tty1-tty6是本机上面的登入者程序,pts/0表示为由网络连接进主机的程序。
STAT :进程的状态,具体见2.1列出来的部分 ,
START :进程开始创建的时间 ,
TIME :进程使用的总cpu时间,
COMMAND : 进程对应的实际程序。
查看线程用哪个命令
- ps
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KqYdGnJj-1587027725184)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583996743444.png)]
- top
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eL90A4Hq-1587027725188)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583996946324.png)]
- htop
安装、开启htop,然后按来进入htop的设置菜单。选择“设置”栏下面的“显示选项”,然后开启“树状视图”
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wWUgcSxc-1587027725192)(C:\Users\cqlia\AppData\Roaming\Typora\typora-user-images\1583997015259.png)]
命令别名alias
-
查看所有别名
$ alias
-
查看某个别名
$ alias xxx
-
设置别名
$ alias xxx=‘yyyyy yuiifh’
介绍GDB和常用调试命令;
https://blog.csdn.net/qq_37941471/article/details/81476942
介绍
GDB(GNU symbolic debugger)GNU调试器,是用来帮助调试我们程序的工具
可以做一下事情
- 给程序设置(特定条件下的)断点
- 当程序停在断点处时,我们查看所有变量、寄存器的
- 当程序停在断点处时,我们除了能查看所有变量、寄存器的值以外,还能在不改变源代码的情况下改变这些值
调试
$gcc -g test.c -g编译生成可执行文件且加上调试信息
$gdb a.out 启动调试
$(gdb)l 显示当前程序代码,一次10行,可以连续显式
$(gdb)l 函数名 显式这个函数的代码
$(gdb)b 10 在第十行打断点break
$(gdb)break 666 if testsize==100 条件断点:满足条件就中断程序运行break line-or-function if expr
$(gdb)r run开始运行程序
$(gdb)s step逐步执行,看到第10后下面的语句执行的printf输出
$重复上条命令,直接按enter
$(gdb)print i 查看某个变量的值
$(gdb)whatis i 查看某个变量类型
$(gdb)bt 查看函数堆栈
$(gdb)finish 结束调试
$(gdb)n (进入下一次调试)
$(gdb)q 退出调试
core dump
定义
程序由于各种异常或者bug导致在运行过程中异常退出或者中止,一定条件下会产生一个叫做core的文件
产生原因
- 内存访问越界
- 多线程程序使用线程不安全函数
- 多线程竞态数据未加锁
- 非法指针
- 使用空指针
- 对于一个指向一段内存的指针,在不确定是否是这个类型或结构的情况下,强行reinterprete,导致bus error从而core dump
- 堆栈溢出,过大的局部变量或参数
定位
$ulimit -c unlimited -c <core文件上限> 设定core文件的最大值,单位为区块
$./test
$gdb test core
$(gdb)bt
内存泄漏如何查询?
发现
- 内存充足时,尽量使用内存来缓存一些文件,从而加快进程的运行速度,而当内存不足时,会通过相应的内存回收策略收回cache内存,供进程使用
- used分配给缓存的数量
- free未分配的数量
- 程序实际使用量used-buffers-cached
- 实际可用内存free+buffers+cached
used 和 buffers + cached 值差距很大则发生泄漏
静态分析
BEAM 可以检测四类问题: 没有初始化的变量;废弃的空指针;内存泄漏;冗余计算
动态监测
位为区块
$./test
$gdb test core
$(gdb)bt
## 内存泄漏如何查询?
#### 发现
* 内存充足时,尽量使用内存来缓存一些文件,从而加快进程的运行速度,而当内存不足时,会通过相应的内存回收策略收回cache内存,供进程使用
* used分配给缓存的数量
* free未分配的数量
* 程序实际使用量used-buffers-cached
* 实际可用内存free+buffers+cached
used 和 buffers + cached 值差距很大则发生泄漏
#### 静态分析
BEAM 可以检测四类问题: 没有初始化的变量;废弃的空指针;内存泄漏;冗余计算
#### 动态监测
Valgrind其中的 memecheck 工具可以用来寻找 c、c++ 程序中内存管理的错误