常用的4个Linux Shell脚本,实现运维自动化的基础

news2024/11/26 19:39:30

🐇明明跟你说过:个人主页

🏅个人专栏:《Linux :从菜鸟到飞鸟的逆袭》🏅

🔖行路有良友,便是天堂🔖

目录

一、前言

1、Linux的起源与发展

2、什么是Shell脚本

二、实际应用 

1、系统管理与维护脚本

2、文件操作脚本

3、网络管理脚本 

4、定时任务脚本 


一、前言

1、Linux的起源与发展


1991年,芬兰赫尔辛基大学的学生林纳斯·托瓦兹(Linus Torvalds)开始编写一个新的操作系统内核,这个内核最初被称为“Freax”。他的初衷只是想学习操作系统内核的开发,并为自己的个人计算机编写一个操作系统。然而,当他将这个内核发布在Internet上并开放源代码后,全球各地的程序员开始参与到这个项目中来,共同完善这个内核。最终,这个内核被命名为Linux,这个名字是由Linus Torvalds的名字和Unix操作系统的名字组合而成的。

Linux从一开始就坚持源代码的公开和免费使用,任何人都可以对其进行修改和分发。这种开放性和自由性吸引了大量的开发者和用户,使得Linux逐渐成长并成熟起来。如今,Linux已经发展成为一个性能稳定、功能强大的多用户网络操作系统,支持32位和64位硬件,能运行主要的Unix工具软件、应用程序和网络协议。同时,Linux也有上百种不同的发行版,如基于社区开发的Debian、ArchLinux,以及基于商业开发的Red Hat Enterprise Linux、SUSE、Oracle Linux等。

更多有关Linux的介绍,请参考《Linux是什么,该如何学习》

​​

2、什么是Shell脚本

Shell 脚本是一种用来编写一系列命令以自动执行特定任务的文本文件。它们由命令、控制结构、变量和函数组成,通常用于在 Unix 或类 Unix 操作系统(如 Linux)上执行系统管理任务、自动化任务或其他常见任务。Shell 脚本可以通过命令行解释器(如 Bash、sh、zsh 等)来执行,并且可以包含条件判断、循环、函数定义等高级功能。

Shell 脚本通常以 .sh 为扩展名,并且可以包含各种命令,包括系统命令、应用程序命令和其他脚本命令。通过组织和编写这些命令,可以创建一个可以自动执行特定任务的脚本。Shell 脚本在自动化系统管理、批处理任务、日常任务以及编写复杂的系统管理脚本方面非常有用。

​​

二、实际应用 

1、系统管理与维护脚本

脚本要求:

  • 系统信息收集: 收集系统的基本信息,包括操作系统版本、内核版本、CPU信息、内存信息、磁盘使用情况等。
  • 日志清理: 定期清理系统日志文件,避免日志文件过大占用磁盘空间。
  • 定时任务检查: 检查系统中是否存在定时任务,记录定时任务的执行情况。
  • 服务状态检查: 检查系统中运行的服务状态,包括启动状态、运行状态等。
  • 安全性检查: 检查系统的安全性配置,包括防火墙设置、登录安全策略等。
  • 异常情况处理: 当发现异常情况时,及时记录并发送通知,方便管理员处理。

实现思路:

  • 系统信息收集: 使用系统命令(如uname、cat /proc/cpuinfo、free -m、df -h等)收集系统信息,将结果输出到日志文件。
  • 日志清理: 使用find命令定期清理日志文件,可以设置脚本定时执行。
  • 定时任务检查: 使用crontab -l命令获取系统中的定时任务信息,记录到日志文件中。
  • 服务状态检查: 使用systemctl status <service>命令检查各个服务的状态,记录到日志文件中。
  • 安全性检查: 使用iptables -L、sshd -T等命令检查防火墙设置和SSH安全策略,记录到日志文件中。
  • 异常情况处理: 使用if语句判断各项检查结果是否正常,如果异常则记录到日志文件中,并发送通知邮件给管理员。
#!/bin/bash

# 1. 系统信息收集
echo "System Information:" >> system_report.log
echo "OS Version: $(uname -a)" >> system_report.log
echo "Kernel Version: $(uname -r)" >> system_report.log
echo "CPU Info: $(cat /proc/cpuinfo)" >> system_report.log
echo "Memory Info: $(free -m)" >> system_report.log
echo "Disk Usage: $(df -h)" >> system_report.log

