一、Linux 基础命令

1. 文件和目录操作

# 文件查看
ls -la             # 详细列表,包括隐藏文件
ls -lh             # 人性化显示文件大小
ls -t              # 按时间排序
ls -r              # 反向排序
find . -name "*.log" -type f  # 查找文件
find . -mtime -7   # 查找7天内修改的文件
locate filename     # 快速查找

# 目录操作
pwd                 # 当前目录
cd ~                # 回家目录
cd -                # 返回上一个目录
mkdir -p dir1/dir2  # 递归创建目录
rmdir               # 删除空目录
rm -rf directory    # 强制删除目录(谨慎!)
tree -L 3          # 树形展示目录结构

2. 文件内容操作

# 查看文件
cat file           # 显示整个文件
less file          # 分页查看(可搜索)
more file          # 分页查看
head -n 20 file    # 查看前20行
tail -n 20 file    # 查看后20行
tail -f file       # 实时跟踪文件变化

# 文件编辑
vim file           # Vim编辑器
nano file          # Nano编辑器
sed 's/old/new/g' file  # 文本替换
awk '{print $1}' file   # 提取第一列

# 文件统计
wc -l file         # 行数
wc -w file         # 单词数
wc -c file         # 字符数

3. 文件权限管理

# 权限表示
# 读r=4, 写w=2, 执行x=1
#
# u=user, g=group, o=other

chmod 755 file     # 三个数字,对应三种用户:rwxr-xr-x
chmod u+x file     # 给所有者添加执行权限
chmod g-w file     # 移除组的写权限
chmod a+r file     # 所有人可读

# 文件属性
chown user:group file  # 修改所有者
chown -R user:group dir  # 递归修改

4. 文本处理

# 搜索
grep "pattern" file     # 搜索文本
grep -r "pattern" dir   # 递归搜索
grep -i "pattern" file  # 忽略大小写
grep -v "pattern" file  # 反向匹配
grep -E "regex" file    # 正则表达式
grep -A 3 -B 3 "pattern" file  # 显示前后3行

# 排序和去重
sort file              # 排序
sort -u file           # 排序并去重
uniq file              # 去重相邻重复行
sort file | uniq       # 全局去重

5. 进程管理

# 进程查看
ps aux | grep java     # 查看Java进程
ps -ef | grep nginx    # 查看nginx进程
top                   # 实时进程监控
htop                  # 增强版top
pstree                # 树形展示进程
pgrep java            # 查找进程ID

# 进程控制
kill -9 PID           # 强制杀死进程
kill -15 PID          # 优雅终止进程
pkill process_name    # 按名称杀死进程
nohup command &       # 后台运行,终端关闭不退出
jobs                  # 查看后台作业
fg %1                 # 前台运行作业1
bg %1                 # 后台运行作业1

6. 网络相关

# 网络状态
netstat -tulnp       # 查看端口监听
netstat -anp         # 查看所有连接
ss -tlnp            # 查看端口(推荐)
lsof -i:8080        # 查看8080端口进程
lsof -i tcp:80      # 查看80端口的TCP连接

# 网络诊断
ping host           # ICMP测试
traceroute host     # 路由跟踪
mtr host           # 增强版traceroute
dig domain         # DNS查询
nslookup domain    # DNS查询
whois domain       # 域名信息

# 网络工具
curl -I http://example.com  # 获取HTTP头
wget http://example.com/file  # 下载文件
scp file user@host:/path   # 安全复制
ssh user@host              # SSH连接
ssh -i key.pem user@host   # 密钥连接

7. 系统监控

# 系统信息
uname -a            # 系统信息
cat /etc/os-release # 系统版本
df -h              # 磁盘使用情况
du -sh *           # 目录大小
free -h            # 内存使用
uptime             # 系统运行时间
who                # 当前登录用户
w                  # 系统负载和用户

# 性能监控
vmstat 1           # 虚拟内存统计
iostat 1           # IO统计
mpstat 1           # CPU统计
sar               # 系统活动报告
dmesg | tail -20   # 查看系统日志

8. 压缩和归档

