<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet href="/scripts/pretty-feed-v3.xsl" type="text/xsl"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:h="http://www.w3.org/TR/html4/"><channel><title>Zhang Xin&apos;s Tech Blog</title><description>Looking for next question</description><link>https://blog.zxmath.top</link><item><title>分子动力学模拟：Gromacs教程3-蛋白配体复合物</title><link>https://blog.zxmath.top/blog/gromacs3</link><guid isPermaLink="true">https://blog.zxmath.top/blog/gromacs3</guid><description>本文是对Gromacs官方教程的中文翻译，并且包含了我的实操笔记</description><pubDate>Sun, 30 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;分子动力学模拟：Gromacs教程3-蛋白质-配体复合物&lt;/h1&gt;
&lt;h2&gt;概述&lt;/h2&gt;
&lt;p&gt;本文是对Gromacs官方教程第三课&lt;code&gt;Tutorial 3: Protein-Ligand Complex&lt;/code&gt;的中文翻译，是蛋白质-配体复合物模拟。包含了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;小分子配体的参数化&lt;/li&gt;
&lt;li&gt;复合物体系的构建&lt;/li&gt;
&lt;li&gt;结合模式分析&lt;/li&gt;
&lt;li&gt;相互作用能计算&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;本教程将指导你完成蛋白质-配体复合物的分子动力学模拟。与单纯的蛋白质模拟相比，配体的处理需要额外的步骤，特别是力场参数的准备。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;第一阶段：准备工作&lt;/h2&gt;
&lt;h3&gt;1. 环境要求&lt;/h3&gt;
&lt;p&gt;确保你已经安装了以下软件：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;GROMACS&lt;/strong&gt;（版本2020或更高）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ACPYPE&lt;/strong&gt; 或 &lt;strong&gt;CGenFF&lt;/strong&gt;（用于配体参数化）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PyMOL&lt;/strong&gt; 或 &lt;strong&gt;VMD&lt;/strong&gt;（用于结构可视化）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Open Babel&lt;/strong&gt;（用于化学文件格式转换）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. 获取结构文件&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;从PDB数据库下载蛋白质-配体复合物结构，例如：&lt;a href=&quot;https://www.rcsb.org/structure/1OYT&quot;&gt;1OYT&lt;/a&gt;（HIV-1蛋白酶与抑制剂）&lt;/li&gt;
&lt;li&gt;或者使用你自己的蛋白质-配体复合物结构&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;第二阶段：蛋白质-配体复合物模拟流程&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[蛋白质-配体复合物结构] --&gt; B[分离蛋白质和配体];
    B --&gt; C[蛋白质预处理];
    B --&gt; D[配体参数化];
    C --&gt; E[合并拓扑文件];
    D --&gt; E;
    E --&gt; F[构建溶剂盒子];
    F --&gt; G[溶剂化和添加离子];
    G --&gt; H[能量最小化];
    H --&gt; I[NVT平衡];
    I --&gt; J[NPT平衡];
    J --&gt; K[成品MD模拟];
    K --&gt; L[结合自由能分析];
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;步骤 1: 准备结构文件&lt;/h3&gt;
&lt;p&gt;下载示例结构&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 下载示例结构
wget https://files.rcsb.org/download/1OYT.pdb
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;使用PyMOL分离蛋白质和配体，以下是python脚本示例：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;# PyMOL脚本：prepare_complex.py
# 加载结构
cmd.load(&apos;1OYT.pdb&apos;)

# 选择蛋白质（删除水分子和无关离子）
cmd.remove(&apos;resn HOH&apos;)
cmd.remove(&apos;not (polymer or organic)&apos;)

# 选择配体（假设配体残基名为INH）
cmd.select(&apos;ligand&apos;, &apos;resn INH&apos;)

# 保存蛋白质和配体
cmd.save(&apos;protein.pdb&apos;, &apos;not ligand&apos;)
cmd.save(&apos;ligand.pdb&apos;, &apos;ligand&apos;)

# 保存复合物
cmd.save(&apos;complex.pdb&apos;, &apos;all&apos;)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;以下是PyMOL运行的命令：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-PyMOL&quot;&gt;# 使用PyMOL打开pdb文件
# 移除水分子
remove resn HOH
# 移除无关离子
remove not (polymer or resn UNK)
# 选择蛋白质（删除水分子和无关离子）
save protein.pdb, not resn INH
# 选择配体（假设配体残基名为INH）
save ligand.pdb, resn INH
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;步骤 2: 配体参数化&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;方法一：使用ACPYPE（基于GAFF力场）&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 打开软件Open Babel，将配体转换为mol2格式
obabel -ipdb ligand.pdb -omol2 -O ligand.mol2

# 使用ACPYPE生成配体拓扑
acpype -i ligand.mol2 -n 0 -a gaff2
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;方法二：使用CGenFF（适用于CHARMM力场）&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;访问 &lt;a href=&quot;https://cgenff.umaryland.edu/&quot;&gt;CGenFF服务器&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;上传配体结构文件&lt;/li&gt;
&lt;li&gt;下载生成的str文件&lt;/li&gt;
&lt;li&gt;转换为GROMACS格式：&lt;/li&gt;
&lt;/ol&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 转换CGenFF输出为GROMACS格式
python cgenff_charmm2gmx.py ligand ligand.mol2 ligand.str charmm36.ff
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;步骤 3: 蛋白质拓扑生成&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 生成蛋白质拓扑（使用与配体兼容的力场）
gmx pdb2gmx -f protein.pdb -o protein_processed.gro -p protein_topol.top -water tip3p -ff charmm36
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;步骤 4: 合并拓扑文件&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 创建主拓扑文件
cat &gt; topol.top &amp;#x3C;&amp;#x3C; EOF
#include &quot;charmm36.ff/forcefield.itp&quot;
#include &quot;protein_topol.top&quot;
#include &quot;ligand.itp&quot;

[ system ]
Protein-Ligand Complex

[ molecules ]
; Compound        nmols
Protein_A         1
LIG               1
EOF

# 将蛋白质分子信息添加到主拓扑
grep -A 1000 &quot;molecules&quot; protein_topol.top | grep -v &quot;molecules&quot; &gt;&gt; topol.top
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;步骤 5: 构建复合物结构&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 使用editconf调整配体位置（如果需要）
gmx editconf -f ligand.gro -o ligand_new.gro

# 组合蛋白质和配体结构
cat protein_processed.gro ligand.gro &gt; complex.gro

# 需要手动调整原子数（编辑complex.gro文件的第二行）
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;步骤 6-10: 标准模拟流程&lt;/h3&gt;
&lt;p&gt;后续步骤与基础教程类似，但需要特别注意参数设置：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 定义模拟盒子
gmx editconf -f complex.gro -o complex_box.gro -c -d 1.2 -bt cubic

