首页 资源下载阿里P7运维工程师私藏的Linux实战笔记(建议收藏)

阿里P7运维工程师私藏的Linux实战笔记(建议收藏)

运维派隶属马哥教育旗下专业运维社区,是国内成立最早的IT运维技术社区,欢迎关注公众号:yunweipai
领取学习更多免费Linux云计算、Python、Docker、K8s教程关注公众号:马哥linux运维

Linux基础入门:从命令行到系统管理的实用指南

引言:为什么每个运维工程师都应该精通Linux?

还记得我第一次面对Linux黑乎乎的终端时,心里只有一个想法:”这玩意儿能干啥?”。5年后的今天,作为一名运维工程师,我几乎每天都在和Linux打交道。从管理数千台服务器到优化系统性能,Linux已经成为我最得力的伙伴。

如果你正在考虑进入运维领域,或者想提升自己的技术能力,这篇文章将带你系统地了解Linux——从最基础的命令行操作到实际的系统管理技巧。更重要的是,我会分享那些教科书上不会告诉你的实战经验。

第一章:Linux命令行基础 – 你的第一步

1.1 必须掌握的20个基础命令

让我们从最实用的命令开始。这些命令我每天至少要用50次:

# 文件和目录操作
ls -la              # 查看详细文件列表(包括隐藏文件)
cd /path/to/dir     # 切换目录
pwd                 # 显示当前目录
mkdir -p dir1/dir2  # 递归创建目录
rm -rf directory    # 递归删除(谨慎使用!)
cp -r source dest   # 递归复制
mv oldname newname  # 移动或重命名

# 文件内容查看
cat file.txt        # 查看文件内容
less file.txt       # 分页查看(大文件必备)
head -n 20 file     # 查看前20行
tail -f logfile     # 实时查看日志(运维神器)
grep "error" file   # 搜索关键字

实战技巧:组合使用这些命令能发挥更大威力。比如查找最近修改的配置文件:

find /etc -type f -name "*.conf" -mtime -7 | xargs ls -lt

1.2 管道和重定向 – 命令的魔法连接

Linux的强大之处在于命令的组合。掌握管道(|)和重定向(>、>>、<)就像掌握了魔法:

# 统计nginx日志中404错误的数量
cat access.log | grep "404" | wc -l

# 查找占用CPU最高的前10个进程
ps aux | sort -k3 -rn | head -10

# 实时监控特定关键字的日志
tail -f /var/log/app.log | grep --line-buffered "ERROR"

# 将错误输出重定向到文件
command 2> error.log

# 同时重定向标准输出和错误输出
command &> all_output.log

1.3 文本处理三剑客:grep、sed、awk

这三个工具是Linux文本处理的核心,掌握它们能让你的工作效率提升10倍:

# grep - 搜索大师
grep -E "error|warning" /var/log/syslog  # 正则表达式搜索
grep -v "debug" file.log                  # 反向匹配
grep -r "config" /etc/                    # 递归搜索

# sed - 流编辑器
sed -i 's/old/new/g' file.txt            # 全局替换
sed -n '10,20p' file.txt                 # 打印10-20行
sed '/^#/d' config.file                  # 删除注释行

# awk - 数据处理专家
awk '{print $1,$3}' file.txt             # 打印第1和第3列
awk -F: '{print $1}' /etc/passwd         # 指定分隔符
awk '$3>1000 {print $0}' data.txt        # 条件过滤

实战案例:分析Web日志,找出访问量最大的10个IP:

awk '{print $1}' access.log | sort | uniq -c | sort -rn | head -10

第二章:进程管理 – 掌控系统的脉搏

2.1 进程监控与管理

作为运维工程师,你需要知道系统上正在发生什么:

# 查看进程
ps aux                          # 查看所有进程
ps -ef | grep nginx            # 查找特定进程
pstree                         # 树形显示进程关系

# 实时监控
top                            # 经典监控工具
htop                           # 更友好的界面(需要安装)
iotop                          # IO监控
iftop                          # 网络流量监控

