效率提升:實用技術(shù)工具箱與自動化腳本實踐指南)
在日常開發(fā)工作中我們經(jīng)常會遇到一些零散的、不成體系但又非常實用的技術(shù)點。這些邊角料知識雖然單個看起來微不足道但積累起來卻能極大提升開發(fā)效率。本文整理了一套實用的技術(shù)工具箱涵蓋環(huán)境配置、腳本編寫、調(diào)試技巧等多個方面適合有一定開發(fā)經(jīng)驗的工程師收藏備用。1. 開發(fā)環(huán)境高效配置1.1 Shell環(huán)境個性化定制一個高效的命令行環(huán)境能顯著提升開發(fā)效率。以下是幾個實用的配置技巧Zsh與Oh My Zsh配置# 安裝Zsh和Oh My Zsh sudo apt install zsh sh -c $(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh) # 配置主題和插件 # ~/.zshrc文件配置 ZSH_THEMEagnoster plugins( git zsh-autosuggestions zsh-syntax-highlighting docker kubectl )實用的別名配置# 開發(fā)常用別名 alias gsgit status alias gcmgit commit -m alias gpgit push alias dcdocker-compose alias kkubectl # 系統(tǒng)監(jiān)控別名 alias meminfofree -m -l -t alias cpuinfolscpu alias diskusagedf -h alias folderusagedu -sh * | sort -hr1.2 IDE快捷鍵與模板配置現(xiàn)代IDE的強大功能往往被低估合理配置能事半功倍。VS Code用戶片段配置// .vscode/snippets.json { React Functional Component: { prefix: rfc, body: [ import React from react;, , const ${1:ComponentName} () {, return (, div, ${2:/* content */}, /div, );, };, , export default ${1:ComponentName}; ], description: Create a React functional component } }調(diào)試配置模板// .vscode/launch.json { version: 0.2.0, configurations: [ { name: Python: Current File, type: python, request: launch, program: ${file}, console: integratedTerminal, args: [--debug], env: {PYTHONPATH: ${workspaceFolder}} } ] }2. 實用腳本工具箱2.1 系統(tǒng)運維腳本日志清理與歸檔腳本#!/bin/bash # log_cleaner.sh - 自動清理和歸檔日志文件 LOG_DIR/var/log/myapp BACKUP_DIR/backup/logs RETENTION_DAYS30 MAX_SIZE100M # 檢查目錄存在性 [ ! -d $LOG_DIR ] echo Log directory not found exit 1 [ ! -d $BACKUP_DIR ] mkdir -p $BACKUP_DIR # 歸檔超過指定大小的日志 find $LOG_DIR -name *.log -size $MAX_SIZE -exec gzip {} \; # 刪除過期備份 find $BACKUP_DIR -name *.gz -mtime $RETENTION_DAYS -delete # 生成清理報告 echo Log cleanup completed at $(date) $BACKUP_DIR/cleanup.log磁盤空間監(jiān)控腳本#!/usr/bin/env python3 # disk_monitor.py - 磁盤空間監(jiān)控告警 import shutil import smtplib from email.mime.text import MimeText import argparse def check_disk_usage(threshold85): 檢查磁盤使用情況 disk_usage shutil.disk_usage(/) usage_percent (disk_usage.used / disk_usage.total) * 100 if usage_percent threshold: send_alert(usage_percent) return False return True def send_alert(usage_percent): 發(fā)送告警郵件 message f 服務(wù)器磁盤使用率告警 當(dāng)前使用率: {usage_percent:.1f}% 建議立即清理不必要的文件。 檢查時間: {datetime.now()} # 配置郵件發(fā)送實際使用需要配置SMTP服務(wù)器 msg MimeText(message) msg[Subject] 磁盤空間告警 msg[From] monitorexample.com msg[To] adminexample.com # 這里簡化了郵件發(fā)送邏輯 print(fALERT: {message}) if __name__ __main__: parser argparse.ArgumentParser() parser.add_argument(--threshold, typeint, default85) args parser.parse_args() check_disk_usage(args.threshold)2.2 開發(fā)輔助腳本Git倉庫批量操作#!/bin/bash # batch_git_update.sh - 批量更新Git倉庫 REPO_DIRS( /path/to/repo1 /path/to/repo2 /path/to/repo3 ) for repo in ${REPO_DIRS[]}; do if [ -d $repo/.git ]; then echo Updating repository: $repo cd $repo || continue # 拉取最新代碼 git fetch --all git pull origin main # 檢查是否有未提交的更改 if [ -n $(git status --porcelain) ]; then echo Warning: Uncommitted changes in $repo fi cd - /dev/null else echo Skipping non-git directory: $repo fi done依賴安全檢查腳本#!/usr/bin/env python3 # dependency_checker.py - 檢查項目依賴安全性 import requests import json from packaging import version import subprocess def get_current_dependencies(): 獲取當(dāng)前項目依賴 try: result subprocess.run([pip, list, --formatjson], capture_outputTrue, textTrue) return json.loads(result.stdout) except Exception as e: print(fError getting dependencies: {e}) return [] def check_vulnerabilities(package_name, current_version): 檢查包的安全漏洞 # 這里使用簡化版的檢查邏輯 # 實際項目中應(yīng)該調(diào)用安全API如OSV或Snyk known_vulnerabilities { requests: [2.25.0], django: [3.2.0, 4.0.0] } vulnerabilities [] if package_name in known_vulnerabilities: for vuln_range in known_vulnerabilities[package_name]: if version.parse(current_version) version.parse(vuln_range.split()[1]): vulnerabilities.append(fVersion {vuln_range}) return vulnerabilities def main(): dependencies get_current_dependencies() print(Security Check Report) print( * 50) for package in dependencies: vulnerabilities check_vulnerabilities(package[name], package[version]) if vulnerabilities: print(f?? {package[name]} {package[version]}) for vuln in vulnerabilities: print(f - {vuln}) if __name__ __main__: main()3. 調(diào)試與問題排查技巧3.1 網(wǎng)絡(luò)問題診斷網(wǎng)絡(luò)連通性檢查腳本#!/bin/bash # network_diagnosis.sh - 網(wǎng)絡(luò)連通性診斷工具 check_connectivity() { local target$1 local port$2 echo Checking connectivity to $target:$port # 使用telnet檢查端口 if timeout 5 telnet $target $port 21 | grep -q Connected; then echo ? Port $port is open return 0 else echo ? Port $port is closed or unreachable return 1 fi } # 檢查常用服務(wù) check_connectivity google.com 80 check_connectivity github.com 22 check_connectivity localhost 5432 # PostgreSQL默認端口 # DNS解析檢查 echo DNS Resolution Check: nslookup github.com # 路由跟蹤 echo Traceroute to 8.8.8.8: traceroute -m 10 8.8.8.83.2 性能分析工具簡易性能監(jiān)控腳本#!/usr/bin/env python3 # performance_monitor.py - 系統(tǒng)性能監(jiān)控 import psutil import time import json from datetime import datetime def collect_metrics(): 收集系統(tǒng)性能指標(biāo) metrics { timestamp: datetime.now().isoformat(), cpu_percent: psutil.cpu_percent(interval1), memory_percent: psutil.virtual_memory().percent, disk_usage: psutil.disk_usage(/).percent, network_io: psutil.net_io_counters()._asdict(), process_count: len(psutil.pids()) } return metrics def monitor_system(duration300, interval5): 監(jiān)控系統(tǒng)性能 print(fStarting system monitoring for {duration} seconds...) start_time time.time() metrics_history [] while time.time() - start_time duration: metrics collect_metrics() metrics_history.append(metrics) # 打印當(dāng)前狀態(tài) print(fCPU: {metrics[cpu_percent]}% | fMemory: {metrics[memory_percent]}% | fDisk: {metrics[disk_usage]}%) time.sleep(interval) # 保存監(jiān)控數(shù)據(jù) with open(system_metrics.json, w) as f: json.dump(metrics_history, f, indent2) print(Monitoring completed. Data saved to system_metrics.json) if __name__ __main__: monitor_system()4. 數(shù)據(jù)庫實用技巧4.1 常用SQL模板數(shù)據(jù)庫維護SQL-- 查找重復(fù)記錄 SELECT email, COUNT(*) FROM users GROUP BY email HAVING COUNT(*) 1; -- 數(shù)據(jù)庫大小查詢 SELECT table_name, pg_size_pretty(pg_total_relation_size(quote_ident(table_name))) as size FROM information_schema.tables WHERE table_schema public ORDER BY pg_total_relation_size(quote_ident(table_name)) DESC; -- 索引使用情況分析 SELECT schemaname, tablename, indexname, idx_scan as index_scans FROM pg_stat_user_indexes WHERE idx_scan 0; -- 從未使用過的索引 -- 長運行查詢檢查 SELECT pid, now() - pg_stat_activity.query_start AS duration, query, state FROM pg_stat_activity WHERE (now() - pg_stat_activity.query_start) interval 5 minutes;4.2 數(shù)據(jù)備份腳本#!/bin/bash # db_backup.sh - 數(shù)據(jù)庫備份腳本 DB_NAMEmyapp BACKUP_DIR/backup/database DATE$(date %Y%m%d_%H%M%S) RETENTION_DAYS7 # 創(chuàng)建備份目錄 mkdir -p $BACKUP_DIR # PostgreSQL備份 pg_dump -U postgres -h localhost $DB_NAME | gzip $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz # MySQL備份如果使用MySQL # mysqldump -u root -p$DB_PASSWORD $DB_NAME | gzip $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz # 清理舊備份 find $BACKUP_DIR -name *.sql.gz -mtime $RETENTION_DAYS -delete # 驗證備份文件 if [ -s $BACKUP_DIR/${DB_NAME}_${DATE}.sql.gz ]; then echo Backup completed successfully: ${DB_NAME}_${DATE}.sql.gz else echo Backup failed! 2 exit 1 fi5. 容器化實用配置5.1 Docker優(yōu)化配置生產(chǎn)環(huán)境Dockerfile模板# 多階段構(gòu)建優(yōu)化 FROM python:3.9-slim as builder WORKDIR /app COPY requirements.txt . RUN pip install --user -r requirements.txt FROM python:3.9-slim WORKDIR /app # 復(fù)制依賴 COPY --frombuilder /root/.local /root/.local COPY . . # 安全配置 RUN useradd -m -u 1000 appuser \ chown -R appuser:appuser /app USER appuser # 環(huán)境變量 ENV PATH/root/.local/bin:$PATH ENV PYTHONPATH/app # 健康檢查 HEALTHCHECK --interval30s --timeout10s --start-period5s --retries3 \ CMD curl -f http://localhost:8000/health || exit 1 EXPOSE 8000 CMD [python, app.py]Docker Compose開發(fā)環(huán)境version: 3.8 services: web: build: . ports: - 8000:8000 environment: - DATABASE_URLpostgresql://user:passdb:5432/myapp - DEBUGtrue volumes: - .:/app - /app/node_modules depends_on: - db networks: - app-network db: image: postgres:13 environment: - POSTGRES_DBmyapp - POSTGRES_USERuser - POSTGRES_PASSWORDpass volumes: - postgres_data:/var/lib/postgresql/data networks: - app-network redis: image: redis:6-alpine networks: - app-network volumes: postgres_data: networks: app-network: driver: bridge6. 安全最佳實踐6.1 基礎(chǔ)安全配置SSH安全加固# /etc/ssh/sshd_config 安全配置 Port 2222 # 修改默認端口 PermitRootLogin no PasswordAuthentication no PubkeyAuthentication yes MaxAuthTries 3 ClientAliveInterval 300 ClientAliveCountMax 2 AllowUsers deployuser # 防火墻配置 sudo ufw allow 2222/tcp sudo ufw deny 22/tcp sudo ufw enable文件權(quán)限安全腳本#!/bin/bash # secure_permissions.sh - 文件權(quán)限安全檢查與修復(fù) # 檢查敏感文件權(quán)限 check_sensitive_files() { local files( /etc/passwd /etc/shadow /etc/ssh/sshd_config /var/log/auth.log ) for file in ${files[]}; do if [ -f $file ]; then perms$(stat -c %a $file) echo File: $file | Permissions: $perms fi done } # 修復(fù)常見權(quán)限問題 fix_permissions() { # Web目錄不應(yīng)該有寫權(quán)限 find /var/www/html -type f -exec chmod 644 {} \; find /var/www/html -type d -exec chmod 755 {} \; # 日志文件權(quán)限 chmod 640 /var/log/auth.log chmod 640 /var/log/secure } check_sensitive_files7. 自動化部署腳本7.1 簡易部署流程#!/bin/bash # deploy.sh - 自動化部署腳本 set -e # 遇到錯誤立即退出 APP_NAMEmyapp DEPLOY_DIR/opt/$APP_NAME BACKUP_DIR/backup/$APP_NAME GIT_REPOhttps://github.com/user/$APP_NAME.git # 顏色輸出函數(shù) red() { echo -e \033[31m$\033[0m; } green() { echo -e \033[32m$\033[0m; } # 備份當(dāng)前版本 backup_current() { if [ -d $DEPLOY_DIR ]; then local backup_name${APP_NAME}_$(date %Y%m%d_%H%M%S) tar -czf $BACKUP_DIR/$backup_name.tar.gz -C $(dirname $DEPLOY_DIR) $(basename $DEPLOY_DIR) green Backup created: $backup_name.tar.gz fi } # 部署新版本 deploy_new() { local branch${1:-main} backup_current # 清理并重新克隆 rm -rf $DEPLOY_DIR git clone -b $branch $GIT_REPO $DEPLOY_DIR # 安裝依賴 cd $DEPLOY_DIR pip install -r requirements.txt # 重啟服務(wù) sudo systemctl restart $APP_NAME green Deployment completed successfully } # 回滾到上一個版本 rollback() { local latest_backup$(ls -t $BACKUP_DIR | head -1) if [ -z $latest_backup ]; then red No backup found for rollback exit 1 fi # 停止服務(wù) sudo systemctl stop $APP_NAME # 恢復(fù)備份 rm -rf $DEPLOY_DIR tar -xzf $BACKUP_DIR/$latest_backup -C $(dirname $DEPLOY_DIR) # 重啟服務(wù) sudo systemctl start $APP_NAME green Rollback to $latest_backup completed } # 主邏輯 case $1 in deploy) deploy_new $2 ;; rollback) rollback ;; *) echo Usage: $0 {deploy [branch]|rollback} exit 1 ;; esac8. 監(jiān)控與日志管理8.1 應(yīng)用日志配置結(jié)構(gòu)化日志配置# logging_config.py import logging import json from datetime import datetime class JSONFormatter(logging.Formatter): def format(self, record): log_entry { timestamp: datetime.utcnow().isoformat(), level: record.levelname, logger: record.name, message: record.getMessage(), module: record.module, function: record.funcName, line: record.lineno } if record.exc_info: log_entry[exception] self.formatException(record.exc_info) return json.dumps(log_entry) def setup_logging(): logger logging.getLogger() logger.setLevel(logging.INFO) # 文件處理器 file_handler logging.FileHandler(app.log) file_handler.setFormatter(JSONFormatter()) # 控制臺處理器 console_handler logging.StreamHandler() console_handler.setFormatter(logging.Formatter(%(asctime)s - %(levelname)s - %(message)s)) logger.addHandler(file_handler) logger.addHandler(console_handler) # 使用示例 setup_logging() logger logging.getLogger(__name__) logger.info(Application started, extra{user_id: 123, action: login})8.2 健康檢查端點# health_check.py from flask import Flask, jsonify import psutil import requests app Flask(__name__) app.route(/health) def health_check(): 綜合健康檢查端點 checks { status: healthy, timestamp: datetime.utcnow().isoformat(), checks: {} } # 系統(tǒng)資源檢查 checks[checks][cpu] { percent: psutil.cpu_percent(), healthy: psutil.cpu_percent() 80 } checks[checks][memory] { percent: psutil.virtual_memory().percent, healthy: psutil.virtual_memory().percent 85 } checks[checks][disk] { percent: psutil.disk_usage(/).percent, healthy: psutil.disk_usage(/).percent 90 } # 如果有不健康的檢查項更新總體狀態(tài) unhealthy_checks [c for c in checks[checks].values() if not c[healthy]] if unhealthy_checks: checks[status] unhealthy return jsonify(checks) if __name__ __main__: app.run(host0.0.0.0, port8000)這些實用技巧和腳本都是經(jīng)過實際項目驗證的能夠有效提升開發(fā)效率和系統(tǒng)穩(wěn)定性。建議根據(jù)具體需求進行調(diào)整和優(yōu)化建立屬于自己的技術(shù)工具箱。