文章目录
Ⅰ:Shell 脚本常见问题
①平时如何应用 Shell 脚本
-
日常巡检:查看所需系统状况时执行该脚本;参数超过阈值时报警
-
自动化部署:一键部署 LNMP 等架构,省时省力
-
日志分割:日志文件太大会不利于分析排查故障,比如 Nginx 没有类似 Apache 的日志分割处理功能,但可以通过撰写脚本配合周期性计划性任务来实现日志的自动切割
-
耦合服务:例如 Rsync+Inotify,可通过 shell 脚本实现自动监控同步功能
#!/bin/bash INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/xcf1/" #INOTIFY_CMD变量:持续监控 /opt/xcf1 目录中的创建,删除,移动,修改,改变时间的操作 RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/xcf1/ [email protected]::wwwroot" #RSYNC_CMD变量:使 xixi 用户,/etc/server.pass 密钥文件,将 /opt/xcf1 目录下的文件进行压缩,归档,保留硬链接文件 #并同步至 192.168.126.11 的共享模块定义的目录 /var/www/html 下,并删除差异性内容,保持一致性 $INOTIFY_CMD | while read DIRECTORY EVENT FILE #持续监控... do if [ $(pgrep rsync | wc -l) -le 0 ] ; then #如果服务并未启动,则执行同步 $RSYNC_CMD fi done
②冒泡排序思路
类似气泡上涌的动作,会将数据在数组中从小到大或从大到小不断的向前移动,故称冒泡排序
基本思想:
- 冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值
- 把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就会像气泡一样从底部上升到顶部
算法思路:
- 冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了
- 而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少
例:
#!/bin/bash
zxc=(50 30 20 10 40)
#定义数组并赋值
echo "原数组的元素顺序为:${zxc[*]}"
#输出现在的数组元素顺序
for ((i=1;i<${#zxc[*]};i++))
#外部循环,比较轮数为数组长度减一,即从1开始,小于5次
do
for ((a=0;a<${#zxc[*]}-i;a++))
#内部循环,比较索引对应元素的范围
#索引为0时为第一个元素,索引值小于5-i,即5个元素比较4次,
do
if [ ${zxc[$a]} -gt ${zxc[$a+1]} ];then
#若第一个元素大于第二个元素,则
temp=${zxc[$a]}
#将第一个元素的值赋予给新变量temp
zxc[$a]=${zxc[$a+1]}
#将第二个元素的值赋予给第一个元素
zxc[$a+1]=$temp
#将变量的值赋予给第二个元素,从而完成位置交换!
fi
done
done
echo "经过冒泡排序后,数组顺序为:${zxc[*]}"
#输出结果
③如何实现并发多进程
-
在 shell 脚本之外有一些现成的自动化运维管理工具,比如 ansible,能够解决并发执行多任务的问题
-
使用后台执行任务的方式来实现任务的“多进程化”
&:后台执行 wait:等待前面的后台任务全部完成才往下执行
④过滤日访问量最多 ip 来源(前10)
cat xxx | awk '{print$x}' | sort | uniq -c | sort -nr | head -10
'//uniq -c:去重;sort -nr:排序,n表示用数字大小排序,r表示反向排序'
Ⅱ:Linux 系统管理(常用命令)
①系统相关命令
磁盘占用:df -hT
内存信息:cat /proc/meminfo 或 free -m
CPU:cat /proc/cpuinfo
I/O(性能):iostat istop(输出磁盘IO和CPU的统计信息)
(yum install sysstat)
ss:获取socket 统计信息,与netstat类似
能够显示更多更详细的有关TCP和连接状态的信息,比netstat更快速更高效
netstat -nautp | grep [...]
ss -nautp | grep [...] '//可检测端口占用情况'
iotop:是一个用来监视磁盘I/O使用状况的 top 类工具
可监测到哪一个程序使用的磁盘IO的信息(yum -y install iotop)
lsof:用于查看进程打开的文件,打开文件的进程,进程打开的端口(TCP/UDP)
是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行
--
查询日志的一些方法:
cat
vim
systemctl status
journal -u [指定查看服务日志]
journal -xe [查看系统日志]
tail -f [……]
②常用抓包工具
网络就像数据的高速公路:网络到底传输什么数据?到底怎么传输的?对于正常使用网络的用户,只关心能不能使用,他们可以不知道其中的原理和过程
但是作为网络工程师就必不可少的得知道期间的原来,以及出现问题的时候知道如何入手。这时候我们就得有一个称心的工具简化排障过程
抓包软件把看不到摸不到的数据包,呈现出来,抓包软件还对数据包按照层级结构进行划分,对故障分析和排障带来极大的便利
wireshark:
- 其是一款小巧、开源、免费且能在几乎所有流行操作系统上使用的抓包工具软件,很适合网络工程师进行个人学习、分析、排障使用。本人是在学习使用 eNSP 时接触到的
- 拥有强大的过滤器,对于需要查看的需求可以精准的捕获
tcpdump:
- 是一款根据使用者的定义对网络上的数据包进行截获的包分析工具,可以将网络中传送的数据包的“头”完全截获下来提供分析
- 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息
③Linux 系统启动(引导)过程
系统引导是操作系统运行的开始,在用户能够正常登陆到系统之前,Linux 的引导过程完成了一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备
![mark](http://xcf11.oss-cn-beijing.aliyuncs.com/blog/20210403/142517534.png)
- 服务器主机开机后,根据主板 BIOS(基本输入输出系统)中的设置检测出一个能够引导系统的设备(硬盘或光驱),检测成功后根据预设的启动顺序移交系统控制权
- (从本机硬盘)启动系统时,首先根据硬盘第一个扇区中 MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据 MBR 记录中的引导信息调用启动菜单(如 GRUB)
- GRUB(统一启动加载器)是使用最为广泛的多系统引导器程序,系统控制权传递给 GROB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载 Linux 内核文件,然后将系统控制权转交给内核
- Linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个 Linux 操作系统的运行过程
- 为了完成进一步的系统引导过程,Linux 内核首先将系统中的"/sbin/init"程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成整个系统的初始化,最后等待用户进行登录