Linux常用命令及详细说明 — 结合工作(侧重性能监控,包括CPU、内存、IO、网络、磁盘等)
(一)linux监控的几个常用命令(对于服务器后端程序猿很重要,必须掌握):
命令 | 功能 | 命令 | 功能 |
iostat | 统计cpu及网络、设备和分区io的数据 | vmstat | 展示给定时间服务器的状态值(包括cpu使用率、内存使用状况、虚拟内存交换情况、io读写情况),很常用 |
free | 显示内存状况,包括空闲以及被使用的物理内存、交换内存以及被kernel使用的缓冲区 | sar | system activity report 系统活动报告,是目前linux最为全面的系统性能分析工具之一 |
ps | 显示当前正在运行的所有进程的快照 | strace | 跟踪进程执行时系统调和所接收的信号 |
top | 实时显示系统中各个进程的资源(cpu和load)占用状况,类似于windows任务管理器 | tcpdump |
dump the traffic on a network, 根据用户定义对网络上的包进行截获的包分析工具, 功能和查看pcap包的wireshark工具差不多 |
- iostat
统计cpu及网络、设备和分区io的数据,具体命令行参数见下表:
选项 | 含义 |
-d | 显示设备(磁盘)使用状态 |
-k | 某些使用block为单位的列强制使用kilobytes/每秒 |
-x | 显示更多统计信息 |
-c | 显示cpu利用率 |
输入"iostat -x”,结果如下图:
avg-cpu统计信息每段含义见下表:
参数 | 含义 |
%user | 在用户态运行程序,cpu利用的百分比 |
%nice | 在nice优先级(即静态优先级,具体啥含义请百度) |
%system | 在内核态运行程序,cpu利用的百分比 |
%iowait | 特别重要 — show the percentage of time that the cpu or cpus were idle during which the system had an outstanding disk i/o request |
%steal |
虚拟cpu等待的百分比 — show the percentage of time spent in involuntary wait by the virtual cpu or cpus while the hypervisor was servicing another virtual processor |
%idle | cpu 空闲的比列,cpu没有io请求需要处理 — 和 %iowait含义相反 |
设备(device)输出结果每段含义详细说明见下表:
参数 | 含义 |
rrqm/s |
每秒这个设备相关的读取请求有多少被merge了, 当系统调用需要读取数据的时候,vfs将请求发到各个fs,如果fs发现不同的读取请求读取的是相同block的数据,fs会将这个请求合并merge |
wrqm/s | 每秒这个设备相关的写入请求有多少被merge了 |
r/s | the number of read requests that were issued to the device per second |
w/s | the number of write requests that were issued to the device per second |
rsec/s | 每秒读取的扇区数 |
wsec/s | 每秒写入的扇区数 |
avgrq-sz | |
avgqu-sz | |
await | 每一个io请求的处理的平均时间(单位是毫秒) |
svctm | |
%util |
在统计时间内所有处理io时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理io, 而0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,所以该参数暗示了设备的繁忙程度。 一般地,如果该参数是100%表示设备已经接近满负荷运行了 (当然如果是多磁盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。 |
- ps
- grep
- top
实时显示系统中各个进程的资源占用状况,类似于windows任务管理器,默认3秒钟刷新一次,太快了,看不过来,-d 可以指定,多少时间更新一次
具体命令行参数说明见下表:
选项 | 含义 |
-a | 按照内存使用率排序 |
-d | 设置多长时间(以秒为单位)刷新一次结果 |
-p <pid> | 查看指定进程id的信息 |
-u <username> | 查看指定用户名的信息 |
-i | 不显示任何闲置 (idle) 或僵尸 (zombie) 的进程 |
-n iterations | 指定更新多少次信息后终止 |
-c | 显示完整命令,如mysql会显示 “/usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql” |
-s | 安全模式 |
-s | 累积时间模式,开启此模式,会列出该进程及它已经死掉的子进程所使用的cpu时间 |
例如,“top -d 30” —— 30秒刷新一次(默认按cpu占用率排序),结果如下图:
输出结果前5行(统计的整体信息)的每一段的含义如下表所示:
行 | 段1含义 | 段2含义 | 段3含义 | 段4含义 | 段5含义 | 段6含义 | 段7含义 | 段8含义 |
1 - top | 13:43:10 - 当前时间 | up 4:21 - 系统运行时间,格式为"时:分" | 1 user - 当前登录用户数 |
load average: 0.01, 0.04, 0.01 - 系统负载,即任务队列的平均值 三个数值依次为"1分钟5分钟 15分钟”到目前的平均值 |
||||
2 - tasks | 1012 total - 进程总数 | 1 running - 正在运行的进程数 | 1095 sleeping - 睡眠的进程数 | 6 stopped - 停止的进程数 | 0 zombie - 僵尸进程数 | |||
3 - cpu(s) | 0.8%us - 用户空间占用cpu百分比 | 0.1%sy - 内核空间占用cpu百分比 | 0.0%ni - 用户进程空间改变过优先级的占cpu百分比 | 99.2%id - 空闲cpu百分比 | 0.0%wa - 等待输入输出的cpu百分比 | 0.0%hi - | 0.0%si - | 0.0%st - |
4 - mem | 132173688k total - 物理内存总量 | 38002800k used - 已使用的物理内存总量 | 94170888k free - 空闲内存总量 | 208420k buffers - 用于内核缓存的内存总量 | ||||
5 -swap | 4194600k total - 交换区总量 | 0k used - 已使用的交换区总量 | 4194300k free - 空闲交换区总量 | 2624596k cached - 缓冲的交换区总量 |
在top命令模式下,按“f”键,会显示每个column的详细信息,如下图:
每一列的含义翻译成中文如下表所示:
列名 | 含义 |
pid | 进程id |
user | 用户名 |
pr | 进程优先级 |
ni | nice value,不知道怎么翻译好 |
virt | 进程使用的虚拟内存总量(kb) |
res | 进程使用的、未被换出的物理内存大小 |
shr | 共享内存大小(kb) |
s | 进程状态。d=不可中断的睡眠状态,r=运行,s=睡眠,t=跟踪/停止,z=僵尸进程 |
%cpu | 上次更新到现在的cpu时间占用百分比 |
%mem | 进程当前使用的可被共享的内存容量 |
time+ | task自启动以来,累计占用cpu时间,精确到百分之一秒 |
command | 命令行或者程序名 |
- free
显示空闲和使用的内存信息,命令参数选项如下表:
选项 | 含义 |
-b -k -m -g | 单位分别为bytes, kb, mb, g |
-h | 人类可读(即自动以mb,g等为单位显示) |
-t | 额外显示总数 (ram + swap) |
-o (old format) | 不会显示 -/+ buffers/cache 这行信息 |
输入“free -m”,以m为单位,便于精确计算讲解,结果如下图:
输出结果具体每行每列的含义详见下表:
行 | total | used | free | shared | buffers | cached |
mem: | 内存总数 (total = used + free) | 已经使用的内存数量 | 空闲内存数量 | 共享内存数量,据说已经废弃不用 | 缓冲内存数量 | 缓存内存数量 |
-/+ buffers/cache: |
(- buffers/cache) used —— 反映的是被程序实实在在吃掉的内存 使用的内存数 = 第一行即mem行的 “used - buffers - cached” = 34562 - 87 - 1322 = 33151m |
(+ buffers/cache) free —— 反映的是可以挪用的内存总数 空闲内存数 = 第一行即mem行的 “free + buffers + cached” = 94513 + 87 + 1322 = 95922m 差2m不知道哪里来的 |
||||
swap: (交换区) | 交换区内存总数 | 交换区已使用内存数 | 交换区空闲内存数 |
- sar
system activity report 系统活动报告,是目前linux最为全面的系统性能分析工具之一
- vmstat
- tcpdump
dump the traffic on a network, 根据用户定义对网络上的包进行截获的包分析工具。tcpdump可以将网络传输的数据包的“头”完全截获下来以供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用信息。直接启动tcpdump将监视第一个网络接口上所有流过的数据包,抓取100个包的命令“tcpdump -c 100”,结果如下图:
具体命令行参数详见下表:
选项 | 含义 |
-i <网卡号或称之为网络接口> | 监听指定网卡(又称网络接口)的数据包,如tcpdump -i eth0(监听第一个网络接口,etho也是默认监听的网卡,第一个嘛) |
tcpdump -i etho dst host hostname | 监视所有发送到主名为hostname的网络数据包(dst — 目的地,通过默认网卡) |
tcpdump -i etho src host hostname | 截获主机名为hostname所发送的所有数据(src — 源,通过默认网卡) |
tcpdump ip host 210.27.48.1 and !210.27.48.2 | 获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的网络包 (!—— 取反,即非的意思嘛) |
(二)基本简单命令
列表汇总基本命令:
命令 | 功能 | 命令 | 功能 | 命令 | 功能 |
ls | 查看当前目录下有哪些文件和文件夹 | whereis | 查找可执行的软件命令在哪里 | clear/reset/ ctrl + l | 清屏——切换到下一个新的屏幕 |
pwd | 显示当前目录的完整路径 | cd | 改变所在目录 | vi | 文本编辑器 |
cat | 输出文件的内容到屏幕 | mkdir | 创建目录 | vim | 程序编辑器 |
sh | 执行shell脚本 | rmdir | 删除目录 | kill | 杀死进程 |
yum | 软件包管理器 | mv | 移动文件 | ifconfig | 显示或者设置网络设备 |
sudo | 以系统管理员的身份执行指令,类似于windows cmd,右键选择"以管理员身份运行“” | rm | 删除文件 | cal | 日历 |
df | 查看磁盘使用情况 | cp | 复制文件 | date | 日期 |
stat | 显示文件或者文件系统的状态 | touch | 更新文件的访问时间和修改时间,如果不存在,则创建之 | bc | 计算器 |
linux命令的常识:
(1)大小写敏感,如 "top"可以识别,"top" 则comand not found
(2)-h (部分命令支持,如冲突则不支持)和 --help(大多数命令支持),查看命令帮助信息,如 rmdir --help,提示“ rmdir [option]... directory..”
(3)命令有缩写和全拼两种格式,如 rmdir 的"-p" <=> "--parents"
(4)ctrl + c ,exit 当前正在执行的命令;ctrl + z , stop 当前正在执行的命令
(5)命令格式说明,“【】”括起来表示选项可选,接下来紧跟的详细参数,如ls命令说明:“ls [option]... [file]...”
(6)可通过“|”进行命令拼接,如“ps -ef | grep java | grep -v grep”
(7)linux 命令或者参数在输入1个或2个字符后,按tab键,会列出可选命令和参数,如果输入3个或者4个字符,可查找出唯一的命令和参数,将自动补全
(8)键盘“pgup”和“pgdn"及 键盘“↑”和“↓” 可以切换到上一个或者下一个已输入的命令;按键“←” 和“→” ,可以在命令里左右移动光标;按键“home” 和“end” 可以跳转到命令的第一个字符和末尾
(8)linux里所有东西都被当做文件,不像windows有硬件设备的概念,如磁盘、cpu等,所以你装的所有软件,如mysql等都是文件
详细论述:
- ls
查看当前目录下有哪些文件及文件夹,具体命令行参数说明见下表:
常用选项 | 含义 |
-l | 一行显示一个文件或者文件夹,并显示诸如文件大小、文件最后修改时间、owner等信息 |
-a | 列出所有文件及文件夹,包括隐藏文件 |
-r | 把子文件夹下的文件也全部列出来,可以“ls -r -l”组合用 |
-s | 按文件大小倒叙列出所有文件 |
-h | 以人类可读的形式列出文件大小(k,m,g) |
如在 linux的根目录下,输入“ls”,结果如下图:
如果是在包含有文件的目录下,输入“ls”,比如在root下,则会包含文件如 “install.log” 及文件夹 “music” 等等,结果如下图:
组合命令,“ls -s -h -l”,结果如下图:
- pwd
显示当前的完整路径名,如下图:
- cd
切换当前目录,具体语法: cd [dirname],具体命令行参数说明见下表:
选项 | 含义 |
.. | 切换到父级目录 |
/ | 切换到根目录 |
~ | 切换到home根目录 |
- whereis
查找命令—具体语法: whereis [ -sbmu ] [ -sbm dir ... -f ] name...,例如"whereis mysql",结果如下图:
- cat
输出文件内容到终端,例如“cat install.log”,结果如下图:
- sh
- ifconfig
显示或者设置网络设备,输入“ifconfig”, 结果如下图(可以看到自己的ipv4 、ipv6 地址等信息):
- kill
- rm
- mv
- cp
- touch
更新文件的访问时间和修改时间,如果文件不存在,则创建之。如我在root根目录,“touch test2019.txt”,文件不存在则创建之,效果如下图:
- mkdir
创建目录,
- rmdir
- df
- vi 及vim
- yum
- sudo
- stat
显示文件或者文件系统的状态,具体语法: stat [option]... file...,例如“stat a.txt”, 结果如下图:
- bc
内置计算器,"bc -q" 不会输出关于bc软件的一些信息,直接用(回车输出结果),如下图:
- cal
日历
- date
日期—具体语法: date [option]... [+format],例如“date ‘+%y % m%d %h %m’”,输出当期日期的年月日、时、分,结果如下图:
附注:
未完待续,空了接着完善
*****************************************************************************************************
精力有限,想法太多,专注做好一件事就行
- 我只是一个程序猿。5年内把代码写好,技术博客字字推敲,坚持零拷贝和原创
- 写博客的意义在于锻炼逻辑条理性,加深对知识的系统性理解,锻炼文笔,如果恰好又对别人有点帮助,那真是一件令人开心的事
*****************************************************************************************************