60分钟

第1章 Linux系统运维

【学习目标】

1.知识目标

了解运维基础。

熟悉Linux中Vim编辑器、Shell脚本、Strace、Tcpdump等工具的概念。

熟悉内核模块、内核管理概念。

熟悉网络排障的工具和思路。

掌握内存、CPU、I/O的调优原理及方法。

2.技能目标

识别Linux系统中网络故障问题。

【认证考点】

认识Linux中Vim编辑器、Shell脚本、Strace、Tcpdump等工具。

熟悉网络排障的工具和思路。

掌握内存、CPU、I/O的调优原理及方法。

项目引导:“重庆神马软件公司”Linux系统运维管理

【项目描述】

重庆神马软件公司是一家具有自主研发能力,以服务器为主要业务领域的高科技软件企业及软件研发、设计、销售、培训与服务一体化的信息技术的解决方案提供商,公司在运营发展过程中不断改进管理机制,引入了Linux系统运维管理理念。本章将通过该公司在发展中遇到的不同问题以及解决办法来介绍Linux系统运维管理流程与职能的概念。

知识储备

1.1 Shell脚本编程基础

在进入本章之前,先了解什么是Linux系统运维?系统运维,并不是某些人眼中的安装系统、安装软件包和做几根网线那么简单。除去应用开发和业务运营之外的保障,Linux系统能运转的工作都可能是运维工作的职责范围。运维的工作包括(但不限于)软硬件部署、网络管理、应用程序维护、安全、容量规划、故障修复等。运维,有别于“运营”。在中文的语境中,运营更多是和业务结合在一起的,而运维,则偏向技术层面。

了解Linux系统运维之后,那么如何去进行这一系列的运维管理工作呢?接下来要提到的就是本节的重点——Shell脚本语言。它是实现Linux系统管理及自动化运维所必备的重要工具,Linux系统的底层及基础应用软件核心大都涉及Shell脚本的内容。每一个合格的Linux系统管理员或运维工程师,都需要能够熟练地编写Shell脚本语言,并能够阅读系统及各类软件附带的Shell脚本内容,只有这样才能提升运维人员的工作效率。

1.1.1 Vim基本编辑操作

Vim是由vi发展演变过来的文本编辑器,因其具有语法高亮显示、多视窗编辑、代码折叠、支持插件等功能,现已成为众多Linux发行版本的标配。对于初学者来说,Vim往往是生涩、难以学习的文本编辑器,但完全掌握了这种编辑器后,工作效率会比没有使用Vim之前提升很多倍。Vim编辑器有三种模式:命令模式(command mode)、插入模式(insert mode)、底行模式(last line mode)。

1.命令模式

如果直接用Vim打开一个文件的话,默认进入命令模式。在该模式下,可通过键盘控制光标的移动以及文本内容的复制、粘贴、删除等。

(1)光标移动

Vim中最简单的移动光标的方式是使用方向键(上、下、左、右)操作,但这种方式的效率低下,更高效的方式是使用快捷键,常用的光标移动操作见表1-1。

表1-1 光标移动操作

(2)删除

若需要对文档中的内容进行删除操作,可以通过字母x、dd等来实现,相关删除操作见表1-2。

表1-2 删除操作

(3)复制和粘贴

对文档进行复制、粘贴操作的相关操作符及对应说明见表1-3。

表1-3 复制与粘贴操作

2.插入模式

在命令模式下是不能直接编辑文本的,若输入字母会被当作命令执行。比如输入i,是指在当前光标前输入,并且切换到插入模式。在插入模式下就可以进行文本的编辑。插入模式下按Esc可以返回命令模式。

3.底行模式

在命令模式下,通过输入:(英文冒号)可以切换到底行模式,底行模式下可以对文件进行保存,也可以进行查找、退出编辑等操作。底行模式下命令以回车结束,退出或者返回命令模式,或者双击Esc返回命令模式。比如:wq再回车,表示保存并退出Vim编辑器。注意:插入模式和底行模式不能直接切换,要经由命令模式。下面将对底行模式中常用的一些操作进行详解。

(1)set nu。设置行号,仅对本次操作有效。当重新打开文本时,若需要行号,要重新设置。

(2)set nonu。取消行号,仅对本次操作有效。

(3)n。使光标移动到第n行。

(4)/xx。在文件中查找xx,若查找结果不为空,可以使用n查找下一个,使用N查找上一个。

(5)底行模式下还可以进行内容替换,其操作符和说明见表1-4。

表1-4 内容替换

(6)操作完毕后,如要保存文件或退出编辑器,可先使用Esc键进入底行模式,再对内容进行保存与退出,相关操作符及说明见表1-5。

表1-5保存与退出

4.模式切换

Vim编辑器的三种模式间可进行转换,转换方式如图1-1-1所示。

图1-1-1Vim编辑器的模式转换

进入底行模式,底部会出现冒号提示;进入插入模式,底部会出现--INSERT--提示。如果没有,先进入底行模式,输入set showmode+回车,即可显示提示。

Vim编辑器由命令模式进入插入模式可以通过以下按键进入,见表1-6。

表1-6 命令模式进入插入模式

当需要退回到命令模式或不知道自己当前处于什么模式时,可以通过Esc键返回到命令模式。最后,在命令模式下输入“:”,即可进入底行模式;在“:”后输入指令,即可实现特定的功能,如:q!可以不保存,强制退岀编辑器。

1.1.2 Bash Shell脚本编写基础知识

日常的Linux系统管理工作中必不可少的就是Shell脚本,如果不会写Shell脚本,就不算一个合格的管理员。目前很多单位在招聘Linux系统管理员时,Shell脚本的编写是必考的项目。有的单位甚至用Shell脚本的编写能力来衡量这个Linux系统管理员的经验是否丰富。因此一定要认真对待Shell脚本,从一开始就要把基础知识掌握牢固,并且不断的练习。接下来将对Shell脚本编写基础知识进行一个详细介绍。

1.关于Shell

它是系统跟计算机硬件交互时使用的中间介质,是系统的一个工具。实际上,在Shell和计算机硬件之间还有一层东西,那就是系统内核。打个比方,如果把计算机硬件比作一个人的躯体,系统内核则是人的大脑,至于Shell,把它比作人的五官更为贴切。回到计算机上来,用户直接面对的不是计算机硬件而是Shell,用户把指令告诉Shell,然后Shell再传输给系统内核,接着内核再去支配计算机硬件执行各种操作。

2.Shell执行命令的方式

  • 交互式(Interactive):解释执行用户的命令,用户输入一条命令,Shell就解释执行一条。
  • 批处理(Batch):用户事先写一个Shell脚本(Script),其中有很多条命令,让Shell一次把这些命令执行完,而不必一条一条地敲命令。