# 2. 日志清理(假设每周清理一次)
find /var/log -name "*.log" -mtime +7 -exec rm -rf {} \;

# 3. 定时任务检查
echo "Cron Jobs:" >> system_report.log
crontab -l >> system_report.log

# 4. 服务状态检查
echo "Service Status:" >> system_report.log
systemctl status apache >> system_report.log
systemctl status sshd >> system_report.log

# 5. 安全性检查
echo "Firewall Configuration:" >> system_report.log
iptables -L >> system_report.log
echo "SSH Configuration:" >> system_report.log
sshd -T >> system_report.log

# 6. 异常情况处理(示例:如果服务apache2状态异常,则发送邮件通知管理员)
if systemctl status apache2 | grep "Active: active (running)" >/dev/null; then
    echo "Apache2 is running normally."
else
    echo "Apache2 is not running. Sending notification to admin..."
    mail -s "Apache2 Service Alert" admin@example.com <<< "Apache2 service is not running on $(hostname). Please check."
fi

# 结束
echo "System maintenance report generated."

2、文件操作脚本

脚本要求:

  1. 文件备份: 给定一个文件路径,将该文件备份到指定目录,并在备份文件名中添加当前日期时间。
  2. 文件压缩: 给定一个目录路径,将该目录下的所有文件压缩成一个压缩文件。
  3. 文件查找: 给定一个目录路径和关键字,查找该目录下包含关键字的所有文件。
  4. 文件比较: 给定两个文件路径,比较两个文件的内容是否相同。
  5. 文件权限设置: 给定一个文件路径和权限值,设置该文件的权限。
  6. 异常处理: 当发生异常情况时,及时记录并给出相应提示。

实现思路:

  • 文件备份: 使用cp命令复制文件到指定目录,并在文件名中添加当前日期时间。
  • 文件压缩: 使用tar命令将指定目录下的所有文件打包成一个压缩文件。
  • 文件查找: 使用find命令在指定目录下查找包含关键字的所有文件。
  • 文件比较: 使用diff命令比较两个文件的内容是否相同。
  • 文件权限设置: 使用chmod命令设置文件的权限。
  • 异常处理: 使用if语句判断各项操作是否成功,如果失败则输出错误提示信息。
#!/bin/bash

# 1. 文件备份
backup_file() {
    local file="$1"
    local backup_dir="$2"
    local backup_file="${backup_dir}/$(basename ${file}).$(date +%Y-%m-%d_%H-%M-%S)"
    cp "$file" "$backup_file"
    echo "File $file backed up to $backup_file"
}

# 2. 文件压缩
compress_directory() {
    local dir="$1"
    local output_file="$2"
    tar -czf "$output_file" "$dir"
    echo "Directory $dir compressed to $output_file"
}

# 3. 文件查找
find_files() {
    local directory="$1"
    local keyword="$2"
    echo "Files containing '$keyword' in directory $directory:"
    find "$directory" -type f -name "*$keyword*" -exec ls {} \;
}

# 4. 文件比较
compare_files() {
    local file1="$1"
    local file2="$2"
    if diff "$file1" "$file2" >/dev/null; then
        echo "Files $file1 and $file2 are identical."
    else
        echo "Files $file1 and $file2 are different."
    fi
}

# 5. 文件权限设置
set_file_permission() {
    local file="$1"
    local permission="$2"
    chmod "$permission" "$file"
    echo "Permission of file $file set to $permission"
}

# 6. 异常处理
handle_error() {
    local error_message="$1"
    echo "Error: $error_message"
}

# 主函数
main() {
    local action="$1"
    case $action in
        backup) backup_file "$2" "$3" ;;
        compress) compress_directory "$2" "$3" ;;
        find) find_files "$2" "$3" ;;
        compare) compare_files "$2" "$3" ;;
        set_permission) set_file_permission "$2" "$3" ;;
        *) handle_error "Invalid action: $action" ;;
    esac
}

# 调用主函数,并传入参数
main "$@"

3、网络管理脚本 

脚本要求:

  1. 查看网络连接: 显示当前系统的网络连接状态,包括正在监听的端口和建立的连接。
  2. 检查网络连通性: 给定一个目标主机和端口,检查当前系统与目标主机的网络连通性。
  3. 查看网络流量: 显示当前系统的网络流量统计信息,包括接收和发送的数据量。
  4. 防火墙管理: 提供基本的防火墙管理功能,包括查看防火墙规则、添加规则、删除规则等。
  5. 异常处理: 当发生异常情况时,及时记录并给出相应提示。

