文章目录

  • grep
  • tail
  • top
  • lsof
  • fuser
  • iostat显示CPU和IO系统负载情况
  • iotop
  • blktrace
  • cut命令
  • 获取线程id的方法
  • gdb调试指令

别的命令如sed和awk,可以参考: sheel命令学习和工作总结

grep

实际grep命令中,有or和not操作符的等价选项,但是并没有grep and这种操作符。不过,可以使用patterns来模拟and操作符的。
①、grep or

1、 grep 'pattern1\|pattern2' filename
2、使用选项 -E可以用来扩展选项为正则表达式,如果使用了grep命令的选项-E,则应该使用|分隔多个pattern,以此实现OR操作。grep -E 'pattern1|pattern2' filename
3、egrep命令等同于'grep -E',因此,使用egrep命令和上面方法类似。egrep 'pattern1|paggeren2' filename
4、使用选项-e,使用grep -e只能传递一个参数。因此要用一下操作grep -e 'pattern1' - e 'pattern2' filename

②、grep and

1、使用-E 'pattern1.*pattern2'grep -E 'pattern1.*pattern2' filename(有顺序)grep -E 'pattern1.*pattern2'|'pattern2.*pattern1' filename(无顺序)
2、使用多个grep命令,由管道符分隔grep -E 'pattern1' filename | grep 'pattern2'

③、grep not

1、使用-v grep -v 'pattern' filename

④、grep 展示行号和统计行数

1、使用选项n,查看位于第几行
[root@roclinux ~]# grep -n leo /etc/passwd
29:leo:x:503:503::/home/leo:/bin/bash
2、使用-c选项,统计行数
[root@roclinux ~]# grep -c leo /etc/passwd
1
3、环顾四周
-A(After) -B(Before) -C

tail

tail [参数] [文件]

命令格式:tail [参数] [文件]
参数:-f 循环读取-q 不显示处理信息-v 显示详细的处理信息-c<数目> 显示的字节数-n<行数> 显示文件的尾部 n 行内容--pid=PID 与-f合用,表示在进程ID,PID死掉之后结束-q, --quiet, --silent 从不输出给出文件名的首部-s, --sleep-interval=S 与-f合用,表示在每次反复的间隔休眠S秒
实例
要显示 notes.log 文件的最后 10 行,请输入以下命令:tail notes.log
要跟踪名为 notes.log 的文件的增长情况,请输入以下命令:tail -f notes.log
此命令显示 notes.log 文件的最后 10 行。当将某些行添加至 notes.log 文件时,tail 命令会继续显示这些行。 显示一直继续,直到您按下(Ctrl-C)组合键停止显示。
显示文件 notes.log 的内容,从第 20 行至文件末尾:tail +20 notes.log
显示文件 notes.log 的最后 10 个字符:tail -c 10 notes.log

top

一、top前5行统计信息

第一行:top - 05:43:27 up 4:52, 2 users, load average: 0.58, 0.41, 0.30

第1行是任务队列信息,其参数如下:

内容 含义
05:43:27 表示当前时间
up 4:52 系统运行时间,格式为 : 时:分
2user 当前登陆用户数
load average:0.58,0.41,0.30 系统负载,即任务队列的平均长度,三个数值分别为1分钟、5分钟、15分钟到现在的平均值
load average 如果这个数除以逻辑cpu的数量,结果高于5的时候表示系统在超负荷运行。
**第2行:Tasks: 159 total, 1 running, 158 sleeping, 0 stopped, 0 zombie
第3行:%Cpu(s): 37.0 us, 3.7 sy, 0.0 ni, 59.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st**
内容 含义
159 total 进程总数
1 running 正在运行的进程数
158 sleeping 睡眠的进程数
0 stopped 停止的进程数
0 zombie 僵尸进程数
37.0 us 用户空间占用cpu百分比
3.7 sy 内核空间占用cpu百分比
0.0 ni 用户进程空间内改变过优先级的进程占用cpu百分比
59.3 id 空闲cpu百分比
0.0 wa 显示用于等待IO操作占用cpu总时间的百分比
0.0 hi 硬中断(Hardware interrupts) 占用cpu的百分比
0.0 si 软中断(Software interrupts)占用cpu总时间的百分比
0.0 st 管理程序(hypervisor)为另一个虚拟进程提供服务而等待虚拟CPU的百分比
**第4行:KiB Mem: 1530752 total, 1481968 used, 48784 free, 70988 buffers
第5行:KiB Swap: 3905532 total, 267544 used, 3637988 free. 617312 cached Mem**
内容 含义
1530752 total 物理内存总量
1481968 used 使用的物理内存总量
48784 free 空闲内存总量
70988 buffers(buff/cache) 用作内存缓存的内存量
swap:3905532 total 交换区总量
267544 used 使用的交换区总量
3637988 free 空闲交换区总量
617312 cached Mem 缓冲的交换区总量
上述最后提到的缓冲的交换区总量,这里解释一下,所谓缓冲的交换区总量,即内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,该数值即为这些内容已存在于内存中的交换区的大小。相应的内存再次被换出时可不必再对交换区写入。