3.几种常见的Shell

(1)bash

bash是Linux系统默认使用的Shell。bash由Brian Fox和Chet Ramey共同完成,是BourneAgain Shell的缩写,内部命令一共有40个。Linux使用它作为默认的Shell是因为它有诸如以下的特色:

  • 可以使用类似DOS下面的doskey的功能,用方向键查阅和快速输入并修改命令。
  • 自动通过查找匹配的方式给出以某字符串开头的命令。
  • 包含了自身的帮助功能,只要在提示符下面键入help就可以得到相关的帮助。

(2)sh

sh由Steve Bourne开发,是Bourne Shell的缩写,各种UNIX系统都配有sh。

(3)ash

ash shell是由Kenneth Almquist编写的,Linux中占用系统资源最少的一个小Shell,它只包含24个内部命令,因而使用起来很不方便。

(4)csh

csh是Linux比较大的内核,它由以William Joy为代表的共计47位作者编成,共有52个内部命令。该Shell其实是指向/bin/tcsh这样的一个Shell,也就是说,csh其实就是tcsh。

(5)ksh

ksh是Korn Shell的缩写,由Eric Gisin编写,共有42条内部命令。该Shell最大的优点是几乎和商业发行版的ksh完全兼容,这样就可以在不用花钱购买商业版本的情况下尝试商业版本的性能了。

4.Bash功能介绍

(1)记录命令历史

输入的命令,Linux是会有记录的,预设可以记录1000条历史命令。这些命令保存在用户的家目录中的bash_history文件中。只有当用户正常退出当前Shell时,在当前Shell中运行的命令才会保存至bash_history文件中。与命令历史有关的有一个字符是“!”。常见的有以下几个应用:

① !!(连续两个“!”),表示执行上一条指令。

② !n(这里的n是数字),表示执行命令历史中第n条指令,例如“!100”表示执行命令历史中第100条命令。

③ !字符串(字符串大于等于1),例如!ta,表示执行命令历史中最近一次以ta为开头的指令。

(2)指令和文件名补全

Tab键,它可以补全一个指令,也可以补全一个路径或者一个文件名。连续按两次Tab键,系统会把所有的指令或者文件名都列出来。

(3)别名

alias是别名的意思,通过alias命令可以定义命令的别名。比如系统已经定义好的ll即是命令ls -l的别名。通过alias可以把一个常用并且很长的指令别名一个简洁易记的指令。如果不想用了,可以用unalias解除别名功能。

(4)通配符

在bash下,可以使用*来匹配零个或多个字符,而用?匹配一个字符。

(5)输入输出重定向

输入重定向用于改变命令的输入,输出重定向用于改变命令的输出。输出重定向更为常用,它经常用于将命令的结果输入到文件中,而不是屏幕上。输入重定向的命令是<,输出重定向的命令是>,另外还有错误重定向2 > ,以及追加重定向 >>。下面通过几个简单的实例演示重定向的使用方法。

[root@centos7 ~]# rpm -qa |grep gcc	#查询计算机中是否安装了gcc软件
[root@centos7 ~]# echo "pass" | passwd --stdin tom          #设置tom的密码为pass
[root@centos7 ~] # ls	#查看当前文件列表
anaconda-ks. cfg install. log    install. log. syslog
[root@centos7 ~]# ls > list.txt	#将输出保存至list.txt,屏幕无输出
[root@centos7 ~]#hostname » list. txt	#将主机名追加至list. txt文件末尾
[root@centos7 ~]# mail -s test xx@gmail.com < list.txt      #发送邮件,邮件内容来自文件
[root@centos7 ~]# ls -1 abc install.log	#査看文件详细信息,abc并不存在
ls:cannot access abc: No such file or directory
-rw-r—r--. 1 root root 9064 Dec 4 09:30 install.log
[root@centos7 ~]# ls -1 abc install.log 2> error.txt  #仅将错误重定向,不影响正确输出
-rw-r—r--. I root root 9064 Dec 4 09:30 install.log
[root@centos7 ~]# ls -1 abc install. log > all 2>&1    #标准输出与错误输出均导入至all
[root@centos7 ~]# ls -1 abc install. log » all 2>&1    #标准输出与错误输出均追加至all
[root@centos7 ~]# ls -1 abc install.log &> all         #标准输出与错误输出均导入至all

(6)管道符

管道符“|”,就是把前面的命令运行的结果丢给后面的命令。

(7)作业控制

当运行一个进程时,可以使它暂停(按Ctrl+z),然后使用fg命令恢复它,利用bg命令使它到后台运行,也可以使它终止(按Ctrl+c)。

5.快捷键

Bash提供了大量的快捷键为用户所使用,熟练掌握这些快捷键会提高工作效率。Bash常用的快捷键及其功能描述见表1-7。

表1-7 Bash常用快捷键

1.1.3 Shell条件句和控制句

对Shell相关的知识有了一定了解后,接下来进入Shell条件句和控制句的学习。在Linux Shell编程中,if、for、while、case等条件流程控制语句用的非常多,把这些学好,对提升脚本的功力有非常大的帮助。下面将分别讲解具体的用法。

1.if条件判断语句

if (表达式) #if ( Variable in Array )

语句1

else

语句2

fi

【示例1】测试数字大小。

#!/bin/sh
NUM=100
if(($NUM>4)) ; then
echo“this num is $NUM greater 4 !”
fi

【示例2】测试目录是否存在,不存在则新建(注意,中括号之间必须要空格)。

#!/bin/sh
#judge dir exist
if  [ ! -d /data/20140515 ] ; then
mkdir -p /data/20140515
else
echo  ”This DIR is exist, Please exit ...”
fi

【示例3】多个条件测试判断。

#!/bin/sh 
scores=80 ;
if  [[ $scores -gt 85 ]] ; then
echo "very good!" ;
elif  [[ $scores -gt 75 ]] ; then
echo "good!" ;
elif [[ $scores -gt 60 ]] ; then
echo "pass!" ;
else
echo "no pass!" ;
fi;

2.循环语句for

for变量in字符串

do

语句1

done

【示例1】打印seq多个数。

#!/bin/sh
for i in `seq 15`
do
echo  “NUM is $i”
done

【示例2】找到相关log,然后批量打包。

#!/bin/sh
for i in `find /var/1og  -name “*. log” `
do
tar -czf 20141og. tgz $i
done

3.循环语句while

while条件语句

do

语句1

done

【示例1】while条件判断数字。

