天天看點

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"