实现思路:

  1. 查看网络连接: 使用netstat命令查看当前系统的网络连接状态。
  2. 检查网络连通性: 使用nc命令或ping命令检查系统与目标主机的网络连通性。
  3. 查看网络流量: 使用ifconfig命令或ip命令查看当前系统的网络接口信息,可以结合grep命令筛选需要的信息。
  4. 防火墙管理: 使用iptables命令管理防火墙规则。
  5. 异常处理: 使用if语句判断各项操作是否成功,如果失败则输出错误提示信息。
#!/bin/bash

# 1. 查看网络连接
view_network_connections() {
    echo "Network connections:"
    netstat -tuln
}

# 2. 检查网络连通性
check_network_connectivity() {
    local host="$1"
    local port="$2"
    echo "Checking connectivity to $host:$port ..."
    if nc -zv "$host" "$port" >/dev/null 2>&1; then
        echo "Connection to $host:$port successful."
    else
        echo "Connection to $host:$port failed."
    fi
}

# 3. 查看网络流量
view_network_traffic() {
    echo "Network traffic:"
    ifconfig
}

# 4. 防火墙管理
manage_firewall() {
    local action="$1"
    case $action in
        view_rules) iptables -L ;;
        add_rule) iptables -A INPUT -p tcp --dport "$2" -j ACCEPT ;;
        delete_rule) iptables -D INPUT -p tcp --dport "$2" -j ACCEPT ;;
        *) echo "Invalid action: $action" ;;
    esac
}

# 5. 异常处理
handle_error() {
    local error_message="$1"
    echo "Error: $error_message"
}

# 主函数
main() {
    local action="$1"
    case $action in
        view_connections) view_network_connections ;;
        check_connectivity) check_network_connectivity "$2" "$3" ;;
        view_traffic) view_network_traffic ;;
        manage_firewall) manage_firewall "$2" "$3" ;;
        *) handle_error "Invalid action: $action" ;;
    esac
}

# 调用主函数,并传入参数
main "$@"

启动脚本:

1. 查看网络连接:

   ./script_name.sh view_connections


2. 检查网络连通性 (例如,检查主机 192.168.1.1 的 80 端口):

   ./script_name.sh check_connectivity 192.168.1.1 80


3. 查看网络流量:

   ./script_name.sh view_traffic


4. 管理防火墙规则:
查看规则:

     ./script_name.sh manage_firewall view_rules


添加允许某个端口(如 22)的规则:

     ./script_name.sh manage_firewall add_rule 22


删除允许某个端口(如 22)的规则:

     ./script_name.sh manage_firewall delete_rule 22


如果不传入有效的参数,脚本会调用 handle_error 函数并显示错误信息。记得替换 script_name.sh 为你的脚本实际文件名。

4、定时任务脚本 

脚本要求:

  1. 定时执行任务: 按照预定的时间间隔执行指定的任务。
  2. 任务执行日志: 记录每次任务执行的日志,包括执行时间和执行结果。
  3. 异常处理: 当任务执行出错时,及时记录并给出相应提示。

实现思路:

  1. 使用cron定时任务: 使用Linux系统自带的cron工具来执行定时任务,cron支持分钟、小时、日、月、星期等时间单位的定时调度。
  2. 编写任务脚本: 编写要执行的任务脚本,例如一个Shell脚本,确保脚本具有可执行权限。
  3. 任务执行日志: 在任务脚本中添加记录日志的功能,将执行时间和执行结果输出到指定的日志文件中。
  4. 异常处理: 在任务脚本中添加异常处理逻辑,例如使用if语句判断任务执行结果,如果出错则记录错误信息到日志中。

脚本示例:

#!/bin/bash

# 定义任务脚本路径
TASK_SCRIPT="/path/to/your/task_script.sh"

# 定义日志文件路径
LOG_FILE="/path/to/your/log_file.log"

# 执行任务,并记录执行时间和结果到日志文件
run_task() {
    echo "Task started at $(date)" >> "$LOG_FILE"
    if $TASK_SCRIPT >> "$LOG_FILE" 2>&1; then
        echo "Task completed successfully" >> "$LOG_FILE"
    else
        echo "Task failed" >> "$LOG_FILE"
    fi
    echo "Task ended at $(date)" >> "$LOG_FILE"
}

# 主函数
main() {
    run_task
}

# 调用主函数
main

