Linux教程 / 第 170 节
第17章:日常开发工作流
整合所学知识,打造高效的日常开发工作流
本章目标
- 掌握高效的日常开发命令组合
- 学会使用tmux提升多任务效率
- 能够快速排查和解决常见问题
- 建立完整的开发到部署工作流
- 形成良好的命令行使用习惯
17.1 高效终端环境
17.1.1 配置强大的Bash环境
# 编辑 ~/.bashrc
nano ~/.bashrc
添加实用配置:
# ========== 提示符美化 ==========
# 彩色提示符,显示Git分支
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
export PS1="\[\e[32m\]\u@\h\[\e[m\]:\[\e[34m\]\w\[\e[m\]\[\e[33m\]\$(parse_git_branch)\[\e[m\]$ "
# ========== 历史记录优化 ==========
export HISTSIZE=10000
export HISTFILESIZE=20000
export HISTCONTROL=ignoredups:erasedups # 忽略重复命令
shopt -s histappend # 追加而非覆盖历史
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
# ========== 常用别名 ==========
# 导航
alias ..='cd ..'
alias ...='cd ../..'
alias ....='cd ../../..'
alias ~='cd ~'
alias -- -='cd -'
# ls增强
alias ll='ls -lah --color=auto'
alias la='ls -A'
alias l='ls -CF'
alias lt='ls -lhtr' # 按时间排序
# Git快捷方式
alias gs='git status'
alias ga='git add'
alias gc='git commit'
alias gp='git pull'
alias gps='git push'
alias gl='git log --oneline --graph --decorate --all'
alias gd='git diff'
alias gb='git branch'
alias gco='git checkout'
# Docker快捷方式
alias d='docker'
alias dc='docker-compose'
alias dps='docker ps'
alias dpa='docker ps -a'
alias di='docker images'
alias dex='docker exec -it'
alias dlogs='docker logs -f'
# 系统管理
alias update='sudo apt update && sudo apt upgrade -y'
alias install='sudo apt install'
alias remove='sudo apt remove'
alias search='apt search'
# 网络
alias myip='curl ifconfig.me'
alias ports='sudo netstat -tulpn'
alias listening='sudo lsof -iTCP -sTCP:LISTEN -n -P'
# 进程管理
alias psg='ps aux | grep -v grep | grep -i -e VSZ -e'
alias topcpu='ps aux --sort=-%cpu | head -10'
alias topmem='ps aux --sort=-%mem | head -10'
# 安全别名(防止误操作)
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# 快速编辑
alias bashrc='vim ~/.bashrc && source ~/.bashrc'
alias vimrc='vim ~/.vimrc'
alias hosts='sudo vim /etc/hosts'
# 快速服务管理
alias nginx-reload='sudo systemctl reload nginx'
alias nginx-restart='sudo systemctl restart nginx'
alias nginx-test='sudo nginx -t'
# ========== 实用函数 ==========
# 创建目录并进入
mkcd() {
mkdir -p "$1" && cd "$1"
}
# 解压任何格式
extract() {
if [ -f $1 ]; then
case $1 in
*.tar.bz2) tar xjf $1 ;;
*.tar.gz) tar xzf $1 ;;
*.bz2) bunzip2 $1 ;;
*.rar) unrar e $1 ;;
*.gz) gunzip $1 ;;
*.tar) tar xf $1 ;;
*.tbz2) tar xjf $1 ;;
*.tgz) tar xzf $1 ;;
*.zip) unzip $1 ;;
*.Z) uncompress $1 ;;
*.7z) 7z x $1 ;;
*) echo "'$1' cannot be extracted" ;;
esac
else
echo "'$1' is not a valid file"
fi
}
# 快速查找文件
ff() {
find . -type f -name "*$1*"
}
# 快速查找目录
fd() {
find . -type d -name "*$1*"
}
# 快速查找内容
fgrep() {
grep -r "$1" .
}
# 查看进程占用的端口
port() {
sudo lsof -i :$1
}
# 杀死占用端口的进程
killport() {
sudo kill -9 $(sudo lsof -t -i:$1)
}
# 快速备份文件
backup() {
cp "$1"{,.bak}
}
# Git快速提交
gitac() {
git add .
git commit -m "$1"
}
# Git快速推送
gitacp() {
git add .
git commit -m "$1"
git push
}
# 重新加载配置
source ~/.bashrc
17.1.2 使用tmux多窗口管理
安装tmux:
sudo apt install tmux
基本使用:
# 启动tmux
tmux
# 创建命名会话
tmux new -s dev
# 列出会话
tmux ls
# 附加到会话
tmux attach -t dev
# 分离会话(在tmux中)
Ctrl+b d
# 杀死会话
tmux kill-session -t dev
常用快捷键 (前缀键 Ctrl+b):
# 窗格管理
Ctrl+b % 水平分割
Ctrl+b " 垂直分割
Ctrl+b 方向键 切换窗格
Ctrl+b x 关闭当前窗格
Ctrl+b z 最大化/恢复窗格
# 窗口管理
Ctrl+b c 创建新窗口
Ctrl+b n 下一个窗口
Ctrl+b p 上一个窗口
Ctrl+b 数字 切换到指定窗口
Ctrl+b , 重命名窗口
# 会话管理
Ctrl+b d 分离会话
Ctrl+b s 列出会话
Ctrl+b $ 重命名会话
tmux配置 (~/.tmux.conf):
# 修改前缀键为Ctrl+a
unbind C-b
set -g prefix C-a
bind C-a send-prefix
# 启用鼠标
set -g mouse on
# 窗格分割快捷键
bind | split-window -h
bind - split-window -v
# 快速重载配置
bind r source-file ~/.tmux.conf \; display "Config reloaded!"
# 窗格切换(vim风格)
bind h select-pane -L
bind j select-pane -D
bind k select-pane -U
bind l select-pane -R
# 状态栏美化
set -g status-bg black
set -g status-fg white
set -g status-left '#[fg=green]#S '
set -g status-right '#[fg=yellow]%Y-%m-%d %H:%M'
# 窗口索引从1开始
set -g base-index 1
setw -g pane-base-index 1
# 历史记录行数
set -g history-limit 10000
17.2 典型开发场景
17.2.1 场景1:启动新项目
#!/bin/bash
# start-project.sh - 快速启动项目环境
PROJECT_NAME=$1
if [ -z "$PROJECT_NAME" ]; then
echo "Usage: $0 project-name"
exit 1
fi
echo "Starting project: $PROJECT_NAME"
# 创建项目目录
mkdir -p ~/projects/$PROJECT_NAME
cd ~/projects/$PROJECT_NAME
# 初始化Git
git init
echo "node_modules/" > .gitignore
echo ".env" >> .gitignore
echo "*.log" >> .gitignore
# 创建README
cat > README.md <<EOF
# $PROJECT_NAME
## Description
Project description here
## Setup
\`\`\`bash
npm install
\`\`\`
## Development
\`\`\`bash
npm run dev
\`\`\`
EOF
# 初始化Node.js项目(如果需要)
read -p "Initialize Node.js project? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
npm init -y
npm install --save-dev nodemon
fi
# 打开编辑器
code .
echo "Project $PROJECT_NAME created successfully!"
17.2.2 场景2:日常开发流程
# 早上开始工作
cd ~/projects/my-app
# 1. 拉取最新代码
git pull origin main
# 2. 创建功能分支
git checkout -b feature/new-feature
# 3. 启动开发服务器(使用tmux)
tmux new -s dev
# 窗格1: 运行开发服务器
npm run dev
# Ctrl+b % (创建新窗格)
# 窗格2: 运行测试监视
npm run test:watch
# Ctrl+b " (创建新窗格)
# 窗格3: Git操作和命令行
# 4. 开发过程中频繁操作
gs # 查看状态
ga . # 添加修改
gc -m "feat: xxx" # 提交
gp # 推送
# 5. 下班前
git push origin feature/new-feature
# 创建Pull Request
tmux detach # 分离会话,明天继续
17.2.3 场景3:快速问题排查
# 应用无法访问,快速诊断
# 1. 检查应用是否运行
pm2 status
# 或
ps aux | grep node
# 2. 检查端口是否监听
sudo lsof -i :3000
sudo netstat -tulpn | grep :3000
# 3. 检查日志
pm2 logs my-app --lines 50
tail -f /var/log/myapp/error.log
# 4. 检查Nginx
sudo nginx -t
sudo systemctl status nginx
sudo tail -f /var/log/nginx/error.log
# 5. 检查系统资源
free -h
df -h
top
# 6. 检查网络
ping google.com
curl http://localhost:3000
# 7. 重启服务(如果需要)
pm2 restart my-app
sudo systemctl restart nginx
17.2.4 场景4:代码审查和测试
# 审查Pull Request
# 1. 拉取PR分支
git fetch origin pull/123/head:pr-123
git checkout pr-123
# 2. 安装依赖
npm install
# 3. 运行测试
npm test
npm run lint
# 4. 本地运行
npm run dev
# 5. 代码审查
git diff main...pr-123
git log main..pr-123
# 6. 合并(如果通过)
git checkout main
git merge pr-123
git push origin main
# 7. 清理
git branch -d pr-123
17.2.5 场景5:生产环境部署
# 部署到生产环境
# 1. SSH到服务器
ssh deploy@production-server
# 2. 进入应用目录
cd /home/deploy/my-app
# 3. 备份当前版本
cp -r . ../backup-$(date +%Y%m%d_%H%M%S)
# 4. 拉取最新代码
git fetch origin
git checkout main
git pull origin main
# 5. 安装依赖
npm install --production
# 6. 运行数据库迁移
npm run migrate
# 7. 构建(如果需要)
npm run build
# 8. 运行测试
npm test
# 9. 平滑重启
pm2 reload my-app
# 10. 健康检查
sleep 5
curl http://localhost:3000/health
# 11. 查看日志
pm2 logs my-app --lines 20
# 12. 监控
pm2 monit
17.3 实用工具脚本
17.3.1 项目切换脚本
#!/bin/bash
# proj.sh - 快速切换项目
PROJECTS_DIR=~/projects
# 列出所有项目
projects=($(ls -d $PROJECTS_DIR/*/))
# 显示菜单
echo "Select a project:"
select project in "${projects[@]}"; do
if [ -n "$project" ]; then
cd "$project"
echo "Switched to: $project"
# 如果有tmux会话,附加;否则创建
session_name=$(basename "$project")
if tmux has-session -t "$session_name" 2>/dev/null; then
tmux attach -t "$session_name"
else
tmux new -s "$session_name"
fi
break
fi
done
17.3.2 日志查看脚本
#!/bin/bash
# logs.sh - 统一日志查看
case $1 in
app)
pm2 logs my-app --lines ${2:-50}
;;
nginx-access)
sudo tail -n ${2:-50} /var/log/nginx/access.log
;;
nginx-error)
sudo tail -n ${2:-50} /var/log/nginx/error.log
;;
system)
sudo journalctl -n ${2:-50}
;;
db)
sudo tail -n ${2:-50} /var/log/mysql/error.log
;;
*)
echo "Usage: $0 {app|nginx-access|nginx-error|system|db} [lines]"
exit 1
;;
esac
17.3.3 环境切换脚本
#!/bin/bash
# env-switch.sh - 切换开发环境
ENV=$1
case $ENV in
dev)
export NODE_ENV=development
export API_URL=http://localhost:3000
echo "Switched to DEVELOPMENT environment"
;;
staging)
export NODE_ENV=staging
export API_URL=https://staging.example.com
echo "Switched to STAGING environment"
;;
prod)
export NODE_ENV=production
export API_URL=https://api.example.com
echo "Switched to PRODUCTION environment"
;;
*)
echo "Usage: $0 {dev|staging|prod}"
exit 1
;;
esac
# 显示当前环境变量
echo "NODE_ENV: $NODE_ENV"
echo "API_URL: $API_URL"
17.3.4 快速清理脚本
#!/bin/bash
# cleanup.sh - 清理开发环境
echo "====== Cleanup Started ======"
# 清理npm缓存
echo "Cleaning npm cache..."
npm cache clean --force
# 清理node_modules
echo "Removing node_modules..."
find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
# 清理日志文件
echo "Cleaning log files..."
find . -name "*.log" -type f -delete
# 清理临时文件
echo "Cleaning temp files..."
rm -rf /tmp/*
# 清理Docker(可选)
read -p "Clean Docker? (y/n) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
docker system prune -af
fi
# 清理APT缓存
echo "Cleaning APT cache..."
sudo apt clean
sudo apt autoremove -y
echo "====== Cleanup Completed ======"
17.4 性能优化技巧
17.4.1 命令行性能优化
# 使用别名加速常用命令
alias g='git'
alias v='vim'
alias n='npm'
# 使用命令历史快速搜索
# Ctrl+R 反向搜索历史命令
# 使用!!重复上一条命令
sudo !! # 以sudo执行上一条命令
# 使用!$引用上一条命令的最后一个参数
mkdir /path/to/dir
cd !$ # 等同于 cd /path/to/dir
# 使用Ctrl+U清空当前行
# 使用Ctrl+A跳到行首
# 使用Ctrl+E跳到行尾
# 使用Ctrl+W删除前一个单词
17.4.2 Git工作流优化
# 配置Git别名
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.visual 'log --oneline --graph --decorate --all'
# 使用Git钩子自动化
# .git/hooks/pre-commit
#!/bin/bash
npm run lint
npm test
# 使用git stash临时保存修改
git stash
git checkout other-branch
# 做一些工作
git checkout original-branch
git stash pop
# 使用git worktree同时处理多个分支
git worktree add ../my-app-feature feature-branch
cd ../my-app-feature
# 在新目录中工作
17.5 团队协作最佳实践
17.5.1 代码提交规范
# 使用约定式提交(Conventional Commits)
# 格式: <type>(<scope>): <subject>
# 类型(type):
# feat: 新功能
# fix: 修复bug
# docs: 文档更新
# style: 代码格式(不影响代码运行)
# refactor: 重构
# test: 测试
# chore: 构建过程或辅助工具的变动
# 示例:
git commit -m "feat(auth): add login functionality"
git commit -m "fix(api): resolve CORS issue"
git commit -m "docs(readme): update installation steps"
git commit -m "refactor(utils): simplify date formatting"
17.5.2 分支管理策略
# Git Flow工作流
# 主分支
main # 生产环境代码
develop # 开发分支
# 辅助分支
feature/* # 功能分支
hotfix/* # 紧急修复
release/* # 发布分支
# 开发新功能
git checkout develop
git checkout -b feature/new-feature
# 开发...
git checkout develop
git merge feature/new-feature
git branch -d feature/new-feature
# 发布
git checkout develop
git checkout -b release/v1.0.0
# 测试、修复bug...
git checkout main
git merge release/v1.0.0
git tag v1.0.0
git checkout develop
git merge release/v1.0.0
git branch -d release/v1.0.0
# 紧急修复
git checkout main
git checkout -b hotfix/critical-bug
# 修复...
git checkout main
git merge hotfix/critical-bug
git tag v1.0.1
git checkout develop
git merge hotfix/critical-bug
git branch -d hotfix/critical-bug
17.6 故障排查清单
17.6.1 应用无法启动
# 1. 检查端口占用
sudo lsof -i :3000
sudo netstat -tulpn | grep :3000
# 2. 检查环境变量
printenv | grep NODE_ENV
cat .env
# 3. 检查依赖
npm list
npm outdated
# 4. 检查日志
npm run dev 2>&1 | tee debug.log
# 5. 检查权限
ls -la
whoami
# 6. 检查磁盘空间
df -h
# 7. 检查内存
free -h
17.6.2 性能问题排查
# 1. CPU使用率高
top
ps aux --sort=-%cpu | head -10
# 2. 内存使用率高
free -h
ps aux --sort=-%mem | head -10
# 3. 磁盘IO高
sudo iotop
df -h
# 4. 网络问题
ping google.com
traceroute google.com
netstat -s
# 5. 数据库慢查询
# MySQL
sudo tail -f /var/log/mysql/slow-query.log
# 6. 应用性能分析
# Node.js
node --prof app.js
node --prof-process isolate-*.log
17.7 每日工作清单
17.7.1 早上开始工作
# 1. 检查系统状态
uptime
df -h
free -h
# 2. 拉取最新代码
cd ~/projects/my-app
git pull origin main
# 3. 检查依赖更新
npm outdated
# 4. 启动开发环境
tmux attach -t dev || tmux new -s dev
# 5. 查看今天的任务
# 使用GitHub Issues或Jira
17.7.2 开发过程中
# 频繁提交
git add .
git commit -m "feat: implement feature X"
# 定期推送
git push origin feature-branch
# 运行测试
npm test
# 代码检查
npm run lint
17.7.3 下班前
# 1. 提交所有修改
git status
git add .
git commit -m "wip: work in progress"
git push
# 2. 记录明天的TODO
echo "- Complete feature X" >> TODO.md
echo "- Fix bug Y" >> TODO.md
# 3. 备份重要文件
./backup.sh
# 4. 分离tmux会话
tmux detach
# 5. 关闭不需要的服务
pm2 stop dev-server
本章总结
核心工作流
环境配置
- 优化Bash配置
- 配置实用别名
- 使用tmux管理会话
日常开发
- Git版本控制
- 代码提交规范
- 分支管理策略
问题排查
- 系统诊断
- 日志分析
- 性能优化
团队协作
- 代码审查
- 部署流程
- 文档维护
效率提升技巧
- ✅ 使用别名简化常用命令
- ✅ 使用tmux管理多个任务
- ✅ 编写自动化脚本
- ✅ 建立标准化工作流
- ✅ 定期备份和清理
- ✅ 持续学习新工具
最佳实践
- ✅ 频繁提交代码
- ✅ 编写清晰的提交信息
- ✅ 定期更新依赖
- ✅ 保持代码整洁
- ✅ 及时处理技术债务
- ✅ 记录重要决策
练习题:
- 配置你的Bash环境,添加至少10个实用别名
- 使用tmux创建一个开发会话,包含3个窗格
- 编写一个项目初始化脚本
- 建立你自己的日常工作流清单
💡 提示: 高效的工作流是长期积累的结果,不断优化和改进你的开发环境!
🎉 恭喜完成教程!
你已经掌握了Linux开发者的核心技能:
- ✅ 文件系统操作
- ✅ 权限和用户管理
- ✅ Git版本控制
- ✅ 网络和文件传输
- ✅ 环境配置
- ✅ Shell脚本编程
- ✅ Web项目部署
- ✅ 日常工作流
下一步建议:
- 在实际项目中应用所学知识
- 深入学习感兴趣的领域
- 参与开源项目
- 持续学习新技术
继续学习资源:
- Linux官方文档
- Git Pro书籍
- DevOps相关课程
- 云服务提供商文档
祝你在Linux开发之路上越走越远! 🚀