# 进程控制
kill -9 PID                    # 强制终止进程
killall process_name           # 按名称终止进程
nice -n 10 command             # 以低优先级运行
renice -n 5 -p PID            # 调整运行中进程优先级

2.2 后台任务管理

运维工作中经常需要运行长时间任务:

# 后台运行
command &                      # 后台运行
nohup command &               # 断开终端后继续运行
screen -S session_name        # 创建会话(推荐)
tmux new -s myproject         # tmux会话(更强大)

# 任务控制
jobs                          # 查看后台任务
fg %1                         # 将任务调到前台
bg %1                         # 将任务放到后台
disown %1                     # 将任务与终端分离

专业建议:对于生产环境的长时间任务,始终使用screen或tmux,这样即使网络断开也不会影响任务执行。

第三章:系统性能分析 – 找出瓶颈的艺术

3.1 CPU性能分析

# CPU使用率监控
vmstat 1                      # 每秒更新一次
mpstat -P ALL 1              # 多核CPU监控
sar -u 1 10                  # 收集10秒CPU数据

# 进程CPU分析
pidstat -u 1 -p PID          # 特定进程CPU使用
perf top                     # 实时性能分析

3.2 内存管理与优化

# 内存使用情况
free -h                      # 人类可读格式
cat /proc/meminfo           # 详细内存信息
vmstat -s                   # 内存统计

# 内存问题排查
slabtop                     # 内核内存使用
ps aux --sort=-%mem | head # 内存使用最多的进程

# 清理缓存(慎用)
sync && echo 3 > /proc/sys/vm/drop_caches

3.3 磁盘I/O优化

# 磁盘使用情况
df -h                       # 文件系统使用情况
du -sh *                    # 目录大小
lsblk                       # 块设备列表

# I/O性能分析
iostat -x 1                 # 详细I/O统计
iotop -o                    # 只显示有I/O的进程
dstat -d                    # 磁盘统计

# 查找大文件
find / -type f -size +1G 2>/dev/null

实战经验:当系统变慢时,我的排查顺序是:

  1. 1. 先用top看CPU和内存
  2. 2. 用iostat检查磁盘I/O
  3. 3. 用netstatss检查网络连接
  4. 4. 最后查看系统日志

第四章:网络管理 – 连接世界的桥梁

4.1 网络配置与诊断

# 网络配置
ip addr show                # 查看IP地址
ip route show              # 查看路由表
nmcli device status        # NetworkManager状态

# 网络诊断
ping -c 4 google.com       # 测试连通性
traceroute google.com      # 路由追踪
mtr google.com            # 结合ping和traceroute
dig google.com            # DNS查询
nslookup google.com       # DNS查询(经典)

# 端口和连接
netstat -tuln             # 监听端口
ss -tuln                  # 更快的netstat替代
lsof -i :80              # 查看使用80端口的进程
telnet host port         # 测试端口连通性
nc -zv host port         # netcat端口扫描

4.2 防火墙管理

# iptables(传统)
iptables -L -n -v         # 查看规则
iptables -A INPUT -p tcp --dport 80 -j ACCEPT  # 允许80端口

# firewalld(现代)
firewall-cmd --state      # 查看状态
firewall-cmd --list-all   # 查看所有规则
firewall-cmd --permanent --add-port=80/tcp  # 永久开放端口
firewall-cmd --reload     # 重载配置

第五章:服务管理 – 让系统按你的意愿运行

5.1 Systemd服务管理

现代Linux发行版都使用systemd管理服务:

# 服务控制
systemctl start nginx      # 启动服务
systemctl stop nginx       # 停止服务
systemctl restart nginx    # 重启服务
systemctl reload nginx     # 重载配置
systemctl status nginx     # 查看状态

# 开机自启
systemctl enable nginx     # 设置开机自启
systemctl disable nginx    # 取消开机自启
systemctl is-enabled nginx # 查看是否自启

# 服务日志
journalctl -u nginx        # 查看服务日志
journalctl -f -u nginx     # 实时查看日志
journalctl --since "2024-01-01" -u nginx  # 时间范围

5.2 创建自定义服务

创建自己的systemd服务文件:

# /etc/systemd/system/myapp.service
[Unit]
Description=My Application
After=network.target