使用cron配置定时任务:

  • 编辑cron任务列表:执行crontab -e命令打开cron任务列表文件。
  • 添加定时任务:在文件中添加一行配置,指定任务执行的时间间隔和要执行的脚本路径。例如,每小时执行一次任务可以添加如下配置:
0 * * * * /path/to/your/task_scheduler.sh


这个配置表示每小时的第0分钟执行一次task_scheduler.sh脚本,而task_scheduler.sh脚本会执行我们之前定义的任务脚本并记录执行日志。 

脚本执行流程总结

  1. 初始化: 设置任务脚本路径和日志文件路径。
  2. 执行任务: 调用main函数,进而执行run_task函数。
  3. 日志记录: 记录任务从开始到结束的全部过程,包括时间戳和执行结果。
  4. 结束: 脚本执行完毕,日志中保留有完整的任务执行信息。

 

 💕💕💕每一次的分享都是一次成长的旅程,感谢您的陪伴和关注。希望这些关于Linux的文章能陪伴您走过技术的一段旅程,共同见证成长和进步!😺😺😺

🧨🧨🧨让我们一起在技术的海洋中探索前行,共同书写美好的未来!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1632098.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

go引入自建包名报错 package XXX is not in std和goland设置GO111MODULE提示冲突

首先在引入自建包的时候报错 查找网上的解决方法&#xff1a; 1、goland取消勾选Enable Go modules integration 2、set GO111MODULEoff 但是都没解决&#xff0c;而且更奇怪的是&#xff0c;我在cmd里面查看go env就显示set GO111MODULEoff 但是在goland里面的终端输入 go…

户外小型气象站

TH-QC10随着环境保护意识的日益增强&#xff0c;气象监测在环保工作中扮演着越来越重要的角色。户外小型气象站作为一种便携、高效的气象监测设备&#xff0c;为环保工作提供了有力的支持。本文将对户外小型气象站的功能、应用场景进行简要介绍。 一、户外小型气象站的功能 户…

第九届中国海洋大学信息安全竞赛 Re 睡Lite wp

还得自己查资料 相近的版本就行 可以找到一些字符&#xff0c;经过分析可以猜测sub_48就是类似sleep的减速函数 就算真用芯片也跑不出来&#xff0c;一直sleep 往下翻可以找到很多字符 拼在一起可以大致看出flag

操作系统——优先权算法c++实现

变量描述 测试数据 5 A 0 4 4 B 1 3 2 C 2 5 3 D 3 2 5 E 4 4 1 先来先服务算法 简述 该算法实现非常简单就是对到达时间排个序&#xff0c;然后依次进行即可&#xff0c;对结构体的sort进行了重载 代码 void FCFS() {//先来先服务算法std::cout<<"\n\t\t\t\t\…

快速生成个人信息测试数据

特点&#xff1a; 业务测试的数据比较多&#xff0c;苦于测试数据生成麻烦&#xff0c;用javascripthtmlcss快速生成页面并支持导出&#xff1b; 用途&#xff1a; 1、可用于频繁的功能测试&#xff1b; 2、可用于性能测试参数化&#xff1b; 3、可用于自动化测试参数&…

Python | Leetcode Python题解之第58题最后一个单词的长度

题目&#xff1a; 题解&#xff1a; class Solution:def lengthOfLastWord(self, s: str) -> int:ls[]for i in s.split():ls.append(i)return len(ls[-1])

二叉树理论和题目

二叉树的种类 在我们解题过程中二叉树有两种主要的形&#xff1a;满二叉树和完全二叉树。 满二叉树 满二叉树&#xff1a;如果一棵二叉树只有度为0的结点和度为 2 的结点&#xff0c;并且度为 0 的结点在同一层上&#xff0c;则这棵二叉树为满二叉树。 这棵二叉树为满二叉树…

正点原子[第二期]Linux之ARM(MX6U)裸机篇学习笔记-6.4

前言&#xff1a; 本文是根据哔哩哔哩网站上“正点原子[第二期]Linux之ARM&#xff08;MX6U&#xff09;裸机篇”视频的学习笔记&#xff0c;在这里会记录下正点原子 I.MX6ULL 开发板的配套视频教程所作的实验和学习笔记内容。本文大量引用了正点原子教学视频和链接中的内容。…

Python绘制3D曲面图

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 探索Python中绘制3D曲面图的艺术 在数据可视化的世界中&#xff0c;3D曲面图是一种强大的工…

OpenCV如何模板匹配