#!/bin/sh
i=1;
while [[ $i -1t 10 ]] ;do
echo $i;
((i++));
  done;

【示例2】while 逐行读取某个文件。

#!/bin/sh
while read line
do
echo $line;
done < /etc/hosts

4.until循环语句

until条件

do

action

done

直到满足条件,才退出。否则执行action。

【示例】条件判断数字。

#!/bin/sh
a=10 ;
until [[ $a -1t 0 ]] ; do
echo $a ;
(a--)) ;
done ;

5.case选择语句

case $arg in

pattern1)

语句1

; ;

pattern2)

语句2

; ;

*)

语句3.

; ;

esac

【示例】创建选择参数脚本。

#!/bin/sh
case $1 in
monitor_ 1og)
monitor_ log
; ;
archive_ 1og)
archive_ log 
; ;
*         )
echo "Usage: {$0 monitor_ log  |  archive_ log |help }”
; ;
esac

6.select选择语句

select 变量 in 列表

do

​ 语句

​ break

done

【示例】输出包含"Linux" "Gnu Hurd" "Free BSD" "Other"的目录。

#!/bin/bash
echo "What is your favourite OS?"
select var in "Linux" "Gnu Hurd" "Free BSD" "Other" ; do
  break;
done
echo "You have selected $var"

1.1.4正则表达式基本用法

1.正则表达式

实际工作中,公司需要对外招聘人才,但不一定每个人都适合该岗位,所以需要通过描述来筛选出公司需要的人。通常,描述写得越细,越能快速精准地定位所需人才。

正则表达式就是一种计算机描述语言,例如可以直接告诉计算机需要的是字母A来精确匹配定位,也可以告诉计算机需要的是26个字母中的任意一个进行匹配等。现在很多程序、文本编辑工具、编程语言都支持正则表达式,但任何语言都需要遵循一定的语法规则,正则表达式也不例外。正则表达式的发展经历了基本正则表达式与扩展正则表达式,扩展正则表达式是在基本正则表达式的基础上添加一些更加丰富的匹配规则而成。在Linux世界中有句古老的说法“Everything is a file(—切皆文件)”,而且很多配置文件是纯文本文件。在工作中,时常需要对大量的服务器进行配置的修改,如果以手动方式在海量数据中进行查找匹配并最终完成修改,其效率极低。此时,使用正则表达式则是非常明智的选择。接下来分别看看每种表达式的具体规则。由于不同的工具对正则的支持有所不同,系统常用编辑工具与正则表达式的对应关系见表1-8。

注意,正则表达式中有些匹配字符与Shell中的通配符符号一样,但含义不同。

表1-8 常用编辑工具与正则表达式的对应关系

每种语言对正则表达式有不同的使用方式,但不管是匹配还是替换,无论哪种语言正则表达式的写法都是一样的。

2.基本正则表达式

(1)基本正则表达式及其含义见表1-9。

表1-9 基本正则表达式及其含义

(2)基本正则表达式案例

环境准备:alias grep="grep --color"

cp /etc/passwd /tmp/ #复制模板文件

① 查找包含root的行,如图1-1-2所示。

图1-1-2 查找包含root的行

② 查找:与0:之间包含任意两个字符的字串,并显示该行,如图1-1-3所示。

图1-1-3 查找:与0:之间包含任意两个字符的字串

③ 查找包含oot或ost的行,如图1-1-4所示。

图1-1-4 查找包含oot或ost的行

④ 查找数字0出现1次或2次的行,如图1-1-5所示。

图1-1-5 查找数字0出现1次或2次的行

⑤ 查找以root开头的行,如图1-1-6所示。

图1-1-6 查找以root开头的行

3.扩展正则表达式

(1)扩展正则表达式及其含义

扩展正则表达式及其对应的含义见表1-10。

表1-10 扩展正则表达式及其对应的含义

(2)扩展正则表达式案例

由于输出信息与基本正则表达式类似,这里仅写出命令,不再打印输出信息。 查找数字。

① 查找出现1次和2次的行。

[root@centos7 ~]# egrep --color '0(1,2}' /tmp/passwd

② 查找包含至少一个0的行。

[root@centos7 ~]# egrep --color '0+' /tmp/passwd

③ 查找包含root或者admin的行。

[root@centos7 ~]# egrep --color '(root|admin)' /tmp/passwd

4.POSIX规范

POSIX的全称是Portable Operating System Interface for uniX,它由一系列规范构成,定义了UNIX操作系统应当支持的功能,所以“POSIX规范的正则表达式”其实只是“关于正则表达式的POSIX规范”,POSIX定义了BRE(Basic Regular Expression,基本型正则表达式)和ERE(Extended Regular Express,扩展型正则表达式)两大流派。在兼容POSIX的UNIX系统上,grep和egrep之类的工具都遵循POSIX规范,一些数据库系统中的正则表达式也符合POSIX规范。由于基本正则表达式会有语系的问题,所以这里需要了解POSIX规范的正则表达式规则。POSIX字符集规范见表1-11。

表1-11 POSIX字符集规范

Linux允许通过方括号使用POSIX标准规则,如[:alpha:]将匹配字母字符。下面通过几个简单的例子来说明用法(由于过滤输出的内容较多,以下仅列出部分输出)。

(1)匹配标点符号,如图1-1-7所示。

图1-1-7 匹配标点符号

(2)匹配小写字符,如图1-1-8所示。

图1-1-8 匹配小写字符

(3)匹配大写字符,如图1-1-9所示。

图1-1-9 匹配大写字符

5.GNU规范

在Linux中的GNU软件一般还会支持转义元字符,这些转义元字符包括:\b(边界字符,匹配单词的开始或结尾,例如,then,hello the world.字串每个单词的前后都有一个\b,可以使用\bthe\b来匹配单词,但不会匹配then)、\B(与\b为反义词,\Bthe\B不会匹配单词the,仅会匹配the在中间的单词,如atheist)。其中,\b等同于:alnum:,\B等同于[^:alnum:]。例如匹配i结尾的单词,如图1-1-10所示。

图1-1-10 匹配i结尾的单词

项目实施

通过前面内容的学习,相信大家对系统运维以及与Shell相关的知识有了更加深入的了解。有了一定知识储备后,接下来的项目以“神马软件公司”在Linux操作系统下的内核管理、系统监控、网络排障等一系列操作为例讲解Linux系统运维管理流程,加深读者对Linux系统运维流程和职能的理解。

需要完成的任务:

(1)熟悉Linux内核模块及网络排障。

(2)熟悉相关排障工具及使用。

1.2 任务1:Linux内核模块及系统监控

1.2.1 Linux系统模块及配置