[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/myapp
ExecStart=/opt/myapp/start.sh
Restart=on-failure
RestartSec=10

[Install]
WantedBy=multi-user.target

第六章:日志管理 – 系统的黑匣子

6.1 日志查看与分析

# 系统日志位置
/var/log/syslog           # 系统日志(Debian/Ubuntu)
/var/log/messages         # 系统日志(RHEL/CentOS)
/var/log/auth.log         # 认证日志
/var/log/kern.log         # 内核日志

# 日志分析技巧
# 查找错误
grep -i error /var/log/syslog | tail -20

# 统计日志级别
awk '{print $5}' /var/log/syslog | sort | uniq -c | sort -rn

# 时间范围过滤
sed -n '/2024-01-01 10:00/,/2024-01-01 11:00/p' logfile

6.2 日志轮转配置

配置logrotate管理日志大小:

# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0644 root root
    postrotate
        systemctl reload myapp
    endscript
}

第七章:用户和权限管理 – 安全的基石

7.1 用户管理

# 用户操作
useradd -m -s /bin/bash username   # 创建用户
passwd username                     # 设置密码
usermod -aG sudo username          # 添加到sudo组
userdel -r username                # 删除用户及主目录

# 查看用户信息
id username                        # 用户ID和组
who                               # 当前登录用户
last                              # 登录历史

7.2 权限管理精髓

# 文件权限
chmod 755 file                    # rwxr-xr-x
chmod u+x file                    # 给用户添加执行权限
chown user:group file             # 改变所有者

# 特殊权限
chmod u+s file                    # SUID
chmod g+s directory               # SGID
chmod +t directory                # Sticky bit

# ACL(访问控制列表)
setfacl -m u:username:rwx file    # 设置ACL
getfacl file                      # 查看ACL

安全提示:永远不要给文件777权限,这是安全隐患的源头!

第八章:Shell脚本编程 – 自动化的魔法

8.1 基础脚本结构

#!/bin/bash
# 脚本描述:系统健康检查脚本

set -e  # 遇到错误立即退出
set -u  # 使用未定义变量时报错

# 变量定义
LOG_FILE="/var/log/health_check.log"
THRESHOLD=80

# 函数定义
check_disk_usage() {
    local usage=$(df -h / | awk 'NR==2 {print $(NF-1)}' | sed 's/%//')
    if [ "$usage" -gt "$THRESHOLD" ]; then
        echo "警告:磁盘使用率超过${THRESHOLD}%"
        return 1
    fi
    return 0
}

# 主逻辑
main() {
    echo "开始系统检查 - $(date)" >> "$LOG_FILE"
    
    if check_disk_usage; then
        echo "磁盘检查通过" >> "$LOG_FILE"
    else
        echo "磁盘空间不足!" >> "$LOG_FILE"
        # 发送告警邮件
        mail -s "磁盘空间告警" admin@example.com < "$LOG_FILE"
    fi
}

# 执行主函数
main "$@"

8.2 实用脚本示例

批量服务器巡检脚本

#!/bin/bash
# 批量巡检脚本

SERVERS="server1 server2 server3"
CHECKS="disk memory cpu"

for server in $SERVERS; do
    echo "检查服务器: $server"
    
    # SSH执行远程命令
    ssh "$server" << 'EOF'
        echo "=== 磁盘使用 ==="
        df -h
        echo "=== 内存使用 ==="
        free -h
        echo "=== CPU负载 ==="
        uptime
        echo "=== 关键服务 ==="
        systemctl status nginx postgresql redis
EOF
    
    echo "------------------------"
done

第九章:备份与恢复 – 数据安全的最后防线

9.1 备份策略

# rsync增量备份
rsync -avz --delete /source/ /backup/
rsync -avz -e ssh /local/ user@remote:/backup/

# tar备份
tar -czf backup-$(date +%Y%m%d).tar.gz /important/data/
tar -czf - /data | ssh user@backup-server "cat > backup.tar.gz"

# 数据库备份
mysqldump -u root -p database > backup.sql
pg_dump database > backup.sql

9.2 自动化备份脚本