返回:OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;OpenCV如何实现背投 下一篇 &#xff1a;OpenCV在图像中寻找轮廓 目标 在本教程中&#xff0c;您将学习如何&#xff1a; 使用 OpenCV 函数 matchTemplate()搜索图像贴片和输入图像之间…

Python学习笔记------异常

当检测到错误时&#xff0c;Python解释器就无法继续执行了&#xff0c;反而出现一些错误提示&#xff0c;就是所谓异常&#xff08;bug&#xff09; 1、异常的捕获方法 任何程序运行过程中都可能出现异常&#xff0c;我们可以在力所能及的范围内&#xff0c;对可能出现的bug提…

家庭教育-家长指导手册

背景介绍 写这篇文章的动机&#xff1a;我在抖音上一个视频中看到孩子洗了碗&#xff0c;家长翻一本打印的册子&#xff0c;从里面找表扬的话。这个册子左侧写了孩子的行为&#xff0c;比如&#xff1a;洗碗&#xff0c;右边写了家长应该说的表扬的话。 所以&#xff0c;我寻思…

[论文笔记]SEARCHING FOR ACTIVATION FUNCTIONS

引言 今天带来另一篇激活函数论文SEARCHING FOR ACTIVATION FUNCTIONS的笔记。 作者利用自动搜索技术来发现新的激活函数。通过结合详尽的搜索和基于强化学习的搜索&#xff0c;通过实验发现最佳的激活函数 f ( x ) x ⋅ sigmoid ( β x ) f(x) x \cdot \text{sigmoid}(βx…

MOS(My Oracle Support)怎么用?Oracle DBA必备技能!

MOS简介 老Oracle DBAer都知道MOS的前身是Metalink&#xff0c;2012年MOS替换掉原有的Metalink平台&#xff1b;MOS是Oracle提供的新一代在线支持平台&#xff0c;MOS平台整合了以前的Metalink功能&#xff0c;并提供了更强大的功能和用户体验。它允许客户提交和跟踪技术支持…

ubuntu系统搭建pytorch环境详细步骤【笔记】

实践设备&#xff1a;华硕FX-PRO&#xff08;NVIDIA GeForce GTX 960M&#xff09; 搭建PyTorch环境的详细步骤如下&#xff1a; 1.安装Ubuntu系统&#xff1a; 下载Ubuntu的镜像文件并制作启动盘。将启动盘插入计算机&#xff0c;启动计算机并按照提示安装Ubuntu系统。 2.…

QT c++ 代码布局原则 简单例子

本文描述QT c widget代码布局遵循的原则&#xff1a;实中套虚&#xff0c;虚中套实。 本文最后列出了代码下载链接。 在QT6.2.4 msvc2019编译通过。 所谓实是实体组件&#xff1a;比如界面框、文本标签、组合框、文本框、按钮、表格、图片框等。 所谓虚是Layout组件&#x…

vue2编写主体页面

目录 一. 导入两张图片 二. 新建主体vue 三. 修改路由 1. 新增主体界面Main.vue的路由 2. 完整router/index.js代码如下&#xff1a; 在Vue 2中编写一个主体页面通常意味着创建一个包含导航栏、侧边栏、内容区域等的布局。以下是使用Vue 2和Element UI框架来构建一个简单的…

USB HID报告描述符学习

参考资料 HID 报告描述符 (qq.com)https://mp.weixin.qq.com/s?__bizMzU1ODI3MzQ1MA&mid2247485748&idx1&sn112bd8014eb96b03308b3b808549e8d4&chksmfc284ff1cb5fc6e770c2d2ece46c17bf2529901b45a357938978fa62163723556ad497b05c47&cur_album_id3340417…

react完整项目搭建的思路

react完整项目搭建的思路 react完整项目搭建的思路1.使用creacte-react-app初始化项目2.安装所需插件:路由、网络、样式、组件库3.reactjs目录结构组织4. 配置路径别名4.配置路由5.网络配置,对axios进行封装》获取当前环境变量 6.配置代理解决跨域7.配置使用iconfont8.状态管理…

产品推荐 | BittWare基于Altera Agilex“M FPGA的lA-860m加速卡

01 产品概述 BittWare的lA-860m是一款Altera Agilex“M系列FPGA卡&#xff0c;针对吞吐量和内存密集型应用进行了优化。M 系列 FPGA 具有广泛的内存层次结构&#xff0c;包括集成高带宽存储器 &#xff08;HBM2e&#xff09; 和硬内存片上网络 &#xff08;NoC&#xff09;&am…