在服务器运维和日常开发工作中,Linux系统占据了绝对主导地位。根据2023年Stack Overflow开发者调查报告,超过65%的生产环境运行在Linux系统上。作为后端工程师,我们每天都需要通过命令行与服务器交互,处理日志、部署应用、排查问题。掌握高效的Linux命令不仅能提升工作效率,更是职业发展的必备技能。
我曾在一次线上事故排查中,仅用3条grep命令就定位到了被恶意刷新的API接口,而其他同事还在手动翻查日志文件。这种效率差异让我深刻体会到命令行工具的强大威力。下面我将分享后端开发中最实用的命令组合和使用技巧。
bash复制# 快速跳转常用目录(添加到~/.bashrc)
alias proj='cd /var/www/project'
alias logs='cd /var/log/nginx'
# 查看文件内容(根据场景选择)
less /path/to/file # 支持搜索和翻页的大文件查看
tail -f app.log # 实时监控日志更新
head -n 50 access.log # 查看文件前50行
经验:使用
less代替cat查看大文件,避免终端输出卡顿。按/键可进行内容搜索,q退出。
bash复制# 批量重命名(将.txt后缀改为.log)
rename 's/\.txt$/.log/' *.txt
# 查找并处理文件(找出7天前的日志并压缩)
find /var/log -name "*.log" -mtime +7 -exec gzip {} \;
# 快速统计代码行数
find src/ -name "*.java" | xargs wc -l
文件权限管理是常见痛点,这里有个实用案例:
bash复制# 递归修改目录权限(web目录典型设置)
chmod 755 -R /var/www/html
chown www-data:www-data -R /var/www/html
bash复制top -c # 带完整命令行的进程监控
htop # 更友好的交互式监控(需安装)
iotop -o # 显示实际磁盘I/O进程
关键指标解读:
bash复制ss -tulnp # 比netstat更快的连接查看
lsof -i :8080 # 查看占用8080端口的进程
tcpdump -i eth0 port 80 -w capture.pcap # 抓包分析
我曾用这个组合解决过端口冲突问题:
bash复制# 找出所有监听端口的Java进程
ss -tulnp | grep java
bash复制# 多条件搜索(显示匹配行及后2行)
grep -A 2 -E "ERROR|WARN" app.log
# 排除注释行查看配置
grep -v "^#" nginx.conf
# 递归搜索代码(忽略二进制文件)
grep -rn --include="*.java" "UserService" src/
统计Nginx日志中状态码分布:
bash复制awk '{print $9}' access.log | sort | uniq -c | sort -nr
提取耗时最长的10个请求:
bash复制awk '{print $NF,$7}' access.log | sort -nr | head -10
bash复制# 后台运行并记录PID
nohup java -jar app.jar > log.out 2>&1 & echo $! > pid.file
# 优雅停止Spring Boot应用
kill -TERM $(cat pid.file)
bash复制# 编辑当前用户的crontab
crontab -e
# 示例:每天凌晨压缩日志
0 0 * * * find /var/log/app -name "*.log" -mtime +1 -exec gzip {} \;
重要:crontab中的命令尽量使用绝对路径,环境变量与交互终端不同。
bash复制jq . config.json # JSON格式化查看
tree -L 2 # 目录结构可视化
curl -v http://api.example.com # API调试
watch -n 1 "ls -l" # 每秒刷新目录查看
bash复制ssh-keygen -t ed25519 # 生成更安全的密钥
scp -P 2222 file.txt user@remote:/path # 指定端口传输
rsync -avz --progress src/ user@remote:/dest # 增量同步
bash复制# 找出大文件(按大小排序)
du -ah / | sort -rh | head -20
# 查找被删除但仍占用的文件(重启进程释放)
lsof | grep deleted
bash复制# 监控进程内存增长
watch -n 1 "ps -eo pid,comm,%mem --sort=-%mem | head"
# 生成Java堆转储(需JDK)
jmap -dump:format=b,file=heap.hprof <pid>
在~/.bashrc中添加:
bash复制alias ll='ls -alhF'
alias grep='grep --color=auto'
alias df='df -h'
alias free='free -h'
bash复制# 显示时间戳
export HISTTIMEFORMAT="%F %T "
# 忽略重复命令
export HISTCONTROL=ignoredups
# 快速执行历史命令
!203 # 执行第203条历史命令
!ssh # 执行最近以ssh开头的命令
bash复制# 查看所有环境变量
printenv
# 临时添加PATH
export PATH=$PATH:/new/path
# 持久化到~/.profile
echo 'export JAVA_HOME=/usr/lib/jvm/java-11' >> ~/.profile
bash复制# Systemd服务操作
systemctl status nginx
journalctl -u nginx -f # 查看日志
统计每种HTTP方法的请求数:
bash复制awk '{print $6}' access.log | cut -d'"' -f2 | sort | uniq -c
监控最近500条日志中的异常:
bash复制tail -500 app.log | grep -A3 -B1 "Exception"
创建~/bin/clean_logs:
bash复制#!/bin/bash
LOG_DIR=${1:-/var/log/app}
find $LOG_DIR -name "*.log" -mtime +7 -exec rm {} \;
然后添加执行权限:
bash复制chmod +x ~/bin/clean_logs