【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 下)

前提介绍

在线上排查问题时,查询日志、查看系统配置和分析操作系统信息是至关重要的。这些操作可以帮助我们深入了解软件和服务的兼容性,并解决潜在的问题。在本次学习中,我们将介绍并深入学习一些我在处理类似问题时常用的指令。通过掌握这些指令,你将能够更加高效地定位和解决线上问题,提高系统的稳定性和性能。让我们一同进入这个学习过程吧!

主要的指令分为一下几大类

more和less命令用法

more命令

more命令是类似于cat命令的功能,但它将文件的内容分页显示在屏幕上。与cat命令一次性显示整个文件不同,more命令通过一页一页的方式方便用户逐页阅读文件。

基本的more命令操作如下:

  • 按空格键(space)向下翻一页显示内容。
  • b键向上(back)翻一页显示内容。
  • more命令还具有搜索字符串的功能,可以在文件中查找指定的字符串。

more命令从前向后读取文件,因此在启动时就加载整个文件。它会根据终端的大小自动决定每页显示的行数,以适应屏幕空间。

使用more命令可以方便地分页阅读文件内容,尤其适用于查看较大的文件或输出较长的文本内容。

命令格式

shell 复制代码
more [-dlfpcsu ] [-num ] [+/ pattern] [+ linenum] [file ... ] 

命令参数

more命令的一些常用选项和功能如下:

  • +n 从第n行开始显示文件内容
  • -n 定义屏幕显示的行数为n行
  • +/pattern 在每个文件显示前,在指定的模式(pattern)前进行搜索,然后从该模式的前两行之后开始显示内容
  • -c 清屏并显示文件内容
  • -d 提示用户按空格键继续显示内容,按q键退出,并禁用响铃功能
  • -l 忽略Ctrl+l(换页)字符
  • -p 使用清除窗口而不是滚屏的方式进行分页,类似于-c选项
  • -s 将连续的多个空行显示为一行
  • -u 去除文件内容中的下划线

常用操作命令

more命令的一些常用操作快捷键和功能说明:

  • Enter:向下滚动一行或指定的行数(默认为1行)
  • Ctrl+F:向下滚动一屏
  • 空格键:向下滚动一屏
  • Ctrl+B:返回上一屏
  • =:输出当前行的行号
  • ::显示当前文件名和当前行的行号
  • V:调用vi编辑器进行编辑
  • !命令:调用Shell,并执行指定的命令
  • q:退出more命令

通过使用这些操作快捷键,可以更灵活地浏览和操作more命令中显示的文件内容。例如,可以通过回车键或者空格键逐行或指定行数滚动文件内容,使用Ctrl+F或空格键快速向下滚动一屏,使用Ctrl+B返回到上一屏,并使用其他功能来获取更多的信息。

案例分析

显示文件中从第3行起的内容

使用了两个命令来显示文件的内容。首先是使用cat命令来显示test.log文件的所有日志内容。然后,使用more命令来从第三行开始显示日志内容。

shell 复制代码
cat test.log                 # 显示所有日志内容
shell 复制代码
more +3 test.log             # 从第三行开始显示日志内容

通过这些命令,我们可以很方便地查看文件的特定部分,例如从指定行开始显示内容,以满足我们的需求。

将日志内容设置为每屏显示4行

使用more命令将日志文件test.log的每屏显示行数设置为4行。这意味着每次显示文件内容时,最多只会显示4行,方便用户逐页阅读。

shell 复制代码
more -4 test.log

通过调整-4参数的值,您可以根据需要设置不同的每屏显示行数,以便更好地控制和浏览文件内容。

快速定位和显示文件中包含特定字符串

使用more命令从文件test.log中查找并定位第一个出现"liu"字符串的行,并从该处前两行开始显示输出。

shell 复制代码
more +/liu test.log

在这个示例中,+/liu参数告诉more命令在每个文件显示前,在文件中搜索"liu"字符串,并从该字符串的前两行后开始显示文件内容,以方便用户查看与该字符串有关的内容。

结合管道和more命令来分页显示

当一个目录下的文件内容太多时,可以结合管道和more命令来分页显示,通过使用管道和more命令,可以处理文件内容太多而无法一次显示的情况。管道将前一个命令的输出作为后一个命令的输入,实现数据的流动和处理。

命令:

shell 复制代码
cat test.log | more -5

在这个示例中,使用管道|cat命令的输出作为输入传递给more命令。这样可以将文件test.log的内容通过管道传递给more命令,并结合-5参数使其每页显示5行内容。

less指令