Linux内核采用的是模块化技术,这样的设计使得系统内核可以保持最小化,同时确保了内核的可扩展性与可维护性,模块化设计可以在需要时再将模块加载至内核,实现动态内核的调整。

1.内核模块存放位置

Linux内核模块文件的命名方式通常为<模块名称ko>,CentOS7系统的内核模块被集中存放在/ib/modules/*uname-r/目录下。下面通过几个实例说明对内核模块的基本操作。

2.查看已加载内核模块

lsmod命令用来显示当前Linux内核模块状态,不使用任何参数会显示当前已经加载的所有内核模块,如图1-2-1所示。输出的三列信息分别为模块名称、占用内存大小、是否在被使用,如果第三列为0,则该模块可以随时卸载,非0则无法执行modprobe删除模块。

图1-2-1 显示当前Linux内核模块状态

3.加载与卸载内核模块

(1)modprobe命令可以动态加载与卸载内核模块。

[root@centos7 ~]# modprobe ip_vs       #动态加载ip_vs模块
[root@centos7 ~]# lsmod | grep ip_vs     #查看模块是否加载成功
[root@centos7 ~]# modprobe -r ip_vs     #动态卸载ip_vs模块

(2)modinfo命令可以查看内核模块信息,如图1-2-2所示。

图1-2-2 查看内核模块信息

通过上述modprobe方式加载的内核模块仅在当前有效,计算机重启后并不会再次加载该模块,如果希望系统开机自动挂载内核模块,则需要将modprobe命令写入etc/rc.d/rc.local文件中,或者通过修改/etc/modprobe.d/目录下的相关配置文件实现。

[root@centos7 ~]# echo "modprobe ip_vs">>/etc/rc.d/rc . local

当内核模块不再需要时,可以通过将/etc/rc.d/rc.local文件中对应的modprobe命令删除,但需要重启计算机才生效。此时,可以通过modprobe -r命令来立刻删除内核模块。

[root@centos7 ~]# modprobe -r ip_vs

1.2.2常见内核管理命令及参数配置

1.insmod命令详解

insmod命令主要用于载入模块。Linux有许多功能是通过模块的方式,在需要时才载入kernel。如此可使kernel较为精简,进而提高效率,以及保有较大的弹性。这类可载入的模块,通常是设备驱动程序。

命令格式:

insmod [-fkmpsvxX][-o <模块名称>][模块文件][符号名称=符号值]

常用参数详解如下:

-f 不检查目前kernel版本与模块编译时的kernel版本是否一致,强制

将模块载入。

-k 将模块设置为自动卸除。

-m 输出模块的载入信息。

-o<模块名称> 指定模块的名称,可使用模块文件的文件名。

-p 测试模块是否能正确地载入kernel。

-s 将所有信息记录在系统记录文件中。

-v 执行时显示详细的信息。

-x 不要汇出模块的外部符号。

-X 汇出模块所有的外部符号,此为预设置。

2.rmmod命令详解

rmmod命令用于删除模块。执行rmmod指令,可删除不需要的模块。Linux操作系统的核心具有模块化的特性,因此在编译核心时,务必把全部的功能都放入核心。可以将这些功能编译成一个个单独的模块,待有需要时再分别载入它们。

命令格式:

rmmod [-as][模块名称...]

常用参数详解如下:

-a 删除所有目前不需要的模块。

-s 把信息输出至syslog常驻服务,而非终端机界面。

-v 显示指令执行的详细信息。

-f 强制移除模块,该选项比较危险。

-w 等待着,直到模块能够被移除时再移除模块。

3.lsmod命令详解

在Linux系统下,lsmod命令用于显示已经加载到内核中的模块的状态信息,运行lsmod命令后会列出所有已经载入系统的模块。

命令格式:lsmod

常用参数详解如下:

Module 第一列显示模块的名称。

Size 第二列显示以字节为单位的模块大小。

Used by 第三列显示一个数字,指示当前使用了多少个模块实例

4.modinfo命令详解

modinfo命令用于显示kernel模块的信息。modinfo会显示kernel模块的对象文件,以显示该模块的相关信息。

命令格式:

modinfo [-adhpV][模块文件]

常用参数详解如下:

-a或--author 显示模块开发人员。

-d或--description 显示模块的说明。

-h或--help 显示modinfo的参数使用方法。

-p或--parameters 显示模块所支持的参数。

-V或--version 显示版本信息。

5.modprobe命令详解

modprobe命令用于自动处理可载入模块。modprobe可载入指定的个别模块,或是载入一组相依的模块。modprobe会根据depmod所产生的相依关系,决定要载入哪些模块。若在载入过程中发生错误,在modprobe会卸载整组的模块。

命令格式:

modprobe [-acdlrtvV][--help][模块文件][符号名称 = 符号值]

常用参数详解如下:

-a或--all 载入全部的模块。

-c或--show-conf 显示所有模块的设置信息。

-d或--debug 使用排错模式。

-l或--list 显示可用的模块。

-r或--remove 模块闲置不用时,即自动卸载模块。

-t或--type 指定模块类型。

-v或--verbose 执行时显示详细的信息。

-V或--version 显示版本信息。

-help 显示帮助。

6.修改内核参数

(1)临时调整内核参数

Linux内核参数随着系统的启动会被写入内存中,可以直接修改/proc目录下的大量文件来调整内核参数,并且这种调整是立刻生效的,下面来看几个实例。

① 开启内核路由转发功能(通过0或1设置开关)。

[root@centos7 ~]# echo "1" > /proc/sys/net/ipv4/ip_forward

② 禁止所有的icmp回包(禁止其他主机ping本机)功能。

[root@centos7 ~]# echo "1" > /proc/ sys/net/ipv4/icmp_ echo_ ignore_ a11

③ 调整所有的进程可以打开的文件总数量(当大量的用户访问网站资源时,可能会因该数字过小而导致错误)。

[root@centos7 ~] # echo "108248” >/proc/sys/fs/ file-max

(2)永久调整内核参数

通过man proc可以获得大量关于内核参数的描述信息。但以上通过直接修改/proc相关文件的方式在系统重启后将不再有效,如果希望设置参数并永久生效,可以修改/etc/sysct.conf文件,文件格式为“选项=值”,通过Vim修改该文件将前面三个实例参数设置为永久有效。

[root@centos7 ~]# vim /etc/sysct1 . conf
net.ipv4.ip_forward = 1
net. ipv4. icmp_ echo_ ignore_ all = 1
fs.file-max = 108248

注意,通过sysctl.conf文件修改的内核参数不会立刻生效,修改完成后,使用sysctl -p命令可以使这些设置立刻生效。

1.2.3常见系统监控命令及工具

在Linux系统运维管理中,系统一旦跑起来就希望它稳定运行,不要宕机。对于“神马公司”的系统管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作。当公司服务器愈来愈多,规模越来越大时,运维人员了解每台服务器运行状态的工作压力也会越来越大,如果人为地逐个查看每台服务器运行状态肯定是不可行的。因此,学习了内核管理命令以及参数配置后,接下来继续学习一些常见的系统监控命令并了解相关工具的使用。

1.top

Linux下的top命令是一个性能监控程序,用于按一定的顺序显示所有正在运行而且处于活动状态的实时进程,而且会定期更新显示结果。“神马公司”在运维管理中经常会用到该命令来监控系统性能。这条命令显示了CPU的使用率、内存使用率、交换内存使用大小、高速缓存使用大小、缓冲区使用大小,进程PID、所使用命令以及其他。它还可以显示正在运行进程的内存和CPU占用情况。

常用及输出参数说明:

-q 没有任何延迟的显示速度,如果使用者是有superuser 的权限,则

top 将会以最高的优先序执行。

-c 切换显示模式,共有两种模式,一是只显示执行档的名称,另一种是显示完整的路径与名称。

-s 安全模式,将交谈式指令取消,避免潜在的危机。

-S 累积模式,会将己完成或消失的子行程 ( dead child process )的CPU time累积起来。

-i 不显示任何闲置(idle)或无用(zombie)的行程。

-n 更新的次数,完成后将会退出top。

-b 批次档模式,搭配 "n" 参数一起使用,可以用来将top的结果输出到档案内。

PID 进程id。

USER 进程所有者的用户名。

PR 优先级。

NI nice值。负值表示高优先级,正值表示低优先级。

VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES。

RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA。

SHR 共享内存大小,单位kb。

S 进程状态。

%CPU 上次更新到现在的CPU时间占用百分比。

%MEM 进程使用的物理内存百分比。

实例

(1)显示Linux进程信息,如图1-2-3所示。

图1-2-3 显示Linux进程信息

(2)以批处理模式显示程序信息,如图1-2-4所示。

图1-2-4 批处理模式显示程序信息

(3)以累积模式显示程序信息,如图1-2-5所示。

图1-2-5 累积模式显示程序信息

2.vmstat

在系统的性能监控中,仅靠一条top命令是远远不够的,当“神马公司”人员想知道系统更加详尽的信息,还会用到vmstat工具。Linux的vmstat命令用于显示虚拟内存、内核线程、磁盘、系统进程、I/O块、中断、CPU活动等的统计信息。一般vmstat工具的使用是通过两个数字参数来完成的,第一个参数是采样的时间间隔数,单位是秒,第二个参数是采样的次数。

常用及输出参数说明:

-a 显示活跃和非活跃内存。

-f 显示从系统启动至今的fork数量。

-n 只在开始时显示一次各字段名称。

-s 显示内存相关统计信息及多种系统活动数量。

-m 显示slabinfo。

Procs(进程)r,运行队列中进程数量;b,等待IO的进程数量。

Memory(内存)swpd,使用虚拟内存大小;free,空闲物理内存大小;buff,用作缓冲的内存大小;cache,用作缓存的内存大小。

Swap si,每秒从交换区写到内存的大小,由磁盘调入内存;so,每秒写入交换区的内存大小,由内存调入磁盘。

IO bi,每秒读取的块数;bo,每秒写入的块数。

system(系统) in,每秒中断数,包括时钟中断;cs,每秒上下文切换数。

CPU(以百分比表示) us,用户进程执行时间百分比(user time);sy,内核系统进程执行时间百分比(system time);id,空闲时间百分比;wa,IO等待时间百分比。

实例

(1)报告有关进程、块IO、中断和CPU活动等信息,如图1-2-6所示。

图1-2-6 报告进程、块IO、中断和CPU活动等信息

(2)显示slabinfo缓存的利用率,如图1-2-7所示。

图1-2-7 显示slabinfo缓存的利用率

(3)获取有关活动和非活动内存页面的信息,如图1-2-8所示。

图1-2-8 获取有关活动和非活动内存页面的信息

3.lsof

lsof命令常用于以列表的形式显示所有打开的文件和进程。打开的文件包括磁盘文件、网络套接字、管道、设备和进程。在“神马公司”实现系统运维管理的过程中,常常会遇到无法挂载磁盘和显示正在使用或者打开某个文件的错误信息的问题,这时使用这条命令,就可以很容易地看到正在使用哪个文件。

常用及输出参数说明:

-a 列出打开文件存在的进程。

-g 列出GID号进程详情。

-d<文件号> 列出占用该文件号的进程。

-i<条件> 列出符合条件的进程。

COMMAND 进程的名称。

PGID 进程所属组。

FD 文件描述符,应用程序通过文件描述符识别该文件。

TYPE 文件类型。

DEVICE 磁盘名称。

NODE 索引节点。

实例

(1)显示所有打开的文件和进程,如图1-2-9所示。

图1-2-9 显示所有打开的文件和进程

(2)查找文件相关进程,如图1-2-10所示。

图1-2-10 查找文件相关进程

4.iostat

iostat是一个用于收集显示系统存储设备输入和输出状态统计的简单工具。“神马公司”的监控人员会利用这个工具来追踪存储设备的性能问题,其中存储设备包括设备、本地磁盘,以及诸如使用NFS等的远端磁盘。

常用及输出参数说明:

-d 单独输出Device结果,不包括CPU结果。

-c 只显示系统CPU统计信息,即单独输出avg-cpu结果。

avg-cpu 总体CPU使用情况统计信息。

Device 以sdX形式显示的设备名称。

tps 每秒进程下发的IO读、写请求数量。

KB_read/s 每秒从驱动器读入的数据量,单位为K。

KB_wrtn/s 每秒从驱动器写入的数据量,单位为K。

KB_read 读入数据总量,单位为K。

KB_wrtn 写入数据总量,单位为K。

实例

(1)汇报CPU的使用情况以及设备、分区和网络文件系统的IO统计信息,如图1-2-11所示。

图1-2-11 汇报CPU、设备、分区和网络文件系统的IO统计信息

(2)显示磁盘使用情况,如图1-2-12所示。

图1-2-12 显示磁盘使用情况

5.free

free命令用于显示内存状态。free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等。

常用及输出参数说明:

-b/-k/-m 以Byte/KB/MB为单位显示内存使用情况。

-o 不显示缓冲区调节列。

-s 持续观察内存使用状况。

-t 显示内存总和列。

-V 显示版本信息。

Mem行 内存的使用情况。

Swap 行 交换空间的使用情况。

total列 显示系统总的可用物理内存和交换空间大小。

used列 显示已经被使用的物理内存和交换空间。

free列 显示还有多少物理内存和交换空间可用使用。

shared列 显示被共享使用的物理内存大小。

buff/cache列 显示被 buffer 和 cache 使用的物理内存大小。

available列 显示还可以被应用程序使用的物理内存大小。

实例

(1)显示内存状态,即系统可用和已用的物理内存及交换内存的总量以及内核用到的缓存空间,如图1-2-13所示。

图1-2-13 显示内存状态

(2)显示RAM+swap的总和,如图1-2-14所示。

图1-2-14 显示RAM+swap的总和

(3)显示版本信息,如图1-2-15所示。

图1-2-15 显示版本信息

1.2.4网络排障的工具和思路

上一小节认识了系统监控工具,但随着“神马公司”IT技术的不断扩展与延伸,当网络越来越大时,故障就时有发生,此时需要有良好的排错思路与优秀的排错工具。排错的思路为:首先,从最近一次操作定位问题所在,或根据公司服务器工作手册查找最近对服务器所做的修改定位关键问题;其次,检查这些操作与配置有无错误,同时获取与问题相关的信息(如:硬件型号、软件版本、网络拓扑等信息)然后,根据所搜集的信息修复问题,修复可以是修改配置文件、替换相应的设备或进行版本升级等。问题不是一成不变的,但解决问题的思路确是万变不离其宗的。下面介绍几个帮助解决网络配置常见问题的工具。

1.ping

虽然“神马公司”是一个专业的软件公司,但程序员在系统管理维护时,仍然会遇到网络不通的情况。这个时候他们会使用简单的ping命令来定位问题节点的位置,一般会按顺序进行ping命令,依次为本地回环、本地IP、网关IP、外网IP,ping的对象一般都会给予回应,如果没有回应,则表示网络不通(某些环境下,对象主机会禁止被ping),据此来判断网络断点的位置,从而解决网络不通问题。

实例

[root@centos7 ~]#ping 127.0.0.1  #ping本地回环,测试本地网络协议是否正常
[root@centos7 ~]#ping 192.168.0.31 #ping本地IP,测试本地网络接口是否正常
[root@centos7 ~]#ping 192.168.0.254  #ping网关,测试网关是否工作正常
[root@centos7 ~]#ping 202.106.0.20   #ping外部网络,测试服务商网络是否工作正常

2.traceroute

“神马公司”人员小张是负责管理系统数据的,在他发送数据包时,有时候并不能一次成功。因为一个数据包从本地发送后一般会经过多个路由转发数据,如果有一个数据包进入互联网后因为中间的某个路由转发有问题,就可能导致最终的数据发送失败。但这时他并不知道问题路由的位置及IP信息,这种情况下就可以利用traceroute来解决。它可以跟踪数据包的路由过程,以此判断问题所在。Linux下的traceroute默认使用UDP封装跟踪包,如果希望使用ICMP封装,可以使用-I选项。

实例

使用ICMP封装跟踪包,如图1-2-16所示。

图1-2-16 使用ICMP封装跟踪包

3.nslookup

目前互联网的高速发展,使网络资源出现爆发式的增长。网络本身是使用IP地址来唯一对应网络资源的,但用户无法记忆这么多的数字IP信息。所以,一般会通过域名来访问网络资源,此时DNS服务就至关重要了,当“神马公司”人员遇到这个问题时,他们使用nslookup来帮助检查本地设置的DNS服务器工作是否正常。输入下面的命令检查本机设置的DNS服务器是否可以解析www.google.com域名。

实例

检查本机设置的DNS服务器是否可以解析www.google.com域名,如图1-2-17所示。

图1-2-17 检查DNS服务器是否可以解析相应域名

输出信息说明:本次解析是由219.141.140.10这台DNS服务器提供的,解析的结果是www.google.com域名对应了多个IP地址。

4.dig

nslookup仅可以查询域名与IP地址之间的对应关系,如果公司人员需要更多关于DNS记录的信息,可以使用dig命令,查看包括MX(邮件记录)、NS(域名服务器记录)等信息。

实例

查看更多关于DNS记录的信息,如图1-2-18所示。

图1-2-18 查看更多关于DNS记录的信息

以上输出信息为删减后的主要内容,读者在实际查询时会获得更多的记录信息。

5.netstat

“神马公司”作为一家软件企业,在发展过程中免不了遭到黑客的攻击,这个时候,为了避免信息泄露,如果怀疑有人非法闯入了系统,而又不知道此人在哪里时,可以通过netstat强大的网络监控能力找出连接系统的所有人。或是启动了一个网络服务后,远程客户却无法访问该服务,也可以使用netstat命令查看服务对应的端口是否已经正常开启,来判断服务启动是否正常。

实例

[root@centos7 ~]# netstat  -an      #查看网络连接状态
tcp     0 0 192.168.0.102:22     192.168.0.101 :50132     ESTABLISHED

从该条输出信息中可以看出,有一个远程IP (192.168.0.101)使用50132端口,连接了本地的22端口。

[root@centos7 ~]# netstat -nut1p       #查看当前系统开启端口信息

1.2.5内存、CPU、I/O的调优原理及方法

作为“神马公司”一名Linux系统运维管理人员,性能调优这件事情是必不可少的。因此需要对Linux操作系统方面的调优有一个清晰的认识,并把它们应用到性能调优中。调优关键在于检测并发现性能瓶颈,对于发现瓶颈之后,如何调优,从哪些方面进行调优,这背后的原理是什么,为什么要这么调优等一系列问题,可以从内存、CPU、I/O等方面一一进行展示。

1.内存指标

Free memory:空闲内存。在Linux中,内核会将没有使用的内存中的大部分分配给文件系统缓存。所以,Free memory减去buffers以及cache占用的内存的数量,才是系统中真正的空闲内存的数量。

swap usage:swap in/out衡量内存是否出现了瓶颈才更加正确。因为Linux内核如果发现内存中的一些page,长时间没有被用到,就会将它放到swap中,而并不是说,只有当内存不足的时候,才会将page放到swap中。如果每秒有200~300次swap in/out,那么说明系统的内存可能是瓶颈。

Buffer and cache:为文件系统和block size分配的缓存。

slab:内核使用的内存数量。需要注意的是,内核使用的page不能被page out到磁盘中。

active versus inactive memory:inactive memory将会被kswapd daemon swap out到磁盘中。

2.CPU指标

CPU使用率:每个处理器的利用率。

user time:CPU执行用户代码的时间,包括nice time。

system time:CPU执行内核代码的时间,包括IRQ和softirq time。

waiting:CPU等待IO的时间。

Idle time:CPU空闲并等待任务的时间。

nice time:CPU花在改变进程优先级以及执行顺序的时间。

load average:任务队列中,等待被CPU执行的任务的总数,以及那些等待不可中断任务完成的任务的总数,它们的平均值。也就是,系统中处于TASK_RUNNABLE以及TASK_UNINTERRUPTIBLE状态的任务的总数的平均值。

Runnable process:等待被CPU执行的任务的总数。

Blocked:那些因为IO操作被挂起的进程的数量。

Context switch:系统中线程切换的总数。

Interrupt:硬中断和软中断的次数。

3.I/O指标

使用率:指磁盘处理I/O的时间百分比。过高的使用率(比如超过80%),通常意味着磁盘I/O存在性能瓶颈。

饱和度:指磁盘处理I/O的繁忙程度。过高的饱和度,意味着磁盘存在严重的性能瓶颈。当饱和度为100%时,磁盘无法接受新的I/O请求。

IOPS(Input/Output Per Second):指每秒的I/O请求数。

吞吐量:指每秒的I/O请求大小。

响应时间:指I/O请求从发出到收到响应的间隔时间。

4.调优方法

(1)内存调优

  • 增大内存。
  • 使用大页、大的TLB,特别适合于数据库服务器。
  • 创建一个或多个单独的swap分区。
  • 调整swap写到硬盘的参数:vm.swappiness,vm.dirty_background_ratio,
  • vm.dirty_ratio。
  • 调整page的大小。
  • 调整处理active和inactive内存的方式。
  • 降低page-out的速度。
  • 限制服务器上每个用户能够使用的内存的数量。
  • 停止不需要的service。

(2)CPU调优

  • 确保没有没用的进程在运行(ps -ef)。
  • 检查可运行队列,确定每个CPU不超过3个,如果过多,要不就减少线程数,要不就把应用迁移到其他机器上或者增加CPU。
  • 确定CPU利用率中user/system的比例维持在70/30,当system的利用率比较高时,要查看是IO中断还是锁竞争,同时检查wa(IO等待)的比例是否过高。
  • 调高关键进程的优先级,将非关键的,但使用CPU较多的进程的优先级降低。
  • 将进程绑定到特定的CPU(CPU亲近性),减少CPU缓存的失效。
  • 将产生大量中断的进程绑定到一个固定的CPU上。
  • 修改程序,增加并行性。

(3)I/O调优

  • 调整数据布局,尽量将I/O请求较合理的分配到所有物理磁盘中。
  • 对于RAID磁盘阵列,尽量使应用程序 I/O 等于条带尺寸或者为条带尺寸的倍数。并选取合适的RAID方式,如RAID10,RAID5。
  • 增大磁盘驱动程序的队列深度,但不要超过磁盘的处理能力,否则,部分I/O请求会因为丢失而重新发出,这将降低性能。
  • 应用缓存技术减少应用存取磁盘的次数,缓存技术可应用在文件系统级别或者应用程序级别。
  • 由于多数数据库中已包括经优化后的缓存技术,数据库I/O宜直接存取原始磁盘分区(raw partition)或者利用绕过文件系统缓存的DIO技术(direct IO)。
  • 利用内存读写带宽远比直接磁盘I/O操作性能优越的特点,将频繁访问的文件或数据置于内存中。

1.3任务2:常见工具的使用

案例背景

“神马公司”的小李是负责系统监控工作的一员,每天要面对大量的监控工作,遇到各种不同的问题。例如监控用户空间进程和内核的交互、收集磁盘IO信息、检测网关数量、扫描网上电脑开放的网络连接端等等,可这些工作仅凭人力根本无法完成,因此需要借助一些常见的系统监控以及管理工具。

1.3.1 Strace用户空间跟踪器

简介

按照Strace官网的描述,Strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。可以用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。Strace底层使用内核的Ptrace特性来实现其功能。在运维的日常工作中,故障处理和问题诊断是个主要的内容,也是必备的技能。Strace作为一种动态跟踪工具,能够帮助运维高效地定位进程和服务故障。它像是一个侦探,通过系统调用的蛛丝马迹,找到异常的真相。

参数说明:

-T 显示每次系统调用所花费的时间。

-p 指定要跟踪的进程pid,要同时跟踪多个pid,重复多次-p选项即可。

-v 对于某些相关调用,把完整的环境变量,文件stat结构等打出来。

-f 跟踪目标进程,以及目标进程创建的所有子进程。

-e 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称。

-o 把strace的输出单独写到指定的文件。

-s 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默

认是32个字节。

实例

1.找出程序在启动时读取的配置文件,如图1-3-1所示。

图1-3-1 找出程序在启动时读取的配置文件
图1-3-2 使用Strace跟踪cat查看一个文件

3.查看程序工作内容,如图1-3-3所示。

图1-3-3 查看程序工作内容

1.3.2 Blktrace I/O分析工具

简介

Blktrace是一个针对Linux内核中块设备I/O层的跟踪工具,用来收集磁盘IO信息中当IO进行到块设备层(Block层,所以叫Blktrace)时的详细信息(如IO请求提交、入队、合并、完成等等一些列的信息),是由Linux内核块设备层的维护者开发的,目前已经集成到内核2.6.17及其之后的内核版本中。通过使用这个工具,使用者可以获取I/O请求队列的各种详细的情况,包括进行读写的进程名称、进程号、执行时间、读写的物理块号、块大小等等,是一个Linux下分析I/O相关内容的很好的工具。

参数说明:

-A hex-mask 设置过滤信息mask成十六进制mask。

-a mask 添加mask到当前的过滤器。

-b size 指定缓存大小for提取的结果,默认为512KB。

-d dev 添加一个设备追踪。

-i trace 此命令是将trace文件作为blkparse的输入。

-r rel-path 指定的debugfs挂载点。

实例

1.挂载debugfs,如图1-3-4所示。

图1-3-4 挂载debugfs

2.通过Blktrace实时收集并显示硬盘操作数据,Ctrl+c退出收集,如图1-3-5所示。

图1-3-5 通过Blktrace实时收集并显示硬盘操作数据

3.通过Blktrace -d收集硬盘数据至文件中,而后通过Blkparse -i进行查看,如图1-3-6所示。

图1-3-6 通过Blktrace收集硬盘数据至文件并查看

4.通过btt分析Blktrace数据

上面可以发现通过Blkparse查看的数据量比较大,不利于查看,通过btt可以对Blktrace数据进行自动分析,首先将Blktrace的报告合并为一,如图1-3-7所示。

图1-3-7 通过btt分析Blktrace数据

而后通过btt自动分析sdb.blktrace.btt文件,如图1-3-8所示。

图1-3-8 通过btt自动分析sdb.blktrace.btt文件

1.3.3网络数据采集分析工具Tcpdump

简介

用简单的话来定义Tcpdump,就是:dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。作为互联网上经典的的系统管理员必备工具,Tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络、排查问题等所必备的工具之一。

参数说明:

-i 指定监听的网络接口。

-c 在收到指定的包的数目后,Tcpdump就会停止。

-w 直接将包写入文件中,并不分析和打印出来。

-r 从指定的文件中读取包(这些包一般通过-w选项产生)。

-n 不把网络地址转换成名字。

-f 将外部的Internet地址以数字的形式打印出来。

-e 在输出行打印出数据链路层的头部信息。

实例

1.针对特定网口抓包(-i选项)

当不加任何选项执行Tcpdump时,Tcpdump将抓取通过所有网口的包;使用-i选项,可以在某个指定的网口抓包,如图1-3-9所示。

图1-3-9 针对特定网口抓包

2.抓取指定数目的包(-c选项)

默认情况下Tcpdump将一直抓包,直到按下“Ctrl+c”中止,使用-c选项可以指定抓包的数量,如图1-3-10所示。

图1-3-10 抓取指定数目的包

3.将抓到包写入文件中(-w选项)

使用-w选项,可将抓包记录到一个指定文件中,以供后续分析,如图1-3-11所示。

图1-3-11 将抓到包写入文件中

4.读取Tcpdump保存文件(-r选项)

对于保存的抓包文件,可以使用-r选项进行读取,如图1-3-12所示。

图1-3-12 读取Tcpdump保存文件

5.指定抓包端口

如果想要对某个特定的端口抓包,可以通过以下命令,如图1-3-13所示。

图1-3-13 对某个特定的端口抓包

1.3.4网络封包分析工具Wireshark

简介

Wireshark(前称Ethereal)是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并尽可能显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。

参数说明:

Frame 物理层,数据帧概况。

Ethernet II 数据链路层,以太网帧头部信息。

Internet Protocol Version 4 互联网层,IP包头部信息。

Transmission Control Protocol 传输层,数据段头部信息

Hypertext Transfer Protocol 应用层,此处是HTTP协议。

实例

1.打开Wireshark主界面如图1-3-14所示。

图1-3-14 Wireshark主界面

2.选择菜单栏上捕获 -> 选项,勾选WLAN网卡(这里需要根据各自电脑网卡使用情况选择,简单的办法可以看使用的IP对应的网卡)。点击开始。启动抓包,如图1-3-15所示。

图1-3-15 启动抓包

3.Wireshark启动后,Wireshark处于抓包状态中,打开CMD,如ping www.baidu.com,执行需要抓包的操作,如图1-3-16所示。

图1-3-16 打开CMD执行需要抓包的操作

4.查看抓包信息,如图1-3-17所示。

图1-3-17 查看抓包信息

1.3.5路由跟踪工具Traceroute

简介

Taceroute是用来检测发出数据包的主机到目标主机之间所经过的网关数量的工具。Traceroute的原理是试图以最小的TTL(存活时间)发出探测包来跟踪数据包到达目标主机所经过的网关,然后监听一个来自网关ICMP的应答。发送数据包的大小默认为38个字节。

参数说明:

-m 设置检测数据包的最大存活数值TTL的大小。

-i 使用指定的网络界面送出数据包。

-n 直接使用IP地址而非主机名称。

-p 设置UDP传输协议的通信端口。

-w 设置等待远端主机回报的时间。

-d 使用Socket层级的排错功能。

实例

1.跳数设置,如图1-3-18所示。

图1-3-18 跳数设置

2.显示IP地址,如图1-3-19所示。

图1-3-19 显示IP地址

3.探测包使用的基本UDP端口设置6888,如图1-3-20所示。

图1-3-20 探测包使用的基本UDP端口设置6888

4.设置对外发探测包的等待响应时间为3秒,如图1-3-21所示。

图1-3-21 设置对外发探测包的等待响应时间

1.3.6网络扫描嗅探工具Nmap

简介

Nmap是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统。它是网络管理员必用的软件之一,以及用以评估网络系统安全。正如大多数被用于网络安全的工具,Nmap也是不少黑客及骇客(又称脚本小子)爱用的工具。系统管理员可以利用Nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用Nmap来搜集目标电脑的网络设定,从而计划攻击的方法。

参数说明:

-n 不做DNS解析。

-R 总是做DNS反向解析。

-F 快速模式,扫描比默认端口数量更少的端口。

-r 有序地扫描端口而不是随机地扫描。

-O 进行系统探测。

-v 增加的详细程度(使用VV更详细)。

-d 提高调试水平(使用DD更高)。

实例

1.使用IP地址进行扫描,如图1-3-22所示。

图1-3-22 使用IP地址进行扫描

2.使用“-v”选项扫描,如图1-3-23所示。

图1-3-23 使用“-v”选项扫描

3.扫描多台主机,如图1-3-24所示。

图1-3-24 扫描多台主机

4.使用IP地址的最后一个字节扫描多台服务器,如图1-3-25所示。

可以简单的指定IP地址的最后一个字节来对多个IP地址进行扫描。例如,在下面执行中扫描了IP地址192.168.0.101,192.168.0.102和192.168.0.103。

图1-3-25 使用IP地址的最后一个字节扫描多台服务器

本章小结

本章主要介绍了有关Linux系统运维管理的有关知识,从知识储备到项目实施期间,介绍了Shell脚本编程基础、Linux内核模块、系统监控以及常见工具的使用。在本章当中需要了解运维基础、熟悉Linux中Vim编辑器、Shell脚本、Strace、Tcpdump等工具的概念、掌握内存、CPU、I/O的调优原理及方法,并且能够识别Linux系统中网络故障问题,熟悉网络排障的思路等。

本章习题

一、单项选择题

1.在Shell中变量的赋值有四种方法,其中,采用name=12的方法称为( )。

A.直接赋值

B.使用read命令

C.使用命令行参数

D.使用命令的输出

2.下列提法中,不属于ifconfig命令作用范围的是( )。

A.配置本地回环地址

B.配置网卡的IP地址

C.激活网络适配器

D.加载网卡到内核中

3.下列哪条命令可以复制光标所在行( )。

A.yy

B.dd

C.yw

D.p

二、问答题

1.Vim编辑器模式常用有哪些?

2.如何进行Linux网络故障排查?