1. Linux基础命令与文件操作实战指南
作为在Linux系统上工作了8年的老运维,我深知命令行操作是每个技术人员必须掌握的生存技能。今天我就把日常工作中最常用的Linux命令整理成一份实战手册,包含大量教科书上不会写的实用技巧。
1.1 文件查看与查找技巧
ls命令是Linux下最基础也最常用的命令之一,但很多人只停留在ls -l的层面。实际上,结合不同参数可以发挥更大威力:
bash复制ls -alh # 查看所有文件(含隐藏文件),以易读格式显示大小
ls -lS # 按文件大小排序
ls -lt # 按修改时间排序(最近修改的在前)
ls -d */ # 只显示目录
经验之谈:在目录文件特别多时(如超过1万个),使用
ls -f可以跳过排序直接显示,速度会快很多。
文件查找方面,find命令的强大远超大多数人想象:
bash复制# 查找7天内修改过的php文件
find /var/www -name "*.php" -mtime -7
# 查找大于10MB的文件
find / -type f -size +10M
# 查找空目录
find . -type d -empty
# 查找权限异常的php文件(777)
find . -name "*.php" -perm 777
1.2 文件内容处理三剑客
grep、awk、sed这三个工具构成了Linux文本处理的黄金组合。
grep进阶用法:
bash复制# 显示匹配行前后5行内容
grep -C 5 "error" log.txt
# 只显示匹配的文件名
grep -l "pattern" *.log
# 排除二进制文件
grep -I "text" *
# 使用正则表达式
grep -E "[0-9]{3}-[0-9]{4}" contacts.txt
awk实战案例:
bash复制# 统计nginx日志中每个IP的访问次数
awk '{print $1}' access.log | sort | uniq -c | sort -nr
# 计算文件第二列数值总和
awk '{sum+=$2} END{print sum}' data.txt
# 提取特定列并格式化输出
awk -F',' '{printf "%-20s %10d\n", $1, $3}' data.csv
避坑提示:awk默认以空格为分隔符,处理CSV文件时务必用
-F','指定逗号分隔。
1.3 权限管理深度解析
Linux权限系统远比表面看到的复杂。除了基本的rwx,还有几个特殊权限位需要了解:
- SUID(4):执行时以文件所有者身份运行
- SGID(2):目录中新文件继承组ID
- Sticky Bit(1):只有所有者能删除/重命名文件
设置方法:
bash复制chmod 4755 file # 设置SUID
chmod 2755 dir # 设置SGID
chmod 1777 /tmp # 设置Sticky Bit(如/tmp目录)
权限问题排查流程:
ls -l查看文件权限和所有者id确认当前用户身份和所属组getfacl查看ACL扩展权限(如果有)- 检查SELinux状态
sestatus
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 系统监控与进程管理实战
2.1 系统资源监控技巧
top命令是实时监控的首选,但有几个实用参数很多人不知道:
bash复制top -c # 显示完整命令
top -p 1234 # 只监控指定PID
top -u mysql # 只监控mysql用户的进程
更推荐使用htop,它支持:
- 鼠标操作
- 树状视图
- 直接杀死进程
- 按不同指标排序
安装方法:
bash复制# CentOS
yum install epel-release && yum install htop
# Ubuntu
apt install htop
内存监控要点:
- 关注
available而非free内存 - 缓存(cache)会被自动释放,不必过度担心
- 使用
free -h查看易读格式
2.2 进程管理高阶技巧
除了基本的ps和kill,还有这些实用技巧:
按资源使用排序进程:
bash复制ps aux --sort=-%mem | head # 内存使用TOP5
ps aux --sort=-%cpu | head # CPU使用TOP5
优雅终止进程:
bash复制kill -15 PID # 发送SIGTERM,允许进程清理
sleep 5 && kill -9 PID # 5秒后强制终止
查找进程关联文件:
bash复制lsof -p PID # 查看进程打开的文件
lsof -i :80 # 查看谁在使用80端口
实战经验:当磁盘空间不足时,用
lsof | grep deleted可以找到已被删除但仍被进程占用的文件,终止相关进程后即可释放空间。
2.3 系统日志分析实战
日志位置速查表:
| 日志类型 | 常见位置 |
|---|---|
| 系统日志 | /var/log/messages |
| 认证日志 | /var/log/secure |
| 启动日志 | /var/log/boot.log |
| 内核日志 | /var/log/kern.log |
| 定时任务 | /var/log/cron |
实时监控日志的技巧:
bash复制# 跟踪最新日志
tail -f /var/log/nginx/access.log
# 高亮显示错误
tail -f logfile | grep --color -E 'error|fail|warning'
# 分析日志中的高频IP
awk '{print $1}' access.log | sort | uniq -c | sort -nr | head
日志轮转配置:
bash复制# 查看logrotate配置
cat /etc/logrotate.d/nginx
# 手动执行轮转
logrotate -vf /etc/logrotate.d/nginx
3. 网络管理与文件传输
3.1 网络配置与诊断
IP地址管理:
bash复制# 现代Linux推荐使用ip命令
ip addr show # 查看IP地址
ip route show # 查看路由表
# 临时设置IP
ip addr add 192.168.1.100/24 dev eth0
# 网络连通性测试
ping -c 4 google.com
traceroute google.com
mtr google.com # 需要安装mtr
端口与服务检查:
bash复制ss -tulnp # 替代netstat查看监听端口
lsof -i :80 # 查看80端口使用情况
telnet host 22 # 测试端口连通性
3.2 文件传输方案对比
在Linux环境下传输文件有多种方式,各有优缺点:
SCP基础用法:
bash复制scp file.txt user@remote:/path # 上传
scp user@remote:/path/file.txt . # 下载
scp -P 2222 file.txt user@remote:/path # 指定端口
rsync高级用法:
bash复制# 增量同步目录
rsync -avz --delete /local/path/ user@remote:/remote/path/
# 限速传输(1000KB/s)
rsync -avz --bwlimit=1000 largefile user@remote:~
# 断点续传
rsync -avz --partial largefile user@remote:~
# 排除特定文件
rsync -avz --exclude='*.tmp' src/ dst/
性能优化:rsync默认使用ssh加密传输,在内网环境可以改用rsync协议(需配置rsyncd)获得更高速度。
传输方案选择矩阵:
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 小文件临时传输 | scp | 简单直接 |
| 大文件/目录同步 | rsync | 支持增量、断点续传 |
| 大量小文件传输 | tar+ssh | 避免单个文件开销 |
| 内网高速传输 | rsync(daemon模式) | 不加密速度更快 |
| Windows兼容 | sftp | 通用性好 |
4. 系统维护与故障排查
4.1 磁盘空间管理
快速定位大文件:
bash复制# 查找当前目录下大于100MB的文件
find . -type f -size +100M -exec ls -lh {} \;
# 查看目录大小排行
du -sh * | sort -h
清理系统垃圾的实用命令:
bash复制# 清理旧内核(Ubuntu)
apt autoremove --purge
# 清理yum缓存
yum clean all
# 清理日志(保留最近7天)
find /var/log -type f -mtime +7 -delete
inode耗尽问题:
bash复制df -i # 查看inode使用情况
find . -type f | wc -l # 统计文件数量
小文件过多会导致inode耗尽,即使磁盘空间充足也会报"no space left"错误。解决方案是合并小文件或清理无用文件。
4.2 性能瓶颈分析
系统负载检查清单:
uptime查看平均负载vmstat 1查看CPU、内存、IO状况iostat -xz 1查看磁盘IOsar -n DEV 1查看网络流量dmesg -T查看内核日志
常见性能问题与解决方案:
| 症状 | 可能原因 | 排查命令 | 解决方案 |
|---|---|---|---|
| CPU高负载 | 异常进程 | top/htop | 终止或限制进程 |
| 内存不足 | 内存泄漏 | free/vmstat | 优化应用或扩容 |
| IO延迟高 | 磁盘瓶颈 | iostat | 使用SSD或RAID |
| 网络丢包 | 带宽不足 | iftop/nload | 限流或扩容 |
4.3 开机启动与服务管理
systemctl常用命令:
bash复制systemctl list-units --type=service # 查看所有服务
systemctl status nginx # 查看服务状态
systemctl enable nginx # 设置开机启动
systemctl disable nginx # 禁止开机启动
systemctl restart nginx # 重启服务
journalctl -u nginx -f # 查看服务日志
排查启动问题的技巧:
bash复制# 查看启动耗时
systemd-analyze blame
# 查看启动日志
journalctl -b
# 进入救援模式
在GRUB菜单选择"recovery mode"
5. 安全加固与权限控制
5.1 用户与组管理
创建系统用户最佳实践:
bash复制useradd -r -s /sbin/nologin appuser # 创建无登录权限的系统用户
passwd -l appuser # 锁定用户密码
chage -E 2024-12-31 appuser # 设置账户过期时间
sudo权限精细控制:
bash复制# 允许用户执行特定命令无需密码
visudo
# 添加:
appuser ALL=(root) NOPASSWD: /usr/bin/systemctl restart nginx
5.2 SSH安全加固
sshd_config推荐配置:
bash复制Port 2222 # 修改默认端口
PermitRootLogin no # 禁止root登录
PasswordAuthentication no # 强制密钥认证
AllowUsers appuser # 只允许特定用户
MaxAuthTries 3 # 限制尝试次数
密钥管理技巧:
bash复制# 生成强密钥
ssh-keygen -t ed25519 -a 100
# 限制密钥使用
在~/.ssh/authorized_keys添加:
command="/bin/backup-script",no-agent-forwarding,no-port-forwarding,no-X11-forwarding ssh-ed25519 AAAAC3Nz...
5.3 SELinux实用指南
工作模式切换:
bash复制setenforce 0 # 临时切换到Permissive模式
setenforce 1 # 切换回Enforcing模式
常见问题处理:
bash复制# 查看SELinux拒绝日志
ausearch -m avc -ts recent
# 恢复文件安全上下文
restorecon -Rv /path
# 添加SELinux规则
audit2allow -a -M mypolicy
semodule -i mypolicy.pp
6. 实用脚本与自动化技巧
6.1 Shell脚本最佳实践
安全脚本编写原则:
- 开头添加
#!/bin/bash和set -euo pipefail - 所有变量用双引号包裹
"$var" - 使用
[[ ]]代替[ ]进行条件测试 - 重要操作前添加确认提示
实用脚本片段:
bash复制# 备份目录并保留最近7天
backup_dir="/backups"
find "$backup_dir" -type f -mtime +7 -delete
tar -czf "$backup_dir/backup-$(date +%F).tar.gz" /data
# 监控磁盘空间并报警
if [ $(df / --output=pcent | tail -1 | tr -d '%') -gt 90 ]; then
echo "磁盘空间不足!" | mail -s "警报" admin@example.com
fi
6.2 定时任务管理
crontab使用技巧:
bash复制# 编辑当前用户crontab
crontab -e
# 查看当前任务
crontab -l
# 示例:每天凌晨备份
0 2 * * * /usr/local/bin/backup.sh >/var/log/backup.log 2>&1
systemd定时器替代cron:
bash复制# /etc/systemd/system/backup.timer
[Unit]
Description=Daily backup
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
6.3 配置管理与版本控制
常用目录版本控制:
bash复制# 初始化版本控制
cd /etc
git init
git add .
git commit -m "Initial config"
# 后续变更提交
git add -A
git commit -m "Changed nginx config"
配置差异检查:
bash复制# 比较当前与上次提交的差异
git diff
# 查找最近修改的配置文件
find /etc -type f -mtime -1
掌握这些Linux核心技能后,你会发现日常运维工作变得游刃有余。记住,真正的熟练来自于持续实践和经验积累。建议在自己的测试环境中多尝试这些命令和技巧,遇到问题时善用man手册和--help参数。