less工具是对文件或其他输出进行分页显示的工具,在Linux中被认为是查看文件内容的正统工具,并具有非常强大的功能。less相比于more更加灵活和弹性。在使用more时,我们无法向前翻页,只能向后查看内容。但是,使用less时,可以使用[pageup][pagedown]等按键来往前往后翻页,更方便查看文件内容。此外,在less中还拥有更多的搜索功能,不仅可以向下搜索,还可以向上搜索。

使用less命令可以方便地浏览文件内容,并且具有更多的交互和搜索功能,使得查看文件变得更加便捷和高效。

命令格式

shell 复制代码
less [参数]  文件 

less命令的一些常用选项和功能如下:

  • -b <缓冲区大小>:设置缓冲区的大小
  • -e:当文件显示结束后,自动离开
  • -f:强制打开特殊文件,例如外围设备代号、目录和二进制文件
  • -g:只标记最后搜索的关键词
  • -i:忽略搜索时的大小写
  • -m:显示类似more命令的百分比
  • -N:显示每行的行号
  • -o <文件名>:将less输出的内容保存到指定文件中
  • -Q:不使用警告音
  • -s:将连续的空行显示为一行
  • -S:当行过长时将超出部分舍弃
  • -x <数字>:将tab键显示为指定数量的空格

搜索指令操作

  • /字符串:向下搜索指定的字符串
  • ?字符串:向上搜索指定的字符串
  • n:重复前一个搜索(与/?有关)
  • N:反向重复前一个搜索(与/?有关)
  • b:向后翻一页
  • d:向后翻半页
  • h:显示帮助界面
  • Q:退出less命令
  • u:向前滚动半页
  • y:向前滚动一行
  • 空格键:滚动一行
  • 回车键:滚动一页
  • [pagedown]:向下翻动一页
  • [pageup]:向上翻动一页

与more的对比

less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会加载整个文件。

查看CPU使用率的几个命令

在Linux系统维护中,常用以下几个命令来查看CPU使用率和相关信息:

top命令

这个命令很常用,在第三行有显示CPU当前的使用情况,可以实时显示系统的运行情况,包括CPU使用率、运行队列等。使用命令top,然后按"1"可以查看每个核心的CPU使用率。

shell 复制代码
[root@li676-235 ~]# top -bn 1 -i -c
top - 14:19:51 up 138 days, 7:15, 1 user, load average: 0.20, 0.33, 0.39
Tasks: 115 total, 1 running, 114 sleeping, 0 stopped, 0 zombie
Cpu(s): 4.5%us, 3.8%sy, 0.0%ni, 91.0%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 1014660k total, 880512k used, 134148k free, 264904k buffers
Swap: 262140k total, 34788k used, 227352k free, 217144k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 
12760 root 20 0 15084 1944 1632 R 2.0 0.2 0:00.01 top -bn 1 -i -c

如上所示,top命令可以提供总体的系统运行状态和CPU的使用率信息。

  • %us:表示用户空间程序的CPU使用率(没有通过nice调度)。
  • %sy:表示系统空间的CPU使用率,主要是内核程序。
  • %ni:表示用户空间且通过nice调度过的程序的CPU使用率。
  • %id:表示空闲CPU的比例。
  • %wa:表示CPU运行时在等待IO的时间。
  • %hi:表示CPU处理硬中断的数量。
  • %si:表示CPU处理软中断的数量。
  • %st:表示被虚拟机偷走的CPU的比例。

通过观察这些指标,可以了解系统的整体负载和CPU的使用情况。例如,高 %us 表示用户程序占用CPU较多,高 %wa 可能表示IO等待较多。这些信息有

mpstat命令

可以显示每个CPU的统计数据,包括用户空间、系统空间和空闲时间的百分比。使用命令mpstat,例如:

shell 复制代码
mpstat -P ALL

vmstat命令

可以显示系统的虚拟内存、进程、IO等信息,其中包括CPU使用率和上下文切换。使用命令vmstat,例如:

shell 复制代码
vmstat -n 1
shell 复制代码
[root@li676-235 ~]# vmstat 1 5
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r b swpd free buff cache si so bi bo in cs us sy id wa st
 2 0 34792 68376 147688 356132 16 16 421 385 2 2 5 4 91 1 0
 3 0 34792 97368 147688 326884 0 0 0 0 133 134 15 6 79 0 0
 1 0 34792 62432 147696 360704 0 0 0 88 267 278 63 18 19 0 0
 0 0 34792 97160 147696 326904 0 0 0 0 71 82 12 4 84 0 0
 1 0 34792 56572 147696 364540 0 0 0 4 261 246 61 23 16 0 0