二、进程信息

| 列名|含义  |
| PID |进程ID,进程的唯一标识符  |
| USER|进程所有者的实际用户名  |
| PR  |进程的调度优先级,这个字段的一些值是rt,以为运行在实时态 |
| NI  |进程的nice值(优先级),越小以为优先级越高,负值表示高,正值表示低 |
| VIRT|进程的调度优先级,这个字段的一些值是rt,以为运行在实时态 |
| RES |驻留内存大小,驻留内存是任务使用的非交换物理内存大小,进程使用、未被换出的物理内存大小,单位Kb,RES=CODE+DATA|
| SHR  |SHR是进程使用的共享内存,单位Kb |
| S    |这个进程的状态,D-不可中断的睡眠态;R-运行态;S-睡眠态;T-被跟踪或已停止;Z-僵尸态 |
| CPU  |自从上一次更新到现在任务所使用的CPU时间百分比 |
| MEM  |进程使用的可用物理内存百分比 |
| TIME+|任务启动后到现在所使用的全部cpu时间,精确到百分之一秒 |
| COMMAND |运行进程所使用的命令 |

三、使用方法
1、通过-H切换线程开关,同时可以指定进程。top -H -p <pid>
2、按数字1可以看几个核。

lsof

列出打开的文件

1、显示与指定文件交互的所有一切
#lsof /home/w_k/file
2、显示与指定目录交互的一切。
#lsof /home/w_k

fuser

fuser [选项] [参数]
-m name 指定一个挂载文件系统上的文件或者被挂载的块设备(名称name),这样所有访问这个文件
或者块设备的进程都会被列出来。
-k 杀掉访问文件的进程,如果没有指定-signal就会发送SIGKILL信号。
-v 详细模式,输出以ps命令的输出,包含PID、USER、COMMAND等许多域,如果是内核访问的那么PID为kernel。
-V 输出版本信息

iostat显示CPU和IO系统负载情况

: -d 1 每隔1s输出一次device信息.
:-k 某些用block的单位转换为KBtps-该设备每秒的传输次数(Indicate the number of transfers per second that were issued to thedevice.),"一次传输"意思是"一次I/O请求",多个逻辑请求可能会合并为"一次I/O请求","一次传输请求"的大小时未知的;kB_read/s:每秒从设备(drive expressed)读取的数据量;kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;kB_read:读取的总数据量;kB_wrtn:写入的总数据量;
:-c 可以获取部分cpu状态值.
: -x 显示更多信息,具体如下: rrqm/s:平均每秒对设备的读请求被合并次数,文件系统会对读取同块的请求进行合并;wrqm/s:平均每秒对设备的写请求被合并次数,文件系统会对写入同块的请求进行合并;rsec/s:每秒读取的扇区数;wsec/s:每秒写入的扇区数;rKB/s:The number of read request that weir issued to the device per second;wKB/s:The number of write request that weir issued to the device per second;avgrq-sz:平均请求扇区的大小;avgqu-sz:平均每次IO队列长度,越短越好;await:cpu每次IO操作的等待时间(ms),包括队列时间和服务时间,一般系统IO响应应该低于5ms,如果大于
10ms就比较大了,也就是说一般情况下,await大于svctm,它们的差值越小,则说明队列越短,反之差值越大,
队列时间越长,说明系统出了问题;svctm:每次IO请求的处理时间(ms),如果svctm的值与await很接近,表示几乎么有I/O等待,磁盘性能
很好,如果await值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢;%util:每秒钟用于I/O操作的百分比,如果是多磁盘,即使util是100%,因为磁盘的并发能力,所以磁盘使用
未必就到了瓶颈;(Percentage of elapsed time during which I/O requests were issued to the device,
Device saturation occues when this value is close to 100%);关于util举一个简单的例子:某硬盘处理单个I/O需要0.1秒,有能力同时处理10个I/O请求,那么当10个I/O请
求依次顺序提交的时候,需要1秒才能全部完成,在1秒的采样周期里%util达到100%;而如果10个I/O请求一次性提
交的话,0.1秒就全部完成,在1秒的采样周期里%util只有10%。可见,即使%util高达100%,硬盘也仍然有可能还
有余力处理更多的I/O请求,即没有达到饱和状态。

