HiHuo
首页
博客
手册
工具
关于
首页
博客
手册
工具
关于
  • Linux 系统工具完全指南

    • Linux 系统工具完全指南
    • 高频工具 - 每天使用
    • 中频工具 - 每周使用
    • 低频但重要的工具
    • 开发环境工具
    • 故障排查与诊断

开发环境工具

后端开发者在 Linux 环境下进行开发必备的工具


一、版本控制

1.1 Git 基础

Git 是最流行的分布式版本控制系统:

# 安装
sudo apt install git

# 配置
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
git config --global core.editor vim
git config --global init.defaultBranch main

# 查看配置
git config --list
git config user.name

基本操作

# 初始化仓库
git init
git clone https://github.com/user/repo.git
git clone git@github.com:user/repo.git

# 查看状态
git status
git status -s                    # 简短格式

# 添加文件
git add file.txt
git add .                        # 添加所有
git add -p                       # 交互式添加

# 提交
git commit -m "message"
git commit -am "message"         # 添加并提交
git commit --amend               # 修改上次提交

# 查看历史
git log
git log --oneline
git log --oneline --graph --all
git log -p                       # 显示差异
git log --stat                   # 显示统计
git log -n 5                     # 最近5条
git log --author="name"
git log --since="2025-01-01"

# 查看差异
git diff                         # 工作区 vs 暂存区
git diff --staged                # 暂存区 vs 最新提交
git diff HEAD                    # 工作区 vs 最新提交
git diff branch1..branch2

分支管理

# 查看分支
git branch                       # 本地分支
git branch -r                    # 远程分支
git branch -a                    # 所有分支

# 创建分支
git branch feature-x
git checkout -b feature-x        # 创建并切换
git switch -c feature-x          # 新语法

# 切换分支
git checkout main
git switch main                  # 新语法

# 合并分支
git merge feature-x
git merge --no-ff feature-x      # 禁用快进合并
git merge --squash feature-x     # 压缩合并

# 变基
git rebase main
git rebase -i HEAD~3             # 交互式变基

# 删除分支
git branch -d feature-x          # 已合并的分支
git branch -D feature-x          # 强制删除
git push origin --delete feature-x  # 删除远程分支

远程操作

# 查看远程
git remote -v
git remote show origin

# 添加远程
git remote add origin git@github.com:user/repo.git

# 拉取
git fetch                        # 获取但不合并
git pull                         # 获取并合并
git pull --rebase                # 变基方式拉取

# 推送
git push
git push origin main
git push -u origin main          # 设置上游分支
git push --force                 # 强制推送(危险)
git push --force-with-lease      # 安全的强制推送

# 标签
git tag v1.0.0
git tag -a v1.0.0 -m "Release 1.0.0"
git push origin v1.0.0
git push origin --tags

撤销与回退

# 撤销工作区修改
git checkout -- file.txt
git restore file.txt             # 新语法

# 撤销暂存
git reset HEAD file.txt
git restore --staged file.txt    # 新语法

# 回退提交
git reset --soft HEAD~1          # 保留修改在暂存区
git reset --mixed HEAD~1         # 保留修改在工作区
git reset --hard HEAD~1          # 完全回退(危险)

# 创建撤销提交
git revert HEAD                  # 撤销最近一次
git revert abc1234               # 撤销特定提交

# 找回丢失的提交
git reflog
git reset --hard HEAD@{2}

储藏

git stash                        # 储藏当前修改
git stash save "message"
git stash list
git stash pop                    # 恢复并删除
git stash apply                  # 恢复但不删除
git stash drop                   # 删除储藏
git stash clear                  # 清空所有储藏

子模块

# 添加子模块
git submodule add https://github.com/user/repo.git path/to/submodule

# 初始化子模块(克隆后)
git submodule init
git submodule update

# 一步完成
git submodule update --init --recursive

# 更新子模块
git submodule update --remote

Git Hooks

Git hooks 位于 .git/hooks/ 目录:

# pre-commit 示例
#!/bin/sh
# .git/hooks/pre-commit

# 运行测试
npm test
if [ $? -ne 0 ]; then
    echo "Tests failed, commit aborted"
    exit 1
fi

# 代码格式检查
npm run lint
if [ $? -ne 0 ]; then
    echo "Lint failed, commit aborted"
    exit 1
fi

.gitignore

# 依赖目录
node_modules/
vendor/
venv/
__pycache__/

# 构建输出
dist/
build/
*.pyc
*.class

# 环境文件
.env
.env.local
*.local

# IDE
.idea/
.vscode/
*.swp

# 系统文件
.DS_Store
Thumbs.db

# 日志
*.log
logs/

二、命令行编辑器

2.1 Vim

Vim 是最强大的命令行编辑器:

# 安装
sudo apt install vim

# 启动
vim file.txt
vim +10 file.txt                 # 打开并跳到第10行
vim +/pattern file.txt           # 打开并搜索

模式

  • 普通模式(Normal):按 Esc 进入,用于移动和命令
  • 插入模式(Insert):按 i 进入,用于输入文本
  • 可视模式(Visual):按 v 进入,用于选择文本
  • 命令模式(Command):按 : 进入,用于执行命令

基本操作

# 移动
h j k l     - 左下上右
w b         - 下/上一个词
0 $         - 行首/行尾
gg G        - 文件首/尾
:n          - 跳到第n行
Ctrl+f/b    - 翻页

# 插入
i           - 光标前插入
a           - 光标后插入
I           - 行首插入
A           - 行尾插入
o           - 下方新行
O           - 上方新行

# 删除
x           - 删除字符
dd          - 删除行
dw          - 删除词
d$          - 删除到行尾
D           - 删除到行尾

# 复制粘贴
yy          - 复制行
yw          - 复制词
p           - 粘贴到后面
P           - 粘贴到前面

# 撤销重做
u           - 撤销
Ctrl+r      - 重做

# 搜索替换
/pattern    - 向下搜索
?pattern    - 向上搜索
n/N         - 下/上一个结果
:%s/old/new/g   - 全局替换
:%s/old/new/gc  - 确认替换

# 保存退出
:w          - 保存
:q          - 退出
:wq         - 保存退出
:q!         - 强制退出
ZZ          - 保存退出

配置 (~/.vimrc)

" 基础设置
set nocompatible
set encoding=utf-8
syntax on
filetype plugin indent on

" 显示设置
set number                  " 行号
set relativenumber          " 相对行号
set cursorline              " 高亮当前行
set showmatch               " 匹配括号
set wrap                    " 自动换行

" 缩进设置
set tabstop=4               " Tab 宽度
set shiftwidth=4            " 缩进宽度
set expandtab               " Tab 转空格
set autoindent              " 自动缩进
set smartindent             " 智能缩进

" 搜索设置
set hlsearch                " 高亮搜索
set incsearch               " 增量搜索
set ignorecase              " 忽略大小写
set smartcase               " 智能大小写

" 其他
set clipboard=unnamedplus   " 系统剪贴板
set mouse=a                 " 鼠标支持
set backspace=indent,eol,start

2.2 Nano

Nano 更简单易用:

nano file.txt

# 快捷键(^ 表示 Ctrl)
^O          - 保存
^X          - 退出
^K          - 剪切行
^U          - 粘贴
^W          - 搜索
^G          - 帮助

2.3 Emacs

sudo apt install emacs

emacs file.txt

# 基本快捷键
C-x C-s     - 保存
C-x C-c     - 退出
C-g         - 取消
C-s         - 搜索
C-/         - 撤销

三、构建工具

3.1 Make

Make 是经典的构建工具:

# Makefile
CC = gcc
CFLAGS = -Wall -O2
TARGET = myapp
SRCS = main.c utils.c
OBJS = $(SRCS:.c=.o)

all: $(TARGET)

$(TARGET): $(OBJS)
	$(CC) $(CFLAGS) -o $@ $^