# tar
tar -czvf archive.tar.gz dir/   # 压缩,c--create
tar -xzvf archive.tar.gz        # 解压,x--extract
tar -tzvf archive.tar.gz        # 查看

# zip
zip -r archive.zip dir/
unzip archive.zip

# gzip
gzip file
gunzip file.gz

二、Git 核心概念

1. Git 工作流程

工作区 (Working Directory)
    ↓
暂存区 (Staging Area)
    ↓
本地仓库 (Local Repository)
    ↓
远程仓库 (Remote Repository)

2. Git 配置

# 用户配置
git config --global user.name "Your Name"
git config --global user.email "email@example.com"
git config --global core.editor vim
git config --global color.ui auto

# 查看配置
git config --list
git config --global --list
git config --system --list

# 别名配置
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.unstage 'reset HEAD --'

# SSH密钥配置
ssh-keygen -t rsa -b 4096 -C "email@example.com"
cat ~/.ssh/id_rsa.pub
# 添加到GitHub/GitLab

3. 仓库操作

# 创建仓库
git init                  # 初始化本地仓库
git clone <url>          # 克隆远程仓库
git clone --depth=1 <url> # 浅克隆

# 远程仓库
git remote -v            # 查看远程仓库
git remote add origin <url>  # 添加远程仓库
git remote remove origin     # 移除远程仓库
git remote set-url origin <new-url>  # 修改远程地址

4. 基本操作

# 状态和日志
git status                # 查看状态
git status -s            # 简洁状态
git log                  # 提交日志
git log --oneline        # 简洁日志
git log --graph          # 图形化日志
git log --author="name"  # 按作者过滤
git log --since="2 weeks ago"  # 时间过滤
git log -p               # 显示修改内容
git log --grep="pattern"  # 搜索提交信息
git reflog               # 查看所有操作记录

# 文件操作
git add file             # 添加文件到暂存区
git add .                # 添加所有修改
git add -u               # 添加已跟踪文件的修改
git add -A               # 添加所有修改(包括删除)
git rm file              # 删除文件
git mv old new           # 重命名文件
git restore file         # 丢弃工作区修改(Git 2.23+)
git restore --staged file  # 从暂存区移除

5. 提交操作

# 提交
git commit -m "message"  # 提交
git commit -a -m "message"  # 跳过暂存区
git commit --amend       # 修改最近一次提交
git commit --amend -m "new message"  # 修改提交信息
git commit --amend --no-edit  # 修改提交内容

# 差异比较
git diff                 # 工作区与暂存区差异
git diff --cached        # 暂存区与仓库差异
git diff HEAD           # 工作区与仓库差异
git diff commit1 commit2  # 两次提交差异
git diff --stat         # 统计差异

6. 分支管理

# 分支操作
git branch              # 查看分支
git branch -a           # 查看所有分支(包括远程)
git branch -r           # 查看远程分支
git branch -v           # 查看分支最后提交
git branch -vv          # 查看分支跟踪关系
git branch branch_name  # 创建分支
git checkout branch_name  # 切换分支
git checkout -b branch_name  # 创建并切换
git branch -d branch_name  # 删除分支
git branch -D branch_name  # 强制删除分支
git branch -m new_name  # 重命名当前分支
git branch --set-upstream-to=origin/branch_name  # 设置跟踪

# 切换分支(Git 2.23+)
git switch branch_name     # 切换分支
git switch -c branch_name  # 创建并切换

7. 合并与变基

# 合并
git merge feature         # 合并feature分支到当前分支
git merge --no-ff feature  # 禁用fast-forward合并
git merge --abort         # 终止合并

# 变基
git rebase master         # 将当前分支变基到master
git rebase -i HEAD~3      # 交互式变基最近3次提交
git rebase --abort        # 终止变基
git rebase --continue     # 继续变基
git rebase --skip         # 跳过冲突

# 合并 vs 变基
# merge: 保留历史,产生合并提交
# rebase: 线性历史,不保留合并提交

8. 标签管理