# 溶剂化
gmx solvate -cp complex_box.gro -cs spc216.gro -o complex_solv.gro -p topol.top

# 添加离子（特别注意总电荷）
gmx grompp -f ions.mdp -c complex_solv.gro -p topol.top -o ions.tpr
gmx genion -s ions.tpr -o complex_ions.gro -p topol.top -pname NA -nname CL -neutral

# 能量最小化
gmx grompp -f em.mdp -c complex_ions.gro -p topol.top -o em.tpr
gmx mdrun -deffnm em -v

# NVT平衡
gmx grompp -f nvt.mdp -c em.gro -r em.gro -p topol.top -o nvt.tpr
gmx mdrun -deffnm nvt

# NPT平衡
gmx grompp -f npt.mdp -c nvt.gro -r nvt.gro -t nvt.cpt -p topol.top -o npt.tpr
gmx mdrun -deffnm npt

# 成品模拟
gmx grompp -f md.mdp -c npt.gro -t npt.cpt -p topol.top -o md.tpr
gmx mdrun -deffnm md
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;第三阶段：蛋白质-配体相互作用分析&lt;/h2&gt;
&lt;h3&gt;1. 配体位置稳定性（RMSD）&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 配体相对于蛋白质的RMSD
gmx rms -s md.tpr -f md.xtc -o rmsd_ligand.xvg -tu ns -fgroup LIG -rgroup Backbone
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;2. 蛋白质-配体接触分析&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 计算配体与蛋白质残基的距离
gmx mindist -f md.xtc -s md.tpr -od contacts.xvg -on contacts_num.xvg -group1 &quot;resname LIG&quot; -group2 &quot;Protein&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3. 氢键分析&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 蛋白质与配体间的氢键
gmx hbond -f md.xtc -s md.tpr -num hbonds.xvg -ac hbond_angles.xvg -dist hbond_dist.xvg -hbm hbond_matrix.xvg -hbn hbond_index.ndx -don &quot;resname LIG and name O1 O2 N1 N2&quot; -acc &quot;Protein and name O N&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;4. 结合自由能计算（MM-PBSA）&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 使用g_mmpbsa计算结合自由能
gmx mm-pbsa -f md.xtc -s md.tpr -i polar.mdp -p topol.top -n index.ndx -apol apolar.xvg -pcon pcon.xvg -pcomp pcomp.xvg
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;5. 相互作用能分解&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 使用gmx energy分析非键相互作用能
gmx energy -f md.edr -o energy.xvg
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;关键参数文件说明&lt;/h2&gt;
&lt;h3&gt;配体专用的mdp参数&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-txt&quot;&gt;; md_complex.mdp - 蛋白质-配体复合物模拟参数
integrator               = md
dt                       = 0.002
nsteps                   = 5000000    ; 10 ns

; 温度耦合
tcoupl                   = V-rescale
tc-grps                  = Protein LIG SOL NA CL
tau-t                    = 0.1 0.1 0.1 0.1
ref-t                    = 300 300 300 300

; 压力耦合
pcoupl                   = Parrinello-Rahman
pcoupltype               = isotropic
tau-p                    = 2.0
compressibility          = 4.5e-5
ref-p                    = 1.0

; 非键相互作用
cutoff-scheme            = Verlet
nstlist                  = 20
rlist                    = 1.2
rcoulomb                 = 1.2
rvdw                     = 1.2
coulombtype              = PME
pme-order                = 4
fourierspacing           = 0.16

; 约束算法
constraints              = h-bonds
constraint-algorithm     = LINCS
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;配体位 restraints（可选）&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-txt&quot;&gt;; position_restraints.mdp - 用于初始平衡阶段
define                   = -DPOSRES_LIG

; 在ligand.itp文件中添加：
#ifdef POSRES_LIG
[ position_restraints ]
; atom  type      fx      fy      fz
   1      1      1000    1000    1000
   2      1      1000    1000    1000
   ; ... 其他配体原子
