Linux 常用命令与 Git 协作面试题汇总
·
一、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
面试准备建议:
-
熟练掌握常用命令的组合使用
-
理解Git底层原理(对象、引用、分支)
-
熟悉团队协作流程和规范
-
掌握常见问题排查和解决
-
准备实际项目经验分享
-
了解Git高级功能和工作流
-
熟悉Linux系统管理和性能分析
高频考点:
-
Git分支管理策略
-
合并冲突解决
-
版本回退和恢复
-
远程协作流程
-
Linux进程和网络管理
-
文本处理和Shell脚本
-
系统监控和性能分析
-
权限管理和安全配置
更多推荐




所有评论(0)