写点什么

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

作者:洛神灬殇
  • 2024-01-24
    江苏
  • 本文字数:4313 字

    阅读完需:约 14 分钟

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

前提介绍

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


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


more 和 less 命令用法

more 命令

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


基本的more命令操作如下:


  • 按空格键(space)向下翻一页显示内容。

  • b键向上(back)翻一页显示内容。

  • more命令还具有搜索字符串的功能,可以在文件中查找指定的字符串。


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


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

命令格式

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命令来从第三行开始显示日志内容。


cat test.log                 # 显示所有日志内容
复制代码


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


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

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

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


more -4 test.log
复制代码


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

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

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


more +/liu test.log
复制代码


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

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

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


命令:


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


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

less 指令

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


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

命令格式

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 使用率。


[root@li676-235 ~]# top -bn 1 -i -ctop - 14:19:51 up 138 days, 7:15, 1 user, load average: 0.20, 0.33, 0.39Tasks: 115 total, 1 running, 114 sleeping, 0 stopped, 0 zombieCpu(s): 4.5%us, 3.8%sy, 0.0%ni, 91.0%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%stMem: 1014660k total, 880512k used, 134148k free, 264904k buffersSwap: 262140k total, 34788k used, 227352k free, 217144k cachedPID 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,例如:


   mpstat -P ALL
复制代码

vmstat 命令

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


   vmstat -n 1
复制代码


[root@li676-235 ~]# vmstat 1 5procs -----------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,例如:


   sar -u
复制代码


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

CPU 使用率

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


[root@li676-235 ~]# sar -u 1 5Linux 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 %idle02:41:26 PM all 64.71 0.00 18.63 0.00 0.98 15.6902:41:27 PM all 29.47 0.00 22.11 14.74 0.00 33.6802:41:28 PM all 67.33 0.00 31.68 0.99 0.00 0.0002:41:29 PM all 7.00 0.00 2.00 0.00 0.00 91.0002:41:30 PM all 69.00 0.00 23.00 0.00 0.00 8.00Average: all 47.79 0.00 19.48 3.01 0.20 29.52
复制代码


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


[root@li676-235 ~]# sar -P 0 -u 1 5Linux 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 %idle02:45:15 PM 0 44.00 0.00 52.00 4.00 0.00 0.0002:45:16 PM 0 9.28 0.00 26.80 62.89 1.03 0.0002:45:17 PM 0 3.06 0.00 14.29 81.63 1.02 0.0002:45:18 PM 0 4.12 0.00 22.68 72.16 1.03 0.0002:45:19 PM 0 4.12 0.00 22.68 72.16 1.03 0.00Average: 0 13.09 0.00 27.81 58.28 0.82 0.00
复制代码

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

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


[root@li676-235 ~]# sar -q 1 5Linux 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-1502:48:48 PM 1 133 0.34 0.43 0.4102:48:49 PM 2 132 0.34 0.43 0.4102:48:50 PM 1 133 0.34 0.43 0.4102:48:51 PM 2 134 0.31 0.42 0.4002:48:52 PM 1 133 0.31 0.42 0.40Average: 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 次。


[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/s02:54:04 PM 1.01 156.5702:54:05 PM 1.00 132.0002:54:06 PM 2.00 201.0002:54:07 PM 2.02 126.2602:54:08 PM 2.00 114.00Average: 1.61 145.98
复制代码


发布于: 6 小时前阅读数: 3
用户头像

洛神灬殇

关注

🏆 InfoQ写作平台-签约作者 🏆 2020-03-25 加入

👑 后端技术架构师,前优酷资深工程师 📕 个人著作《深入浅出Java虚拟机—JVM原理与实战》 💻 10年开发经验,参与过多个大型互联网项目,定期分享技术干货和项目经验

评论

发布
暂无评论
【Linux技术专题】「夯实基本功系列」带你一同学习和实践操作Linux服务器必学的Shell指令(排查问题指令 - 下)_Linux_洛神灬殇_InfoQ写作社区