#!/bin/bash
# 自动备份脚本

BACKUP_DIR="/backup"
SOURCE_DIR="/var/www"
DATE=$(date +%Y%m%d_%H%M%S)
RETENTION_DAYS=7

# 创建备份
backup_create() {
    tar -czf "${BACKUP_DIR}/backup_${DATE}.tar.gz" "$SOURCE_DIR"
    if [ $? -eq 0 ]; then
        echo "备份成功: backup_${DATE}.tar.gz"
    else
        echo "备份失败!" >&2
        exit 1
    fi
}

# 清理旧备份
backup_cleanup() {
    find "$BACKUP_DIR" -name "backup_*.tar.gz" -mtime +$RETENTION_DAYS -delete
    echo "已清理${RETENTION_DAYS}天前的备份"
}

# 执行备份
backup_create
backup_cleanup

第十章:容器化部署 – 现代运维必备

10.1 Docker基础操作

# 镜像管理
docker images                      # 查看镜像
docker pull nginx:latest           # 拉取镜像
docker build -t myapp:v1 .        # 构建镜像

# 容器操作
docker run -d -p 80:80 nginx      # 运行容器
docker ps                         # 查看运行容器
docker logs container_id          # 查看日志
docker exec -it container_id bash # 进入容器

# 清理
docker system prune -a            # 清理未使用资源

10.2 Docker Compose编排

# docker-compose.yml
version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - app
  
  app:
    build: .
    environment:
      - DATABASE_URL=postgresql://db:5432/myapp
    depends_on:
      - db
  
  db:
    image: postgres:13
    environment:
      - POSTGRES_PASSWORD=secret
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

第十一章:监控与告警 – 防患于未然

11.1 系统监控脚本

#!/bin/bash
# 综合监控脚本

# 配置
CPU_THRESHOLD=80
MEM_THRESHOLD=90
DISK_THRESHOLD=85
ALERT_EMAIL="ops@company.com"

# CPU检查
check_cpu() {
    local cpu_usage=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
    if (( $(echo "$cpu_usage > $CPU_THRESHOLD" | bc -l) )); then
        echo "CPU使用率告警: ${cpu_usage}%"
        return 1
    fi
}

# 内存检查
check_memory() {
    local mem_usage=$(free | grep Mem | awk '{print ($3-$6)/$2 * 100.0}')
    if (( $(echo "$mem_usage > $MEM_THRESHOLD" | bc -l) )); then
        echo "内存使用率告警: ${mem_usage}%"
        return 1
    fi
}

# 磁盘检查
check_disk() {
    while read -r line; do
        local usage=$(echo "$line" | awk '{print $5}' | sed 's/%//')
        local mount=$(echo "$line" | awk '{print $6}')
        if [ "$usage" -gt "$DISK_THRESHOLD" ]; then
            echo "磁盘使用率告警: ${mount} 使用了 ${usage}%"
            return 1
        fi
    done < <(df -h | tail -n +2)
}

# 主监控循环
main() {
    local alert_message=""
    
    if ! check_cpu; then
        alert_message="${alert_message}\n$(check_cpu)"
    fi
    
    if ! check_memory; then
        alert_message="${alert_message}\n$(check_memory)"
    fi
    
    if ! check_disk; then
        alert_message="${alert_message}\n$(check_disk)"
    fi
    
    if [ -n "$alert_message" ]; then
        echo -e "$alert_message" | mail -s "系统告警 - $(hostname)" "$ALERT_EMAIL"
    fi
}

# 每5分钟执行一次(配合cron)
main

11.2 日志监控与告警

#!/bin/bash
# 错误日志监控

LOG_FILE="/var/log/application.log"
PATTERN="ERROR|CRITICAL|FATAL"
CHECK_INTERVAL=300  # 5分钟
LAST_CHECK_FILE="/tmp/last_log_check"

# 获取上次检查位置
if [ -f "$LAST_CHECK_FILE" ]; then
    LAST_SIZE=$(cat "$LAST_CHECK_FILE")
else
    LAST_SIZE=0
fi

CURRENT_SIZE=$(stat -c%s "$LOG_FILE")

