常用 Shell 命令

203 阅读5分钟

CPU 相关

1.vmstat [options] [delay [count]]

-a 列出活动和非活动的内存(默认)
-t 带时间戳
-d 输出所有磁盘的统计信息
-S 定义显示单位(k/m),默认 KB

2.mpstat [-P ALL] [internal [count]]

参数 释义
%usr 在internal时间段里,用户态的CPU时间(%),不包含 nice值为负进程
%nice 在internal时间段里,nice值为负进程的CPU时间(%)
%sys 在internal时间段里,核心时间(%)
%iowait 在internal时间段里,硬盘IO等待时间(%)
%irq 在internal时间段里,硬中断时间(%)
%soft 在internal时间段里,软中断时间(%)
%steal 虚拟机管理器在服务另一个虚拟处理器时虚拟CPU处在非自愿等待下花费时间的百分比
%guest 运行虚拟处理器时CPU花费时间的百分比
%idle 在internal时间段里,CPU除去等待磁盘IO操作外的因为任何原因而空闲的时间闲置时间(%)

3.pidstat [options] [delay [count]]

-u 显示各个进程的CPU使用统计,默认参数
-r 显示各个进程的内存使用统计
-d 显示各个进程的IO使用情况
-p 指定进程号
参数 释义
%usr 进程在用户空间占用CPU的百分比
%system 进程在内核空间占用CPU的百分比
%guest 进程在虚拟机占用CPU的百分比
%CPU 进程占用CPU的百分比
CPU 处理进程的CPU编号
minflt/s 进程每秒钟出现的小错误的条数
majflt/s 进程每秒钟出现较大错误的条数
VSZ 进程使用的虚拟内存的大小(KB)
RSS 进程使用的不可交换的物理内存(KB)
%MEM 进程占用的物理内存百分比
KB_rd/s 进程从硬盘读取数据的速度
KB_wr/s 进程向硬盘写入数据的速度
KB_cc/s 进程写入硬盘被取消的速度

磁盘IO

iostat [options] [delay [count]]

-c 显示CPU利用率报告
-d 显示磁盘利用率报告
-k 显示统计信息(以kb/s为单位)
-x 显示扩展统计
-h 显示人类可读的输出(以最合适的单位)
参数 释义
tps 该设备每秒的传输次数,一次传输指一次I/O请求,多个逻辑请求可能会被合并为一次I/O请求
kB_read/s 每秒从设备读取的数据量
kB_wrtn/s 每秒向设备写入的数据量
kB_read 读取的总数据量
kB_wrtn 写入的总数量数据量
rrqm/s 每秒这个设备相关的读取请求有多少被Merge了
wrqm/s 每秒这个设备相关的写入请求有多少被Merge了
rsec/s 每秒读取的扇区数
wsec/s 每秒写入的扇区数
await 每一个IO请求的处理的平均时间(单位是微秒)。这里可以理解为IO的响应时间,一般系统IO响应时间应该低于5ms,如果大于10ms就比较大了
%util 在统计时间内所有处理IO时间,除以总共统计时间。该参数暗示了设备的繁忙程度,一般该参数是100%表示设备已经接近满负荷运行了,但如果是多磁盘,即使%util是100%,因为磁盘的并发能力,磁盘也使用未必就到了瓶颈

字符串

1.grep [OPTION] PATTERN [FILE]

-a binary文件以text方式搜寻
-c 统计有多少行含有匹配的模式
-e 如果指定多个匹配模式,用-e来指定每个模式
    grep -e t -e f file1
-i 忽略大小写
-v 反向搜索,输出不匹配该模式的行
-n 输出行号
-A after 显示匹配行的后几行
-B before 显示匹配行的前几行

2.wc [OPTION] [FILE]

-l 统计行数
-w 统计单词数
-m 统计字符数

3.sort [OPTION] [FILE]

-u 去重
-c 不排序,但检查输入数据是不是已排序;未排序的话,报告
-r 降序排列,默认升序
-b 排序时忽略起始的空白
-n 依据数值来排序,默认字典序
-t 指定分隔符,与-k搭配使用
-k 指定排序键,即列数,与-t搭配使用
-f 忽略大小写
-M 用三字符月份名按月份排序
-m 将两个已排序数据文件合并
-o 将排序结果写出到指定的文件中

4.uniq [OPTION] [INPUT [OUTPUT]]

-c 在每列旁边显示该行重复出现的次数
-d 仅显示重复出现的行列,显示一行
-D 显示所有重复出现的行列,有几行显示几行
-u 仅显示出一次的行列
-i 忽略字符大小写
-f Fields 忽略比较指定的列数
-s N 忽略比较前面的N个字符
-w N 对每行第N个字符以后的内容不作比较
INPUT 指定已排序好的文本文件,如果不指定此项,则从标准读取数据
OUTPUT 指定输出的文件,如果不指定此选项,则将内容显示到标准输出设备(显示终端)

5.cut [OPTION] [FILE]

-d 指定分隔符,与-f一起使用
-f 依据-d的分隔字符将一段信息分割成为数段,用-f取出第几段的意思
--complement 搭配-c或-f使用,反选
-c range 选中指定的字符,字符范围
    N    从第1个开始数的第N个字节、字符或域 
    N-   从第N个开始到所在行结束的所有字符、字节或域 
    N-M  从第N个开始到第M个之间(包括第M个)的所有字符、字节或域 
    -M   从第1个开始到第M个之间(包括第M个)的所有字符、字节或域

获取输入

getopts optstring variable

示例:

# opt 自定义变量名,可以修改为其它名字
# 引号 " 可去掉
# a/b/c/d/e 为执行脚本时指定的参数,例如 sh test.sh -a 1 -b 2
while getopts ":a:b:c:d:e:" opt
do
    case ${opt} in
        # OPTARG 是固定写法,不能改变名字
        a) echo "a=${OPTARG}";;
        b) echo "b=${OPTARG}";;
        c) echo "c=${OPTARG}";;
        d) echo "d=${OPTARG}";;
        e) echo "e=${OPTARG}";;
    esac
done