shell和github相关

📅 发布时间:2026/8/9 15:06:46
shell和github相关
shell和github相关显存nvidia-smiimport **os** for j in **range**(1000000000000): kk nvidia-smi|grep \MiB / 24564MiB\ /home/kkk.txt **os**.**system**(kk) with **open**(/home/kkk.txt, r) as obj: lll obj.**read**() lll lll.**split**( ) for i in lll: if MiB in i: www **int**(i.**replace**(MiB, )) break if www 1000: **time**.**sleep**(30) break else: **print**(fwaiting {www}, {j}) **time**.**sleep**(100) l 0Git 删除 commit 区分场景⚠️ 谨慎操作已经push远端绝对不要乱用先分清两种场景commit 仅本地尚未 push 到远程仓库安全commit 已经推送到远端 origin高危团队协作严禁随便强制推送场景1仅本地还没push最常用① 保留代码撤销commit推荐代码不动只是删掉提交记录# HEAD~1 删除最近1次commitHEAD~3 删除最近3次 git reset --soft HEAD~1--soft文件改动保留在暂存区--mixed默认不加参数改动保留在工作区取消暂存git reset HEAD~1② 彻底删除commit 丢弃所有代码改动危险数据丢失git reset --hard HEAD~1HEAD~1 上一个提交HEAD~2 往上两个提交场景2已经 push 到远程仓库单人仓库可用多人协作禁止# 本地先回退 git reset --hard HEAD~1 # 强制覆盖远端 git push origin 你的分支名 --force-with-lease--force-with-lease比--force安全一点会检查远端是否别人新提交代码额外删除指定某一条历史commit中间某一条不是最后使用交互式rebasegit rebase -i HEAD~5弹出编辑器把想要删除的那条前面pick修改成drop保存退出。常用示例示例1删除最近1条commit代码保留git reset --soft HEAD~1示例2删除最近2条commit彻底丢弃改动git reset --hard HEAD~2⚠️ 重要红线如果分支多人共同开发不要 hard reset force push会覆盖别人提交hard reset 丢失的代码很难找回操作前确认不需要改动如果误操作想找回丢失commitgit reflog查看历史HEAD编号再次reset回去你告诉我两点我给你精确命令需要删除最近几个commit是否已经git push推送到远端方案1build.sh 完整脚本#!/bin/bash # 判断第一个传入参数 $1 是否等于 onnx if [ $1 onnx ]; then # 相等则传入编译参数 cmake -DCMAKE_BUILD_PLATFORMONNX .. else # 可选不相等时正常编译/提示 echo 未传入onnx参数不开启ONNX平台编译 cmake .. fi使用方式# 触发传入ONNX编译参数 ./build.sh onnx # 不触发 ./build.sh tensorrt方案2如果你脚本里是先判断字符串变量适配你描述场景#!/bin/bash input_str$1 target_stronnx if [ $input_str $target_str ]; then echo 参数匹配开启ONNX编译 cmake -DCMAKE_BUILD_PLATFORMONNX .. else cmake .. fi关键点说明字符串比较规范[ $1 onnx ]两边必须加双引号防止参数为空、带空格时报语法错误前后必须有空格少空格会直接报错CMake 参数传递逻辑cmake -DXXXYYY是标准传参写法大写 ONNX 和脚本小写 onnx 仅做标识区分不影响逻辑完整编译流程补充带构建目录#!/bin/bash set -e # 入参判断 if [ $1 onnx ]; then PLATFORM_ARG-DCMAKE_BUILD_PLATFORMONNX else PLATFORM_ARG fi # 创建构建目录编译 mkdir -p build cd build cmake $PLATFORM_ARG .. make -j$(nproc)报错分两类链接缺失OpenCV aruco库 printf格式错误分开修复一、致命错误找不到 libopencv_aruco.so编译失败根源No rule to make target ../../install/lib/libopencv_aruco.so, needed by fcos3d_test原因你的OpenCV安装包未编译/未安装 aruco 模块CMakeLists.txt 硬编码链接opencv_aruco但本地库文件不存在OpenCV安装路径../../install/下缺少该so文件。修复方案方案1不需要aruco模块 → CMakeLists删除对应链接找到CMakeLists.txt里类似这一行# 原错误代码 find_package(OpenCV REQUIRED) target_link_libraries(fcos3d_test ${OpenCV_LIBS}) # 或手动写了 opencv_aruco修改方式A只引入需要的OpenCV组件排除arucofind_package(OpenCV REQUIRED COMPONENTS core highgui imgproc imgcodecs)方式B如果手动写死链接列表删掉opencv_aruco# 原来 target_link_libraries(fcos3d_test opencv_core opencv_aruco opencv_highgui) # 修改后 target_link_libraries(fcos3d_test opencv_core opencv_highgui)方案2项目必须使用aruco → 重新编译带aruco的OpenCV编译OpenCV时开启aruco模块cmake -DBUILD_opencv_arucoON -DCMAKE_INSTALL_PREFIX/home/Desktop/fcos3d_deploye/install .. make -j$(nproc) make install编译安装完成后重新执行你的./build.sh onnx编译项目。二、警告不阻断编译但代码bug建议修复printf参数不匹配报错代码行printf([ test.cpp ]: detection time consumption is %f ms ! \n, i, time_diff);问题分析格式化字符串只有1个%f但传入了两个变量i(int)、time_diff%f对应浮点却把int类型i填到第一个占位符类型不匹配。两种修复写法写法1同时打印循环序号i 耗时printf([ test.cpp ]: frame %d detection time consumption is %f ms ! \n, i, time_diff);写法2只打印耗时删掉多余iprintf([ test.cpp ]: detection time consumption is %f ms ! \n, time_diff);完整重新编译步骤修改完 CMakeLists.txt testOnnx.cpp清空旧构建缓存rm -rf build mkdir build cd build执行你的编译脚本cd .. ./build.sh onnx补充排查点如果修改后仍然报找不到aruco检查ls /home/Desktop/fcos3d_deploye/install/lib/确认有无libopencv_aruco.so确认CMake中OpenCV路径指向正确的install目录不要混用系统OpenCV和本地编译OpenCV若使用本地自定义OpenCVCMake需指定路径set(OpenCV_DIR /home/Desktop/fcos3d_deploye/install/lib/cmake/opencv4) find_package(OpenCV REQUIRED)报错根因分析报错EADDRINUSE address already in use 18092明明没有进程监听18092却报端口占用99%是两种情况上次训练进程异常崩溃CtrlC/程序crashTCP套接字进入TIME_WAIT滞留60秒内核仍占用端口新进程无法bind残留孤儿python子进程/多进程spawn僵尸进程肉眼看不见监听但后台持有端口。日志关键点你用硬编码固定端口tcp://localhost:18092每次重启都会抢同一个端口极易触发冲突。一、先排查并清理端口立刻生效1. 查找占用18092的进程含僵尸进程# 查找监听LISTEN的进程 ss -tulnp | grep 18092 # 查找所有和18092相关的TCP连接包含TIME_WAIT ss -tan | grep 18092 # 一键杀掉所有占用18092的进程2. 清理所有残留python训练进程根治僵尸进程# 杀掉所有相关python分布式进程 pkill -f ddp_trainer|torch.distributed # 强制清理所有python pkill -9 python3执行完上面命令后等待10秒再启动程序大概率直接恢复。二、永久解决方案推荐分3种方案方案1启动时随机动态端口最简单改启动命令不写死18092每次启动自动分配空闲端口彻底规避冲突。方式A环境变量随机端口推荐# 每次启动随机端口 MASTER_PORT$((18000 RANDOM % 1000)) python train.py方式B代码内自动获取空闲端口彻底不用管端口修改ddp_trainer.py里dist_url硬编码逻辑替换为自动获取端口import socket # 自动找空闲端口 def get_free_port(): sock socket.socket() sock.bind((127.0.0.1, 0)) port sock.getsockname()[1] sock.close() return port # 替换原来的硬编码tcp://localhost:18092 free_port get_free_port() dist_url ftcp://localhost:{free_port}方案2内核开启端口复用解决TIME_WAIT残留临时生效重启失效sudo sysctl -w net.ipv4.tcp_tw_reuse1 sudo sysctl -w net.ipv4.tcp_fin_timeout10永久生效echo net.ipv4.tcp_tw_reuse 1 | sudo tee -a /etc/sysctl.conf echo net.ipv4.tcp_fin_timeout 10 | sudo tee -a /etc/sysctl.conf sudo sysctl -p作用允许新进程复用处于TIME_WAIT的端口不用等60秒释放。方案3代码增加SO_REUSEADDRPyTorch底层TCPStore复用如果不方便改端口可在初始化分布式前手动设置socket复用适用于单机单卡训练场景。三、补充说明日志里的无关警告WARNING:hat.utils.setup_env:The file /etc/nccl.conf does not exist.这条完全不影响运行只是缺少NCCL自定义配置文件不用处理。四、一键启动脚本集成自动清端口随机端口你可以写一个启动脚本每次训练前自动清理端口、随机分配端口一劳永逸#!/bin/bash # train.sh PORT18092 # 清理占用端口进程 sudo lsof -ti:$PORT | xargs -r kill -9 # 随机端口启动 MASTER_PORT$((18000 RANDOM % 2000)) echo 使用端口: $MASTER_PORT python train.py执行bash train.sh五、快速验证步骤执行清理命令sudo lsof -ti:18092 | xargs -r kill -9用随机端口启动MASTER_PORT$((18000 RANDOM % 1000)) python train.py若不再报错说明是固定端口TIME_WAIT/僵尸进程导致后续使用随机端口方案即可永久解决。Nmap 查找局域网内带SSH(22端口)的嵌入式板子完整方案一、先确认本机局域网网段Windowsipconfig找到以太网适配器/WLAN的IPv4如192.168.1.100网段就是192.168.1.0/24Linux / Ubuntuifconfig # 或 ip a获取本机网段例192.168.0.0/24二、全网段扫描只探测22端口速度快适合找嵌入式1. 最简命令推荐只扫22存活主机优先# 替换成你的网段如192.168.1.0/24 nmap -T4 -p 22 192.168.1.0/24参数说明-T4加速扫描不影响设备-p 22仅扫描SSH端口减少流量、不骚扰板子/24扫该网段下全部254台设备2. 先ping存活主机再扫22更省时间nmap -sn 192.168.1.0/24 # 先找出所有开机设备 nmap -T4 -p 22 --open 192.168.1.0/24 # 只输出22开放的IP--open只显示端口开放的设备过滤大量无意义结果3. 静默扫描不触发板子防火墙告警nmap -T2 -p 22 -sS 192.168.1.0/24-T2低速温和扫描-sS半连接扫描日志痕迹少三、进阶识别设备类型区分电脑/嵌入式开发板嵌入式板子SSH banner通常带Linux、ARM、Buildroot、OpenWrt、Ubuntu ARM等标识# 扫描同时抓取SSH服务版本信息 nmap -T4 -p 22 -sV 192.168.1.0/24输出会显示22/tcp open ssh OpenSSH 8.4p1 Ubuntu 5ubuntu2.3 (Ubuntu Linux; protocol 2.0)看到ARM、Buildroot、OpenWrt即为目标板子四、Windows无nmap替代方案安装Nmap官网安装包PowerShell简易全网ping探测先筛存活IP1..254 | ForEach-Object { Test-Connection 192.168.1.$_ -Count 1 -TimeoutSeconds 1 }五、常见问题扫描没结果板子和电脑不在同一个路由器/WiFi板子防火墙拦截ICMP(ping)加-Pn强制跳过ping直接扫端口nmap -T4 -p 22 -Pn 192.168.1.0/24扫描太慢缩小网段范围或用-T5极速扫描局域网内可用板子22端口被修改嵌入式有时改成2222、2345等可多端口扫描nmap -T4 -p 22,2222,2345 192.168.1.0/24六、找到IP后连接sshssh root192.168.1.123嵌入式默认账号常见root、admin密码多为root、123456、空密码。需要我根据你的电脑IP帮你生成一条可以直接复制运行的完整扫描命令吗你发一下本机ip即可。SSH 免密自动登录最常用两种方案方案1密钥免登标准、推荐所有Linux/ssh都支持原理本地生成密钥对公钥放到远程机器~/.ssh/authorized_keys1. 生成密钥本地终端Windows Git Bash / WSL / Mac / Linux# 一路回车不要设置密码实现完全自动登录 ssh-keygen如果已有密钥不想覆盖ssh-keygen -f ~/.ssh/id_ssh_target2. 推送公钥到远程服务器# ssh-copy-id 一键推送有这个命令优先用 ssh-copy-id username远程IP没有 ssh-copy-idWindows手动命令cat ~/.ssh/id_rsa.pub | ssh usernameIP mkdir -p ~/.ssh cat ~/.ssh/authorized_keys3. 测试免密登录ssh usernameIP无需输入密码即成功。方案2VSCode Remote-SSH 自动登录你大概率需要这个如果你是 VSCode 通过 SSH 远程开发直接配置~/.ssh/config不用每次输地址账号1. 创建/编辑本地ssh配置文件Windows路径****C:\Users\你的用户名\.ssh\configLinux/Mac****~/.ssh/config写入模板Host myserver HostName 192.168.1.100 User root Port 22 IdentityFile ~/.ssh/id_rsa参数说明Host myserver别名之后直接ssh myserver连接HostName远程IPUser登录用户名Portssh端口默认22可删掉IdentityFile私钥路径密钥免登必填保存后 VSCode Remote SSH 侧边栏会自动识别这个主机点击直接连接。⚠️权限注意Linux/Mac 本地.ssh文件夹权限700私钥id_rsa600chmod 700 ~/.ssh chmod 600 ~/.ssh/id_rsa❗ 不推荐方案密码明文自动登录ssh 原生不支持明文密码登录需要工具sshpass不安全密码明文保存仅内网临时测试用sshpass -p 你的密码 ssh usernameip常见排错密钥配置完成依旧提示输密码远程服务器~/.ssh权限过大sshd 配置禁止密钥登录检查/etc/ssh/sshd_configPubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keysVSCode Remote SSH 识别不到配置确保 config 文件没有后缀编码 UTF-8换行使用 LF。告诉我两点我直接给你写好完整可用的 config1本地系统Windowscmd/powershell还是 WSL / Linux2远程 IP、用户名、端口号。