# 只检查新增内容
if [ "$CURRENT_SIZE" -gt "$LAST_SIZE" ]; then
    tail -c +$((LAST_SIZE + 1)) "$LOG_FILE" | grep -E "$PATTERN" | while read -r line; do
        echo "发现错误日志: $line"
        # 这里可以发送告警
    done
fi

# 更新检查位置
echo "$CURRENT_SIZE" > "$LAST_CHECK_FILE"

第十二章:性能优化实战 – 让系统飞起来

12.1 内核参数优化

# /etc/sysctl.conf 优化配置
# 网络优化
net.core.somaxconn = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_tw_reuse = 1

# 内存优化
vm.swappiness = 10
vm.dirty_ratio = 15
vm.dirty_background_ratio = 5

# 文件系统优化
fs.file-max = 2097152
fs.nr_open = 1048576

# 应用配置
sysctl -p  # 立即生效

12.2 服务优化示例

Nginx优化配置

# /etc/nginx/nginx.conf
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 65535;

events {
    worker_connections 65535;
    use epoll;
    multi_accept on;
}

http {
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    keepalive_requests 100;
    
    # 压缩
    gzip on;
    gzip_vary on;
    gzip_proxied any;
    gzip_comp_level 6;
    gzip_types text/plain text/css text/xml application/json application/javascript;
    
    # 缓存
    open_file_cache max=2000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
}

第十三章:故障排查技巧 – 成为问题终结者

13.1 系统hang住排查流程

# 1. 检查系统负载
uptime
top -b -n 1

# 2. 检查内存
free -h
vmstat 1 5

# 3. 检查I/O
iostat -x 1 5
iotop -b -n 1

# 4. 检查网络
ss -s
netstat -i

# 5. 检查日志
dmesg | tail -50
journalctl -xe

# 6. 查看进程状态
ps aux | grep " D "  # 查找D状态进程

13.2 应用故障排查

# Java应用排查
jstack <pid>           # 线程栈
jmap -heap <pid>       # 堆内存
jstat -gcutil <pid> 1000  # GC状态

# 数据库连接问题
netstat -an | grep 3306 | wc -l  # MySQL连接数
mysql -e "show processlist"       # 查看连接

# Web服务排查
curl -I http://localhost          # 测试响应
ab -n 1000 -c 10 http://localhost/  # 压力测试

第十四章:安全加固 – 构建铜墙铁壁

14.1 基础安全配置

# SSH安全配置
# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
Port 22022  # 修改默认端口

# 限制su命令
# 只允许wheel组用户su
echo "auth required pam_wheel.so use_uid" >> /etc/pam.d/su

# 设置密码策略
# /etc/security/pwquality.conf
minlen = 12
dcredit = -1
ucredit = -1
lcredit = -1
ocredit = -1

14.2 入侵检测

# 安装aide
apt-get install aide
aide --init
mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db
aide --check  # 定期检查

# 检查可疑进程
ps aux | grep -v "^\[" | awk '{print $11}' | xargs -I {} ls -la {} 2>/dev/null | grep -v "^/"

# 检查网络连接
netstat -tulpn | grep LISTEN
lsof -i -P -n | grep LISTEN

第十五章:自动化运维工具 – 解放双手

15.1 Ansible快速入门

# inventory文件

[webservers]

web1 ansible_host=192.168.1.10 web2 ansible_host=192.168.1.11

[dbservers]

db1 ansible_host=192.168.1.20 # playbook.yml — – name: 部署Web应用 hosts: webservers become: yes tasks: – name: 安装Nginx apt: name: nginx state: present – name: 复制配置文件 template: src: nginx.conf.j2 dest: /etc/nginx/nginx.conf notify: restart nginx – name: 确保服务运行 service: name: nginx state: started enabled: yes handlers: – name: restart nginx service: name: nginx state: restarted

15.2 CI/CD Pipeline示例

# .gitlab-ci.yml
stages:
  - test
  - build
  - deploy

test:
  stage: test
  script:
    - npm test
    - npm run lint