sar命令

可以以历史记录的方式显示CPU使用率和其他系统指标。使用命令sar,例如:

shell 复制代码
sar -u

这些命令可以用来监控CPU的性能指标,帮助评估系统的运行情况和性能瓶颈。根据需要选择合适的命令来查看CPU使用率和相关信息。

CPU使用率

例如每1秒采集一次CPU使用率,共采集5次。

shell 复制代码
[root@li676-235 ~]# sar -u 1 5
Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
02:41:25 PM CPU %user %nice %system %iowait %steal %idle
02:41:26 PM all 64.71 0.00 18.63 0.00 0.98 15.69
02:41:27 PM all 29.47 0.00 22.11 14.74 0.00 33.68
02:41:28 PM all 67.33 0.00 31.68 0.99 0.00 0.00
02:41:29 PM all 7.00 0.00 2.00 0.00 0.00 91.00
02:41:30 PM all 69.00 0.00 23.00 0.00 0.00 8.00
Average: all 47.79 0.00 19.48 3.01 0.20 29.52

和top一样,可以看到所有cpu的使用情况。如果需要查看某颗cpu的使用可以用-P参数。例如指定显示0号cpu 的使用情况。

shell 复制代码
[root@li676-235 ~]# sar -P 0 -u 1 5
Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
02:45:14 PM CPU %user %nice %system %iowait %steal %idle
02:45:15 PM 0 44.00 0.00 52.00 4.00 0.00 0.00
02:45:16 PM 0 9.28 0.00 26.80 62.89 1.03 0.00
02:45:17 PM 0 3.06 0.00 14.29 81.63 1.02 0.00
02:45:18 PM 0 4.12 0.00 22.68 72.16 1.03 0.00
02:45:19 PM 0 4.12 0.00 22.68 72.16 1.03 0.00
Average: 0 13.09 0.00 27.81 58.28 0.82 0.00

进程队列长度和平均负载状态

例如每1秒采集一次,共采集5次。

shell 复制代码
[root@li676-235 ~]# sar -q 1 5
Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2015 _x86_64_ (1 CPU)
02:48:47 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15
02:48:48 PM 1 133 0.34 0.43 0.41
02:48:49 PM 2 132 0.34 0.43 0.41
02:48:50 PM 1 133 0.34 0.43 0.41
02:48:51 PM 2 134 0.31 0.42 0.40
02:48:52 PM 1 133 0.31 0.42 0.40
Average: 1 133 0.33 0.43 0.41

输出项

  • runq-sz:运行队列的长度(等待运行的进程数)
  • plist-sz:进程列表中进程(processes)和线程(threads)的数量
  • ldavg-1:最后1分钟的系统平均负载(System load average)
  • ldavg-5:过去5分钟的系统平均负载
  • ldavg-15:过去15分钟的系统平均负载

进程创建的平均值和上下文切换的次数

例如每1秒收集一次,共收集5次。

shell 复制代码
[root@li676-235 ~]# sar -w 1 5 
Linux 3.18.5-x86_64-linode52 (li676-235) 07/20/2023 _x86_64_ (1 CPU)
02:54:03 PM proc/s cswch/s
02:54:04 PM 1.01 156.57
02:54:05 PM 1.00 132.00
02:54:06 PM 2.00 201.00
02:54:07 PM 2.02 126.26
02:54:08 PM 2.00 114.00
Average: 1.61 145.98
相关推荐
tan180°15 分钟前
MySQL表的操作(3)
linux·数据库·c++·vscode·后端·mysql
典学长编程43 分钟前
Linux操作系统从入门到精通!第二天(命令行)
linux·运维·chrome
wuk9981 小时前
基于MATLAB编制的锂离子电池伪二维模型
linux·windows·github
优创学社21 小时前
基于springboot的社区生鲜团购系统
java·spring boot·后端
why技术1 小时前
Stack Overflow,轰然倒下!
前端·人工智能·后端
幽络源小助理1 小时前
SpringBoot基于Mysql的商业辅助决策系统设计与实现
java·vue.js·spring boot·后端·mysql·spring
ai小鬼头3 小时前
AIStarter如何助力用户与创作者?Stable Diffusion一键管理教程!
后端·架构·github
简佐义的博客3 小时前
破解非模式物种GO/KEGG注释难题
开发语言·数据库·后端·oracle·golang
Code blocks3 小时前
使用Jenkins完成springboot项目快速更新
java·运维·spring boot·后端·jenkins