Shell脚本用于运维工具常见的功能和示例

常见功能:

  • 系统信息收集:收集系统的CPU、内存、磁盘等信息,以便进行性能监控和故障排查。
  • 日志分析:分析日志文件,提取关键信息,帮助快速定位问题。
  • 配置管理:管理系统和应用程序的配置文件,包括备份、恢复和更新等操作。
  • 服务管理:启动、停止、重启和监控系统服务,确保服务的可用性和稳定性。
  • 定时任务管理:创建、修改和删除定时任务,执行自动化操作。
  • 远程连接:通过SSH或其他远程连接方式,远程登录并执行命令。
  • 网络检测:检测网络连通性、端口开放情况、域名解析等。
  • 安全加固:执行系统安全加固操作,如关闭不必要的服务、修改默认密码等。

shell用于实用的运维工具示例

系统信息收集:

示例:收集系统的CPU、内存、磁盘等信息,并输出到文件。

示例1:

#!/bin/bash

# 获取CPU信息
cpu_info=$(cat /proc/cpuinfo)

# 获取内存信息
memory_info=$(free -m)

# 获取磁盘信息
disk_info=$(df -h)

# 输出到文件
echo "$cpu_info" > system_info.txt
echo "$memory_info" >> system_info.txt
echo "$disk_info" >> system_info.txt

echo "System information collected and saved to system_info.txt"

示例2:

#!/bin/bash

echo "System Information"

# CPU信息
cpu_info=$(cat /proc/cpuinfo | grep "model name" | head -n 1 | awk -F ': ' '{print $2}')
echo "CPU: $cpu_info"

# 内存信息
memory_info=$(free -h | awk 'NR==2{print $2}')
echo "Memory: $memory_info"

# 磁盘信息
disk_info=$(df -h | awk '/^\/dev/{print $1, $2}')
echo "Disk: $disk_info"


日志分析:

示例:分析日志文件中的错误信息,并统计出现次数。

示例1:

#!/bin/bash

# 日志文件路径
log_file="/var/log/app.log"

# 分析错误信息
error_count=$(grep -c "ERROR" "$log_file")

echo "Error count in $log_file: $error_count"

示例2:

#!/bin/bash

echo "Error Log Analysis"

# 日志文件路径
log_file="/var/log/nginx/error.log"

# 分析错误日志
error_count=$(grep -c "error" "$log_file")
echo "Error Count: $error_count"

# 获取最近的错误记录
recent_errors=$(grep "error" "$log_file" | tail -n 5)
echo "Recent Errors:"
echo "$recent_errors"


配置管理:

示例:备份和恢复配置文件。

示例1:

#!/bin/bash

# 配置文件路径
config_file="/etc/app.conf"

# 备份配置文件
backup_file="/tmp/app.conf.bak"

# 备份配置文件
cp "$config_file" "$backup_file"

echo "Configuration file backed up to $backup_file"

# 恢复配置文件
cp "$backup_file" "$config_file"

echo "Configuration file restored from $backup_file"

示例2:

#!/bin/bash

echo "Configuration Management"

# 配置文件路径
config_file="/etc/nginx/nginx.conf"

# 备份配置文件
backup_file="/var/backup/nginx.conf.$(date +%Y%m%d%H%M%S)"
cp "$config_file" "$backup_file"
echo "Config file backed up to: $backup_file"

# 恢复配置文件
restore_file="/var/backup/nginx.conf.20211201090000"
cp "$restore_file" "$config_file"
echo "Config file restored from: $restore_file"

服务管理:

示例:启动、停止和重启系统服务。

示例1:

#!/bin/bash

# 启动服务
start_command="systemctl start myservice"
$start_command

# 停止服务
stop_command="systemctl stop myservice"
$stop_command

# 重启服务
restart_command="systemctl restart myservice"
$restart_command

echo "Service management completed"

示例2:

#!/bin/bash

echo "Service Management"

# 启动服务
start_service() {
    local service="$1"
    systemctl start "$service"
    echo "Started service: $service"
}

# 停止服务
stop_service() {
    local service="$1"
    systemctl stop "$service"
    echo "Stopped service: $service"
}

# 重启服务
restart_service() {
    local service="$1"
    systemctl restart "$service"
    echo "Restarted service: $service"
}

# 主程序
service_name="nginx"

start_service "$service_name"
sleep 5
stop_service "$service_name"
sleep 2
restart_service "$service_name"

定时任务管理:

示例:添加和删除定时任务。

示例1:

#!/bin/bash

