
在日常开发工作中我们经常会遇到一些零散的、不成体系但又非常实用的技术点。这些边角料知识虽然单个看起来微不足道但积累起来却能极大提升开发效率。本文整理了一套实用的技术工具箱涵盖环境配置、脚本编写、调试技巧等多个方面适合有一定开发经验的工程师收藏备用。1. 开发环境高效配置1.1 Shell环境个性化定制一个高效的命令行环境能显著提升开发效率。以下是几个实用的配置技巧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 )实用的别名配置# 开发常用别名 alias gsgit status alias gcmgit commit -m alias gpgit push alias dcdocker-compose alias kkubectl # 系统监控别名 alias meminfofree -m -l -t alias cpuinfolscpu alias diskusagedf -h alias folderusagedu -sh * | sort -hr1.2 IDE快捷键与模板配置现代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 } }调试配置模板// .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 系统运维脚本日志清理与归档脚本#!/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磁盘空间监控脚本#!/usr/bin/env python3 # disk_monitor.py - 磁盘空间监控告警 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): 发送告警邮件 message f 服务器磁盘使用率告警 当前使用率: {usage_percent:.1f}% 建议立即清理不必要的文件。 检查时间: {datetime.now()} # 配置邮件发送实际使用需要配置SMTP服务器 msg MimeText(message) msg[Subject] 磁盘空间告警 msg[From] monitorexample.com msg[To] adminexample.com # 这里简化了邮件发送逻辑 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 开发辅助脚本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(): 获取当前项目依赖 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): 检查包的安全漏洞 # 这里使用简化版的检查逻辑 # 实际项目中应该调用安全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. 调试与问题排查技巧3.1 网络问题诊断网络连通性检查脚本#!/bin/bash # network_diagnosis.sh - 网络连通性诊断工具 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 } # 检查常用服务 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 性能分析工具简易性能监控脚本#!/usr/bin/env python3 # performance_monitor.py - 系统性能监控 import psutil import time import json from datetime import datetime def collect_metrics(): 收集系统性能指标 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): 监控系统性能 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) # 打印当前状态 print(fCPU: {metrics[cpu_percent]}% | fMemory: {metrics[memory_percent]}% | fDisk: {metrics[disk_usage]}%) time.sleep(interval) # 保存监控数据 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. 数据库实用技巧4.1 常用SQL模板数据库维护SQL-- 查找重复记录 SELECT email, COUNT(*) FROM users GROUP BY email HAVING COUNT(*) 1; -- 数据库大小查询 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 数据备份脚本#!/bin/bash # db_backup.sh - 数据库备份脚本 DB_NAMEmyapp BACKUP_DIR/backup/database DATE$(date %Y%m%d_%H%M%S) RETENTION_DAYS7 # 创建备份目录 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优化配置生产环境Dockerfile模板# 多阶段构建优化 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 # 复制依赖 COPY --frombuilder /root/.local /root/.local COPY . . # 安全配置 RUN useradd -m -u 1000 appuser \ chown -R appuser:appuser /app USER appuser # 环境变量 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开发环境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 基础安全配置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文件权限安全脚本#!/bin/bash # secure_permissions.sh - 文件权限安全检查与修复 # 检查敏感文件权限 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 } # 修复常见权限问题 fix_permissions() { # Web目录不应该有写权限 find /var/www/html -type f -exec chmod 644 {} \; find /var/www/html -type d -exec chmod 755 {} \; # 日志文件权限 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 # 颜色输出函数 red() { echo -e \033[31m$\033[0m; } green() { echo -e \033[32m$\033[0m; } # 备份当前版本 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 # 重启服务 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 # 停止服务 sudo systemctl stop $APP_NAME # 恢复备份 rm -rf $DEPLOY_DIR tar -xzf $BACKUP_DIR/$latest_backup -C $(dirname $DEPLOY_DIR) # 重启服务 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. 监控与日志管理8.1 应用日志配置结构化日志配置# 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: {} } # 系统资源检查 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 } # 如果有不健康的检查项更新总体状态 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)这些实用技巧和脚本都是经过实际项目验证的能够有效提升开发效率和系统稳定性。建议根据具体需求进行调整和优化建立属于自己的技术工具箱。