# 标签操作
git tag                  # 查看标签
git tag v1.0.0           # 创建轻量标签
git tag -a v1.0.0 -m "version 1.0.0"  # 创建附注标签
git tag -d v1.0.0        # 删除标签
git push origin v1.0.0   # 推送标签
git push origin --tags   # 推送所有标签
git push origin :refs/tags/v1.0.0  # 删除远程标签
git checkout v1.0.0       # 切换到标签

9. 远程操作

# 推送和拉取
git push origin master             # 推送
git push -u origin master          # 设置上游并推送
git push origin --delete branch_name  # 删除远程分支
git push origin :branch_name        # 删除远程分支(旧语法)

git pull origin master             # 拉取并合并
git pull --rebase origin master    # 拉取并变基
git fetch origin                   # 获取远程更新
git fetch origin --prune          # 获取并清理远程已删除分支

# 拉取指定分支
git fetch origin master           # 获取master分支
git checkout -b feature origin/feature  # 创建并跟踪远程分支

10. 撤销和恢复

# 撤销修改
git checkout -- file        # 丢弃工作区修改
git reset HEAD file         # 从暂存区移除
git reset --soft HEAD^     # 撤销提交,保留修改到暂存区
git reset --mixed HEAD^    # 撤销提交,保留修改到工作区
git reset --hard HEAD^     # 撤销提交,丢弃所有修改
git reset --hard commit_id  # 回退到指定提交
git revert commit_id       # 新建提交来撤销指定提交

# 恢复删除的文件
git checkout commit_id -- file  # 从历史恢复文件
git log --oneline --all -- file  # 查看文件历史

11. 储藏和清理

# 储藏
git stash                  # 储藏当前修改
git stash save "message"   # 储藏并添加信息
git stash list             # 查看储藏列表
git stash apply stash@{0}  # 应用储藏
git stash pop              # 应用并删除最新储藏
git stash drop stash@{0}   # 删除储藏
git stash clear            # 清空所有储藏
git stash branch new_branch  # 从储藏创建分支

# 清理
git clean -f              # 删除未跟踪文件
git clean -fd             # 删除未跟踪文件和目录
git clean -n              # 预览要删除的文件

12. 子模块

# 子模块操作
git submodule add <url> <path>  # 添加子模块
git submodule update --init     # 初始化子模块
git submodule update --remote   # 更新子模块
git submodule foreach git pull  # 更新所有子模块

三、Git 协作流程

1. Git Flow 工作流

# 主分支
master       # 生产分支
develop      # 开发分支

