Linux & AI 开发实用工具速查笔记
个人常用命令整理,持续更新。
—— 专注效率,拒绝重复造轮子。
1. Docker:镜像/容器迁移与文件拷贝
🔍 export vs save 核心区别
| 命令 | 作用对象 | 内容 | 是否保留元数据(CMD/ENV) | 导入命令 |
|---|---|---|---|---|
docker export |
容器(Container) | 文件系统扁平快照 | ❌ 否 | docker import |
docker save |
镜像(Image) | 完整分层 + 元数据 | ✅ 是 | docker load |
💡 记住:
save= 保存“配方” → 可完美复现export= 导出“成品照片” → 丢失制作过程
🚀 如何迁移一个正在运行的容器?
推荐流程(保留配置 + 文件系统):
# 1. 源服务器:将容器提交为镜像
docker commit <container_name> my-app:latest
# 2. 保存镜像
docker save my-app:latest -o my-app.tar
# 3. 复制到目标服务器
scp my-app.tar user@target:/path/
# 4. 目标服务器:加载镜像
docker load -i my-app.tar
📂 docker cp 使用场景
- 用途:在容器与主机之间拷贝单个文件或目录
- 不适用于:完整迁移容器或备份
# 从容器拷贝文件到本地
docker cp container_name:/app/config.json ./config.json
# 从本地拷贝文件到容器
docker cp ./new_file.txt container_name:/app/
🌤️ docker 命令显示完整(不截断)
docker ps --no-trunc
🐳 Docker 容器后台运行(exit 不退出)
核心命令
docker run -d --restart always --name 容器名 镜像名
参数说明
-d:后台守护运行,exit 不会停止--restart always:服务器重启/容器崩溃自动恢复--name:自定义容器名,方便后续操作
进入正在运行的容器(安全退出不停止)
docker exec -it 容器名 /bin/bash
🗜️ Docker 镜像越来越大瘦身方法(docker-squash)
问题原因
多次 docker commit / docker build 会产生大量历史层,镜像体积持续膨胀,占用服务器空间。
解决方法:压缩合并层(docker-squash)
# 1. 安装工具
pip install docker-squash
# 2. 压缩镜像
docker-squash 原镜像:标签 -t 新镜像:标签
# 3. 示例
docker-squash myimg:v1 -t myimg:v1-squashed
🔗 根据宿主机 PID 查找对应 Docker 容器
方法1:全自动查询(推荐 ✅)
PID=你的进程号
docker ps -q | xargs docker inspect --format '{{.Id}} {{.Name}}' | grep $(cat /proc/$PID/cgroup | grep -oP '[0-9a-f]{64}' | head -1)
方法2:分步查询(最稳定 🛡️)
# 1. 从进程 cgroup 信息中提取容器 ID
cat /proc/你的进程号/cgroup | grep docker
# 2. 根据容器 ID 查找容器实例
docker ps | grep 容器ID前12位
2. Git 常用命令速查
🔎 查询当前 commit ID
git rev-parse HEAD # 完整 ID
git rev-parse --short HEAD # 短 ID(7位)
🔀 切换到指定 commit(只读状态)
git checkout <commit_id>
# 返回分支:git switch main (或 git checkout main)
🗑 强制丢弃最新一次提交(本地 + 远程)
# 1. 重置到上一个提交(保留工作区改动)
git reset --hard HEAD~1
# 2. 强制推送到远程(⚠️ 谨慎!会覆盖历史)
git push --force origin main
⚠️
--force会改写历史,团队协作中请确保无他人基于该提交开发。
⚠️ 放弃正在进行中的 cherry-pick(中途取消)
适用场景:cherry-pick 出现大量冲突、不想继续、直接回退到操作前状态。
git cherry-pick --abort
📜 git log 简洁查看(短 commit ID + 单行信息)
git log --oneline
作用:每条日志只显示 短 commit ID + 提交信息,干净直观。
🎯 精准合并远程指定 N 个 commit(保留本地修改)
适用场景:本地有自定义修改,需要只拉取远程分支最新几个 commit,不重置、不重建分支、100% 保留本地代码。
# 1. 暂存本地所有修改(安全保护)
git stash push -m "my local code"
# 2. 拉取远程最新提交信息
git fetch origin
# 3. 查看远程分支最新 4 个 commit(复制哈希)
git log origin/远程分支名 --oneline -4
# 4. cherry-pick 按【最早 → 最新】顺序合并
git cherry-pick 哈希1 哈希2 哈希3 哈希4
# 5. 恢复本地修改
git stash pop
冲突处理(标准流程)
# 编辑冲突文件 → 删除 <<<<<<< / ======= / >>>>>>> 标记
git add 冲突文件
git cherry-pick --continue
放弃本次 cherry-pick(安全回退)
git cherry-pick --abort
📌 本地修改备份与恢复(补丁方案)
适合分支差异过大、rebase/merge 大量冲突时使用:
# 备份当前所有本地修改为补丁文件
git diff > my-code.patch
# 恢复本地修改
git apply my-code.patch
🚀 Git fetch 更新本地代码
git fetch说明
git fetch 仅下载远程最新提交记录,不会自动修改本地文件!
必须配合 merge/rebase/pull 才能让代码变成最新。
常用更新方式
# 方法1:fetch + merge(安全)
git fetch origin
git merge origin/当前分支名
# 方法2:fetch + rebase(提交历史更干净,推荐)
git fetch origin
git rebase origin/当前分支名
# 方法3:git pull = fetch + merge(一键拉取)
git pull origin 当前分支名
🛡️ 本地有修改时,安全同步远程最新代码(最常用工作流)
适用场景:本地已写新代码,不想丢失,又要同步远程最新更新
# 1. 暂存本地所有修改(保护代码)
git stash push -m "本地开发中修改"
# 2. 同步远程最新代码(二选一)
# 方式A:干净整洁(推荐)
git fetch origin && git rebase origin/当前分支名
# 方式B:简单直接
# git pull origin 当前分支名
# 3. 恢复本地修改
git stash pop
# 4. 若恢复时出现少量冲突 → 解决后标记完成
git add 冲突文件
📤 本地项目上传到 Git 远程仓库(GitCode/GitHub/Gitee)
# 1. 进入项目目录
cd 项目路径
# 2. 初始化 Git
git init
# 3. 添加所有文件并提交
git add .
git commit -m "init project"
# 4. 绑定远程仓库
git remote add origin https://仓库地址.git
# 5. 推送到远程
git push -u origin main
常见问题
- 提示
remote origin already exists:执行git remote remove origin后重新绑定 - 提示权限问题:使用 Git 个人访问令牌(非登录密码)
🌿基于现有分支创建新分支 + 推送到远程
场景
基于 master 分支,创建并推送新分支 dev
步骤
- 先切到基准分支(master)
git checkout master
- 基于当前分支,创建并切换到新分支
git checkout -b dev
- 把新分支推送到 GitHub 远程
git push -u origin dev
完成
本地 + GitHub 远程都有 dev 分支了。
3. rsync 常用用法
📥 参数含义(-avzP)
| 参数 | 说明 |
|---|---|
-a |
归档模式(保留权限、时间、符号链接等) |
-v |
详细输出(verbose) |
-z |
传输时压缩(节省带宽) |
-P |
等价于 --partial --progress(支持断点续传 + 显示进度) |
🌰 使用示例
远程同步(带进度)
rsync -avzP /local/dir/ user@remote:/remote/dir/
本地复制(带进度)
rsync -avP /source/dir/ /dest/dir/
# 注意:本地复制无需 -z(不压缩更快)
✅ 本地复制显示进度?用
-P即可!
4. Linux 日志记录、后台运行与实时查看(建议使用byobu替代——见章节7)
在运行长时间任务(如模型训练、服务部署)时,常需:
- 将所有输出保存到日志
- 让任务在后台运行
- 实时监控日志
🔑 核心概念:标准流(Standard Streams)
| 文件描述符 | 名称 | 作用 |
|---|---|---|
0 |
stdin | 标准输入(键盘) |
1 |
stdout | 标准输出(正常信息) |
2 |
stderr | 标准错误(错误信息) |
💡
1和2是文件描述符编号,不是普通数字。
✅ 将命令输出保存到日志并后台运行
your_command > log.txt 2>&1 &
参数详解:
| 部分 | 含义 |
|---|---|
> |
重定向 stdout(fd=1) 到文件(覆盖写入) |
2>&1 |
将 stderr(fd=2) 重定向到 stdout 当前的位置 |
&1 中的 & |
表示“引用文件描述符 1”,不是普通文件名✅ 正确:2>&1❌ 错误:2>1(会创建名为 1 的文件!) |
末尾的 & |
将命令放入后台运行,立即释放终端 |
✅ 效果:正常输出 + 错误信息 → 全部写入
log.txt,后台执行。
示例:
# 启动训练,日志全记录,后台运行
python train.py > train.log 2>&1 &
# 追加模式(保留历史日志)
python train.py >> train.log 2>&1 &
防断连(服务器推荐):
nohup python train.py > train.log 2>&1 &
- 即使 SSH 断开,进程仍继续运行
👀 用 tail 实时查看日志
tail -n 50 -f train.log
参数说明:
| 选项 | 含义 |
|---|---|
-n N |
显示最后 N 行 |
-f |
follow 模式:持续输出新增内容(实时刷新) |
Ctrl+C |
退出 tail -f |
✅ 调试神器:边跑任务边看最新日志!
🧪 完整工作流示例
# 1. 后台启动任务
nohup python inference.py > infer.log 2>&1 &
# 2. 实时监控日志
tail -n 100 -f infer.log
# 3. (可选)管理后台任务
jobs -l # 查看后台任务
kill %1 # 终止第一个后台任务
📌 一句话总结:
> log 2>&1 &→ 全输出进日志,后台跑;tail -f→ 实时看日志尾巴;&1中的&是“引用文件描述符”,不是后台符号!
5. screen 常用命令(建议使用byobu替代——见章节7)
screen 用于创建持久化终端会话,适合长时间任务(如训练、下载)。
🧰 基础操作
| 命令 | 说明 |
|---|---|
screen -S name |
创建名为 name 的会话 |
Ctrl+A, D |
脱离当前会话(detach) |
screen -r name |
恢复名为 name 的会话 |
screen -ls |
列出所有会话 |
exit 或 Ctrl+D |
结束当前会话 |
💡 小技巧
- 会话名建议用项目名,如
screen -S training - 断网后重新登录,用
screen -r即可找回任务
6. tmux 常用命令(建议使用byobu替代——见章节7)
tmux 是终端复用工具,支持分屏、持久会话,优化鼠标后更易用。
🧰 核心概念
- 前缀键:默认
Ctrl+B - 会话/窗口/窗格:三级管理终端界面
🚀 基础命令
tmux new -s name # 新建命名会话
tmux ls # 查看会话列表
tmux a -t name # 重连会话
tmux kill-session -t name # 删除会话
⌨️ 常用快捷键(前缀 Ctrl+B)
d:脱离会话(后台保留)%:垂直分屏 |":水平分屏- 方向键:切换窗格
z:最大化/还原窗格c:新建窗口 |n/p:切换窗口
🖱️ 开启鼠标滚轮+复制
创建/编辑配置文件
vim ~/.tmux.conf
添加以下内容(直接复制)
set -g mouse on # 开启完整鼠标支持
set -g history-limit 200000 # 加大历史记录上限
生效配置
tmux source ~/.tmux.conf
✅ 效果:Shift+鼠标滚轮向上翻页、鼠标直接选中文本自动复制、点击切换窗格/窗口
7. Byobu 终极终端工具(推荐替代 screen/tmux)
Byobu = tmux 美化增强版,开箱即用、中文友好、无配置烦恼,解决 screen/tmux 所有难用问题。
✨ 核心优势
- 自带状态栏(时间/窗口/IP/内存)
- 纯鼠标操作(滚轮/点击/复制)
- 快捷键直观易懂
- 会话持久化,断网不丢任务
📦 安装
apt install byobu -y # Debian/Ubuntu
yum install byobu -y # CentOS
🚀 基础使用
byobu # 启动
byobu new -s name # 新建命名会话
byobu ls # 查看会话
byobu a -t name # 重连会话
exit # 关闭当前窗口
⌨️ 实用快捷键
F2:新建窗口F3/F4:切换前后窗口F8:重命名窗口F9:打开设置菜单F6:快速脱离会话(后台保留)Shift+F6:退出并关闭会话
🖱️ 鼠标完全可用
- 滚轮:上下翻页历史
- 点击底部标签:切换窗口
- 鼠标选中:自动复制
- 鼠标右键:粘贴
💡 实用技巧
技巧1:无任何参数,快速创建会话
无需输入复杂命令,直接输以下指令,自动创建默认会话,开箱即用:
byobu # 无任何参数,直接启动并创建默认会话(无需命名,适合临时使用)
✅ 效果:输入后直接进入 Byobu 会话,自动生成窗口,无需额外配置。
技巧2:脱离会话后,无参数快速恢复
- 按
F6脱离当前 Byobu 会话(会话后台保留,不中断任务) - 想要恢复时,无需输入会话名、无需查列表,直接输:
byobu # 无任何参数,自动连接最近一次打开的 Byobu 会话
✅ 效果:跳过 byobu ls 查会话、byobu a -t 会话名 重连,一步恢复。
8. Linux 目录切换:pushd & popd 保留原目录用法
在 Linux 中,pushd 和 popd 用于切换目录时记住原目录,方便快速返回,比单纯 cd 更适合频繁往返多个目录。
核心命令说明
pushd <目录>:切换到目标目录,并将当前目录压入「目录栈」保存popd:从目录栈弹出最近保存的目录,并切换回去dirs:查看当前目录栈里保存的所有路径
基础使用示例
1. 切换并记住原目录
# 当前目录:/home/user
pushd /tmp
执行后:
- 目录切换到
/tmp /home/user被保存到目录栈
2. 一键返回原目录
# 当前目录:/tmp
popd
执行后:
- 直接回到
/home/user
3. 查看目录栈
dirs
完整演示流程
# 1. 进入工作目录
cd /home/user/project
# 2. 切换到配置目录,保留原目录
pushd /etc/config
# 3. 查看当前栈(会显示两个目录)
dirs
# 4. 操作完后返回原目录
popd
# 5. 回到了 /home/user/project
9. Linux 磁盘查看:du 常用命令
du:查看目录/文件磁盘占用,快速定位大文件。
🔥 核心命令
du -h -d 1 | sort -hr
| 参数 | 含义 |
|---|---|
-h |
人类可读格式(K/M/G) |
-d 1 |
仅显示一级子目录 |
sort -hr |
按大小倒序(大→小) |
🚀 常用用法
# 当前目录一级目录排序
du -h -d 1 | sort -hr
# 指定目录
du -h -d 1 /path | sort -hr
# 查看当前目录总大小
du -sh
✅ 一句话:
du -h -d 1 | sort -hr一键查看一级目录大小并从大到小排序。
📊 目录整体 MD5 计算(递归、安全、无报错)
find 目录 -type f -print0 | sort -z | xargs -0 md5sum | md5sum
命令解释
find:递归查找所有文件-type f:仅文件,排除目录-print0 / -z / -0:处理带空格/特殊字符的文件名,安全稳定sort:固定文件顺序,保证跨机器 MD5 一致xargs md5sum:对所有文件计算 MD5md5sum:生成整个目录的唯一 MD5
排除指定后缀(如 .parquet)
find 目录 -type f ! -name "*.parquet" -print0 | sort -z | xargs -0 md5sum | md5sum
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)