#endif
&lt;/code&gt;&lt;/pre&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>分子动力学模拟：Gromacs教程1-水中的水解酶</title><link>https://blog.zxmath.top/blog/gromacs1</link><guid isPermaLink="true">https://blog.zxmath.top/blog/gromacs1</guid><description>本文是对Gromacs官方教程的中文翻译，并且包含了我的实操笔记</description><pubDate>Sun, 30 Nov 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;本文是对Gromacs官方教程第一课&lt;code&gt;Tutorial 1: Lysozyme in Water&lt;/code&gt;的中文翻译，是溶菌酶在水溶液中的模拟。包含了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;蛋白质预处理和溶剂化&lt;/li&gt;
&lt;li&gt;能量最小化和平衡&lt;/li&gt;
&lt;li&gt;基本的MD模拟流程&lt;/li&gt;
&lt;li&gt;结果分析方法&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;第一阶段：打好基础&lt;/h2&gt;
&lt;h3&gt;1. 环境搭建&lt;/h3&gt;
&lt;p&gt;我自己是用的Autodl的云服务器，你也可以按照如下的方法自己配置&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;操作系统&lt;/strong&gt;：&lt;strong&gt;Linux 是首选&lt;/strong&gt;（Ubuntu 是最友好的选择）。你可以在物理机安装、虚拟机安装，或者使用 Windows 的 WSL2。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;推荐&lt;/strong&gt;：对于Windows用户，使用 &lt;strong&gt;WSL2&lt;/strong&gt; 是最佳平衡方案。安装教程很容易在网上找到。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;安装 GROMACS&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;对于 Ubuntu/WSL，最简单的方式是用 apt：
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sudo apt update
sudo apt install gromacs
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;如果你想用最新版，需要从官网下载源码编译（稍复杂，可后续再学）。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;验证安装&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gmx -version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;如果显示出版本信息，恭喜你，第一步成功了！&lt;/p&gt;
&lt;h3&gt;2. 认识一个标准的模拟流程&lt;/h3&gt;
&lt;p&gt;这是一个经典的 MD 模拟流程：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-mermaid&quot;&gt;graph TD
    A[蛋白质/小分子&amp;#x3C;br&gt;初始结构] --&gt; B[预处理&amp;#x3C;br&gt;补全缺失原子/残基];
    B --&gt; C[构建拓扑&amp;#x3C;br&gt;定义分子连接与力场];
    D[力场文件&amp;#x3C;br&gt;e.g., charmm36, amber99sb-ildn] --&gt; C;
    E[溶剂盒子&amp;#x3C;br&gt;e.g., 立方体， 十二面体] --&gt; F[溶剂化&amp;#x3C;br&gt;将分子放入盒子];
    C --&gt; F;
    F --&gt; G[添加离子&amp;#x3C;br&gt;中和体系并设定离子浓度];
    G --&gt; H[能量最小化&amp;#x3C;br&gt;消除原子间的近距离接触];
    H --&gt; I[NVT 平衡&amp;#x3C;br&gt;稳定体系温度];
    I --&gt; J[NPT 平衡&amp;#x3C;br&gt;稳定体系密度和压力];
    J --&gt; K[成品模拟&amp;#x3C;br&gt;生产用于分析的数据];
    K --&gt; L[轨迹分析&amp;#x3C;br&gt;提取有意义的科学信息];
&lt;/code&gt;&lt;/pre&gt;
&lt;hr&gt;
&lt;h2&gt;第二阶段：你的第一个模拟——水中的溶菌酶&lt;/h2&gt;
&lt;p&gt;让我们按照上述流程，亲手完成一个最简单的模拟。这是 GROMACS 的 “Hello World”。&lt;/p&gt;
&lt;h3&gt;步骤 1: 准备结构文件&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;从 PDB 数据库下载溶菌酶的pdb结构： &lt;a href=&quot;https://www.rcsb.org/structure/1AKI&quot;&gt;1AKI&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;用文本编辑器（如 &lt;code&gt;vim&lt;/code&gt;, &lt;code&gt;nano&lt;/code&gt;）或可视化软件（如 PyMOL, VMD）打开它，删除所有的水分子和无关的离子。只保留蛋白质链 A。保存为 &lt;code&gt;1aki_clean.pdb&lt;/code&gt;。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;在这里我使用的是PyMOL得到干净的pdb文件&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-PyMOL&quot;&gt;# 使用PyMOL打开1AKL.pdb文件
# 移除水分子
remove resn HOH
# 移除无关离子
remove not (polymer or resn UNK)
# 保存蛋白
save 1aki_clean.pdb
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;步骤 2: 生成拓扑和力场&lt;/h3&gt;
&lt;p&gt;拓扑文件描述了分子由哪些原子组成，它们如何连接，以及使用了什么力场。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 使用 pdb2gmx 工具生成拓扑
gmx pdb2gmx -f 1aki_clean.pdb -o 1aki_processed.gro -p topol.top -water spce
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-f&lt;/code&gt;： 输入文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-o&lt;/code&gt;： 处理后的结构文件（GROMACS 格式）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-p&lt;/code&gt;： 输出的拓扑文件&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-water&lt;/code&gt;： 指定水模型（这里用 SPC/E）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;此时，终端会让你选择一个力场&lt;/strong&gt;。对于初学者，输入 &lt;code&gt;15&lt;/code&gt; 选择 &lt;code&gt;CHARMM36&lt;/code&gt; 力场是一个不错的选择。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;步骤 3: 定义模拟盒子并填充水&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 创建一个立方体盒子，边界距离蛋白质至少 1.0 nm
gmx editconf -f 1aki_processed.gro -o 1aki_newbox.gro -c -d 1.0 -bt cubic

# 用水分子填充盒子
gmx solvate -cp 1aki_newbox.gro -cs spc216.gro -o 1aki_solvated.gro -p topol.top
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;editconf -c&lt;/code&gt;： 将蛋白质置于盒子中心&lt;/li&gt;
&lt;li&gt;&lt;code&gt;solvate -cs&lt;/code&gt;： 指定水模型的结构文件（SPC 水）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;步骤 4: 添加离子以中和电荷并设定盐浓度&lt;/h3&gt;
&lt;p&gt;首先，需要生成一个 &lt;code&gt;.tpr&lt;/code&gt; 输入文件，用于 &lt;code&gt;grompp&lt;/code&gt;，然后使用 &lt;code&gt;genion&lt;/code&gt;。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. 准备一个离子参数文件（.mdp）。你可以从 GROMACS 官网教程或安装目录下找到。
# 下载 ‘ions.mdp’ 文件到当前目录。
wget http://www.mdtutorials.com/gmx/lysozyme/Files/ions.mdp

# 2. 生成 .tpr 文件
gmx grompp -f ions.mdp -c 1aki_solvated.gro -p topol.top -o ions.tpr

# 3. 添加离子
gmx genion -s ions.tpr -o 1aki_solv_ions.gro -p topol.top -pname NA -nname CL -neutral -conc 0.15
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-neutral&lt;/code&gt;： 添加钠离子或氯离子使体系整体电荷为中性。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;-conc 0.15&lt;/code&gt;： 添加盐至生理浓度 0.15 M。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;此时，终端会问你“选择要替换的分子组”&lt;/strong&gt;，输入 &lt;code&gt;13&lt;/code&gt;（代表 “SOL”， 水分子）。程序会用离子替换掉一些水分子。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;步骤 5: 能量最小化&lt;/h3&gt;
&lt;p&gt;消除原子间的过度靠近，防止模拟开始时系统“爆炸”。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 1. 准备能量最小化参数文件（minim.mdp）
wget http://www.mdtutorials.com/gmx/lysozyme/Files/minim.mdp
# 2. 生成 .tpr 文件
gmx grompp -f minim.mdp -c 1aki_solv_ions.gro -p topol.top -o em.tpr
# 3. 运行能量最小化
gmx mdrun -v -deffnm em
&lt;/code&gt;&lt;/pre&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;-deffnm&lt;/code&gt;： 为所有输入和输出文件设置一个默认名称。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;检查结果&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 查看能量最小化是否收敛
gmx energy -f em.edr -o potential.xvg
# 当提示时，输入 `10 0` 选择 “Potential” 和 “零”。
# 用 xmgrace 或 gnuplot 绘图查看能量是否下降并趋于平稳。
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;步骤 6 &amp;#x26; 7: 平衡——NVT 和 NPT&lt;/h3&gt;
&lt;p&gt;让系统在设定的温度和压力下达到平衡。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# NVT 平衡 (恒定粒子数、体积、温度)
gmx grompp -f nvt.mdp -c em.gro -r em.gro -p topol.top -o nvt.tpr
gmx mdrun -deffnm nvt

# 检查温度平衡
gmx energy -f nvt.edr -o temperature.xvg

# NPT 平衡 (恒定粒子数、压力、温度)
gmx grompp -f npt.mdp -c nvt.gro -r nvt.gro -t nvt.cpt -p topol.top -o npt.tpr
gmx mdrun -deffnm npt

# 检查压力平衡
gmx energy -f npt.edr -o pressure.xvg
# 检查密度平衡
gmx energy -f npt.edr -o density.xvg
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;步骤 8: 成品 MD 模拟&lt;/h3&gt;
&lt;p&gt;现在系统已经平衡好，可以开始长时间模拟来收集数据了。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gmx grompp -f md.mdp -c npt.gro -t npt.cpt -p topol.top -o md_0_1.tpr
gmx mdrun -deffnm md_0_1
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这个步骤可能会运行几分钟到几周，取决于你的体系大小和计算机性能。&lt;/p&gt;
&lt;hr&gt;
&lt;h2&gt;第三阶段：分析结果&lt;/h2&gt;
&lt;p&gt;模拟跑完了，我们得到了轨迹文件（&lt;code&gt;.trr&lt;/code&gt; 或 &lt;code&gt;.xtc&lt;/code&gt;）和能量文件（&lt;code&gt;.edr&lt;/code&gt;）。现在来分析它。&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;回看轨迹&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;# 注意，这个需要图形界面支持
gmx view -f md_0_1.xtc -s md_0_1.tpr 
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;计算 RMSD（蛋白质骨架稳定性）&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gmx rms -s md_0_1.tpr -f md_0_1.xtc -o rmsd.xvg -tu ns
# 选择 “Backbone” 作为计算和拟合的组 (两次都选 4)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;计算 RMSF（残基柔性）&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gmx rmsf -s md_0_1.tpr -f md_0_1.xtc -o rmsf.xvg -res
# 选择 “Backbone” (4)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;计算回旋半径（衡量蛋白质紧实度）&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;gmx gyrate -s md_0_1.tpr -f md_0_1.xtc -o gyrate.xvg
# 选择 “Protein” (1)
&lt;/code&gt;&lt;/pre&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2&gt;课后说明&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;.mdp&lt;/code&gt; 参数文件&lt;/strong&gt;： 我们简要说明mdp文件的含义&lt;/p&gt;
&lt;h3&gt;案例1：ions.mdp&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-txt&quot;&gt;; ions.mdp - used as input into grompp to generate ions.tpr
; Parameters describing what to do, when to stop and what to save
integrator  = steep         ; Algorithm (steep = steepest descent minimization)
emtol       = 1000.0        ; Stop minimization when the maximum force &amp;#x3C; 1000.0 kJ/mol/nm
emstep      = 0.01          ; Minimization step size
nsteps      = 50000         ; Maximum number of (minimization) steps to perform

; Parameters describing how to find the neighbors of each atom and how to calculate the interactions
nstlist         = 1         ; Frequency to update the neighbor list and long range forces
cutoff-scheme	= Verlet    ; Buffered neighbor searching 
ns_type         = grid      ; Method to determine neighbor list (simple, grid)
coulombtype     = cutoff    ; Treatment of long range electrostatic interactions
rcoulomb        = 1.0       ; Short-range electrostatic cut-off
rvdw            = 1.0       ; Short-range Van der Waals cut-off
pbc             = xyz       ; Periodic Boundary Conditions in all 3 dimensions
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;mdp文件以&lt;code&gt;;&lt;/code&gt;符号为注释，&lt;/p&gt;
&lt;p&gt;这个&lt;code&gt;ions.mdp&lt;/code&gt;文件是用于生成离子添加过程的输入参数文件。让我详细解释每个参数的含义：&lt;/p&gt;
&lt;h4&gt;基本最小化参数&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;integrator  = steep         ; 使用最陡下降法进行能量最小化
emtol       = 1000.0        ; 当最大力 &amp;#x3C; 1000.0 kJ/mol/nm时停止最小化
emstep      = 0.01          ; 最小化步长 (nm)
nsteps      = 50000         ; 最大最小化步数
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;说明&lt;/strong&gt;：这里使用了相对宽松的收敛标准（1000 kJ/mol/nm），因为目的只是生成一个合理的结构来添加离子，而不是完全的能量最小化。&lt;/p&gt;
&lt;h4&gt;邻居列表和相互作用参数&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;nstlist         = 1         ; 每1步更新邻居列表
cutoff-scheme   = Verlet    ; 使用Verlet缓冲邻居搜索
ns_type         = grid      ; 使用网格方法搜索邻居原子
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;非键相互作用参数&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;coulombtype = cutoff        ; 使用截断方法处理静电相互作用
rcoulomb    = 1.0           ; 静电相互作用的截断半径 (1.0 nm)
rvdw        = 1.0           ; 范德华相互作用的截断半径 (1.0 nm)
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;周期性边界条件&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;pbc = xyz                   ; 在x、y、z三个方向都使用周期性边界条件
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;这个配置文件的特殊用途&lt;/h4&gt;
&lt;p&gt;这个&lt;code&gt;ions.mdp&lt;/code&gt;文件&lt;strong&gt;不是用于真正的能量最小化&lt;/strong&gt;，而是为了：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;生成&lt;code&gt;.tpr&lt;/code&gt;文件&lt;/strong&gt;：&lt;code&gt;grompp&lt;/code&gt;需要这个文件来创建GROMACS的输入文件&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;定义力场参数&lt;/strong&gt;：为&lt;code&gt;genion&lt;/code&gt;提供必要的力场和模拟参数&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;设置基本环境&lt;/strong&gt;：定义截断半径、周期性边界条件等&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;案例2：minim.mdp&lt;/h3&gt;
&lt;p&gt;这个&lt;code&gt;minim.mdp&lt;/code&gt;文件是用于&lt;strong&gt;能量最小化&lt;/strong&gt;的输入参数文件，用于执行体系的能量最小化，消除原子间的冲突和不利接触。&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-txt&quot;&gt;; minim.mdp - used as input into grompp to generate em.tpr
; Parameters describing what to do, when to stop and what to save
integrator  = steep         ; Algorithm (steep = steepest descent minimization)
emtol       = 1000.0        ; Stop minimization when the maximum force &amp;#x3C; 1000.0 kJ/mol/nm
emstep      = 0.01          ; Minimization step size
nsteps      = 50000         ; Maximum number of (minimization) steps to perform

; Parameters describing how to find the neighbors of each atom and how to calculate the interactions
nstlist         = 1         ; Frequency to update the neighbor list and long range forces
cutoff-scheme   = Verlet    ; Buffered neighbor searching
ns_type         = grid      ; Method to determine neighbor list (simple, grid)
coulombtype     = PME       ; Treatment of long range electrostatic interactions
rcoulomb        = 1.0       ; Short-range electrostatic cut-off
rvdw            = 1.0       ; Short-range Van der Waals cut-off
pbc             = xyz       ; Periodic Boundary Conditions in all 3 dimensions
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;最小化算法参数&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;integrator = steep     # 使用最陡下降法 - 简单稳定，适合初始最小化
emtol = 1000.0        # 收敛标准：最大力 &amp;#x3C; 1000 kJ/mol/nm
emstep = 0.01         # 步长0.01 nm - 保守值，保证稳定性
nsteps = 50000        # 最大步数 - 提供充足的优化空间
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;邻居搜索设置&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;nstlist = 1           # 每步都更新邻居列表 - 确保准确性
cutoff-scheme = Verlet # 现代Verlet缓冲搜索算法
ns_type = grid        # 网格搜索方法 - 计算效率高
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;相互作用处理&lt;/h4&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;coulombtype = PME     # 使用粒子网格Ewald方法 - 精确处理长程静电
rcoulomb = 1.0        # 静电截断半径1.0 nm
rvdw = 1.0           # 范德华截断半径1.0 nm
pbc = xyz            # 三维周期性边界条件
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;原文内容&lt;/h2&gt;
&lt;p&gt;http://www.mdtutorials.com/gmx/&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item><item><title>Linux运维：服务器使用简明教程</title><link>https://blog.zxmath.top/blog/linux-first-class</link><guid isPermaLink="true">https://blog.zxmath.top/blog/linux-first-class</guid><description>组内服务器入门指南</description><pubDate>Wed, 12 Nov 2025 08:00:00 GMT</pubDate><content:encoded>&lt;p&gt;最近组里来了新人，小张网管例行给大家做个培训，顺带记录一下内容，方便后续大家查看。&lt;/p&gt;
&lt;p&gt;本文仅介绍基本的服务器登录内容，更详细的服务器管理方法内容可以参看姊妹篇：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.yuque.com/docs/share/7159f9dc-154f-4142-ab09-114db0f5bbd8?#&quot;&gt;实验室网管修炼指南&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;感谢的合作者：郑欣然，刘洋洋，张瀚文&lt;/p&gt;
&lt;h1&gt;Step0：Todo List&lt;/h1&gt;
&lt;p&gt;你需要做的事情：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;下载MobaXterm完成服务器的连接&lt;/li&gt;
&lt;li&gt;使用命令行创建一个文件夹&lt;/li&gt;
&lt;li&gt;使用VIM中文件夹中创建一个文件，随便写个Hello World并进行保存\&lt;/li&gt;
&lt;li&gt;下载Anaconda，并创建一个虚拟环境&lt;/li&gt;
&lt;li&gt;使用Vscode/Trae完成远程服务器的链接，并尝试创建一个Python代码：print(&quot;hello world&quot;)，然后在创建的虚拟环境中执行这个python脚本&lt;/li&gt;
&lt;/ol&gt;
&lt;h1&gt;Step1：连接服务器&lt;/h1&gt;
&lt;h2&gt;下载所需软件&lt;/h2&gt;
&lt;p&gt;可以下载SSH软件用于远程服务器的连接，常见的有MobaXterm【推荐】、Xshell、putty等；IOS端也可以使用Termius。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://mobaxterm.mobatek.net/&quot;&gt;MobaXterm free Xserver and tabbed SSH client for Windows&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果以上都不想下载，也可以使用自带的控制台或者powershell，在控制台中输入如下命令，其中portname是端口号，username是用户名，xxx.xxx.x.xxx是域名&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;ssh -p portnumber username@xxx.xxx.x.xxxx
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;可以使用scp命令上传和下载文件，细节参看如下链接：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/weixin_40516924/article/details/125230586&quot;&gt;windows cmd使用ssh连接Linux以及文件上传_Ark方舟的博客-CSDN博客_ssh windows上传文件到linux服务器&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;登陆域名&lt;/h2&gt;
&lt;p&gt;以MobaXterm为例，依次点击 Session - SSH 在Remote host中输入服务器的ip地址，在Port中输入端口号，点击OK即可完成SSH链接的创建。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;login1.png&quot; alt=&quot;&quot;&gt;此时左侧的User sessions会多出一个SSH链接，名称为你输入的ip地址，点击该链接，右侧的命令行会出现登录界面：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;login2.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;输入账号后回车，继续输入密码，此时注意，输入的密码是不显示的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;login3.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;输入完成后再按回车即可登录。&lt;/p&gt;
&lt;h1&gt;Step2：基本操作&lt;/h1&gt;
&lt;p&gt;在实际的使用中，我们一般是直接借助MobaXterm的目录页面进行文件的跳转和目录操作的，这个一看就会，就不仔细介绍了。下面我们给出一些基本的shell 命令。不复杂的命令我就不一一给出结果了，请大家自己实验一下，便于掌握这些常用的命令。&lt;/p&gt;
&lt;h2&gt;快捷输入&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;鼠标左键选中文本时自动就会复制【而不是Ctrl+C，如果使用Ctrl+C则会退出当前的任务】&lt;/li&gt;
&lt;li&gt;鼠标右键单击则是粘贴&lt;/li&gt;
&lt;li&gt;方向键的【↑/↓】类似Matlab可以返回历史的输入&lt;/li&gt;
&lt;li&gt;制&lt;strong&gt;表符Tab可以用于文件的补齐&lt;/strong&gt;，例如需要执行某python脚本【abcde.py】时，你可以输入“python a”之后按下Tab，就可以自动补齐【python abcde.py】。这一点在输入路径时也可以使用。当然，如是有重复文件时，结果会略有不同，请自行尝试一下。&lt;/li&gt;
&lt;li&gt;Ctrl+L --- 清屏操作，clear命令可以起到同样的作用&lt;/li&gt;
&lt;li&gt;Ctrl+C --- 可以终止程序运行过程&lt;/li&gt;
&lt;li&gt;Ctrl+Z --- 可以暂停程序运行过程&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;其它的内容可以参看：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.cnblogs.com/zll1217/articles/15560235.html&quot;&gt;Linux常用的快捷键 - 菜鸟儿~ - 博客园&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;路径操作&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# 1.查看当前路径
pwd

# 2.跳转到绝对路径
# 在这里【/home/xin/Public/】 是你的绝对路径，你可以从任何一个位置跳转到该位置下。
cd /home/xin/Public/

# 3.跳转到相对路径
# 考虑到绝对路径往往太长，你可以使用相对路径进行跳转，例如你想跳转到当前工作目录下的另一个目录
# 比如当前工作目录是【/home/xin/】你想跳转到【/home/xin/Public/】下，那就可以使用
cd ./Public
# 或者也可以使用该方法跳转到和当前工作目录平行的另一个目录中
# 比如当前工作目录是【/home/xin/】你想跳转到【/home/pub】下，那就可以使用
cd ../pub
# 在这里【.】代表当前目录，【..】代表当前目录的父目录
# 如果你想跳转到当前目录的父目录，也可以直接使用
cd ..
# 类似地，你还可以跳转到【更】上一级的目录
cd ../..
# 或者上一级目录的平行目录
cd ../../doc
# 如果你想回到当前用户的默认路径，则可以使用
cd ~
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;当然，一个简单的方法是，可以同通过MobaXterm的目录找到目标文件/文件夹，然后复制文件/文件夹的绝对路径进入shell中进行跳转。&lt;/p&gt;
&lt;h2&gt;文件和目录操作&lt;/h2&gt;
&lt;h3&gt;目录操作&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# 1.查看目录下的文件
# ls命令会显示当前目录下的全部文件和文件夹
# 在彩色终端下，会显示所有的文件，其中蓝色一般代表文件夹、白色代表文件、紫色代表图片、红色是压缩包
ls
# 非彩色的终端下，则需要用下面命令区分文件和文件夹，返回结果在文件夹后方会加入一个【/】
ls -F
# 如果要展示文件夹中的子文件，则需要加入-R参数，如下两个命令均可
ls -R
ls -F -R
# 下面的命令会显示隐藏文件/文件夹
ls -a
# 下面的命令会显示文件和文件夹的作者、文件的权限和创建的日期，文件权限在此不做讲解。
ls -l
# 当内容过多时，下面的命令可以查看特定的文件，例如我们想查看文件【main.py】的信息
# 注意后缀【.py】不能省略，否则会报错No such file or directory
ls -l main.py
# 但是当我们想查看多个带有main的文件信息时，也可以使用通配符*，
# 用来批量查看如【main1.py、main2.py】的文件
ls -l main*
# 其它通配符如[]、{}的使用请查看文末附录，当然你也可以使用其它的参数，例如
ls -R My_dir

# 2.创建目录
# 使用如下命令可以在当前目录下创建一个文件夹
mkdir New_dir
# 创建完成后可以使用ls命令进行查看
ls -l New_dir 
# 若是想批量创建文件夹和子文件夹，则需要添加参数 -p
mkdir -p New_dir/Sub_dir/Under_dir
# 创建完成后可以使用ls命令进行查看
ls -R New_dir
# 当然，若是使用这种方法查看New_dir下的所有子文件，会有些乱，可以使用下面这个命令查看
tree New_dir

# 3.删除目录
rmdir New_dir
# 这一命令仅能删除空目录，若是要删除非空目录，请查看文件管理这一节
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;文件管理&lt;/h3&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# 1.创建文件
touch test_one
ls -l test_one

# 2.写入文件
# 如何使用VIM请查看下一节
vim test_one

# 3.查看文件，下面三种方法都可以，less是more的升级版，出自【less is more】
# more和less均是按q键退出，其余参数请自行查阅了解
cat test_one
more test_one 
less test_one
# head/tail会显示文件的头/尾几行，如下的命令就会显示test_one的前5行
head -5 test_one

# 4.重命名文件
mv test_one test_two

# 5.移动文件到New_dir
mkdir New_dir
mv test_two New_dir/

# 6.复制文件
touch test_one
# 原文件夹下复制test_one文件命名为test_two，-i是为了避免覆盖本身存在的test_two文件
cp -i test_one test_two 
# 复制到新文件夹下
cp -i test_one New_dir/test_two 
# 其它文件夹的文件复制到当前文件夹，【.】代表当前文件夹
cp -i Other_dir/test_one .
# 递归复制整个文件夹【Scripts/】
cp -R Scripts/ New_Scripts

# 7.删除文件
# ================================= 注意 ================================= #
&apos;&apos;&apos;bash shell中没有回收站，文件一旦删除就无法恢复。-i会提示你是否要删除该文件&apos;&apos;&apos;
# ================================= 注意 ================================= #
rm -i test_one
# 删除文件也可以用通配符，下面的命令会删除test_one、test_two等文件
rm -i test_*
# 删除文件夹相对复杂一些，
# 如果要一个个检查是否要删除其中的文件，可以使用
rm -ri New_dir
# 该命令的输出结果如下，会依次询问是否进入目录/子目录，是否删除其中的文件
&apos;&apos;&apos;
$ rm -ri New_dir
rm: descend into directory &apos;New_dir&apos; ? y
rm: remove regular empty file &apos;New_dir/test_two&apos; ? y
&apos;&apos;&apos;
# 当然，如果不想有这些提示，可以使用著名的删库跑路命令
rm -rf New_dir
# 这个命令没有警告信号，请谨慎使用这个命令。

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;文件编辑/VIM&lt;/h3&gt;
&lt;p&gt;VIM是Linux命令行中比较常用的文本编辑器，他包含三种模式，分别是正常模式、插入模式和命令模式，这三种模式的切换逻辑如下：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-python&quot;&gt;正常模式 (Normal Mode)   --按i,a,o等字母进入--&gt;   插入模式 (Insert Mode) 
正常模式 (Normal Mode)   --按:,/,?等字符进入--&gt;   命令模式 (Command Mode)
插入模式 (Insert Mode) ，命令模式 (Command Mode)   --按Esc键进入--&gt; 正常模式 (Normal Mode) 

插入模式不能直接进入命令模式，必须先返回正常模式，然后再进入命令模式，反之同理
&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;详解三种模式&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;正常模式 - 你的指挥中心&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;这是你启动 Vim 后进入的默认模式，在这个模式下，你不能直接输入文字。它的作用是让你用单个字母键来高效地移动光标、复制、粘贴、删除文本。把你面前的文本想象成一个需要导航和编辑的“物体”，而不是一个等着你打字的空白文档。&lt;/p&gt;
&lt;p&gt;常用操作（记住这几个就够用了）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;移动光标：h (左), j (下), k (上), l (右)&lt;/li&gt;
&lt;li&gt;删除字符：按 x 可以删除光标所在的字符。&lt;/li&gt;
&lt;li&gt;进入插入模式：这是从“指挥”状态切换到“打字”状态的关键命令！&lt;/li&gt;
&lt;li&gt;i：在光标前插入&lt;/li&gt;
&lt;li&gt;a：在光标后插入&lt;/li&gt;
&lt;li&gt;o：在下一行新建一行并插入&lt;/li&gt;
&lt;li&gt;dd 删除整行&lt;/li&gt;
&lt;li&gt;dw 删除一个词&lt;/li&gt;
&lt;li&gt;x  删除当前字符&lt;/li&gt;
&lt;li&gt;yy 复制一行&lt;/li&gt;
&lt;li&gt;p  粘贴内容&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;插入模式 - 你的打字机&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;在这个模式下，你可以像使用记事本或 Word 一样，自由地输入和删除文本。你通过按 i, a, o 等键从正常模式进入。如果你想执行保存等命令，必须先回到正常模式。然后再进入&lt;/p&gt;
&lt;p&gt;如何返回正常模式？&lt;/p&gt;
&lt;p&gt;按 Esc 键 (键盘左上角)。这个键是你在 Vim 里的“返回安全区”按钮！&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;命令模式 - 你的控制台&lt;/strong&gt;&lt;br&gt;
在正常模式下，先按一个冒号 :，你就会看到屏幕左下角出现一个冒号光标。在这里，你可以输入命令来执行高级操作，比如保存和退出。最最重要的“生存命令”&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;:w - 保存文件 (w 代表 write)&lt;/li&gt;
&lt;li&gt;:q - 退出 Vim (q 代表 quit)&lt;/li&gt;
&lt;li&gt;:wq - 保存并退出 (先 write，再 quit，合起来)&lt;/li&gt;
&lt;li&gt;:q! - 不保存强制退出 (! 代表强制)。当你改乱了东西想重来时，就用这个！&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;常用快捷键：&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cloud.tencent.com/developer/article/2239304?areaSource=102001.5&amp;#x26;traceId=3Ltalgy3wXZdNwJ9mtyFI&quot;&gt;超全的Vim常用快捷键，建议收藏备用！-腾讯云开发者社区-腾讯云&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;程序运行&lt;/h2&gt;
&lt;p&gt;在此仅介绍如何运行python脚本&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# 执行python脚本
# 首先进入conda虚拟环境
conda activate your_env

# 切换到目标目录
cd your_python_file_path

# 运行进程
python your_python_file.py
# 但是这一方法常常导致python脚本在当前窗口运行，一旦窗口关闭，则脚本就会中断。

# 使用如下的脚本可以让命令在后台运行
nohup python your_python_file.py &gt;&gt; ./output.log 2&gt;&amp;#x26;1 &amp;#x26;
# python your_python_file.py是执行的命令
# ./output.log是输出的文件



&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;也可以调用后台窗口命令 screen（没有请联系服务器管理员下载）&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# 创建名为WindowsName的窗口
screen -R WindowsName
# 在新窗口中进行程序的运行，
python xxxxxx
# 退出当前窗口，按下快捷键ctrl+a+d

# 列出当前全部窗口
screen -ls
# 显示结果如下，这里我建立了两个同名的窗口，但是PID不同
        91251.WindowsName       (2024年09月18日 19时40分28秒)   (Detached)
        86265.WindowsName       (2024年09月18日 18时29分31秒)   (Detached)

# 删除指定窗口
screen -S 91251.WindowsName -X quit
&lt;/code&gt;&lt;/pre&gt;
&lt;h2&gt;进程管控&lt;/h2&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# 1.查看进程，按q键退出窗口
top
# ======================== 该命令各个参数含义如下 ======================== #
# PID:进程ID【这个记住，在后面终止进程中会使用】
# USER:进程宿主【就是谁运行的进程】
# PR:进程的优先级
# NI:进程的谦让度
# VIRT:进程占用的虚拟内存
# RES:进程占用的物理内存
# SHR:进程和其它进程共享的内存
# S:进程的状态，D/R/S/T/Z分别代表：可中断的休眠/运行/休眠/停止/僵化
# %CPU:进程使用CPU的时间比例
# %MEM:进程使用的内存占可用内存的比例
# TIME+:运行时长
# COMMAND:进程启动的程序名，如Python test.py的程序名就是python
# ====================================================================== #
# 这个命令用于查看zhangxin运行的进程
top -u zhangxin
# 也可以在输入top后输入u，然后输入查看宿主的全名

# 2.查看显卡使用情况
# 可以使用如下命令，可以查看链接看看具体用法
nvidia-smi
# 或者nvtop，这一命令需要管理员安装nvtop
nvtop

# 3.终止进程
# 要终止进程，必须是进程的宿主或登录为root用户\
# 终止PID为1234的进程可以使用
kill 1234
# 但有时服务会不服管教hhh，所以强制终止需要添加参数-9
kill -9 1234
# 若找不到PID，可以使用进程名来结束
killall command_name
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/weixin_44120025/article/details/118978198&quot;&gt;ubuntu下实时查看GPU使用情况的两种方式（nvidia-smi、gpustat）及结束占用GPU进程的命令_zeeq_的博客-CSDN博客_ubuntu查看gpu使用情况&lt;/a&gt;&lt;/p&gt;
&lt;h1&gt;Step3：VScode/Trae等编辑器远程链接服务器&lt;/h1&gt;
&lt;p&gt;VSCode通过&lt;strong&gt;Remote - SSH&lt;/strong&gt;扩展实现远程开发。连接后，你可以在本地VSCode界面中直接操作远程服务器上的文件和终端，代码编辑、扩展安装、调试等功能与本地开发体验几乎一致&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;安装VSCode&lt;/strong&gt;：从&lt;a href=&quot;https://code.visualstudio.com/&quot;&gt;官方网站&lt;/a&gt;下载并安装&lt;/p&gt;
&lt;h2&gt;1.VScode免密登录&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;在windows powershell输入&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;ssh-keygen -t rsa
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;一直点enter即可&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;vscode1.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;查看公钥&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;cat ~/.ssh/id_rsa.pub
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;strong&gt;手动复制密钥&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;vscode2.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;打开VScode&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;登录服务器并打开终端&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;手动添加公钥&lt;/strong&gt;：&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mkdir -p ~/.ssh
echo &quot;你的公钥内容&quot; &gt;&gt; ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;img src=&quot;vscode3.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h1&gt;Step4：深度学习相关&lt;/h1&gt;
&lt;h2&gt;环境配置&lt;/h2&gt;
&lt;h3&gt;1.anaconda的安装与使用&lt;/h3&gt;
&lt;p&gt;最新的服务器不再内置公用的anaconda，可以选择自行下载最新版本，参照下图，12，13行可忽略&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# 新建临时文件夹用于存储安装包
mkdir ./tmp
# 进入临时文件夹
cd ./tmp


# 从官网下载anaconda:
# 在https://repo.anaconda.com/archive/ 下查看可用版本，选用linux-x86_64的
# 右键复制链接，使用wget命令下载到当前路径，例如：
wget https://repo.anaconda.com/archive/Anaconda3-2025.06-1-Linux-x86_64.sh

# 也可以使用cp命令从目标目录复制到当前路径
cp /home/share/*.sh ./anaconda.sh

# 执行文件即可安装
bash ./*.sh

安装过程中的服务条款阅读部分，可以按q键跳过
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;装完之后可能发现conda命令还是不存在，可参考以下链接&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/weixin_38705903/article/details/86533863&quot;&gt;【Linux】conda: command not found解决办法-CSDN博客&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;vim命令进入后，按i进入编辑，esc推出编辑，：wq!保存并退出，：q退出&lt;/p&gt;
&lt;h4&gt;自动激活虚拟环境&lt;/h4&gt;
&lt;p&gt;安装完成之后，我们会看到一个是否让 conda 在每次打开终端时自动激活的选项。我们正常是选择yes的（选了yes就不用在考虑后面的事情了）,由于查阅本教程安装conda部分的同学往往是第一次接触终端交互，而终端交互与图形交互存在巨大差异，在ai盛行的时代，很容易出现的错误就是安装时试图查询ai，错误使用windows系统的快捷键ctrl+C，但在linux系统中为停止键，导致我退出了后续进程。在这种情况下除了卸载重装我们还提供以下解决方案：&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;conda1.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;设置临时PATH&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;export PATH=&quot;/home/用户名/anaconda3/bin:$PATH&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;验证conda是否有用&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;conda --version
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;执行初始化&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;conda init bash
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;从新加载配置&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;source ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;这时候我们可以看到base环境被激活了，因为conda init bash会调用conda shell.bash hook，输出一些适合bash的初始化脚本，之后修改 ~/.bashrc 文件，添加这些初始化脚本。这些自动化脚本默认会让新终端自动进入 (base) 环境并且设置命令提示符显示当前环境 (base) 等一些功能。&lt;/p&gt;
&lt;p&gt;但是由于现在的终端还是老终端，他不会显示（base），但是如果你直接打开新终端（或者打开一个新窗口），他会显示（base），所以我们运行 source ~/.bashrc,这个代码的意思就是（source命令）在当前shell环境中执行指定文件中的命令。执行完 ~/.bashrc 文件里面的自动化脚本后，我们就能看到（base）提示符了。&lt;/p&gt;
&lt;p&gt;补充题外话是，~/.bashrc这个文件实际上是存放着局部环境变量的脚本，环境变量是一些键值对，PATH这个环境变量就是用来告诉系统和程序目录所在地，如果没有path，那我们使用命令时就必须告诉系统完整的路径，例如使用ls这个命令，就只能输入/usr/bin/ls而不是简单的ls了&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;conda2.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;我们可以验证 conda init bash 的确是生成了相应初始化脚本，打开目录里面的.bashrc文件，会在末尾发现写入的代码块。&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;conda3.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;h3&gt;2.cuda版本的设定&lt;/h3&gt;
&lt;p&gt;具体安装的版本与路径可以联系相应服务器的网管师兄&lt;/p&gt;
&lt;p&gt;cuda版本主要取决于pytorch版本，具体可以去www.pytorch.org官网看，或者镜像源中应该有标注不同pytorch对应的cuda版本和python版本&lt;/p&gt;
&lt;p&gt;服务器里有什么cuda版本可以到路径下查看&lt;/p&gt;
&lt;p&gt;nvcc -V命令source完之后也查不到版本是正常现象，pytorch安装完了之后应该就没问题了&lt;/p&gt;
&lt;pre&gt;&lt;code class=&quot;language-shell&quot;&gt;# 查看当前cuda版本
nvcc -V

# 修改用户环境变量
vim ~/.bashrc

# 在文本文件末尾添加如下内容
export PATH=&quot;/usr/local/cuda-10.2/bin:$PATH&quot;
export LD_LIBRARY_PATH=&quot;/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH&quot;

# 添加完成后退出，使用如下命令使得修改生效
source ~/.bashrc

&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;3.pytorch的安装&lt;/h3&gt;
&lt;p&gt;官网是www.pytorch.org，也可以用镜像源安装&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/qq_42951560/article/details/109156693&quot;&gt;PyTorch安装教程（Linux）_linux anzhuang pytorch1.4 qinghuayuan-CSDN博客&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;可参考此链接，注意python=这里要写自己的python版本&lt;/p&gt;
&lt;p&gt;有时服务器里没有我们想要的python版本，这时候我们需要自己安装anaconda，然后创建环境，但由于没有root权限，安装参考以下链接&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/JohinieLi/article/details/103710021&quot;&gt;Linux环境下非root用户安装Python及相关库_linux免安装python-CSDN博客&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;具体的cuda和pytorch还有驱动的版本对应参考下面链接，安装成cpu版本的问题以下链接也有解决方案&lt;/p&gt;
&lt;p&gt;可用conda list命令，然后下拉到pytorch那行，观察是否安装成cpu版本&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/qq_46699596/article/details/134552021&quot;&gt;手把手教你在linux上安装pytorch与cuda_linux系统下安装pytorch和cuda-CSDN博客&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;注意，cuda不需要安装&lt;/p&gt;
&lt;p&gt;进入虚拟环境后验证print(torch.cuda.is_available())命令，可能为false，除了链接中讲到的一些可能，还可能是由于numpy版本的问题，具体解决方案参考如下链接&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/m0_46330177/article/details/140501823&quot;&gt;Numpy兼容报错：A module that was compiled using NumPy 1.x cannot be run inNumPy 2.0.0 as it may crash-CSDN博客&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/u013590327/article/details/120467036&quot;&gt;numpy升级与降级_numpy版本如何降低-CSDN博客&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;退出虚拟环境用conda deactivate，具体参考以下链接&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://blog.csdn.net/amnesiagreen/article/details/106349598&quot;&gt;conda创建、进入、退出、删除虚拟环境_退出conda环境-CSDN博客&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;测试时输入python，回车，进入python，然后可开始测试，quit()可退出python&lt;/p&gt;
&lt;h3&gt;&lt;/h3&gt;
&lt;h1&gt;附录&lt;/h1&gt;
&lt;h3&gt;参考书籍：&lt;/h3&gt;
&lt;p&gt;我一般用的是下面这本，可以来1344借阅。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://book.douban.com/subject/26854226/&quot;&gt;Linux命令行与shell脚本编程大全（第3版）&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;网上有说这本也不错，认识我的朋友可以联系我拿电子版，陌生朋友就自力更生吧。&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://book.douban.com/subject/4889838/&quot;&gt;鸟哥的Linux私房菜&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;致谢：能作出此文也要感谢温媛老师，谢谢她的《操作系统与计算机网络》一课领我踏入了Unix的大门，也谢谢zyh，如果没陪他蹭课，我也没机会听这门课。&lt;/p&gt;</content:encoded><h:img src="undefined"/><enclosure url="undefined"/></item></channel></rss>