# 辅助分支
feature/*    # 功能分支
release/*    # 发布分支
hotfix/*     # 热修复分支
support/*    # 支持分支

2. GitHub Flow

# 简化流程
1. 从master创建分支
2. 提交到分支
3. 创建Pull Request
4. 讨论和审查
5. 部署和测试
6. 合并到master

3. GitLab Flow

# 环境分支
master      → production
staging     → staging
development → development

4. Pull Request 流程

# 1. Fork仓库
# 2. 克隆到本地
git clone <fork-url>
git remote add upstream <original-url>

# 3. 创建功能分支
git checkout -b feature-branch

# 4. 开发提交
git add .
git commit -m "feat: add new feature"

# 5. 推送到远程
git push origin feature-branch

# 6. 创建Pull Request
# 在GitHub/GitLab界面操作

# 7. 保持同步
git fetch upstream
git merge upstream/master
# 或
git rebase upstream/master

四、高级技巧

1. 二分查找

# 查找引入bug的提交
git bisect start
git bisect bad            # 标记当前版本有问题
git bisect good commit_id  # 标记已知正常的版本
# Git会自动跳转到中间版本,测试后标记good或bad
git bisect good/bad
git bisect reset          # 结束二分查找

2. 补丁操作

# 生成补丁
git diff > patch.patch
git format-patch HEAD~3  # 生成最近3次提交的补丁

# 应用补丁
git apply patch.patch
git am patch.patch

3. 子目录筛选

# 只克隆子目录
git sparse-checkout init
git sparse-checkout set dir1 dir2

4. 钩子脚本

# 预提交钩子
.git/hooks/pre-commit
# 提交信息钩子
.git/hooks/commit-msg
# 服务端钩子
.git/hooks/pre-receive
.git/hooks/post-receive

五、常见问题解决

1. 合并冲突解决

# 1. 查看冲突文件
git status

# 2. 编辑冲突文件
<<<<<<< HEAD
当前分支的内容
=======
要合并的分支内容
>>>>>>> branch-name

# 3. 解决冲突后标记
git add resolved_file
git commit -m "Merge branch 'feature'"

# 4. 使用合并工具
git mergetool

2. 误删分支恢复

# 查看所有引用日志
git reflog

# 找到删除的分支
git checkout -b branch-name commit-id

3. 提交信息规范

# 常见提交类型
feat: 新功能
fix: 修复bug
docs: 文档更新
style: 代码格式
refactor: 重构
test: 测试
chore: 构建过程或辅助工具

# 示例
feat: 添加用户登录功能
fix: 修复登录验证逻辑
docs: 更新API文档

4. 大文件处理

# 查看大文件
git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')"

# 使用Git LFS
git lfs install
git lfs track "*.psd"
git lfs track "*.zip"
git add .gitattributes

六、面试常见问题

1. 基础概念题

Q1: Git和SVN的主要区别?
A: 
1. Git是分布式,SVN是集中式
2. Git有本地仓库,可离线操作
3. Git分支更轻量,操作更快
4. Git内容以元数据方式存储,SVN存储文件差异

Q2: git pull 和 git fetch 的区别?
A:
git pull = git fetch + git merge
git fetch 只下载,不合并
git pull 下载并合并

2. 场景应用题

Q3: 如何撤销已经推送到远程仓库的提交?
A:
1. 如果只有自己使用该分支:git reset --hard commit_id 后强制推送
2. 如果多人协作:git revert commit_id 创建反向提交

Q4: 如何合并多个提交为一个?
A:
使用交互式变基:git rebase -i HEAD~n
将pick改为squash或fixup

Q5: 如何查找包含特定字符串的所有提交?
A:
git log -p --grep="pattern"
git log -S"pattern"  # 搜索内容
git log -G"pattern"  # 正则搜索

3. 高级技巧题

Q6: 如何优化大仓库的性能?
A:
1. 使用浅克隆:git clone --depth=1
2. 清理历史:git gc
3. 使用.gitignore忽略不必要文件
4. 使用Git LFS处理大文件
5. 定期修剪:git prune

Q7: 如何配置Git别名提高效率?
A:
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.lg "log --oneline --graph --all"

七、实操题目

1. Git 实战题

# 题目1:创建一个新功能分支,开发后合并到主分支
git checkout -b feature/login
# 开发功能...
git add .
git commit -m "feat: 添加登录功能"
git checkout main
git merge feature/login
git branch -d feature/login

# 题目2:修复紧急bug
git checkout -b hotfix/issue-123
# 修复bug...
git add .
git commit -m "fix: 修复登录失败问题"
git checkout main
git merge hotfix/issue-123
git push origin main
git branch -d hotfix/issue-123

2. Linux 实战题

# 题目1:查找并删除7天前的日志文件
find /var/log -name "*.log" -mtime +7 -delete

# 题目2:统计Java进程内存占用
ps aux | grep java | grep -v grep | awk '{sum+=$6} END {print sum/1024 "MB"}'

# 题目3:监控实时日志并过滤错误
tail -f /var/log/app.log | grep -E "ERROR|FATAL"

# 题目4:批量重命名文件
for file in *.txt; do mv "$file" "backup_$file"; done

面试准备建议

  1. 熟练掌握常用命令的组合使用

  2. 理解Git底层原理(对象、引用、分支)

  3. 熟悉团队协作流程和规范

  4. 掌握常见问题排查和解决

  5. 准备实际项目经验分享

  6. 了解Git高级功能和工作流

  7. 熟悉Linux系统管理和性能分析

高频考点

  • Git分支管理策略

  • 合并冲突解决

  • 版本回退和恢复

  • 远程协作流程

  • Linux进程和网络管理

  • 文本处理和Shell脚本

  • 系统监控和性能分析

  • 权限管理和安全配置

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