首页
关于
文章打赏记录
Search
1
项目一:Revit电缆自动布置
50 阅读
2
如何使用 LoRA 微调 DeepSeek R1
11 阅读
3
revit二次开发入门
9 阅读
4
Dynamo 连缀属性
4 阅读
5
第十四章结课考试
4 阅读
linux
AI
Dynamo
Python
C#编程技术基础
C#实战项目
随笔
登录
Search
标签搜索
CSharp
基础知识
Dynamo
数据应用
AI
BIM管理
TomHanck4
累计撰写
35
篇文章
累计收到
6
条评论
首页
栏目
linux
AI
Dynamo
Python
C#编程技术基础
C#实战项目
随笔
页面
关于
文章打赏记录
搜索到
35
篇与
的结果
2026-02-23
Cherry Studio 在 WSL 中的安装说明
Cherry Studio 在 WSL 中的安装说明环境WSL2(Ubuntu Noble / 24.04)使用 WSLg 显示图形界面(Windows 11)1. 安装 deb 包cd "/mnt/c/users/12828/desktop/新建文件夹" sudo dpkg -i Cherry-Studio-1.7.19-amd64.deb若出现依赖错误,执行:sudo apt-get update sudo apt-get install -f仍有缺失依赖时可手动安装:sudo apt-get install libnotify4 libnss3 libxss1 xdg-utils libsecret-1-0然后再次执行:sudo dpkg -i Cherry-Studio-1.7.19-amd64.deb2. 声音库(解决 libasound.so.2)Ubuntu 24 中包名为 libasound2t64:sudo apt-get install libasound2t643. 启动方式可执行文件位于 /opt/Cherry Studio/,未加入 PATH,需用完整路径:/opt/Cherry\ Studio/CherryStudio可选:创建软链接,之后可直接用 cherrystudio 命令:sudo ln -sf "/opt/Cherry Studio/CherryStudio" /usr/local/bin/cherrystudio然后:cherrystudio4. 中文显示修复(方框 □□□□)安装中文字体:sudo apt-get install fonts-noto-cjk可选备用:sudo apt-get install fonts-wqy-zenhei安装后关闭并重新打开 Cherry Studio。5. Emoji 显示修复安装 emoji 字体并刷新字体缓存:sudo apt-get install fonts-noto-color-emoji fc-cache -fv可选:sudo apt-get install fonts-emojione fc-cache -fv安装后关闭并重新打开 Cherry Studio。6. 一键安装依赖(可选)若在新 WSL 或新系统上重装,可先执行以下命令再装 deb:sudo apt-get update sudo apt-get install -f libasound2t64 fonts-noto-cjk fonts-noto-color-emoji fc-cache -fv然后再执行本文第 1 步的 dpkg -i。7. 注意事项WSLg:需 Windows 11,WSL 2,图形会直接显示在 Windows 桌面。Windows 10:需在 Windows 安装 X 服务器(如 VcXsrv),并在 WSL 中设置 export DISPLAY=... 后再运行 Cherry Studio。每次修改字体或安装新字体后,建议重启 Cherry Studio 以生效。
2026年02月23日
0 阅读
0 评论
0 点赞
2026-02-22
基于 Windows 11 + AMD 8060S(统一内存 128GB)环境的llama.cpp 使用指南
llama.cpp 使用指南基于 Windows 11 + AMD 8060S(统一内存 128GB)环境整理。文件下载llama.cpp 程序(含 llama-cli、llama-server)官方 Releases 页面(推荐从这里选对应平台压缩包): https://github.com/ggml-org/llama.cpp/releasesWindows 常用构建(在当页的 Assets 里找):Vulkan(AMD 显卡推荐):llama-*-bin-win-vulkan-x64.zip仅 CPU:llama-*-bin-win-cpu-x64.zipCUDA(NVIDIA):llama-*-bin-win-cuda-*.zip 不要用 rocm / hip 的 Windows 包,在 Win 上易报错。官网说明: https://llama-cpp.com/GGUF 模型Hugging Face(搜索模型名 + GGUF): https://huggingface.co/models?search=ggufQwen 官方(如 Qwen3-Coder-Next): https://huggingface.co/Qwen 在模型页的 "Files and versions" 中选 .gguf 文件或分片包下载。ModelScope 魔搭(国内访问较稳,可搜 GGUF): https://www.modelscope.cn 模型库中搜索模型名或「GGUF」,在模型页下载 .gguf 或分片。Youtu-VL-4B-Instruct-GGUF(腾讯优图 4B 视觉语言模型): https://www.modelscope.cn/models/Tencent-YouTu-Research/Youtu-VL-4B-Instruct-GGUF/summary 在模型页「Files」中下载主模型 .gguf;若提供 mmproj-*.gguf 等多模态投影文件,需一并下载并与主模型同目录或按说明指定。Unsloth(预量化 GGUF,含 Dynamic 2.0 等): https://huggingface.co/unsloth 在 Unsloth 组织下按模型名选仓库,在 "Files and versions" 中下载 GGUF;说明见 https://docs.unsloth.ai。解压 llama.cpp 的 zip 后,将 llama-cli.exe、llama-server.exe 等与模型路径配置好即可使用(见下文)。1. 基本运行1.1 命令行(llama-cli)# 指定模型路径(分片模型只需指定第一个文件,会自动加载其余分片) ./llama-cli.exe -m "E:\models\Qwen3-Coder-Next\Qwen3-Coder-Next\Qwen3-Coder-Next-REAM-MXFP4_MOE.gguf"1.2 强制 CPU(GPU 报错时)./llama-cli.exe -m "你的模型路径.gguf" -ngl 0-ngl 0 表示不加载任何层到 GPU,全部用 CPU。2. Windows 下 GPU 后端说明后端说明ROCm/HIP主要为 Linux 设计,在 Windows 上对新卡(如 gfx1151)支持差,易出现 ROCm error: unspecified launch failure。VulkanAMD 在 Windows 上推荐,需使用带 Vulkan 的 llama.cpp 发行版。CPU-ngl 0,最稳定。若下载的是「Vulkan 版」但日志里仍出现 ROCm/ggml-hip,说明同目录下存在 HIP 相关 DLL 被优先加载。可临时重命名禁用:Rename-Item ggml-hip.dll ggml-hip.dll.bak Rename-Item hipblas.dll hipblas.dll.bak Rename-Item libhipblaslt.dll libhipblaslt.dll.bak然后重新运行,程序会使用 Vulkan。 注意:若本身是 ROCm 专用构建(如路径含 llamacpp-rocm),需从官方 releases 重新下载 Vulkan 或 MSVC 版本,而不是仅改 DLL。3. llama-server 部署3.1 基础启动./llama-server.exe -m "模型路径.gguf" --port 8080 --host 0.0.0.0启动后访问:http://localhost:8080。3.2 常用参数速查参数含义示例-m模型路径必填-c / --ctx-size上下文长度(token 数)-c 2048 或 --ctx-size 32768-ngl放到 GPU 的层数,0=全 CPU-ngl 99 全 GPU,-ngl 0 全 CPU--portHTTP 端口--port 8080--host监听地址,0.0.0.0 允许外网访问--host 0.0.0.0--threadsCPU 线程数--threads 8--batch-size批大小,影响显存/内存512、256、128--ubatch-size微批大小256、128、64--cache-type-kK cache 数据类型,用于省显存f16、q8_0、q4_1--cache-type-vV cache 数据类型同上--flash-attn使用 Flash Attention(若已编译)可省显存--alias模型别名(便于识别)--alias "Qwen3-Coder-Next"4. 显存/内存优化模型体积远小于「显存占用」是正常现象:除了权重,还有 KV cache 和推理时的中间结果。4.1 显存不足(例如 8GB 独显)减小上下文:-c 512 或 -c 1024减少 GPU 层数:-ngl 10 或 -ngl 0(纯 CPU)减小批处理:--batch-size 128 --ubatch-size 64示例(低显存):./llama-server.exe -m "模型路径.gguf" -c 512 -ngl 10 --port 8080 --threads 6 --batch-size 128 --ubatch-size 644.2 统一内存(如 8060S + 128GB 系统内存)可用较大上下文并尽量用 GPU,同时控制 KV cache 类型以控制总内存占用:使用 f16 KV cache(相对 f32 约减半):--cache-type-k f16 --cache-type-v f16更激进:--cache-type-k q8_0 --cache-type-v q8_0 或 q4_1按需限制上下文:-c 4096 或 -c 2048示例(统一内存 + 控制占用):./llama-server.exe -m "模型路径.gguf" -c 4096 -ngl 99 --port 8080 --threads 8 --batch-size 512 --ubatch-size 256 --cache-type-k f16 --cache-type-v f16若仍占用过高,可把上下文改为 -c 2048,并把 cache 改为 q4_1:./llama-server.exe -m "模型路径.gguf" -c 2048 -ngl 99 --port 8080 --threads 8 --batch-size 512 --cache-type-k q4_1 --cache-type-v q4_15. Qwen3-Coder-Next 推荐参数(官方风格)可与上面任意 server 命令组合使用:参数推荐值说明--temp1.0采样温度--top-p0.95nucleus sampling--top-k40top-k 采样--min-p0.01注意:llama.cpp 默认常为 0.05,Qwen 推荐 0.01--repeat-penalty1.0禁用重复惩罚示例(Qwen 推荐 + 内存优化):./llama-server.exe -m "E:\models\Qwen3-Coder-Next\Qwen3-Coder-Next\Qwen3-Coder-Next-REAM-MXFP4_MOE.gguf" --alias "Qwen3-Coder-Next" --ctx-size 32768 --temp 1.0 --top-p 0.95 --top-k 40 --min-p 0.01 --repeat-penalty 1.0 -ngl 99 --port 8080 --threads 8 --batch-size 512 --cache-type-k q4_1若仍觉内存/显存占用高,可把 --ctx-size 改为 16384 或 8192。6. 故障排查简表现象处理方向ROCm 报错、hipMemGetInfo 失败使用 -ngl 0 或换 Vulkan 版本;在 Windows 避免用 ROCm 专用构建。想用 Vulkan 却仍加载 HIP检查同目录 ggml-hip.dll 等,临时重命名或使用纯 Vulkan 发行版。显存/内存占用远大于模型大小降低 -c、减小 --batch-size/--ubatch-size,使用 --cache-type-k/--cache-type-v(如 q4_1、q8_0、f16)。大模型在小显存卡上跑不动减小 -ngl(或 -ngl 0),或换更小量化/更小参数量模型。7. 参考命令汇总纯 CPU、省内存:./llama-server.exe -m "模型路径.gguf" -c 1024 -ngl 0 --port 8080 --threads 8 --batch-size 256Vulkan GPU + 控制占用(统一内存):./llama-server.exe -m "模型路径.gguf" -c 4096 -ngl 99 --port 8080 --threads 8 --batch-size 512 --cache-type-k q4_1 --cache-type-v q4_1Qwen3-Coder-Next 推荐 + 32K 上下文:./llama-server.exe -m "E:\models\Qwen3-Coder-Next\Qwen3-Coder-Next\Qwen3-Coder-Next-REAM-MXFP4_MOE.gguf" --alias "Qwen3-Coder-Next" --ctx-size 32768 --temp 1.0 --top-p 0.95 --top-k 40 --min-p 0.01 --repeat-penalty 1.0 -ngl 99 --port 8080 --threads 8 --batch-size 512 --cache-type-k q4_1 --host 0.0.0.0按实际显存/内存和需求,调整 -c、-ngl、--batch-size 和 --cache-type-* 即可。8. Qwen3-Next-80B-A3B-Thinking(Thinking 推理模型)模型说明见 unsloth/Qwen3-Next-80B-A3B-Thinking。仅思维模式,需较长输出空间做推理;官方推荐采样:Temperature=0.6, TopP=0.95, TopK=20, MinP=0;常规请求建议 max 输出 32K token,复杂推理可设更大。推荐启动命令(统一内存 / 大内存):./llama-server.exe -m "E:\models\Qwen3-Next-80B-A3B\MXFP4_MOE\Qwen3-Next-80B-A3B-Thinking-MXFP4_MOE-00001-of-00003.gguf" --alias "Qwen3-Next-80B-A3B-Thinking" --ctx-size 32768 -n 32768 --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0 -ngl 99 --port 8080 --threads 8 --batch-size 512 --ubatch-size 256 --cache-type-k f16 --cache-type-v f16 --host 0.0.0.0参数取值说明-m分片第一文件路径自动加载 00002、00003--alias服务里显示的模型名客户端选模型时用--ctx-size32768上下文长度,可改为 65536/131072(更吃内存)-n32768单次最大生成 token,thinking 需足够长--temp0.6官方推荐--top-p0.95官方推荐--top-k20官方推荐--min-p0官方推荐-ngl99GPU 层数,显存不够可减小或 -ngl 0 纯 CPU--cache-type-k/vf16省内存,可改为 q4_1 进一步省省内存版(减小上下文与批大小):./llama-server.exe -m "E:\models\Qwen3-Next-80B-A3B\MXFP4_MOE\Qwen3-Next-80B-A3B-Thinking-MXFP4_MOE-00001-of-00003.gguf" --alias "Qwen3-Next-80B-A3B-Thinking" --ctx-size 16384 -n 16384 --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0 -ngl 99 --port 8080 --threads 8 --batch-size 256 --ubatch-size 128 --cache-type-k q4_1 --cache-type-v q4_19. Youtu-VL-4B-Instruct-GGUF(腾讯优图视觉语言模型)模型页: https://www.modelscope.cn/models/Tencent-YouTu-Research/Youtu-VL-4B-Instruct-GGUF/summary说明:腾讯优图 4B 视觉语言模型(VLM),支持图像 + 文本输入,需 带多模态支持的 llama.cpp。本地路径示例:E:\models\Youtu-VL-4B-Instruct\F16\Youtu-VL-4B-Instruct-F16.gguf 若该模型需 mmproj(多模态投影),将 mmproj-*.gguf 与主模型放同目录,启动时加 --mmproj "同目录\mmproj-xxx.gguf"。推荐启动命令(本地 F16 模型,含 mmproj):./llama-server.exe -m "E:\models\Youtu-VL-4B-Instruct\F16\Youtu-VL-4B-Instruct-F16.gguf" --mmproj "E:\models\Youtu-VL-4B-Instruct\F16\mmproj-Youtu-VL-4b-Instruct-BF16.gguf" --port 8080 --image-max-tokens 2048 --temp 0.1 --top-p 0.001 --repeat-penalty 1.05 -n 12280 --host 0.0.0.0参数取值说明-m主模型 .gguf 路径必填--mmprojmmproj-*.gguf 路径多模态视觉编码投影,与主模型同目录时按实际文件名填写--port8080HTTP 端口--image-max-tokens2048图像编码最大 token 数--temp0.1低温度,输出更稳定--top-p0.001nucleus 采样--repeat-penalty1.05抑制重复-n12280单次最大生成 token 数--host0.0.0.0允许外网访问按需可加:-ngl 99(GPU 层数)、--alias "Youtu-VL-4B"、-c 4096(上下文长度)。若显存/内存紧张,可减小 -n、-c 或 --image-max-tokens。10. GLM-4.7-Flash(MXFP4_MOE / Claude Opus 4.5 推理蒸馏版)模型页: https://huggingface.co/TeichAI/GLM-4.7-Flash-Claude-Opus-4.5-High-Reasoning-Distill本地路径示例:E:\models\GLM-4.7-Flash\MXFP4_MOE\GLM-4.7-Flash-Claude-4.5-Opus-i1-MXFP4_MOE_XL-exp.gguf说明:智谱 GLM-4.7-Flash 经 Claude Opus 4.5 High Reasoning 蒸馏的 MXFP4 MOE 量化版(Coding / Science / Deep Research)。单文件 GGUF;若为分片,-m 只填第一个文件即可。官方建议 llama.cpp 使用 --min-p 0.01(默认 0.05)。推荐启动命令(含官方采样参数):./llama-server.exe -m "E:\models\GLM-4.7-Flash\MXFP4_MOE\GLM-4.7-Flash-Claude-4.5-Opus-i1-MXFP4_MOE_XL-exp.gguf" --alias "GLM-4.7-Flash" --ctx-size 32768 --temp 1.0 --top-p 0.95 --min-p 0.01 --repeat-penalty 1.0 -ngl 99 --port 8080 --threads 8 --batch-size 512 --cache-type-k f16 --cache-type-v f16 --host 0.0.0.0参数取值说明-m模型 .gguf 路径必填;分片时填第一个文件--alias服务中显示的模型名客户端选模型用--ctx-size32768上下文长度,可按需改为 16384 等--temp1.0通用任务;工具调用/基准可用 0.7--top-p0.95通用;工具调用可改为 1.0--min-p0.01官方建议(llama.cpp 默认 0.05)--repeat-penalty1.0关闭或 1.0-ngl99GPU 层数,显存不足可减小或 -ngl 0 纯 CPU--port8080HTTP 端口--cache-type-k/vf16省内存,可改为 q4_1 进一步省显存/内存紧张时可将 --ctx-size 改为 16384,--batch-size 改为 256,或加 --cache-type-k q4_1 --cache-type-v q4_1。若效果不佳,可尝试 --temp 0.5 或 0.6。
2026年02月22日
3 阅读
0 评论
0 点赞
2026-02-18
AMD Ryzen AI MAX+ 395 ROCm WSL2 安装VLLM指南
AMD Ryzen AI MAX+ 395 ROCm WSL2 安装指南硬件信息CPU: AMD Ryzen AI MAX+ PRO 395GPU: AMD Radeon 8060S (40 CU, 32GB 显存)架构: gfx1151安装步骤1. Windows 端安装1.1 安装 AMD 驱动下载最新驱动:https://www.amd.com/en/support/download/drivers.html运行安装程序,选择 "Custom Install"只勾选 "AMD Chipset Drivers"(其他组件不需要)完成安装并重启1.2 安装 Windows SDK下载:https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/安装时只勾选 "Windows SDK for Desktop C++ Apps"记住安装路径(通常是 C:\Program Files (x86)\Windows Kits\10\Include\10.0.26100.0\)1.3 安装 WSL2# 检查 WSL 版本 wsl --version # 如果未安装,运行 wsl --install -d Ubuntu-24.042. WSL2 端安装2.1 进入 WSL2wsl2.2 检查 Ubuntu 版本lsb_release -a # 确认是 Ubuntu 24.042.3 安装 ROCm 7.2# 下载 ROCm 安装器 wget https://repo.radeon.com/amdgpu-install/7.2/ubuntu/noble/amdgpu-install_7.2.70200-1_all.deb # 安装 sudo apt install ./amdgpu-install_7.2.70200-1_all.deb # 更新系统 sudo apt update # 安装依赖 sudo apt install python3-setuptools python3-wheel # 添加用户到 render 和 video 组 sudo usermod -a -G render,video $LOGNAME # 安装 ROCm sudo apt install rocm2.4 验证 ROCm 安装# 检查 ROCm 目录 tree -L 1 /opt # 应该看到 rocm-7.2.0 目录2.5 编译安装 librocdxg安装编译工具sudo apt install cmake git build-essential克隆并编译# 克隆仓库 git clone https://github.com/ROCm/librocdxg.git cd librocdxg # 设置 Windows SDK 路径(根据实际安装路径调整) export win_sdk='/mnt/c/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/' # 编译 mkdir -p build cd build cmake .. -DWIN_SDK="${win_sdk}/shared" make sudo make install2.6 设置环境变量# 临时设置(当前会话有效) export HSA_ENABLE_DXG_DETECTION=1 # 永久设置(添加到 ~/.bashrc) echo 'export HSA_ENABLE_DXG_DETECTION=1' >> ~/.bashrc source ~/.bashrc2.7 验证 GPU 识别rocminfo预期输出:Agent 1: CPU (AMD RYZEN AI MAX+ PRO 395)Agent 2: GPU (gfx1151, AMD Radeon 8060S, 32GB 显存)3. 使用 ROCm3.1 使用 Docker 容器(推荐)docker run -it \ -v /usr/lib/wsl/lib/libdxcore.so:/usr/lib/libdxcore.so \ -v /opt/rocm/lib/librocdxg.so:/usr/lib/librocdxg.so \ -e HSA_ENABLE_DXG_DETECTION=1 \ --device=/dev/dxg \ --cap-add=SYS_PTRACE \ --security-opt seccomp=unconfined \ --ipc=host \ --shm-size 8G \ rocm/pytorch:latest在容器内测试:import torch print(torch.cuda.is_available()) # 应该返回 True print(torch.cuda.get_device_name(0)) # 显示 GPU 名称3.2 在 WSL2 虚拟环境中安装 PyTorch + vLLM步骤 1:创建工作目录和虚拟环境# 创建工作目录 mkdir -p ~/ai-workspace cd ~/ai-workspace # 创建虚拟环境 python3 -m venv vllm-env预期输出:无输出表示成功# 激活虚拟环境 source vllm-env/bin/activate预期输出:命令提示符前出现 (vllm-env)(vllm-env) fsy@HPAgent:~/ai-workspace$# 验证虚拟环境 which python预期输出:/home/fsy/ai-workspace/vllm-env/bin/python# 升级 pip pip install --upgrade pip预期输出:Successfully installed pip-24.x.x步骤 2:设置环境变量# 临时设置(当前会话有效) export HSA_ENABLE_DXG_DETECTION=1 # 永久设置(推荐) echo 'export HSA_ENABLE_DXG_DETECTION=1' >> ~/.bashrc source ~/.bashrc验证环境变量:echo $HSA_ENABLE_DXG_DETECTION预期输出:1步骤 3:安装 PyTorch(ROCm 7.1)pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm7.1预期输出:Collecting torch Downloading https://download.pytorch.org/whl/rocm7.1/torch-2.10.0%2Brocm7.1-cp312-cp312-linux_x86_64.whl (2.8 GB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.8/2.8 GB 10.5 MB/s eta 0:00:00 ... Successfully installed torch-2.10.0+rocm7.1 torchvision-0.x.x torchaudio-2.x.x注意:下载大小约 2.8-3.5 GB安装时间:5-15 分钟(取决于网速和磁盘速度)如果看起来卡住,可以用 watch -n 1 'du -sh ~/.cache/pip' 查看下载进度步骤 4:验证 PyTorch 和 GPUpython -c "import torch; print(f'PyTorch: {torch.__version__}'); print(f'CUDA available: {torch.cuda.is_available()}'); print(f'GPU: {torch.cuda.get_device_name(0) if torch.cuda.is_available() else \"N/A\"}')"预期输出:PyTorch: 2.10.0+rocm7.1 CUDA available: True GPU: AMD Radeon(TM) 8060S Graphics如果输出不正确:CUDA available: False → 检查环境变量 HSA_ENABLE_DXG_DETECTIONGPU: N/A → 运行 rocminfo 检查 GPU 是否被识别步骤 5:安装 vLLM(从源码编译)# 安装编译依赖 pip install ninja packaging wheel预期输出:Successfully installed ninja-1.x.x packaging-24.x wheel-0.x.x# 克隆 vLLM 仓库 cd ~/ai-workspace git clone https://github.com/vllm-project/vllm.git cd vllm预期输出:Cloning into 'vllm'... remote: Enumerating objects: xxxxx, done. remote: Counting objects: 100% (xxxx/xxxx), done. ...# 1. 先安装构建依赖(--no-build-isolation 时 pip 不会自动装,否则会报 No module named 'setuptools_scm') pip install "cmake>=3.26.1" ninja "packaging>=24.2" "setuptools>=77.0.3,<81.0.0" "setuptools-scm>=8" wheel "jinja2>=3.1.6" regex build "protobuf>=5.29.6" "grpcio-tools==1.78.0" # 2. 安装 vLLM(编译过程需要 10-20 分钟) # ROCm 必须加 --no-build-isolation,否则 pip 会用临时环境里的 CUDA 版 torch,导致报错 CUDA_HOME is not set pip install -e . --no-build-isolation预期输出:Obtaining file:///.../vllm Checking if build backend supports build_editable ... done ... Building wheels for collected packages: vllm Building wheel for vllm (pyproject.toml) ... done Successfully built vllm Successfully installed vllm-0.16.0rc2.dev276+ge24663c5a.rocm720 ...(最后一行会列出大量依赖;vllm 版本带 rocm720 等后缀表示 ROCm 构建成功,实际版本号随源码与 ROCm 版本变化。)注意:先装构建依赖:使用 --no-build-isolation 时 pip 不会安装 pyproject 里的构建依赖,需先执行上面的 pip install cmake ninja ...,否则会报 ModuleNotFoundError: No module named 'setuptools_scm'。ROCm 安装必须使用 --no-build-isolation:这样会使用当前环境已安装的 ROCm 版 PyTorch 参与构建;若不加,pip 会在临时环境中安装默认(CUDA)版 torch,构建时会报 AssertionError: CUDA_HOME is not set。编译时间:10-20 分钟CPU 使用率会很高(50-100%)如果编译失败,检查是否有足够的内存(建议 8GB+)步骤 6:验证 vLLMpython -c "import vllm; print(f'vLLM version: {vllm.__version__}')"预期输出(示例):vLLM version: 0.16.0rc2.dev276+ge24663c5a.rocm720步骤 7:测试 vLLM 推理(可选)创建测试脚本 test_vllm.py:from vllm import LLM, SamplingParams # 加载小模型测试 print("Loading model...") llm = LLM(model="facebook/opt-125m") # 生成文本 print("Generating text...") prompts = ["Hello, my name is"] sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=20) outputs = llm.generate(prompts, sampling_params) print("\nResults:") for output in outputs: print(f"Prompt: {output.prompt}") print(f"Generated: {output.outputs[0].text}")运行测试:python test_vllm.py预期输出:Loading model... INFO: Initializing an LLM engine with config: ... Generating text... Results: Prompt: Hello, my name is Generated: John Smith and I am a software engineer...步骤 8:启动 vLLM API 服务器(可选)# 启动 API 服务器(单 GPU) python -m vllm.entrypoints.api_server \ --model facebook/opt-125m \ --dtype float16 \ --port 8000预期输出:INFO: Started server process [xxxxx] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000测试 API(另开终端):curl http://localhost:8000/generate \ -H "Content-Type: application/json" \ -d '{"prompt": "What is AMD?", "max_tokens": 50}'预期输出:{"text":["What is AMD?\nAMD (Advanced Micro Devices) is a semiconductor company that designs and manufactures computer processors..."]}常见问题问题 1:虚拟环境移动后无法安装包error: externally-managed-environment解决方案:虚拟环境不能移动,必须重新创建deactivate rm -rf ~/ai-workspace/vllm-env cd ~/ai-workspace python3 -m venv vllm-env source vllm-env/bin/activate # 重新安装 PyTorch(有缓存,很快) pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm7.1问题 2:PyTorch 安装卡住解决方案:查看下载进度# 另开终端 watch -n 1 'du -sh ~/.cache/pip'如果确实卡住:# Ctrl+C 取消 pip cache purge pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/rocm7.1 --timeout 1000 -v问题 3:vLLM 编译失败解决方案:检查内存和依赖# 检查可用内存 free -h # 如果内存不足,增加 swap sudo fallocate -l 8G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile # 重新编译(ROCm 需加 --no-build-isolation;若报 setuptools_scm 等缺失,先执行上文「安装 vLLM」里的构建依赖安装命令) pip install -e . --no-build-isolation版本信息WSL 版本: 2.6.3.0Ubuntu: 24.04 LTSROCm: 7.2librocdxg: 1.1.0AMD 驱动: 26.2.1 或更新版本PyTorch: 2.x(ROCm 7.1 版本)vLLM: 最新版本兼容性根据官方文档,支持以下 Ryzen AI 系列:AMD Ryzen AI Max+ 395 ✅AMD Ryzen AI Max 390AMD Ryzen AI Max 385AMD Ryzen AI 9 HX 375AMD Ryzen AI 9 HX 370AMD Ryzen AI 9 365参考资料ROCm 官方文档: https://rocm.docs.amd.com/librocdxg GitHub: https://github.com/ROCm/librocdxgAMD 驱动下载: https://www.amd.com/en/support/download/drivers.htmlWindows SDK: https://developer.microsoft.com/en-us/windows/downloads/windows-sdk/故障排除GPU 未识别# 检查环境变量 echo $HSA_ENABLE_DXG_DETECTION # 检查设备节点 ls -la /dev/dxg # 重新加载 WSL # 在 PowerShell 中运行 wsl --shutdown wslDocker 容器无法访问 GPU确保运行容器时包含所有必需参数:--device=/dev/dxg-v /usr/lib/wsl/lib/libdxcore.so:/usr/lib/libdxcore.so-v /opt/rocm/lib/librocdxg.so:/usr/lib/librocdxg.so-e HSA_ENABLE_DXG_DETECTION=1安装日期: 2026-02-18测试状态: ✅ 成功识别 GPU,ROCm 正常工作
2026年02月18日
1 阅读
0 评论
0 点赞
2026-01-07
PostgreSQL 安装和使用指南
PostgreSQL 安装和使用指南目录概述安装 PostgreSQL基本配置启动和停止服务用户和权限管理数据库操作表和数据操作备份和恢复性能调优基础常用命令总结故障排除概述PostgreSQL 是一个功能强大的开源关系型数据库管理系统,支持 SQL 标准,并提供了许多现代特性,如复杂查询、外键、触发器、视图、事务完整性等。主要特性ACID 事务支持多版本并发控制 (MVCC)支持多种数据类型可扩展的类型系统丰富的索引类型全文搜索JSON 和 JSONB 支持存储过程和函数安装 PostgreSQL在 Ubuntu/Debian 上安装# 更新包列表 sudo apt update # 安装 PostgreSQL sudo apt install postgresql postgresql-contrib # 检查版本 psql --version在 CentOS/RHEL 上安装# 安装 PostgreSQL 仓库 sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm # 安装 PostgreSQL sudo yum install -y postgresql15-server postgresql15-contrib # 初始化数据库 sudo /usr/pgsql-15/bin/postgresql-15-setup initdb # 启动服务 sudo systemctl start postgresql-15 sudo systemctl enable postgresql-15在 macOS 上安装# 使用 Homebrew 安装 brew install postgresql # 启动服务 brew services start postgresql使用 Docker 安装# 拉取 PostgreSQL 镜像 docker pull postgres:15 # 运行容器 docker run --name postgres-db -e POSTGRES_PASSWORD=mypassword -e POSTGRES_DB=mydb -p 5432:5432 -d postgres:15基本配置配置文件位置PostgreSQL 的主要配置文件通常位于:/etc/postgresql/15/main/postgresql.conf (Ubuntu/Debian)/var/lib/pgsql/15/data/postgresql.conf (CentOS/RHEL)/usr/local/var/postgres/postgresql.conf (macOS with Homebrew)常用配置参数# 监听地址 (默认只监听本地) listen_addresses = '*' # 端口 (默认 5432) port = 5432 # 最大连接数 max_connections = 100 # 共享缓冲区大小 (设置为系统内存的 25%) shared_buffers = 256MB # 工作内存 work_mem = 4MB # 维护工作内存 maintenance_work_mem = 64MB # 检查点间隔 checkpoint_completion_target = 0.9 # WAL 日志级别 wal_level = replica # 最大 WAL 发送者进程数 max_wal_senders = 10修改配置后重启服务# Ubuntu/Debian sudo systemctl restart postgresql # CentOS/RHEL sudo systemctl restart postgresql-15 # macOS brew services restart postgresql启动和停止服务系统服务管理# 启动服务 sudo systemctl start postgresql # 停止服务 sudo systemctl stop postgresql # 重启服务 sudo systemctl restart postgresql # 查看状态 sudo systemctl status postgresql # 开机自启 sudo systemctl enable postgresql手动启动# 切换到 postgres 用户 sudo -u postgres -i # 启动 PostgreSQL pg_ctl -D /var/lib/postgresql/15/main start # 停止 PostgreSQL pg_ctl -D /var/lib/postgresql/15/main stop用户和权限管理切换到 postgres 用户sudo -u postgres psql # 或者 sudo su - postgres psql创建用户-- 创建普通用户 CREATE USER username WITH PASSWORD 'password'; -- 创建超级用户 CREATE USER admin WITH SUPERUSER PASSWORD 'password'; -- 创建用户并指定权限 CREATE USER app_user WITH PASSWORD 'password' CREATEDB CREATEROLE;修改用户密码-- 修改密码 ALTER USER username PASSWORD 'new_password'; -- 强制修改密码 (下次登录时) ALTER USER username PASSWORD NULL;删除用户DROP USER username;角色和权限-- 创建角色 CREATE ROLE readonly; -- 授予权限 GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly; -- 撤销权限 REVOKE SELECT ON ALL TABLES IN SCHEMA public FROM readonly; -- 授予数据库连接权限 GRANT CONNECT ON DATABASE mydb TO username; -- 授予表权限 GRANT SELECT, INSERT, UPDATE, DELETE ON table_name TO username;数据库操作创建数据库-- 创建数据库 CREATE DATABASE mydb; -- 创建数据库并指定所有者 CREATE DATABASE mydb OWNER username; -- 创建数据库并指定编码 CREATE DATABASE mydb OWNER username ENCODING 'UTF8' LC_COLLATE 'en_US.UTF-8' LC_CTYPE 'en_US.UTF-8' TEMPLATE template0;连接数据库# 使用 psql 连接 psql -h localhost -U username -d mydb # 或者直接连接默认数据库 psql -U username mydb列出数据库-- 列出所有数据库 \l -- 或者 SELECT datname FROM pg_database;删除数据库-- 删除数据库 (需要超级用户权限) DROP DATABASE mydb;表和数据操作创建表-- 创建简单表 CREATE TABLE users ( id SERIAL PRIMARY KEY, name VARCHAR(100) NOT NULL, email VARCHAR(255) UNIQUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 创建带有外键的表 CREATE TABLE posts ( id SERIAL PRIMARY KEY, user_id INTEGER REFERENCES users(id), title VARCHAR(200) NOT NULL, content TEXT, published_at TIMESTAMP );数据类型数据类型描述示例SERIAL自增整数id SERIALINTEGER整数age INTEGERVARCHAR(n)可变长度字符串name VARCHAR(100)TEXT无限长度文本content TEXTBOOLEAN布尔值active BOOLEANTIMESTAMP时间戳created_at TIMESTAMPDATE日期birth_date DATENUMERIC(p,s)精确数值price NUMERIC(10,2)JSONBJSON 数据metadata JSONB插入数据-- 插入单行数据 INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com'); -- 插入多行数据 INSERT INTO users (name, email) VALUES ('李四', 'lisi@example.com'), ('王五', 'wangwu@example.com'); -- 插入并返回数据 INSERT INTO users (name, email) VALUES ('赵六', 'zhaoliu@example.com') RETURNING id, name, email;查询数据-- 查询所有数据 SELECT * FROM users; -- 选择特定列 SELECT name, email FROM users; -- 带条件查询 SELECT * FROM users WHERE name LIKE '张%'; -- 排序 SELECT * FROM users ORDER BY created_at DESC; -- 分页 SELECT * FROM users ORDER BY id LIMIT 10 OFFSET 20; -- 聚合查询 SELECT COUNT(*) FROM users; SELECT AVG(age) FROM users WHERE age IS NOT NULL; -- 连接查询 SELECT u.name, p.title FROM users u JOIN posts p ON u.id = p.user_id;更新数据-- 更新单行 UPDATE users SET name = '张三新' WHERE id = 1; -- 更新多行 UPDATE users SET active = true WHERE created_at < '2024-01-01'; -- 更新并返回 UPDATE users SET email = 'newemail@example.com' WHERE id = 1 RETURNING id, name, email;删除数据-- 删除特定行 DELETE FROM users WHERE id = 1; -- 删除所有数据 DELETE FROM users; -- 清空表 (保留表结构) TRUNCATE TABLE users;索引-- 创建索引 CREATE INDEX idx_users_email ON users(email); CREATE INDEX idx_users_name ON users(name); -- 创建唯一索引 CREATE UNIQUE INDEX idx_users_unique_email ON users(email); -- 创建复合索引 CREATE INDEX idx_posts_user_published ON posts(user_id, published_at); -- 查看索引 SELECT * FROM pg_indexes WHERE tablename = 'users'; -- 删除索引 DROP INDEX idx_users_email;备份和恢复使用 pg_dump 备份# 备份整个数据库 pg_dump -U username -h localhost mydb > backup.sql # 备份压缩格式 pg_dump -U username -h localhost -Fc mydb > backup.dump # 备份特定表 pg_dump -U username -h localhost -t users mydb > users_backup.sql # 只备份数据 pg_dump -U username -h localhost --data-only mydb > data_only.sql # 只备份结构 pg_dump -U username -h localhost --schema-only mydb > schema_only.sql使用 pg_restore 恢复# 从 SQL 文件恢复 psql -U username -h localhost -d mydb < backup.sql # 从压缩文件恢复 pg_restore -U username -h localhost -d mydb backup.dump # 创建数据库并恢复 createdb -U username newdb pg_restore -U username -h localhost -d newdb backup.dump逻辑备份脚本#!/bin/bash # 自动备份脚本 BACKUP_DIR="/var/backups/postgresql" DATE=$(date +%Y%m%d_%H%M%S) DB_NAME="mydb" DB_USER="postgres" mkdir -p $BACKUP_DIR pg_dump -U $DB_USER -h localhost -Fc $DB_NAME > $BACKUP_DIR/${DB_NAME}_${DATE}.dump # 删除7天前的备份 find $BACKUP_DIR -name "*.dump" -mtime +7 -delete echo "Backup completed: ${DB_NAME}_${DATE}.dump"物理备份 (使用 pg_basebackup)# 创建基础备份 pg_basebackup -U postgres -h localhost -D /var/lib/postgresql/backup -Fp -Xs -P # 恢复时停止服务,清理数据目录,复制备份文件,重启服务性能调优基础查看系统状态-- 查看当前连接 SELECT * FROM pg_stat_activity; -- 查看表大小 SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) as size FROM pg_tables ORDER BY pg_total_relation_size(schemaname||'.'||tablename) DESC; -- 查看索引使用情况 SELECT schemaname, tablename, indexname, idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_user_indexes ORDER BY idx_scan DESC; -- 查看慢查询 SELECT query, calls, total_time, mean_time, rows FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10;配置参数调优# 内存配置 shared_buffers = 256MB # 通常设置为系统内存的 25% work_mem = 4MB # 单个查询可用的内存 maintenance_work_mem = 64MB # 维护操作内存 effective_cache_size = 1GB # 操作系统缓存大小 # 检查点配置 checkpoint_completion_target = 0.9 wal_buffers = 16MB max_wal_size = 1GB min_wal_size = 80MB # 查询规划器 random_page_cost = 1.1 # SSD 设为 1.1,HDD 设为 4.0 effective_io_concurrency = 200 # SSD 设为 200,HDD 设为 2索引优化-- 查看未使用的索引 SELECT schemaname, tablename, indexname FROM pg_stat_user_indexes WHERE idx_scan = 0; -- 查看重复索引 SELECT pg_size_pretty(sum(pg_relation_size(indexrelid))) as size, array_agg(indexrelid::regclass) as indexes FROM pg_index GROUP BY indrelid, indkey HAVING count(*) > 1; -- EXPLAIN 分析查询 EXPLAIN ANALYZE SELECT * FROM users WHERE name = '张三';表优化-- 重新组织表 (VACUUM) VACUUM users; -- 完全清理表 VACUUM FULL users; -- 重新建立索引 REINDEX TABLE users; -- 分析表统计信息 ANALYZE users;常用命令总结psql 命令# 连接数据库 psql -U username -d dbname -h host -p port # 执行 SQL 文件 psql -U username -d dbname -f file.sql # 导出查询结果 psql -U username -d dbname -c "SELECT * FROM users" -o output.txtpsql 内部命令-- 帮助 \? -- 列出数据库 \l -- 切换数据库 \c dbname -- 列出表 \dt -- 描述表结构 \d table_name -- 列出用户 \du -- 查看查询历史 \s -- 执行操作系统命令 \! ls -la -- 退出 \q系统管理命令# 查看 PostgreSQL 进程 ps aux | grep postgres # 查看日志 tail -f /var/log/postgresql/postgresql-15-main.log # 检查配置文件语法 postgres -C config_file # 重新加载配置 pg_ctl reload -D /var/lib/postgresql/15/main故障排除常见问题连接被拒绝检查服务是否启动:sudo systemctl status postgresql检查监听地址配置检查防火墙设置权限不足-- 检查用户权限 SELECT * FROM information_schema.role_table_grants WHERE grantee = 'username'; -- 授予权限 GRANT ALL PRIVILEGES ON DATABASE mydb TO username;磁盘空间不足-- 查看数据库大小 SELECT pg_size_pretty(pg_database_size('mydb')); -- 查看表大小 SELECT schemaname, tablename, pg_size_pretty(pg_total_relation_size(schemaname||'.'||tablename)) FROM pg_tables ORDER BY pg_total_relation_size DESC LIMIT 10;查询性能问题-- 启用查询统计 CREATE EXTENSION IF NOT EXISTS pg_stat_statements; -- 查看慢查询 SELECT query, calls, total_time/calls as avg_time FROM pg_stat_statements ORDER BY total_time DESC LIMIT 5;恢复数据库# 停止服务 sudo systemctl stop postgresql # 清理数据目录 sudo rm -rf /var/lib/postgresql/15/main/* # 从备份恢复 sudo -u postgres pg_restore -C -d postgres /path/to/backup.dump # 启动服务 sudo systemctl start postgresql监控和维护-- 查看当前活动连接 SELECT datname, usename, client_addr, state, query_start FROM pg_stat_activity WHERE state != 'idle'; -- 查看锁定情况 SELECT blocked_locks.pid as blocked_pid, blocked_activity.usename as blocked_user, blocking_locks.pid as blocking_pid, blocking_activity.usename as blocking_user, blocked_activity.query as blocked_statement FROM pg_locks blocked_locks JOIN pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid JOIN pg_locks blocking_locks ON blocking_locks.locktype = blocked_locks.locktype AND blocking_locks.database IS NOT DISTINCT FROM blocked_locks.database AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid AND blocking_locks.pid != blocked_locks.pid JOIN pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid WHERE NOT blocked_locks.granted;扩展和插件-- 查看已安装扩展 SELECT * FROM pg_extension; -- 安装常用扩展 CREATE EXTENSION IF NOT EXISTS pg_stat_statements; -- 查询统计 CREATE EXTENSION IF NOT EXISTS uuid-ossp; -- UUID 支持 CREATE EXTENSION IF NOT EXISTS postgis; -- 地理信息支持 CREATE EXTENSION IF NOT EXISTS pg_trgm; -- 模糊匹配这个指南涵盖了 PostgreSQL 的基本安装、配置、使用和维护。如果你在使用过程中遇到特定问题,请提供详细的错误信息以获得更精确的帮助。
2026年01月07日
1 阅读
0 评论
0 点赞
2026-01-07
Linux 中新增用户的方法
Linux 中新增用户的方法目录1. 使用 useradd 命令(推荐)1.1 基本语法1.2 常用选项1.3 示例2. 使用 adduser 命令(交互式,Debian/Ubuntu)2.1 基本用法2.2 特点2.3 示例3. 创建用户后的必要操作3.1 设置密码3.2 赋予 sudo 权限(可选)3.3 验证用户创建3.4 用户主目录管理3.4.1 创建用户主目录3.4.2 复制默认配置文件到主目录3.4.3 修改用户主目录3.4.4 设置主目录权限3.4.5 查看用户主目录3.5 设置登录时的默认账号3.5.1 设置默认登录用户(图形界面)3.5.1.1 使用 systemd 的自动登录(systemd 系统)3.5.1.2 使用 LightDM(Ubuntu/Linux Mint)3.5.1.3 使用 GDM(GNOME 显示管理器)3.5.1.4 使用 SDDM(KDE Plasma)3.5.2 设置默认 Shell3.5.3 设置默认用户组3.5.4 设置默认环境变量3.5.5 设置默认工作目录3.5.6 配置 SSH 默认登录用户3.5.7 设置系统默认用户(系统服务)3.5.8 禁用自动登录(安全考虑)4. 切换用户的方法4.1 使用 su 命令4.1.1 基本语法4.1.2 常用选项4.1.3 示例4.2 使用 sudo 命令4.2.1 基本语法4.2.2 切换到其他用户4.3 使用 sudo -i 命令4.4 使用 sudo -s 命令4.5 退出切换的用户4.6 查看当前用户4.7 su 和 sudo 的区别4.8 实际应用场景4.8.1 临时切换到 root 执行管理任务4.8.2 切换到普通用户测试4.8.3 以其他用户身份运行服务4.9 安全注意事项5. 完整创建用户流程示例5.1 使用 useradd 的完整流程5.2 使用 adduser 的完整流程6. 高级选项6.1 指定用户 ID 范围6.2 创建用户时指定多个附加组6.3 设置用户过期时间7. 相关配置文件7.1 用户信息文件7.2 默认设置文件8. 删除用户8.1 删除用户但保留主目录8.2 删除用户及其主目录9. 修改用户信息9.1 使用 usermod 命令10. 注意事项11. 常见问题排查11.1 用户无法登录11.2 查看用户所属组11.3 查看所有用户1. 使用 useradd 命令(推荐)1.1 基本语法useradd [选项] 用户名1.2 常用选项-m 或 --create-home: 创建用户主目录-d 或 --home-dir HOME_DIR: 指定用户主目录路径-s 或 --shell SHELL: 指定用户的默认 shell-g 或 --gid GROUP: 指定用户的主要组-G 或 --groups GROUPS: 指定用户的附加组(多个组用逗号分隔)-u 或 --uid UID: 指定用户 ID-c 或 --comment COMMENT: 添加用户注释(通常是全名)1.3 示例# 创建用户并自动创建主目录 sudo useradd -m username # 创建用户并指定 shell sudo useradd -m -s /bin/bash username # 创建用户并指定主目录 sudo useradd -m -d /home/customdir username # 创建用户并指定组 sudo useradd -m -g users -G sudo,www-data username # 创建用户并指定 UID sudo useradd -m -u 1001 username # 创建用户并添加注释 sudo useradd -m -c "User Full Name" username2. 使用 adduser 命令(交互式,Debian/Ubuntu)2.1 基本用法sudo adduser username2.2 特点交互式创建用户自动创建主目录自动设置密码自动创建同名组提示输入用户信息(全名、房间号、工作电话等)2.3 示例# 交互式创建用户 sudo adduser username # 非交互式创建用户(跳过提示) sudo adduser --disabled-password --gecos "" username3. 创建用户后的必要操作3.1 设置密码# 使用 passwd 命令设置密码 sudo passwd username3.2 赋予 sudo 权限(可选)# 方法1: 添加到 sudo 组 sudo usermod -aG sudo username # 方法2: 编辑 sudoers 文件 sudo visudo # 添加以下行: # username ALL=(ALL:ALL) ALL3.3 验证用户创建# 查看用户信息 id username # 查看用户详细信息 finger username # 如果安装了 finger getent passwd username3.4 用户主目录管理3.4.1 创建用户主目录# 创建用户时自动创建主目录(推荐) sudo useradd -m username # 如果创建用户时没有创建主目录,手动创建 sudo mkdir -p /home/username sudo chown username:username /home/username sudo chmod 755 /home/username3.4.2 复制默认配置文件到主目录# 复制默认配置文件(.bashrc, .profile 等) sudo cp /etc/skel/.bashrc /home/username/ sudo cp /etc/skel/.profile /home/username/ sudo cp -r /etc/skel/. /home/username/ # 设置正确的所有者和权限 sudo chown -R username:username /home/username sudo chmod -R 755 /home/username3.4.3 修改用户主目录# 修改用户主目录路径 sudo usermod -d /new/home/path username # 移动现有主目录到新位置 sudo mv /home/username /new/home/path sudo chown -R username:username /new/home/path3.4.4 设置主目录权限# 设置主目录权限(只有所有者可访问) sudo chmod 700 /home/username # 设置主目录权限(所有者可读写执行,组和其他用户无权限) sudo chmod 755 /home/username # 递归设置主目录下所有文件权限 sudo chmod -R 700 /home/username sudo chown -R username:username /home/username3.4.5 查看用户主目录# 查看用户主目录路径 grep username /etc/passwd | cut -d: -f6 # 或者使用 getent getent passwd username | cut -d: -f6 # 查看主目录详细信息 ls -ld ~username ls -la /home/username3.5 设置登录时的默认账号3.5.1 设置默认登录用户(图形界面)3.5.1.1 使用 systemd 的自动登录(systemd 系统)# 编辑自动登录配置 sudo nano /etc/systemd/logind.conf # 找到并修改以下行(取消注释并设置) # NAutoVTs=6 # ReserveVT=6 # KillUserProcesses=no # 编辑 getty 服务配置 sudo systemctl edit getty@tty1.service # 添加以下内容: [Service] ExecStart= ExecStart=-/sbin/agetty --autologin username --noclear %I $TERM3.5.1.2 使用 LightDM(Ubuntu/Linux Mint)# 编辑 LightDM 配置文件 sudo nano /etc/lightdm/lightdm.conf # 在 [Seat:*] 部分添加: autologin-user=username autologin-user-timeout=03.5.1.3 使用 GDM(GNOME 显示管理器)# 编辑 GDM 配置文件 sudo nano /etc/gdm3/custom.conf # 在 [daemon] 部分添加: AutomaticLogin=username AutomaticLoginEnable=true3.5.1.4 使用 SDDM(KDE Plasma)# 编辑 SDDM 配置文件 sudo nano /etc/sddm.conf # 添加以下内容: [Autologin] User=username Session=plasma.desktop3.5.2 设置默认 Shell# 创建用户时指定默认 shell sudo useradd -m -s /bin/bash username # 修改现有用户的默认 shell sudo chsh -s /bin/bash username # 或者使用 usermod sudo usermod -s /bin/bash username # 查看可用的 shell cat /etc/shells # 查看用户的当前 shell grep username /etc/passwd | cut -d: -f73.5.3 设置默认用户组# 创建用户时指定主要组 sudo useradd -m -g users username # 修改用户的主要组 sudo usermod -g groupname username # 查看用户的组信息 groups username id username3.5.4 设置默认环境变量# 编辑用户的 .bashrc 文件 nano ~/.bashrc # 或者编辑全局配置文件 sudo nano /etc/bash.bashrc sudo nano /etc/profile # 添加环境变量示例: export PATH=$PATH:/usr/local/bin export EDITOR=nano export LANG=zh_CN.UTF-83.5.5 设置默认工作目录# 在用户的 .bashrc 中添加 cd /path/to/default/directory # 或者在 .profile 中添加 cd $HOME/projects3.5.6 配置 SSH 默认登录用户# 编辑 SSH 客户端配置 nano ~/.ssh/config # 添加以下内容: Host myserver HostName server.example.com User username Port 22 IdentityFile ~/.ssh/id_rsa # 这样可以直接使用:ssh myserver3.5.7 设置系统默认用户(系统服务)# 查看系统默认用户设置 cat /etc/default/useradd # 编辑默认设置 sudo nano /etc/default/useradd # 常见配置项: # GROUP=100 # 默认组 ID # HOME=/home # 默认主目录位置 # INACTIVE=-1 # 密码过期后的宽限天数 # EXPIRE= # 账户过期日期 # SHELL=/bin/bash # 默认 shell # SKEL=/etc/skel # 骨架目录 # CREATE_MAIL_SPOOL=yes # 是否创建邮件目录3.5.8 禁用自动登录(安全考虑)# 移除自动登录配置 sudo nano /etc/lightdm/lightdm.conf # 注释掉或删除 autologin-user 行 # 或者 sudo nano /etc/gdm3/custom.conf # 注释掉或删除 AutomaticLogin 行 # 重启显示管理器 sudo systemctl restart lightdm # 或 sudo systemctl restart gdm34. 切换用户的方法4.1 使用 su 命令4.1.1 基本语法su [选项] [用户名]4.1.2 常用选项- 或 -l 或 --login: 完全登录(加载目标用户的环境变量)-c 或 --command: 以目标用户身份执行单个命令-s 或 --shell: 指定要使用的 shell-m 或 -p 或 --preserve-environment: 保持当前环境变量4.1.3 示例# 切换到 root 用户(需要输入 root 密码) su # 切换到 root 用户并加载完整环境 su - # 切换到指定用户 su username # 切换到指定用户并加载完整环境 su - username # 以目标用户身份执行单个命令 su -c "command" username # 切换到用户并保持当前环境变量 su -m username4.2 使用 sudo 命令4.2.1 基本语法sudo [选项] 命令4.2.2 切换到其他用户# 切换到 root 用户(需要当前用户有 sudo 权限) sudo su # 切换到 root 用户并加载完整环境 sudo su - # 切换到指定用户 sudo su username # 切换到指定用户并加载完整环境 sudo su - username # 以指定用户身份执行命令 sudo -u username command4.3 使用 sudo -i 命令# 切换到 root 用户并启动交互式登录 shell sudo -i # 切换到指定用户并启动交互式登录 shell sudo -i -u username4.4 使用 sudo -s 命令# 切换到 root 用户并启动 shell(不加载完整环境) sudo -s # 切换到指定用户并启动 shell sudo -s -u username4.5 退出切换的用户# 退出当前用户会话,返回到之前的用户 exit # 或者使用快捷键 Ctrl + D4.6 查看当前用户# 查看当前登录的用户名 whoami # 查看当前用户 ID id # 查看当前用户详细信息 id -a # 查看所有登录的用户 who # 查看当前用户和切换历史 w4.7 su 和 sudo 的区别特性susudo密码要求需要目标用户的密码需要当前用户的密码权限控制切换到目标用户后拥有其所有权限可以精细控制权限审计日志基本日志详细的审计日志安全性需要共享 root 密码更安全,不需要共享密码使用场景完全切换用户身份临时提升权限执行命令4.8 实际应用场景4.8.1 临时切换到 root 执行管理任务# 方法1: 使用 sudo(推荐) sudo command # 方法2: 使用 su su -c "command" # 方法3: 切换到 root 后执行 sudo su - # 执行命令 # exit4.8.2 切换到普通用户测试# 从 root 切换到普通用户 su - username # 从普通用户切换到另一个普通用户(需要目标用户密码) su - username4.8.3 以其他用户身份运行服务# 以 www-data 用户运行命令 sudo -u www-data command # 以 postgres 用户运行命令 sudo -u postgres psql4.9 安全注意事项避免使用 su 切换到 root: 推荐使用 sudo 而不是 su,因为:不需要共享 root 密码有详细的审计日志可以精细控制权限使用 sudo 的最佳实践:# 只执行需要的命令,而不是切换到 root sudo command # 推荐 # 避免长时间以 root 身份运行 sudo su - # 不推荐,除非必要限制 sudo 权限: 在 /etc/sudoers 中只授予必要的权限使用 sudo 超时: sudo 默认在 15 分钟内记住密码,超时需要重新输入5. 完整创建用户流程示例5.1 使用 useradd 的完整流程# 1. 创建用户 sudo useradd -m -s /bin/bash -c "John Doe" john # 2. 设置密码 sudo passwd john # 3. 添加到 sudo 组(可选) sudo usermod -aG sudo john # 4. 验证 id john5.2 使用 adduser 的完整流程# 一步完成(交互式) sudo adduser john # 按提示输入密码和信息即可6. 高级选项6.1 指定用户 ID 范围# 查看当前系统用户 ID 范围 grep UID_MIN /etc/login.defs grep UID_MAX /etc/login.defs # 创建系统用户(UID < 1000) sudo useradd -r -s /bin/false systemuser6.2 创建用户时指定多个附加组sudo useradd -m -G sudo,docker,www-data username6.3 设置用户过期时间# 使用 chage 命令 sudo chage -E 2024-12-31 username7. 相关配置文件7.1 用户信息文件/etc/passwd: 用户账户信息/etc/shadow: 用户密码信息(加密)/etc/group: 组信息/etc/gshadow: 组密码信息7.2 默认设置文件/etc/login.defs: 用户创建的默认设置/etc/default/useradd: useradd 的默认配置8. 删除用户8.1 删除用户但保留主目录sudo userdel username8.2 删除用户及其主目录sudo userdel -r username9. 修改用户信息9.1 使用 usermod 命令# 修改用户 shell sudo usermod -s /bin/zsh username # 修改用户主目录 sudo usermod -d /new/home/path username # 修改用户组 sudo usermod -g newgroup username # 添加附加组 sudo usermod -aG groupname username # 锁定用户账户 sudo usermod -L username # 解锁用户账户 sudo usermod -U username10. 注意事项权限要求: 创建用户需要 root 权限,使用 sudo 或切换到 root 用户用户名规则:只能包含小写字母、数字、下划线和连字符不能以连字符开头通常建议使用小写字母主目录: 使用 -m 选项确保创建主目录,否则用户无法正常登录Shell 设置: 确保指定的 shell 存在于 /etc/shells 文件中系统用户 vs 普通用户:系统用户通常 UID < 1000,用于运行服务普通用户 UID >= 1000,用于登录系统11. 常见问题排查11.1 用户无法登录# 检查用户 shell 是否正确 grep username /etc/passwd # 检查主目录是否存在 ls -la /home/username # 检查主目录权限 sudo chown -R username:username /home/username11.2 查看用户所属组groups username id username11.3 查看所有用户# 查看所有用户 cat /etc/passwd # 只查看普通用户(UID >= 1000) awk -F: '$3 >= 1000 {print $1}' /etc/passwd总结:Debian/Ubuntu 系统: 推荐使用 adduser(更简单)其他 Linux 发行版: 使用 useradd(更灵活)创建后记得设置密码和必要的权限
2026年01月07日
1 阅读
0 评论
0 点赞
1
2
3
...
7