个人常用命令整理,持续更新。
—— 专注效率,拒绝重复造轮子。


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

步骤

  1. 先切到基准分支(master)
git checkout master
  1. 基于当前分支,创建并切换到新分支
git checkout -b dev
  1. 把新分支推送到 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 标准错误(错误信息)

💡 12文件描述符编号,不是普通数字。


✅ 将命令输出保存到日志并后台运行

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 列出所有会话
exitCtrl+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:脱离会话后,无参数快速恢复

  1. F6 脱离当前 Byobu 会话(会话后台保留,不中断任务)
  2. 想要恢复时,无需输入会话名、无需查列表,直接输:
byobu  # 无任何参数,自动连接最近一次打开的 Byobu 会话

✅ 效果:跳过 byobu ls 查会话、byobu a -t 会话名 重连,一步恢复。


8. Linux 目录切换:pushd & popd 保留原目录用法

在 Linux 中,pushdpopd 用于切换目录时记住原目录,方便快速返回,比单纯 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:对所有文件计算 MD5
  • md5sum:生成整个目录的唯一 MD5

排除指定后缀(如 .parquet)

find 目录 -type f ! -name "*.parquet" -print0 | sort -z | xargs -0 md5sum | md5sum
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