%.o: %.c
	$(CC) $(CFLAGS) -c $< -o $@

clean:
	rm -f $(OBJS) $(TARGET)

.PHONY: all clean
make                             # 构建
make clean                       # 清理
make -j4                         # 并行构建
make -n                          # 干运行

3.2 CMake

CMake 是跨平台构建系统:

# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(MyApp VERSION 1.0)

set(CMAKE_CXX_STANDARD 17)

add_executable(myapp main.cpp utils.cpp)
mkdir build && cd build
cmake ..
make

3.3 GCC/G++

# 编译 C
gcc -o program main.c
gcc -Wall -O2 -o program main.c  # 带警告和优化

# 编译 C++
g++ -o program main.cpp
g++ -std=c++17 -o program main.cpp

# 只编译不链接
gcc -c main.c                    # 生成 main.o

# 链接库
gcc -o program main.c -lm        # 链接数学库
gcc -o program main.c -L/path -lmylib

# 调试信息
gcc -g -o program main.c         # 用于 gdb

四、数据库客户端

4.1 MySQL 客户端

# 安装
sudo apt install mysql-client

# 连接
mysql -u root -p
mysql -u user -p -h hostname
mysql -u user -p database_name

# 常用选项
mysql -e "SELECT * FROM table"   # 执行语句
mysql < script.sql               # 执行脚本
mysql -t                         # 表格输出
mysql -N                         # 不显示列名
mysql --skip-column-names

MySQL 命令行

-- 数据库操作
SHOW DATABASES;
CREATE DATABASE mydb;
USE mydb;
DROP DATABASE mydb;

-- 表操作
SHOW TABLES;
DESCRIBE table_name;
SHOW CREATE TABLE table_name;

-- 用户管理
CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON mydb.* TO 'user'@'localhost';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'user'@'localhost';

-- 导入导出
SOURCE /path/to/script.sql;

mysqldump 备份

# 导出
mysqldump -u root -p database > backup.sql
mysqldump -u root -p --all-databases > all.sql
mysqldump -u root -p database table1 table2 > tables.sql

# 压缩导出
mysqldump -u root -p database | gzip > backup.sql.gz

# 只导出结构
mysqldump -u root -p --no-data database > schema.sql

# 只导出数据
mysqldump -u root -p --no-create-info database > data.sql

# 导入
mysql -u root -p database < backup.sql
gunzip < backup.sql.gz | mysql -u root -p database

4.2 PostgreSQL 客户端

# 安装
sudo apt install postgresql-client

# 连接
psql -U postgres
psql -U user -h hostname -d database

# 常用选项
psql -c "SELECT * FROM table"    # 执行语句
psql -f script.sql               # 执行脚本

psql 命令

-- 元命令
\l              -- 列出数据库
\c database     -- 切换数据库
\dt             -- 列出表
\d table        -- 表结构
\du             -- 列出用户
\q              -- 退出
\?              -- 帮助
\timing         -- 显示执行时间
\x              -- 扩展显示

pg_dump 备份

# 导出
pg_dump -U postgres database > backup.sql
pg_dump -U postgres -Fc database > backup.dump  # 自定义格式

# 导入
psql -U postgres database < backup.sql
pg_restore -U postgres -d database backup.dump

4.3 Redis 客户端

# 安装
sudo apt install redis-tools

# 连接
redis-cli
redis-cli -h hostname -p 6379
redis-cli -a password

# 常用命令
redis-cli ping
redis-cli info
redis-cli monitor                # 实时监控

redis-cli 命令

# 字符串
SET key value
GET key
DEL key
EXPIRE key 3600
TTL key

# 列表
LPUSH list value
RPUSH list value
LRANGE list 0 -1
LPOP list

# 哈希
HSET hash field value
HGET hash field
HGETALL hash

# 集合
SADD set member
SMEMBERS set

# 有序集合
ZADD zset score member
ZRANGE zset 0 -1

# 管理
KEYS pattern
DBSIZE
FLUSHDB
FLUSHALL
INFO