可以参考网文章:iostat中的%util指标说明

iotop

在采样周期里,iotop按列显示每个进程/线程的I/O读写带宽,同时也显示进程/线程做swap交换和等待IO所占用的百分比,
常用的命令:
iotop -b -n 3 -d 1 非交互模式每秒查询1次,共查询3次。查询结果可以重定向文件中,作为记录日志。
iotop -p pid 查询指定进程的io使用率

blktrace

blktrace通过捕获内核注册在内核IO路径里的各个traceoponit点来输出每个IO经过各个内核处理点时的信息

blktrace -d /dev/sda1 -o - | blkparese -i -
Q------->G------------>I--------->M------------------->D----------------------------->C|-Q time-|-Insert time-||--------- merge time ------------|-merge with other IO||----------------scheduler time time-------------------|---driver,adapter,storagetime--||----------------------- await time in iostat output ----------------------------------|

其中:

  • Q2Q — time between requests sent to the block layer (包括remap和split)
  • Q2G — time from a block I/O is queued to the time it gets a request allocated for it
  • G2I — time from a request is allocated to the time it is Inserted into the device’s queue
  • Q2M — time from a block I/O is queued to the time it gets merged with an existing request
  • I2D — time from a request is inserted into the device’s queue to the time it is actually issued to the device (IO在IO Schedule中等待的时间)
  • M2D — time from a block I/O is merged with an exiting request until the request is issued to the device
  • D2C — service time of the request by the device
  • Q2C — total time spent in the block layer for a request

参考网站:developer.aliyun.com/article/698568

问题处理:
①、有错误日志Sense key:Medium Error [current]表明介质错误,一般事磁盘硬件出了问题。
②、有错误日志task abort,表明对应的磁盘IO超时了,一般事硬件问题,较小概率事驱动bug。
③、关键词“reset",表明对应磁盘IO出错后(IO超时也是一种IO错误),由于无法修复,系统触发了host reset操作。reset可以理解为固件层面的重启。常见的进入reset的条件是:IO超时之后,abort失败。
reset有4种,根据reset的影响,从小到大一次reset,device reset->target reset-.>bus reset->host reset->惕盘(将盘的状态置为offline),如果reset成功了,但是随后仍然继续出现IO错误,那说明大概率是硬件的错误了。

cut命令

 -b ,--bytes=LIST;(select only these bytes)-c ,--characters=LIST;(select only these charracters)-d ,--delimiter=DELIM;(use DELIM instead of TAB for field delimiter)-f ,--fields=LIST;(select only these fields; also print any line that contains no delemitercharacter, unless the -s option is specified)-n with -b:don't split mutibyte characters

获取线程id的方法

获取线程id网站

gdb调试指令

1、导入符号表

gdb -c core.1234 -e /bin/app -s /debug/symbol

2、导入环境变量

set environment
show environment

3、设置运行的参数

set args

4、当core文件不能导入符号表时,可以把符号表拷贝到lib目录,然后在gdb中直接运行,重新生成core文件后再直接bt指令。(或者把所有的依赖拷贝到同一个目录)。
5、gdb bt完,f跳转到某一行,p打印。
6、多线程调试:

info threads显示当前可以调试的所有线程
thread apply all bt 打印所有线程
thread ID切换当前调试的线程为制定ID的线程
attach process-id 在gdb状态下,开始调试一个正在运行的进程

7、打印容器

p (myVector._M_impl._M_start)[N-1]//打印第N个成员
p *(myVector._M_impl._M_start+N-1)

