Linux指令入门:DevOps与SRE视角
文章目录
- Linux指令入门:DevOps与SRE视角
- 一、Linux基础命令概述
- 二、文件系统操作命令
- 1. 文件与目录基本操作
- 2. 文件查看与编辑
- 3. 文件压缩与归档
- 三、进程管理命令
- 1. 进程查看与控制
- 2. 服务管理(Systemd)
- 四、网络管理命令
- 1. 网络连接与诊断
- 2. 网络性能监控
- 五、权限与安全命令
- 1. 文件权限管理
- 2. 用户与组管理
- 六、日志查看与分析
- 1. 系统日志
- 2. 应用日志
- 七、系统监控与诊断
- 1. 系统资源监控
- 2. 进程诊断
- 八、脚本与自动化
- 1. Shell脚本基础
- 2. 自动化工具集成
- 九、安全加固与审计
- 1. 安全检查命令
- 2. 日志审计
- 十、DevOps与SRE工作流中的Linux命令应用
- 1. 部署流程示例
- 2. 故障排查流程
- 总结
Linux指令入门:DevOps与SRE视角
一、Linux基础命令概述
作为DevOps和SRE工程师,熟练掌握Linux命令是日常工作的基础。Linux命令主要分为以下几类:
- 文件系统操作
- 进程管理
- 网络管理
- 权限管理
- 日志查看
- 监控与诊断
二、文件系统操作命令
1. 文件与目录基本操作
# 查看当前目录内容
ls -lah # -l详细列表,-a显示隐藏文件,-h人类可读大小# 创建目录
mkdir -p /path/to/directory # -p递归创建父目录# 创建文件
touch file.txt # 创建空文件
> file.txt # 清空或创建文件# 复制文件/目录
cp -r source_dir dest_dir # -r递归复制目录# 移动/重命名
mv old_name new_name
mv /path/file /new/path/# 删除
rm -rf /path/to/remove # -r递归删除,-f强制删除(慎用)
SRE最佳实践:
- 使用
ls -lah
查看文件权限和大小 - 删除前先用
ls
确认路径 - 重要操作前先备份
2. 文件查看与编辑
# 查看文件内容
cat file.txt # 直接输出全部内容
less file.txt # 分页查看,支持搜索
head -n 10 file.txt # 查看前10行
tail -n 10 file.txt # 查看后10行
tail -f log_file.log # 实时跟踪日志文件# 文本搜索
grep "pattern" file.txt
grep -r "pattern" /path/ # 递归搜索目录# 文件编辑(基础命令)
nano file.txt # 简单编辑器
vim file.txt # 强大编辑器(需学习基本命令)
DevOps实用技巧:
grep -i
忽略大小写grep -v
反向匹配grep -A 3
显示匹配行及后3行grep -B 3
显示匹配行及前3行
3. 文件压缩与归档
# 压缩/解压
tar -czvf archive.tar.gz dir/ # 创建gzip压缩包
tar -xzvf archive.tar.gz # 解压gzip包
tar -cjvf archive.tar.bz2 dir/ # bzip2压缩
tar -xjvf archive.tar.bz2 # 解压bzip2包# zip/unzip
zip -r archive.zip dir/
unzip archive.zip# 查看压缩包内容
tar -tzvf archive.tar.gz
SRE场景应用:
- 备份配置文件:
tar -czvf configs_$(date +%F).tar.gz /etc/myapp/
- 日志归档:
tar -czvf logs_$(date +%F).tar.gz /var/log/myapp/
三、进程管理命令
1. 进程查看与控制
# 查看进程
ps aux | grep process_name # 查看特定进程
top # 动态查看进程资源使用
htop # 更友好的进程查看工具(需安装)# 终止进程
kill PID # 发送SIGTERM(15)
kill -9 PID # 强制终止(SIGKILL)
pkill process_name # 按名称终止进程
killall process_name # 同上# 后台运行
command & # 后台运行
nohup command & # 忽略挂断信号
jobs -l # 查看后台任务
fg %job_id # 将后台任务调回前台
bg %job_id # 让暂停的任务继续执行
DevOps实用技巧:
- 监控资源占用高的进程:
ps aux --sort=-%mem | head -n 10
- 查找僵尸进程:
ps aux | grep 'Z'
- 批量终止进程:
pkill -f "pattern"
2. 服务管理(Systemd)
# 查看服务状态
systemctl status service_name# 启动/停止/重启服务
systemctl start service_name
systemctl stop service_name
systemctl restart service_name# 设置开机启动
systemctl enable service_name
systemctl disable service_name# 查看服务日志
journalctl -u service_name
SRE关键操作:
- 服务健康检查:
systemctl is-active service_name
- 查看最近服务日志:
journalctl -u service_name -n 50 --no-pager
- 服务重启后验证:
systemctl show -p ActiveState service_name
四、网络管理命令
1. 网络连接与诊断
# 查看网络接口
ip addr show
ifconfig # 较旧系统# 测试网络连通性
ping host
ping -c 4 host # 发送4个包后停止# 端口测试
telnet host port
nc -zv host port # netcat更现代的替代方案# 路由信息
ip route show
route -n# DNS查询
nslookup domain
dig domain
DevOps实用技巧:
- 检查本地端口占用:
netstat -tulnp | grep :80
- 查看连接状态统计:
ss -s
- 跟踪路由路径:
traceroute host
2. 网络性能监控
# 实时网络流量
iftop -i eth0 # 需安装
nload # 另一种流量监控工具# 带宽测试
iperf -s # 服务端
iperf -c server_ip # 客户端测试# 抓包分析
tcpdump -i eth0 port 80 -w capture.pcap
wireshark capture.pcap # 图形化分析(需安装)
SRE关键操作:
- 监控异常流量:
iftop -P -n -B -i eth0
- 分析HTTP流量:
tcpdump -i any -A 'port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
- 测试SSL证书:
openssl s_client -connect host:443
五、权限与安全命令
1. 文件权限管理
# 查看权限
ls -l file.txt# 修改权限
chmod 755 file.txt # rwxr-xr-x
chmod u+x script.sh # 给所有者添加执行权限
chmod g-w file.txt # 移除组写权限# 修改所有者
chown user:group file.txt
SRE安全实践:
- 关键文件权限设置:
chmod 600 /etc/shadow
- 敏感目录权限:
chmod 750 /etc/myapp/config
- 定期检查权限:
find /path -type f ! -perm 644
2. 用户与组管理
# 用户管理
useradd -m username # 创建用户并创建家目录
passwd username # 修改密码
usermod -aG group user # 添加用户到组
userdel -r username # 删除用户及家目录# 组管理
groupadd groupname
groupdel groupname
DevOps实用技巧:
- 创建专用服务账户:
useradd -r -s /sbin/nologin service_user
- 限制sudo权限:
visudo
添加特定命令权限 - 审计用户历史:
last
,lastlog
,who
六、日志查看与分析
1. 系统日志
# 查看系统日志
journalctl -xe
journalctl -u service_name# 查看传统日志
tail -f /var/log/syslog # Debian/Ubuntu
tail -f /var/log/messages # RHEL/CentOS# 按时间筛选日志
journalctl --since "2023-01-01" --until "2023-01-02"
SRE日志分析技巧:
- 实时监控错误日志:
journalctl -u service_name | grep -i error
- 统计错误频率:
journalctl -u service_name | grep -i error | wc -l
- 日志轮转配置:检查
/etc/logrotate.d/
2. 应用日志
# 查看应用日志
tail -f /var/log/myapp/app.log# 按级别过滤
grep -E "ERROR|WARN" app.log# 日志分析示例
awk '/ERROR/ {count++; print $0} END {print "Total errors:", count}' app.log
DevOps实用命令:
- 日志分割:
split -l 1000 large.log chunk_
- 日志压缩归档:
gzip app.log.1
- 日志清理:
find /var/log -name "*.log" -mtime +7 -exec rm {} \;
七、系统监控与诊断
1. 系统资源监控
# CPU信息
top
htop
mpstat -P ALL 1 # 多核CPU统计# 内存信息
free -h
vmstat 1# 磁盘使用
df -h
du -sh /path/*
SRE监控命令:
- 监控磁盘IO:
iostat -x 1
- 监控网络IO:
sar -n DEV 1
- 综合监控:
dstat
2. 进程诊断
# 查看进程资源使用
ps aux --sort=-%mem | head
ps aux --sort=-%cpu | head# 查看进程打开的文件
lsof -p PID# 查看进程加载的库
ldd /path/to/binary
DevOps实用技巧:
- 查找内存泄漏进程:
ps -eo pid,rss,comm --sort=-rss | head
- 检查僵尸进程:
ps aux | awk '$8=="Z" {print $0}'
- 查看进程启动时间:
ps -eo pid,lstart,cmd | grep process_name
八、脚本与自动化
1. Shell脚本基础
#!/bin/bash# 变量
name="World"
echo "Hello, $name!"# 条件判断
if [ "$1" == "start" ]; thenecho "Starting service..."
elif [ "$1" == "stop" ]; thenecho "Stopping service..."
elseecho "Usage: $0 {start|stop}"
fi# 循环
for i in {1..5}; doecho "Iteration $i"
done# 函数
function backup() {tar -czvf "$1_$(date +%F).tar.gz" "$1"
}
SRE脚本实践:
- 配置备份脚本:
backup_config.sh
- 日志轮转脚本:
rotate_logs.sh
- 服务健康检查:
check_service.sh
2. 自动化工具集成
# 使用cron定时任务
crontab -e
# 示例:每天凌晨2点执行备份
0 2 * * * /path/to/backup.sh# 使用Ansible批量管理
ansible all -m ping
ansible webservers -a "service nginx restart"# 使用Fabric远程执行
fab -H user@host run_command
DevOps自动化建议:
- 将常用命令封装为脚本
- 使用版本控制管理脚本
- 添加日志记录和错误处理
九、安全加固与审计
1. 安全检查命令
# 检查开放端口
netstat -tulnp
ss -tulnp# 检查SUID程序(潜在风险)
find / -perm -4000 2>/dev/null# 检查系统账户
awk -F: '($3 < 1000) {print $1, $3, $6}' /etc/passwd# 检查SSH配置
grep -E "PermitRootLogin|PasswordAuthentication" /etc/ssh/sshd_config
SRE安全实践:
- 定期审计特权账户
- 检查异常SUID程序
- 验证SSH安全配置
- 监控
/tmp
和/var/tmp
目录
2. 日志审计
# 查看登录历史
last
lastb # 失败登录
lastlog# 查看sudo使用记录
grep sudo /var/log/auth.log# 监控实时登录
watch -n 1 'who'
DevOps安全建议:
- 设置日志轮转策略
- 监控异常登录尝试
- 记录关键操作
- 定期审查日志
十、DevOps与SRE工作流中的Linux命令应用
1. 部署流程示例
# 1. 拉取最新代码
git pull origin main# 2. 构建应用
./build.sh# 3. 运行测试
./run_tests.sh# 4. 备份当前版本
cp -r /opt/app /opt/app_$(date +%F_%H%M)# 5. 部署新版本
rsync -avz ./dist/ user@server:/opt/app/# 6. 重启服务
ssh user@server "sudo systemctl restart app_service"# 7. 验证部署
ssh user@server "curl -I http://localhost:8080/health"
2. 故障排查流程
# 1. 检查服务状态
systemctl status app_service# 2. 查看最近日志
journalctl -u app_service -n 100 --no-pager | tail# 3. 检查资源使用
top
df -h
free -m# 4. 检查网络连接
ss -tulnp | grep app_port
netstat -anp | grep LISTEN# 5. 检查进程
ps aux | grep app_name# 6. 检查配置
cat /etc/app/config.yaml# 7. 测试功能
curl -v http://localhost:8080/api/test
总结
作为DevOps和SRE工程师,熟练掌握Linux命令是高效工作的基础。建议:
- 建立自己的命令速查表:将常用命令整理成文档或笔记
- 编写常用脚本:将重复任务自动化
- 理解命令原理:不只是记住命令,更要理解其工作原理
- 安全意识:始终考虑命令的安全影响
- 持续学习:Linux生态不断发展,保持学习新工具和技巧
通过系统学习和实践这些命令,您将能够更高效地完成DevOps和SRE工作,提升系统可靠性和运维效率。