4.4 MongoDB 客户端

# 安装
sudo apt install mongodb-clients
# 或 mongosh(新客户端)
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
sudo apt install mongodb-mongosh

# 连接
mongosh
mongosh "mongodb://localhost:27017"
mongosh "mongodb://user:password@host:27017/database"

mongosh 命令

// 数据库
show dbs
use mydb
db.dropDatabase()

// 集合
show collections
db.createCollection("users")
db.users.drop()

// CRUD
db.users.insertOne({name: "John", age: 30})
db.users.find()
db.users.find({age: {$gt: 25}})
db.users.updateOne({name: "John"}, {$set: {age: 31}})
db.users.deleteOne({name: "John"})

// 索引
db.users.createIndex({name: 1})
db.users.getIndexes()

五、语言版本管理

5.1 nvm - Node.js 版本管理

# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash
source ~/.bashrc

# 使用
nvm list-remote                  # 可用版本
nvm install 18                   # 安装 Node 18
nvm install --lts                # 安装 LTS 版本
nvm use 18                       # 使用版本
nvm alias default 18             # 设置默认版本
nvm list                         # 已安装版本
nvm current                      # 当前版本
nvm uninstall 16                 # 卸载版本

5.2 pyenv - Python 版本管理

# 安装
curl https://pyenv.run | bash

# 添加到 ~/.bashrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

# 使用
pyenv install --list             # 可用版本
pyenv install 3.11.0             # 安装
pyenv versions                   # 已安装版本
pyenv global 3.11.0              # 全局版本
pyenv local 3.11.0               # 目录版本
pyenv shell 3.11.0               # 临时版本

5.3 gvm - Go 版本管理