build:
  stage: build
  script:
    - docker build -t myapp:$CI_COMMIT_SHA .
    - docker push myapp:$CI_COMMIT_SHA

deploy:
  stage: deploy
  script:
    - ssh deploy@server "docker pull myapp:$CI_COMMIT_SHA"
    - ssh deploy@server "docker stop myapp || true"
    - ssh deploy@server "docker run -d --name myapp -p 80:80 myapp:$CI_COMMIT_SHA"
  only:
    - main

实战案例:从零搭建高可用Web服务

让我们用一个完整的案例来串联所有知识点:

场景描述

公司需要部署一个高可用的Web应用,要求:

  • • 负载均衡
  • • 自动故障转移
  • • 监控告警
  • • 自动备份

实施步骤

1. 环境准备

# 准备3台服务器
# lb1: 192.168.1.10 (负载均衡器)
# web1: 192.168.1.11 (Web服务器1)
# web2: 192.168.1.12 (Web服务器2)

2. 配置负载均衡器

# Nginx负载均衡配置
upstream backend {
    least_conn;
    server 192.168.1.11:80 max_fails=3 fail_timeout=30s;
    server 192.168.1.12:80 max_fails=3 fail_timeout=30s;
}

server {
    listen 80;
    location / {
        proxy_pass http://backend;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

3. 健康检查脚本

#!/bin/bash
# health_check.sh
SERVERS="192.168.1.11 192.168.1.12"
for server in $SERVERS; do
    if ! curl -f -s -o /dev/null "http://${server}/health"; then
        echo "Server $server is down!"
        # 发送告警
        echo "Web服务器 $server 无响应" | mail -s "服务告警" ops@company.com
    fi
done

4. 自动化部署脚本

#!/bin/bash
# deploy.sh
deploy_server() {
```bash
    local server=$1
    echo "部署到服务器: $server"
    
    # 备份当前版本
    ssh $server "cp -r /var/www/app /var/www/app.backup.$(date +%Y%m%d)"
    
    # 传输新版本
    rsync -avz --delete ./dist/ $server:/var/www/app/
    
    # 重启服务
    ssh $server "systemctl reload nginx"
    
    # 验证部署
    if curl -f -s -o /dev/null "http://${server}/health"; then
        echo "服务器 $server 部署成功"
    else
        echo "服务器 $server 部署失败,回滚中..."
        ssh $server "rm -rf /var/www/app && mv /var/www/app.backup.* /var/www/app"
        ssh $server "systemctl reload nginx"
        return 1
    fi
}

# 滚动部署
for server in 192.168.1.11 192.168.1.12; do
    deploy_server $server
    sleep 10  # 等待服务稳定
done

5. 监控和告警系统

#!/bin/bash
# monitor.sh - 综合监控脚本

# 配置
WEBHOOK_URL="https://hooks.slack.com/services/xxx"
LOG_FILE="/var/log/monitor.log"

# 发送告警函数
send_alert() {
    local message=$1
    local severity=$2
    
    # 记录日志
    echo "[$(date '+%Y-%m-%d %H:%M:%S')] [$severity] $message" >> $LOG_FILE
    
    # 发送到Slack
    curl -X POST $WEBHOOK_URL \
        -H 'Content-Type: application/json' \
        -d "{\"text\":\"🚨 [$severity] $message\"}"
}

# 检查Web服务
check_web_service() {
    local response_time=$(curl -o /dev/null -s -w '%{time_total}' http://localhost)
    if (( $(echo "$response_time > 2" | bc -l) )); then
        send_alert "Web响应时间过长: ${response_time}秒" "WARNING"
    fi
}

# 检查磁盘空间
check_disk_space() {
    local usage=$(df -h / | awk 'NR==2 {print $(NF-1)}' | sed 's/%//')
    if [ "$usage" -gt 80 ]; then
        send_alert "磁盘使用率告警: ${usage}%" "CRITICAL"
    fi
}

# 检查数据库连接
check_database() {
    if ! mysql -h localhost -u monitor -ppassword -e "SELECT 1" &>/dev/null; then
        send_alert "数据库连接失败" "CRITICAL"
    fi
}

# 主监控循环
while true; do
    check_web_service
    check_disk_space
    check_database
    sleep 60
done

6. 自动备份策略

#!/bin/bash
# backup.sh - 增量备份脚本

BACKUP_ROOT="/backup"
TODAY=$(date +%Y%m%d)
YESTERDAY=$(date -d "yesterday" +%Y%m%d)

# 数据库备份
backup_database() {
    echo "开始数据库备份..."
    mysqldump --all-databases --single-transaction \
        --quick --lock-tables=false > $BACKUP_ROOT/db/mysql_$TODAY.sql
    
    # 压缩
    gzip $BACKUP_ROOT/db/mysql_$TODAY.sql
    
    # 保留7天
    find $BACKUP_ROOT/db -name "mysql_*.sql.gz" -mtime +7 -delete
}

# 文件增量备份
backup_files() {
    echo "开始文件备份..."
    rsync -avz --backup \
        --backup-dir=$BACKUP_ROOT/incremental/$TODAY \
        --exclude='*.log' \
        --exclude='cache/*' \
        /var/www/ $BACKUP_ROOT/current/
}

# 远程备份
sync_to_remote() {
    echo "同步到远程备份服务器..."
    rsync -avz $BACKUP_ROOT/ backup@remote-server:/backup/
}

# 执行备份
backup_database
backup_files
sync_to_remote

echo "备份完成: $(date)"

进阶技巧:提升效率的20个小窍门

1. 命令行效率提升

# 设置有用的别名 (~/.bashrc)
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias grep='grep --color=auto'
alias df='df -h'
alias free='free -h'
alias psg='ps aux | grep -v grep | grep -i'
alias listening='netstat -tlnp'

# 历史命令技巧
!$              # 上个命令的最后一个参数
!!              # 执行上一条命令
!vim            # 执行最近的vim命令
ctrl+r          # 搜索历史命令

2. 快速文件操作

# 批量重命名
for f in *.txt; do mv "$f" "${f%.txt}.bak"; done

# 快速创建多个目录
mkdir -p project/{src,bin,doc,test}/{main,backup}

# 查找并替换
find . -type f -name "*.conf" -exec sed -i 's/old/new/g' {} +

# 查找大文件
du -ah / 2>/dev/null | sort -rh | head -20

3. SSH技巧

# SSH配置文件 (~/.ssh/config)
Host prod
    HostName 192.168.1.100
    User admin
    Port 22
    IdentityFile ~/.ssh/prod_key
    
Host *
    ServerAliveInterval 60
    ServerAliveCountMax 3

# SSH隧道
ssh -L 8080:localhost:80 user@remote  # 本地端口转发
ssh -R 8080:localhost:80 user@remote  # 远程端口转发
ssh -D 1080 user@remote               # SOCKS代理

4. 实时日志分析

# 实时统计访问最多的IP
tail -f access.log | awk '{print $1}' | logtop

# 实时错误监控
tail -f error.log | grep --line-buffered ERROR | while read line; do
    echo "$line"
    notify-send "错误告警" "$line"  # 桌面通知
done

# 多日志文件监控
multitail /var/log/nginx/access.log /var/log/nginx/error.log

故障处理实战记录

案例1:内存泄漏排查

症状:服务器内存持续增长,最终OOM

排查过程

# 1. 查看内存使用TOP进程
ps aux --sort=-%mem | head

# 2. 查看进程内存映射
pmap -x <pid>

# 3. 使用valgrind检测(开发环境)
valgrind --leak-check=full --show-leak-kinds=all ./app

# 4. 生产环境内存分析
gdb -p <pid>
(gdb) generate-core-file
(gdb) detach

# 分析core文件
gdb ./app core.<pid>

解决方案:发现是缓存没有设置过期时间,添加LRU策略解决。

案例2:磁盘I/O瓶颈

症状:应用响应慢,CPU使用率不高

排查过程

# 1. 确认I/O问题
iostat -x 1
# 发现await时间很高

# 2. 找出I/O密集进程
iotop -o

# 3. 分析具体文件操作
strace -p <pid> -e trace=file

# 4. 检查文件系统
tune2fs -l /dev/sda1

解决方案

  • • 调整文件系统参数:mount -o noatime,nodiratime
  • • 将日志写入改为异步
  • • 增加应用缓存层

案例3:网络延迟问题

症状:跨机房访问延迟高

排查过程

# 1. 测试网络延迟
ping -c 100 remote_host | tail -1

# 2. 路由追踪
mtr --report --report-cycles 100 remote_host

# 3. 带宽测试
iperf3 -c remote_host

# 4. TCP优化
echo 'net.ipv4.tcp_congestion_control = bbr' >> /etc/sysctl.conf
sysctl -p

职业发展建议

技能进阶路线

  1. 1. 初级运维(0-2年)
  • • 掌握Linux基础命令
  • • 熟悉常见服务配置
  • • 能够处理日常运维工作

2. 中级运维(2-5年)

  • • 精通Shell脚本编程
  • • 掌握自动化工具(Ansible/Puppet)
  • • 了解容器技术(Docker/K8s)
  • • 具备故障排查能力

3. 高级运维(5年+)

  • • 架构设计能力
  • • 深入理解系统原理
  • • 具备编程能力(Python/Go)
  • • 了解云原生技术栈

认证推荐

  • • RHCE(Red Hat认证工程师)
  • • CKA(Kubernetes认证管理员)
  • • AWS/阿里云认证

持续学习资源

  • • 技术博客:关注业界大牛的博客
  • • 开源项目:参与开源项目贡献
  • • 技术社区:Stack Overflow、V2EX
  • • 在线课程:Coursera、Udemy

结语

Linux运维是一个需要不断学习和实践的领域。从基础命令到复杂的系统架构,每一步都需要扎实的基础和丰富的经验。希望这篇指南能够帮助你在Linux运维的道路上走得更远。

记住,优秀的运维工程师不仅要会使用工具,更要理解背后的原理。遇到问题时,不要急于寻找答案,先尝试自己分析和解决,这样才能真正提升自己的能力。

最后的建议

  1. 1. 建立自己的知识库,记录遇到的问题和解决方案
  2. 2. 搭建测试环境,多做实验
  3. 3. 关注新技术,但不要盲目追新
  4. 4. 培养良好的文档习惯
  5. 5. 永远保持对技术的热情和好奇心

如果你觉得这篇文章对你有帮助,欢迎关注我的博客获取更多运维实战经验。下期我们将深入探讨Kubernetes容器编排实战,敬请期待!


关于作者:资深运维工程师,专注于Linux系统、容器技术和云原生架构。欢迎在评论区交流你的运维经验和问题。

文末福利

就目前来说,传统运维冲击年薪30W+的转型方向就是SRE&DevOps岗位。

为了帮助大家早日摆脱繁琐的基层运维工作,给大家整理了一套高级运维工程师必备技能资料包,内容有多详实丰富看下图!

共有 20 个模块

阿里P7运维工程师私藏的Linux实战笔记(建议收藏)插图

1.38张最全工程师技能图谱

阿里P7运维工程师私藏的Linux实战笔记(建议收藏)插图1

2.面试大礼包

阿里P7运维工程师私藏的Linux实战笔记(建议收藏)插图2

3.Linux书籍

阿里P7运维工程师私藏的Linux实战笔记(建议收藏)插图3

4.go书籍

阿里P7运维工程师私藏的Linux实战笔记(建议收藏)插图4

······

6.自动化运维工具

阿里P7运维工程师私藏的Linux实战笔记(建议收藏)插图5

18.消息队列合集

阿里P7运维工程师私藏的Linux实战笔记(建议收藏)插图6

以上所有资料获取请扫码

备注:最新运维资料

阿里P7运维工程师私藏的Linux实战笔记(建议收藏)插图7

100%免费领取

(后台不再回复,扫码一键领取)

本文链接:https://www.yunweipai.com/47420.html

网友评论comments

发表回复

您的电子邮箱地址不会被公开。

暂无评论

Copyright © 2012-2022 YUNWEIPAI.COM - 运维派 京ICP备16064699号-6
扫二维码
扫二维码
返回顶部