# 添加定时任务
add_task="crontab -l > mycron"
$add_task
echo "*/5 * * * * /path/to/script.sh" >> mycron
crontab mycron
rm mycron

echo "Cron task added"

# 删除定时任务
remove_task="crontab -l | grep -v '/path/to/script.sh' | crontab"
$remove_task

echo "Cron task removed"

示例2:

#!/bin/bash

echo "Cron Task Management"

# 添加定时任务
add_cron_task() {
    local task="$1"
    (crontab -l ; echo "$task") | crontab -
    echo "Cron task added: $task"
}

# 删除定时任务
remove_cron_task() {
    local task="$1"
    (crontab -l | grep -v "$task") | crontab -
    echo "Cron task removed: $task"
}

# 主程序
cron_task="*/5 * * * * /path/to/script.sh"

add_cron_task "$cron_task"
sleep 10
remove_cron_task "$cron_task"


远程连接:

示例:通过SSH连接到远程服务器并执行命令。

示例1:

#!/bin/bash

# 远程服务器信息
remote_server="user@remote-server"

# 执行远程命令
remote_command="ls /path/to/files"
ssh "$remote_server" "$remote_command"

示例2:

#!/bin/bash

# 远程服务器信息
remote_user="username"
remote_host="example.com"
remote_command="ls -l"

# SSH连接并执行命令
ssh -t "$remote_user@$remote_host" "$remote_command"

在这个示例中,我们定义了远程服务器的用户名(remote_user)、主机名(remote_host)和要执行的命令(remote_command)。然后,使用ssh命令进行远程连接,并使用-t选项为SSH分配一个伪终端,以便执行命令。

你可以根据需要修改示例中的远程服务器信息和命令,以满足你的具体需求。还可以在脚本中添加更多的SSH命令,如上传文件、下载文件等。

请注意,为了能够成功连接到远程服务器,你需要确保已经配置了SSH密钥认证或提供了远程服务器的密码。另外,也要确保远程服务器已经允许SSH连接。


网络检测:

示例:检测远程服务器的网络连通性。

#!/bin/bash

# 远程服务器地址
remote_server="remote-server"

# 检测网络连通性
ping -c 3 "$remote_server"

echo "Network connectivity test completed"

安全加固:

示例:修改系统用户的密码策略。

#!/bin/bash

# 修改密码策略
password_policy_file="/etc/login.defs"

sed -i 's/PASS_MAX_DAYS 99999/PASS_MAX_DAYS 90/' "$password_policy_file"
sed -i 's/PASS_MIN_DAYS 0/PASS_MIN_DAYS 7/' "$password_policy_file"
sed -i 's/PASS_WARN_AGE 7/PASS_WARN_AGE 14/' "$password_policy_file"

echo "Password policy updated"

相关文章

七个运维必备的Shell自动化脚本

Shell 脚本是自动化日常任务的有力工具。通过编写和使用 Shell 脚本,运维人员可以显著提高工作效率,减少人为错误。本文将介绍几个运维工作中必备的 Shell 自动化脚本,值得收藏。一. 检查磁...

自动化运维必备的工具-Shell脚本介绍

Shell脚本是实现Linux/Unix系统管理及自动化运维必备的重要工具,也是每一个运维工程师需要熟练掌握的知识,它可以帮我们提升工作效率,还可以减少不必要的重复性工作。但很多人对shell并不了解...

shell脚本编程进阶高效实战方法示例

hell脚本编程进阶高效实战方法示例一、Shell编程效率革命:从基础到高阶在Shell脚本的世界里,效率提升往往来自于对细节的极致优化。下面这个简单的对比展示了优化前后的差异:bash# 基础写法:...

Shell脚本高手速成:5个头条运维工程师都在用的实战秘籍

《Shell脚本高手速成:5个头条运维工程师都在用的实战秘籍》深知读者需要的是立即能用的干货。今天分享的这5个Shell脚本案例,都是从生产环境中总结的真实解决方案,包含了很多网上找不到的实用技巧。一...

高效运维:10个功能强悍的Shell监控脚本

在当今复杂多变的运维环境中,Shell脚本因其灵活性和高效性,成为运维工程师不可或缺的工具之一。本文将详细介绍10个功能强悍的Shell监控脚本,旨在帮助运维人员更好地应对各种挑战,确保系统稳定运行。...

10个Shell脚本高阶技巧,让你的开发效率提升200%!

引言Shell脚本是每个开发者的瑞士军刀,但很多人只停留在基础用法。本文将揭秘10个提升Shell脚本开发效率的"黑魔法",配合实用代码示例,助你成为团队中的Shell大神!代码复制注...