sheel命令学习和工作总结相关推荐

  1. linux命令学习(转)

    查询命令的地方:man.linuxde.net/ Linux必学的60个命令 Linux提供了大量的命令,利用它可以有效地完成大量的工 作,如磁盘操作.文件存 Linux提供了大量的命令,利用它可以有 ...

  2. externalreferences 命令在 sdi 模式下不可用_一个适合新手交互式Git命令学习项目

    前言 在我们日常工作开发中,Git是必不可少的版本控制软件,很多时候我们都用Git来管理我们的项目. 比较常用的有Github,Gitlab,Stash等. 因此对于Git命令的掌握是我们工作必备的能 ...

  3. [初级]Java命令学习系列(七)——javap

    转载自 [初级]Java命令学习系列(七)--javap javap是jdk自带的一个工具,可以对代码反编译,也可以查看java编译器生成的字节码. 一般情况下,很少有人使用javap对class文件 ...

  4. Java命令学习系列(二)——Jstack

    转载自 Java命令学习系列(二)--Jstack jstack是java虚拟机自带的一种堆栈跟踪工具. 功能 jstack用于生成java虚拟机当前时刻的线程快照.线程快照是当前java虚拟机内每一 ...

  5. Windows批处理命令学习

    Windows批处理命令学习一 Windows的批处理命令固然比不上unix的shell脚本强大,但用好了仍能给我们的工作带来很大作用.一个朋友问我为什么学习批处理命令,我以<程序员修炼之道-- ...

  6. linux基础命令学习笔记(二)

    linux基础命令学习笔记(二) 1.kill :终止进程  kill pid (唯一标示一个进程) kill -9  强制终止  kill -15 命令未结束不能终止 # ps aux 查看所有进程 ...

  7. [转]linux常用命令学习总结(超详细)

    作为一个程序员,我们在进行项目部署和运维时,经常会用到一些linux命令,可是这些命令老是忘记,每次用到的时候都要去谷歌百度,很是麻烦!这不,为了自己使用方便,对常见的linux命令进行了系统的总结, ...

  8. Linux命令学习资料总结

    对 Linux 新手非常有用的 20 个命令 1. ls命令 ls命令是列出目录内容(List Directory Contents)的意思.运行它就是列出文件夹里的内容,可能是文件也可能是文件夹. ...

  9. Linux命令学习之一

    Linux命令 1.预览 cat chattr chgrp chmod chown cksum cmp diff diffstat file find git gitview indent cut l ...

最新文章

  1. python 获取程序运行时间
  2. vs2008格式化代码
  3. print(__doc__)
  4. 2020年度中国生命科学十大进展公布 | 中国科协生命科学学会联合体
  5. JQuery插件:ScrollTo平滑滚动到页面指定位置
  6. java trackid_Java Preference.getContext方法代码示例
  7. 解题:USACO15JAN Grass Cownoisseur
  8. 域名平台SSL证书及Nginx 配置SSL证书简易教程
  9. 三次Hermite插值
  10. 5G消息亮相2021国际数字科技展暨天翼智能生态博览会
  11. SLAM综述阅读笔记一:Past, Present, and Future of Simultaneous Localization And Mapping(2016)
  12. Python 解析式
  13. 一个简单炫酷的前端小项目(html+css+js)----3D图片演示
  14. 小程序学习笔记01 - 图片识别
  15. 喝豆浆对身体都有哪些好处?
  16. 三维重建(一)外极几何,基础矩阵及求解
  17. UC Berkeley AI Project -MindsDB 学习
  18. 全球与中国葡萄酒保鲜工具市场现状及未来发展趋势
  19. 目标检测新方式 | class-agnostic检测器用于目标检测(附论文下载链接)
  20. 服务器线路有几种分类?

热门文章

  1. URL中文转义和特殊字符处理
  2. Android商城项目开源
  3. 灰度巡线传感器_探索者D1系列教程十 巡线传感器
  4. MCS-51单片机存储地址空间划分
  5. 今日头条校园招聘历年经典面试题汇总:C++研发岗
  6. 企业如何选择合适的精益生产方案?
  7. 生活中常给自己的心理暗示:
  8. Cypress代理铁电存储器FM25V10-GTR中文资料
  9. 分享一个技术知识类电子书网站
  10. 开发到上线仅 16 天,海外党研发微信小程序全攻略