常见命令
📅 发表于 2026/01/28
🔄 更新于 2026/01/28
👁️ -- 次访问
📝 0 字
⏳ 0 分钟
cmd
#docker
#podman
#git
#pip
#ray
#kill
#heredoc
镜像 (Image)
系统安装盘/快照,静态只读,pull的内容所有环境(python, 库, 代码, 配置等)。容器 (Container)
实例,镜像运行起来后就是容器仓库 (Repository/Hub)
# podman 安装
sudo apt-get update
sudo apt-get -y install podman
# 拉取镜像
podman pull anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/python:latest
# 运行镜像
podman run -it --name test 79bb5ed1866f /bin/bash
# 执行已有容器
podman exec -it 069dcd bash
# 查看关键信息
podman info | grep -E "graphDriverName|mount_program|freeLocks|volumePath|runRoot"
# 删除服务
pkill -f "podman system service"
# 删除物理文件,经常报错database graph driver "" does not match our graph driver "vfs": database configuration mismatch
# root 用户
rm -rf /var/lib/containers/storage
# root less
rm -rf ~/.local/share/containers/storage
# 启动服务
podman system service -t 0 unix:///tmp/podman.sock &
export DOCKER_HOST=unix:///tmp/podman.sock
# 验证,回复ok则正确
curl -H "Content-Type: application/json" --unix-socket /tmp/podman.sock http://localhost/_ping
# 加载镜像
podman load -i my_image.tar
# 查看镜像
podman images
# 查看运行镜像
podman ps# 重启
sudo systemctl daemon-reload
sudo systemctl restart docker
# 查看具体报错日志
dockerd
# 停止可能残存的进程
sudo pkill dockerd
sudo pkill containerd# 杀掉容器
podman ps -aq --filter "name=minisweagent-" | xargs -r podman rm -f
podman rm -f $(podman ps -q --filter "status=running")
podman ps -q --filter "status=running"
# 删除所有的
podman rm -af| 命令 | 用途 | 备注 |
|---|---|---|
docker pull <镜像名> | 从云端下载镜像 | 比如 docker pull python:3.11 |
docker images | 列出本地所有镜像 | 检查你下好了哪些环境 |
docker ps | 查看正在运行的容器 | 加上 -a 可以看所有容器(包括已停止的) |
docker run <参数> <镜像> | 最常用:根据镜像启动一个容器 | -it 交互模式,-d 后台运行 |
docker exec -it <容器ID> bash | 进入一个正在运行的容器内部 | 方便你手动调试环境 |
docker rm <容器ID> | 删除容器 | 如果任务跑挂了,清理掉它 |
docker rmi <镜像ID> | 删除镜像 | 节省硬盘空间 |
网络配置:/etc/containers/containers.conf
[containers]
# 设置容器默认的 DNS 服务器
dns_servers = [
"8.8.8.8",
"114.114.114.114"
]
netns="host"存储路径配置:/etc/containers/storage.conf,其中driver默认不是vfs,特殊情况才用这个。
[storage]
driver = "vfs"
graphroot="/var/lib/containers/storage"
runRoot="/run/containers/storage"其他环境变量配置
export DOCKER_HOST=unix:///tmp/podman.sock
alias docker="podman --network host"/etc/docker/daemon.json
{
"data-root": "/xxx/docker_root",
"storage-driver": "vfs" # nas
}背景
核心思路
查看是否存在loop设备,如果不存在,则先建立loop设备
# 查看是否存在
losetup -f
# 进入容器后执行
for i in $(seq 0 7); do
if [ ! -e /dev/loop$i ]; then
mknod /dev/loop$i b 7 $i
fi
done
# 确保 loop-control 存在
if [ ! -e /dev/loop-control ]; then
mknod /dev/loop-control c 10 237
fi建立文件
# 这里依据磁盘空间,来设立,但不要打满了。
truncate -s 4608G /podman_disk.img挂载
# 挂载
losetup /dev/loop0 /podman_disk.img
# 查看
losetup -aext4 格式化
mkfs.ext4 -E lazy_itable_init=1 /dev/loop0建立podman run root文件夹
mkdir -p /podman_data/storage
mkdir -p /podman_data/storage/overlay挂载loop设备到指定文件夹
# 挂载
mount -t ext4 /dev/loop0 /podman_data/storage
# 检查
df -h /dev/loop0
# 卸载命令
umount /root/podman_data 2>/dev/null配置/etc/contaners/storage.conf
[storage]
driver = "overlay"
graphroot="/podman_data/storage"
runRoot="/run/containers/storage"
[storage.options.overlay]
mountopt = "nodev,metacopy=on"之前旧的是这个
[storage]
driver = "vfs"
graphroot="/var/lib/containers/storage"
runRoot="/run/containers/storage"podman 清空和重启
# 命令
podman rm -a -f >/dev/null 2>&1 || true
# 直接删除文件夹
rm -rf /var/lib/containers/storage/*
rm -rf /run/containers/storage/*
# 重置
podman system reset --force#!/bin/bash
# 快速重建 4.5T 环境
truncate -s 4808G /podman_disk.img
mknod /dev/loop0 b 7 0 2>/dev/null
losetup /dev/loop0 /podman_disk.img
mkfs.ext4 -E lazy_itable_init=1 /dev/loop0
mkdir -p /podman_data/storage/overlay
mount -t ext4 /dev/loop0 /podman_data/storage
echo "环境已就绪!"清除容器
# 强行删除所有容器(无论是否在运行)
podman rm -a -f
# 删除所有已加载的镜像
podman rmi -a -f
# 清理所有插件、卷和残留元数据
podman system reset --force卸载挂载点
# 0. 先看是否有占用,清掉进程
fuser -m /podman_data/storage
kill -9 PID
# 1. 卸载挂载点
umount /podman_data/storage
# 2. 断开 Loop 设备关联
losetup -d /dev/loop0
# 3. 检查是否还有残留关联(应该为空)
losetup -a删除大文件
# 删除那个虚拟磁盘文件
rm -f /podman_disk.img
# 删除挂载目录(保持根目录整洁)
rm -rf /podman_dataBasic
# 拉取远程tag并切换
git fetch --all --tags
git checkout core_v0.12.2
# 拉取远程分支并切换
git fetch origin
# git checkout core_r0.15.0
git checkout core_r0.14.0
# 查看branch
git branch
# 安装git-lfs
sudo apt-get install git-lfs
# 在git文件夹中,使用git lfs 拉取远程
git lfs pull拉取分值并合并
# 本地先提交
git add *
git commit -m "0110"
# 拉取远程分支,做合并
git pull --rebase撤回合并
# 查看历史head
git reflog
# 撤回到你的那个版本
git reset --hard HEAD@{3}Exception: File src/appworld/.source/apps.bundle is a Git LFS pointer and not a bundle file.
# 拉取仓库下的依赖大文件,因为遇见报错
git lfs install
git lfs pull文件路径:锁定目标文件
--- a/:修改前的文件状态+++ b/:修改后的文件状态。sympy/parsing/sympy_parser.py行号坐标
@@ ... @@ -1119,6:修改前的文件,代码从1119行开始,占了6行+1119,29:修改后的文件,代码从1119行开始,占了29行。开头和末尾无标记的代码片段:帮助定位
内容标记
+:新增行。-:删除行。如下示例
diff --git a/sympy/parsing/sympy_parser.py b/sympy/parsing/sympy_parser.py
--- a/sympy/parsing/sympy_parser.py
+++ b/sympy/parsing/sympy_parser.py
@@ -1119,6 +1119,29 @@ class EvaluateFalseTransformer(ast.NodeTransformer):
'exp', 'ln', 'log', 'sqrt', 'cbrt',
)
+ relational_operators = {
+ ast.NotEq: 'Ne',
+ ast.Lt: 'Lt',
+ ast.LtE: 'Le',
+ ast.Gt: 'Gt',
+ ast.GtE: 'Ge',
+ ast.Eq: 'Eq'
+ }
+ def visit_Compare(self, node):
+ if node.ops[0].__class__ in self.relational_operators:
+ sympy_class = self.relational_operators[node.ops[0].__class__]
+ right = self.visit(node.comparators[0])
+ left = self.visit(node.left)
+ new_node = ast.Call(
+ func=ast.Name(id=sympy_class, ctx=ast.Load()),
+ args=[left, right],
+ keywords=[ast.keyword(arg='evaluate', value=ast.NameConstant(value=False, ctx=ast.Load()))],
+ starargs=None,
+ kwargs=None
+ )
+ return new_node
+ return node
+
def flatten(self, args, func):
result = []
for arg in args:# 生成当前环境安装情况
pip freeze > requirements.txt配置镜像,可能没效了。
[global]
index-url=https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.comray start --head --dashboard-host=0.0.0.0
ray start --address='x.x.x.x:6379'
ray job submit --address="x.x.x.x:6379" \
--runtime-env=verl/trainer/runtime_env.yaml \
--no-wait \
-- \
ray job logs raysubmit_xxxxx
ray job stop raysubmit_xxx
ray status
ray stopsudo apt update && sudo apt install rsync -y
rsync -av --size-only /path1 /path2sudo apt-get install zip
压缩命令:tar -czvf appworld.tar.gz appworld
-c:create 的缩写,表示创建一个新的归档文件。
-z:通过 gzip 进行压缩或解压缩。这是生成 .gz 后缀的关键。
-v:verbose 的缩写,表示显示详细过程。执行命令时,它会把正在处理的文件名打印在屏幕上,让你知道命令正在正常工作。对于大文件或目录,这个参数非常有用。
-f:file 的缩写,表示后面要跟文件名。这个参数告诉 tar 你要操作的文件是 appworld.tar.gz,而不是标准输入/输出。注意:-f 后面必须紧跟着文件名。
总结记忆: czvf 可以记成 "Create Zipped Verbose File"(创建一个带Gzip压缩并显示过程的文件)。
解压缩命令:tar -xzvf appworld.tar.gz
-x:extract 的缩写,表示提取/解压文件从归档中。
-z:同样表示使用 gzip。在解压时,tar 会用它来解开 .gz 压缩。
-v:同样表示显示详细过程。
-f:同样表示后面要跟文件名。
总结记忆: xzvf 可以记成 "Extract Zipped Verbose File"(解压一个带Gzip压缩并显示过程的文件)。bash train.sh 2>&1 | tee logs/temp.logpkill -f uvicorn
pkill -9 -f uvicorn
ps aux | grep '[u]vicorn' | awk '{print $2}' | xargs kill杀掉gpu僵尸进程
sudo apt-get install -y psmisc
sudo fuser -k -9 /dev/nvidia*核心目的
定界符
任意字符串,成对出现,起始和结束位置。告诉系统从第一个定界符看到第二个停止。第1个定界符需要加单引号:告诉系统不解析字符串里的变量。格式
命令 <<`定界符`
这里是你想输入的内容
可以有很多行
定界符示例
VAR="世界"
cat <<'EOF'
你好,$VAR
EOF
# 输出:你好,$VARApply Git Patch 示例
command = f"git apply <<'{delimiter}'\n{model_patch}\n{delimiter}"git apply <<'PATCH_12345'
--- a/file.py
+++ b/file.py
@@ -1,1 +1,1 @@
-old_code()
+new_fix_code()
PATCH_12345安装插件
Python语言解释器
配置快捷键
自定义python代码片段
其他相关配置
// 将键绑定放在此文件中以覆盖默认值
[
{
"key": "shift+cmd+'",
"command": "editor.action.addSelectionToNextFindMatch",
"when": "editorFocus"
},
{
"key": "cmd+d",
"command": "-editor.action.addSelectionToNextFindMatch",
"when": "editorFocus"
},
{
"key": "cmd+d",
"command": "editor.action.copyLinesDownAction",
"when": "editorTextFocus && !editorReadonly"
},
{
"key": "shift+alt+down",
"command": "-editor.action.copyLinesDownAction",
"when": "editorTextFocus && !editorReadonly"
},
{
"key": "cmd+backspace",
"command": "editor.action.deleteLines",
"when": "textInputFocus && !editorReadonly"
},
{
"key": "shift+cmd+k",
"command": "-editor.action.deleteLines",
"when": "textInputFocus && !editorReadonly"
},
{
"key": "alt+cmd+left",
"command": "workbench.action.navigateBackInNavigationLocations"
},
{
"key": "alt+cmd+right",
"command": "workbench.action.navigateForwardInNavigationLocations"
}
]{
"Print to console": {
"prefix": "header",
"body": [
"#!/usr/bin/env python",
"# -*- coding: utf-8 -*-",
"",
"\"\"\"",
"@desc $1",
"@author: liming.plm",
"@create: $CURRENT_YEAR-$CURRENT_MONTH-$CURRENT_DATE",
"\"\"\"",
],
"description": "Add Python header"
},
"main": {
"prefix": "main",
"body": [
"def main():",
" pass",
"",
"",
"if __name__ == \"__main__\":",
" main()"
],
"description": "main"
}
}在需要打开的vscode根目录下,新建pyrightconfig.json
例如,以verl为示例,我只需要verl和recipe文件夹建立索引。
{
"exclude": [
".*",
"*d*",
"outputs",
"logs",
"verl/third_party",
],
"include": [
"verl",
"recipe",
],
"reportMissingTypeStubs": false,
}例如,在openhands benchmarks根目录下,我需要引用其他文件夹的内容,比如software-agent-sdk,需设置extraPaths.
{
"include": [
"benchmarks",
"."
],
"extraPaths": [
"/xxxpath/pro/software-agent-sdk/openhands-sdk",
"/xxxpath/pro/software-agent-sdk/openhands-tools",
"/xxxpath/pro/software-agent-sdk/openhands-workspace",
"/xxxpath/pro/software-agent-sdk/openhands-agent-server"
],
"exclude": [
".venv/**",
"**/__pycache__",
"**/.pytest_cache"
],
"executionEnvironments": [
{
"root": "."
}
]
}