# 安装
bash < <(curl -s -S -L https://raw.githubusercontent.com/moovweb/gvm/master/binscripts/gvm-installer)
source ~/.gvm/scripts/gvm

# 使用
gvm listall                      # 可用版本
gvm install go1.21               # 安装
gvm list                         # 已安装版本
gvm use go1.21                   # 使用版本
gvm use go1.21 --default         # 设置默认

5.4 sdkman - JVM 语言管理

# 安装
curl -s "https://get.sdkman.io" | bash
source ~/.sdkman/bin/sdkman-init.sh

# Java
sdk list java                    # 可用版本
sdk install java 17.0.5-tem      # 安装
sdk use java 17.0.5-tem          # 使用
sdk default java 17.0.5-tem      # 默认版本

# 其他工具
sdk install gradle
sdk install maven
sdk install kotlin

5.5 rbenv - Ruby 版本管理

# 安装
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

# 添加到 ~/.bashrc
export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

# 使用
rbenv install -l                 # 可用版本
rbenv install 3.2.0              # 安装
rbenv versions                   # 已安装版本
rbenv global 3.2.0               # 全局版本
rbenv local 3.2.0                # 目录版本

六、包管理器

6.1 npm (Node.js)

# 初始化项目
npm init
npm init -y                      # 快速初始化

# 安装依赖
npm install                      # 安装 package.json 依赖
npm install package              # 安装包
npm install package@version      # 指定版本
npm install -D package           # 开发依赖
npm install -g package           # 全局安装

# 更新
npm update                       # 更新所有
npm update package               # 更新特定包

# 卸载
npm uninstall package
npm uninstall -g package

# 查看
npm list                         # 本地依赖
npm list -g                      # 全局依赖
npm outdated                     # 过期的包

# 运行脚本
npm run build
npm start
npm test

# 发布
npm login
npm publish

6.2 pip (Python)

# 安装
pip install package
pip install package==version
pip install -r requirements.txt

# 卸载
pip uninstall package

# 查看
pip list
pip show package
pip freeze                       # 导出依赖

# 导出依赖
pip freeze > requirements.txt

# 虚拟环境
python -m venv venv
source venv/bin/activate
deactivate

# 镜像
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple package

6.3 go mod (Go)

# 初始化
go mod init module-name

# 添加依赖
go get package
go get package@version

# 整理依赖
go mod tidy

# 下载依赖
go mod download

# 查看依赖
go list -m all

6.4 Cargo (Rust)

# 创建项目
cargo new project-name
cargo new --lib library-name

# 构建运行
cargo build
cargo build --release
cargo run

# 测试
cargo test

# 添加依赖
# 编辑 Cargo.toml 或
cargo add package

# 更新依赖
cargo update

七、终端增强

7.1 zsh + Oh My Zsh

# 安装 zsh
sudo apt install zsh
chsh -s $(which zsh)

# 安装 Oh My Zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

# 配置主题 (~/.zshrc)
ZSH_THEME="robbyrussell"

# 插件
plugins=(
    git
    docker
    kubectl
    zsh-autosuggestions
    zsh-syntax-highlighting
)

# 安装插件
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-syntax-highlighting ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting

7.2 fzf - 模糊搜索

# 安装
git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf
~/.fzf/install

# 使用
fzf                              # 文件搜索
Ctrl+R                           # 历史命令搜索
Ctrl+T                           # 文件选择
Alt+C                            # 目录切换

# 与其他命令组合
vim $(fzf)
cd $(find . -type d | fzf)

7.3 bat - 增强版 cat

# 安装
sudo apt install bat

# Ubuntu 上可能叫 batcat
alias bat='batcat'

# 使用
bat file.py                      # 带语法高亮
bat -n file.py                   # 显示行号
bat -A file.py                   # 显示特殊字符

7.4 exa/eza - 增强版 ls

# 安装
sudo apt install exa
# 或
cargo install eza

# 使用
exa                              # 彩色输出
exa -l                           # 详细信息
exa -la                          # 包含隐藏
exa --tree                       # 树状显示
exa --icons                      # 显示图标

7.5 ripgrep (rg) - 增强版 grep

# 安装
sudo apt install ripgrep

# 使用
rg pattern                       # 搜索
rg pattern -i                    # 忽略大小写
rg pattern -t py                 # 指定文件类型
rg pattern -g '*.py'             # glob 模式
rg pattern -C 3                  # 上下文
rg pattern --hidden              # 包含隐藏文件

7.6 fd - 增强版 find

# 安装
sudo apt install fd-find
# Ubuntu 上可能叫 fdfind
alias fd='fdfind'

# 使用
fd pattern                       # 搜索文件名
fd -t f pattern                  # 只搜索文件
fd -t d pattern                  # 只搜索目录
fd -e py                         # 指定扩展名
fd -H pattern                    # 包含隐藏

八、HTTP 客户端

8.1 HTTPie

# 安装
sudo apt install httpie

# GET 请求
http GET https://api.example.com

# POST 请求
http POST https://api.example.com name=value
http POST https://api.example.com < data.json

# Headers
http GET https://api.example.com Authorization:"Bearer token"

# 表单
http --form POST https://api.example.com name=value file@photo.jpg

# 下载
http --download https://example.com/file.zip

8.2 httpbin 测试

# 测试各种 HTTP 功能
http https://httpbin.org/get
http POST https://httpbin.org/post name=test
http https://httpbin.org/headers
http https://httpbin.org/status/404

总结

本章介绍了后端开发者在 Linux 环境下常用的开发工具:

  1. Git:版本控制是开发的基础
  2. Vim:命令行编辑器,服务器上必备
  3. 构建工具:Make、CMake、GCC 等
  4. 数据库客户端:MySQL、PostgreSQL、Redis、MongoDB
  5. 版本管理:nvm、pyenv、sdkman 管理多版本
  6. 终端增强:zsh、fzf、ripgrep 等提高效率

建议:

  • Git 必须精通
  • Vim 基本操作必须会
  • 至少熟悉一种数据库客户端
  • 用 nvm/pyenv 等管理语言版本
  • 终端增强工具能大幅提升效率

下一章将介绍故障排查与诊断工具。

Prev
低频但重要的工具
Next
故障排查与诊断