运维必备 | Linux 系统管理 - 常用命令小汇总 | Shell 脚本常见问题

Ⅰ:Shell 脚本常见问题

①平时如何应用 Shell 脚本

  1. 日常巡检:查看所需系统状况时执行该脚本;参数超过阈值时报警

  2. 自动化部署:一键部署 LNMP 等架构,省时省力

  3. 日志分割:日志文件太大会不利于分析排查故障,比如 Nginx 没有类似 Apache 的日志分割处理功能,但可以通过撰写脚本配合周期性计划性任务来实现日志的自动切割

  4. 耦合服务:例如 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. 冒泡排序的基本思想是对比相邻的两个元素值,如果满足条件就交换元素值
  2. 把较小的元素移动到数组前面,把大的元素移动到数组后面(也就是交换两个元素的位置),这样较小的元素就会像气泡一样从底部上升到顶部

算法思路:

  1. 冒泡算法由双层循环实现,其中外部循环用于控制排序轮数,一般为要排序的数组长度减1次,因为最后一次循环只剩下一个数组元素,不需要对比,同时数组已经完成排序了
  2. 而内部循环主要用于对比数组中每个相邻元素的大小,以确定是否交换位置,对比和交换次数随排序轮数而减少

例:

#!/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[*]}"
#输出结果

③如何实现并发多进程

  1. 在 shell 脚本之外有一些现成的自动化运维管理工具,比如 ansible,能够解决并发执行多任务的问题

  2. 使用后台执行任务的方式来实现任务的“多进程化”

    &:后台执行
    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:

  1. 其是一款小巧、开源、免费且能在几乎所有流行操作系统上使用的抓包工具软件,很适合网络工程师进行个人学习、分析、排障使用。本人是在学习使用 eNSP 时接触到的
  2. 拥有强大的过滤器,对于需要查看的需求可以精准的捕获

tcpdump:

  1. 是一款根据使用者的定义对网络上的数据包进行截获的包分析工具,可以将网络中传送的数据包的“头”完全截获下来提供分析
  2. 支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息

③Linux 系统启动(引导)过程

系统引导是操作系统运行的开始,在用户能够正常登陆到系统之前,Linux 的引导过程完成了一系列的初始化任务,并加载必要的程序和命令终端,为用户登录做好准备

mark
  1. 服务器主机开机后,根据主板 BIOS(基本输入输出系统)中的设置检测出一个能够引导系统的设备(硬盘或光驱),检测成功后根据预设的启动顺序移交系统控制权
  2. (从本机硬盘)启动系统时,首先根据硬盘第一个扇区中 MBR(主引导记录)的设置,将系统控制权传递给包含操作系统引导文件的分区;或者直接根据 MBR 记录中的引导信息调用启动菜单(如 GRUB)
  3. GRUB(统一启动加载器)是使用最为广泛的多系统引导器程序,系统控制权传递给 GROB 以后,将会显示启动菜单给用户选择,并根据所选项(或采用默认值)加载 Linux 内核文件,然后将系统控制权转交给内核
  4. Linux 内核是一个预先编译好的特殊二进制文件,介于各种硬件资源与系统程序之间,负责资源分配与调度。内核接过系统控制权以后,将完全掌控整个 Linux 操作系统的运行过程
  5. 为了完成进一步的系统引导过程,Linux 内核首先将系统中的"/sbin/init"程序加载到内存中运行(运行中的程序称为进程),init 进程负责完成整个系统的初始化,最后等待用户进行登录

猜你喜欢

转载自blog.csdn.net/weixin_51486343/article/details/115415978