Linux与server操作手册

Last update: 2021-06-09

NSCC linux常见问题及操作

账户

GPU账户信息

ssh weiliudeng@172.25.136.22
Ldw-258174718

NSCC账户:

ssh weiliu@nus.nscc.sg
ssh nscc03-ib0 # 联网的节点,用于安装R包等
MM: Ldw@258369
R安装本地的package报错?

服务器的默认安装路径是超级用户的R包安装路径,所以普通用户是没有权限的。需要先创建一个用户文件夹下的R安装包路径

常用操作

module load R/3.6.3 # 载入R3.6.3版本环境变量
module avail # 显示所有可用的环境变量,查看R有哪些版本 

↑ 返回目录页

Linux相关操作

安装R包和Miniconda

R CMD INSTALL安装R本地压缩包

R CMD INSTALL MixPPCA_1.0.tar.gz

Linux中conda环境安装curl失败?
wget https://cran.r-project.org/src/contrib/curl_4.3.1.tar.gz
conda环境安装curl失败时,需要将包下载到本地,然后指定安装的路径:
R CMD INSTALL --configure-vars='LIB_DIR=/usr/lib/x86_64-linux-gnu/pkgconfig' curl_4.3.1.tar.gz

Linux下安装RSQLite失败,报错:/boost/details/fenv.cpp: no such files.
conda install -c conda-forge boost-cpp

linux上安装miniandoconda,见网址: https://docs.conda.io/en/latest/miniconda.html#linux-installers

wget -O miniconda.sh "https://docs.conda.io/en/latest/miniconda.html#linux-installers" #下载软件安装包
bash miniconda.sh # 安装软件
export PATH=/home/hangweiqiang/miniconda3/bin:$PATH #设置环境变量
#将此目录加入到该用户的局部环境目录,就可以直接调用程序了julia。
export PATH=/home/weiliu/Julia/julia-1.4.2/bin:$PATH 
# 不加入环境变量,也可以运行julia,但是得指定当前目录,否则笨笨的linux无法找到该可执行文件
./julia

设置R的工作路径

setwd("/home/hangweiqiang/LiuWei/Rfile/ProMix")

保存R运行后的数据文件

save(RI, file='data/RI_n600p300q8K3.Rdata')

下载内存和负载查看软件

conda install -c conda-forge htop #利用conda来下载htop包
htop #查看内存占用情况
pkill -9 -u weiliudeng R #杀掉用户为XX的R相关的进程
#查看cpu信息命令:
cat /proc/cpuinfo
#查看cpu总核心数命令:
grep 'model name' /proc/cpuinfo | wc -l 
load average含义:
 https://www.cnblogs.com/yiwenrong/p/13204178.html

基本命令

在linux下,扩展名没有太大意义。.doc 和.txt都是普通文件,用 ls -l查看时,“-”表示普通文件 当执行 ls -ld /home/zgy/时,可以看到第一列内容为drwx—— ,这种开头带有d字符的文件就表示目录,目录在Linux中是一个比较特殊的文件。

可用命令: 
rm -rf 目录名 强制删除非空目录
ls -l 查看当前文件夹文件的详细信息
sudo -s 登录超级用户
whereis xx 查看有哪些xx程序的版本,比如
whereis python   查看有哪些python版本
cd 路径                        更改远程目录到“路径” 
lcd 路径                       更改本地目录到“路径” 
chgrp group path               将文件“path”的组更改为“group” 
chmod mode path                将文件“path”的权限更改为“mode” 
chown owner path               将文件“path”的属主更改为“owner” 
exit                           退出 sftp 
help                           显示这个帮助文本 
get 远程路径                   下载文件 
ln existingpath linkpath       符号链接远程文件 
ls [选项] [路径]               显示远程目录列表 
lls [选项] [路径]              显示本地目录列表 
mkdir 路径                     创建远程目录 
lmkdir 路径                    创建本地目录 
mv oldpath newpath             移动远程文件 
open [用户@]主机[:端口]        连接到远程主机 
put 本地路径                   上传文件 
pwd                            显示远程工作目录 
lpwd                           打印本地工作目录 
quit                           退出 sftp 
rmdir 路径                     移除远程目录 
lrmdir 路径                    移除本地目录 
rm 路径                        删除远程文件 
lrm 路径                       删除本地文件 
symlink existingpath linkpath  符号链接远程文件 
version                        显示协议版本 
exit/logout                   退出linux连接
cd /home/csr3/ #进入到指定路径
cd .. # 返回上一级命令
dos2unix ./*.sh #将当前文件夹中所有以.sh结尾的文件从文本格式转换为二进制格式
du -h * #查看当前目录下文件的大小

文件操作命令

stat A.txt    查看文件的创建日期等详细信息
cp -options A B    将文件(夹)A复制为文件(夹)B。
tar -xzvf  XX.tar.gz      解压压缩文件
从指定网址下载文件:
wget -O spaceranger-1.2.2.tar.gz "https://cf.10xgenomics.com/releases/spatial-exp/spaceranger-1.2.2.tar.gz" 
pwd 获取当前绝对路径
man bash 查看某个命令(比如bash)的介绍。
head -2 XX.csv 查看文件的前两行
cat xx.txt  打印出文件内容

安装软件

有一些linux的安装包是.sh后缀的安装包,可以通过如下命令进行安装:

bash xxx.sh

设置环境变量:

export PATH=/opt/spaceranger-1.2.2:$PATH
export PATH=/home/hangweiqiang/spaceranger/spaceranger-1.2.2:$PATH
vim ~/.bashrc  # 修改环境配置文件
export PATH=/home/hangweiqiang/miniconda3/bin:$PATH # 添加环境变量语句到.bashrc文件中,这样就不需要每次都设置环境变量了

Linux之间的文件传输

scp  -r yangyi@gmsjl:/nas/yangyi2/jicheng3 ./ # -r 传输文件夹,从远程机器传输到当前机器
scp   -r jicheng3 gmsyan@nus.nscc.sg:/home/projects/11000368/Work/YangYi/Jicheng3/fastqData 
#从当前机器推送文件夹到远程机器

scp   bam2count.sh gmsyan@nus.nscc.sg:/home/projects/11000368/Work/YangYi/Jicheng3/submit_code/shFile #传递文件到远程机器

Linux编程语言

# 批量转化:Linux语法比较特别:等号之间不能有空格,Linux的下标也是从0开始计算
sample=(AVEN_2 AVEN_3 AVEN_4 DIS3L_2 DIS3L_3 DIS3L_4 FOCAD_2 FOCAD_3 FOCAD_4 NT_2 NT_3 NT_4 SKIV2L_2 SKIV2L_3 SKIV2L_4 TTC37_2 TTC37_3 TTC37_4);
for ((intt=1;intt<18;intt++));
do
samtools index ./${sample[intt]}_Aligned.sortedByCoord.out.bam 
done

cd /home/projects/11000368/Work/YangYi/Jicheng3
sample=(AVEN_2 AVEN_3 AVEN_4 DIS3L_2 DIS3L_3 DIS3L_4 FOCAD_2 FOCAD_3 FOCAD_4 NT_2 NT_3 NT_4 SKIV2L_2 SKIV2L_3 SKIV2L_4 TTC37_2 TTC37_3 TTC37_4);
for ((intt=0;intt<18;intt++));
do
htseq-count -f bam -r pos -s no -a 10 -t exon -i gene_id -m union ./STAR_out/HSTAR_out/${sample[intt]}_Aligned.sortedByCoord.out.bam ./fastqData/humanRefData/gencode.v30.chr_patch_hapl_scaff.basic.annotation2.gtf > ./coutFiles/${sample[intt]}_counts_out.txt
done

在linux上利用for循环下载很多文件

for ((intt=3;intt<8;intt++));
do
wget  "https://www.ebi.ac.uk/arrayexpress/files/E-MTAB-9357/E-MTAB-9357.processed.${intt}.zip" 
done

以管理员权限运行命令

账户若具有管理员权限,则可以利用sudo命令来以管理员权限运行命令。

sudo R # 以管理员权限运行R
sudo wget https://cf.10xgenomics.com/supp/spatial-exp/refdata-gex-GRCh38-2020-A.tar.gz # 以管理员下载文件

开辟新的空间

screen -S 001 #开辟一个名为001的运行空间
screen -S 007
Ctrl + A + D  # 从开辟的空间中退出到主界面。
screen -ls # 查看开辟的空间的ID
screen -r ID # 再次进入开辟的空间,查看代码运行情况
kill ID # 删除该运行空间
pkill -u csr3 # 删除该用户的所有运行的空间。
kill 46747

↑ 返回目录页

Linux与Anoconda操作

下载和安装miniconda3 下载、安装地址:https://docs.conda.io/en/latest/miniconda.html#linux-installers

wget -c https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh

conda 安装R语言及其R包:

1 添加channel:清华镜像 free conda-forge bioconda

conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
conda config --set show_channel_urls yes
conda config --show  # 查看新增channels
conda config --remove channels # 移除掉这些channals
 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
  - https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free

2 创建conda环境r403,并安装R4.0.3

conda create -n r403
conda activate r403
conda install r-base=4.0.3
conda install r-vegan  # 安装vegan包

3 包管理

conda list                      #查看已安装包
conda  search search_term      #搜索包信息
conda install <package_name>  #安装包
conda remove <package_name>  #卸载包
conda update <package_name> #更新包

4 环境管理

conda env list #查看已有环境
conda create -n <env_name> (<packages>) #创建环境
source activate <env_name>              #激活环境
source deactivate                       #退出环境
conda env remove -n <env_name> #删除环境
conda env export > env.yaml
conda env create -f env.yaml

5 conda笔记

conda list  # 查看conda中已经安装的软件
conda install diamond  # conda安装软件,默认最新版
conda install hmmer2 hmmer diamond
conda install diamond=0.8.22  # conda安装指定版本的软件
conda install py-bio  # conda安装python模块
conda create -n antismash
conda create -n python3.6 python=3.6  # 创建python3.6 conda环境
conda info --envs  # 查看环境列表
conda activate ENV  # 激活conda环境
conda deactivate ENV  # 退出conda环境
conda remove -n ENV --all  # 删除conda环境
conda config --show  # 查看channel
conda create -n r4py5 python=3.6 R=4.0.1 # 创建虚拟环境,并指定R和Python的版本
  1. NSCC上如何配置新的R环境:
#1. 载入anaconda 3
module load anaconda/3
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/bioconda
conda config --set show_channel_urls yes

#2.利用anaconda 3在自己账户上创建新的conda环境
conda create -n r4 python=3.9

#3.安装R最新版4.1.1
source activate r4
conda install r-base=4.1.1
  1. Python从github上安装module
/home/weiliu/miniconda3/envs/r-reticulate/lib/python3.9/site-packages/scvi/__init__.py:31: DeprecationWarning: scvi is deprecated, please uninstall scvi via `pip uninstall scvi` and install the new scvi-tools package at github.com/YosefLab/scvi-tools
pip install git+https://github.com/YosefLab/scvi-tools
sudo pip2 install git+https://github.com/epierson9/ZIFA
python2 -m pip install git+https://github.com/epierson9/ZIFA
sudo apt-get install python-pip
pip2 install --upgrade setuptools
pip2 install ez_setup

↑ 返回目录页

远程linux服务器提交计算任务

使用PBS集群管理软件来提交任务执行,可以调配全部可用内存资源。 新建一个xx.sh文件

#!/bin/bash
#PBS -N SCLMM_IS_power_rho0.8_lam0.8_h20.001 
#PBS -l select=1:ncpus=1:mem=90GB
#PBS -l walltime=24:00:00
#PBS -l place=pack
#PBS -j oe
#PBS -o /home/users/nus/gmsyan/SCLMM/simulation/submit_code/SCLMM_IS_power_rho0.8_lam0.8_h20.001.log
module load R
module load gcc/5.1.0
cd /home/users/nus/gmsyan/SCLMM/simulation/submit_code
R CMD BATCH /home/users/nus/gmsyan/SCLMM/simulation/submit_code/SCLMM_IS_power_rho0.8_lam0.8_h20.001.R
 //提交任务的名称为xx
#PBS -N xx 
// 设置,选几个CPU等,内存为90GB
#PBS -l select=1:ncpus=1:mem=90GB

//命令执行代码需要的软件 代码文件(参数)
module load R
module load gcc/5.1.0
cd /home/users/nus/gmsyan/SCLMM/simulation/submit_code
R CMD BATCH /home/users/nus/gmsyan/SCLMM/simulation/submit_code/SCLMM_IS_power_rho0.8_lam0.8_h20.001.R

// 注1:想要得到程序运行的时间,可以使用
date > test.time

normal类型任务

对于normal类型任务,申请不能超过96GB的内存 (mem),不能超过24个核(ncpus),不能超过1个节点(select). NSCC上跑代码如何设置为long,以便能够跑48个小时。示例代码如下:

#!/bin/bash
#PBS -P Personal
#PBS -N ZINB
#PBS -q normal
#PBS -l select=1:ncpus=1:mem=90GB
#PBS -l walltime=48:00:00
#PBS -l place=pack
#PBS -j oe
#PBS -o /home/users/nus/weiliu4/LiuWei/Rfiles/logFiles/ZINB_compZ1.log
module load R/3.6.3
cd /home/users/nus/weiliu4/LiuWei/Rfiles/ProMix/RoutFiles
R CMD BATCH /home/users/nus/weiliu4/LiuWei/Rfiles//ProMix/nsccRfiles/ZINB_compZ.R

PBS环境qsub, qstat, qdel

PBS 是公开源代码的作业管理系统,在此环境下运行,用户不需要指定程序在哪些节点上运行,程序 所需的硬件资源由PBS 管理和分配。

1、PBS 命令

PBS 提供4 条命令用于作业管理。

  1. qsub 命令—用于提交作业脚本 命令格式:
qsub [-a date_time] [-c interval] [-C directive_prefix]
[-e path] [-I] [-j join] [-k keep] [-l resource_list] [-m mail_options]
[-M user_list][-N name] [-o path] [-p priority] [-q destination] [-r c]
[-S path_list] [-u user_list][-v variable_list] [-V]
[-W additional_attributes] [-z]
[script]

参数说明:因为所采用的选项一般放在pbs 脚本中提交,所以具体见PBS 脚本选项。 例:# qsub aaa.pbs 提交某作业,系统将产生一个作业号

  1. qstat 命令—用于查询作业状态信息
命令格式:qatat [-f][-a][-i] [-n][-s] [-R] [-Q][-q][-B][-u]
参数说明:
-f jobid 列出指定作业的信息
-a 列出系统所有作业
-i 列出不在运行的作业
-n 列出分配给此作业的结点
-s 列出队列管理员与scheduler 所提供的建议
-R 列出磁盘预留信息
-Q 操作符是destination id,指明请求的是队列状态
-q 列出队列状态,并以alternative 形式显示
-au userid 列出指定用户的所有作业
-B 列出PBS Server 信息
-r 列出所有正在运行的作业
-Qf queue 列出指定队列的信息
-u 若操作符为作业号,则列出其状态

若操作符为destination id,则列出运行在其上的属于user_list 中用户的作业状态。 例:# qstat -f 211 查询作业号为211 的作业的具体信息。

  1. qdel 命令—用于删除已提交的作业
命令格式:qdel [-W 间隔时间] 作业号
命令行参数:
例:# qdel -W 15 211 15 秒后删除作业号为211 的作业
  1. qmgr 命令—用于队列管理
qmgr -c "create queue batch queue_type=execution"
qmgr -c "set queue batch started=true"
qmgr -c "set queue batch enabled=true"
qmgr -c "set queue batch resources_default.nodes=1"
qmgr -c "set queue batch resources_default.walltime=3600"
qmgr -c "set server default_queue=batch"

2、PBS 脚本文件

PBS 脚本文件由脚本选项和运行脚本两部分组成。

  1. PBS 作业脚本选项 (若无-C 选项,则每项前面加‘#PBS’)
-a date_time : date_time 格式为:[[[[CC]YY]MM]DD]hhmm[.SS]
表示经过date_time 时间后作业才可以运行。
-c interval : 定义作业的检查点间隔,如果机器不支持检查点,则忽略此选项。
-C directive_prefix :在脚本文件中以directive_prefix 开头的行解释为qsub 的命
令选项。(若无此选项,则默认为’#PBS’ )
-e path :将标准错误信息重定向到path
-I :以交互方式运行
-j join :将标准输出信息与标准错误信息合并到一个文件join 中去。
-k keep :定义在执行结点上保留标准输出和标准错误信息中的哪个文件。
keep 为o 表示保留前者,e 表示后者,oe 或eo 表示二者都保留,
n 表示皆不保留。若忽略此选项,二者都不保留。
-l resource_list : 定义资源列表。以下为几个常用的资源种类。
cput=N : 请求N 秒的CPU 时间; N 也可以是hh:mm:ss 的形式。
mem=N[K|M|G][B|W]:请求N {kilo|mega|giga}{bytes|words} 大小的内存。
nodes=N:ppn=M :请求N 个结点,每个结点M 个处理器。
-m mail_options :mail_option 为a:作业abort 时给用户发信;为b:作业开始运行发信;为e:
作业结束运行时发信。若无此选项,默认为a。
-M user_list : 定义有关此作业的mail 发给哪些用户。
-N name : 作业名,限15 个字符,首字符为字母,无空格。
-o path : 重定向标准输出到path。
-p priority : 任务优先级,整数,[-1024,1023],若无定义则为0.
-q destination : destination 有三种形式: queue , @server,queue@server。
-r y|n : 指明作业是否可运行,y 为可运行,n 为不可运行。
-S shell : 指明执行运行脚本所用的shell,须包含全路径。
-u user_list : 定义作业将在运行结点上以哪个用户名来运行。
-v variable_list : 定义export 到本作业的环境变量的扩展列表。
-V : 表明qsub 命令的所有环境变量都export 到此作业。
-W additional_attributes : 作业的其它属性。
-z : 指明qsub 命令提交作业后,不在终端显示作业号。
  1. 运行脚本同LINUX 下一般的运行脚本文件。 [注]:脚本文件中的mpirun_rsh 命令行中的节点列表文件要用环境变量表示 $PBS_NODEFILE,这个环境变量表示由pbs 自动分配给作业的节点列表; 节点数为命令行中指定的进程数。 格式如下:
mpirun_rsh –np 进程数 –hostfile $PBS_NODEFILE 可执行程序名

3、PBS 环境下运行示例

(1)脚本文件编辑示例 实例1:运行mpi 程序 命令行:#vi aaa.pbs 编辑的内容:

#PBS -N myjob
#PBS -o /home/jz/my.out
#PBS -e /home/jz/my.err
#PBS –l nodes=2:ppn=2

cd 目录(你们原来直接在节点上运行时所在的目录)
mpirun_rsh –np 4 –hostfile $PBS_NODEFILE /home/jz/helloworld

解释:原先大家都是在中断输入 mpirun_rsh…..这些命令执行程序的,现在只要把这些提交命令放 在.pbs 配置文件的最后,由PBS 来调度执行(自动分配节点和其它资源)。 Myjob 是为你此次要运行的程序起的任务名,可以改成你自己想要的名字 原先输出信息都是直接在屏幕上显示的,现在屏幕上的显示全部输出到文件中,上例中输出文 件是/home/jz/my.out 文件,大家可以根据自己的需要修改(目录,文件名)。程序运行时遇到的一些错误会 记录在.err 文件中。好处:因为对每个任务都设定了不同的输出文件,所以看结果只要打开相应文件看就可 以了,不需要开多个终端,而且里面有任务的详细信息,比如实际分配的是哪些节点计算,运行时间等。

#PBS –l nodes=2:ppn=2

你们程序需要几个节点只要修改nodes 后的数字就可以了,ppn=2 保持 不变,因为我们的机器每个节点都是双cpu 的。 mpirun_rsh –np 4 –hostfile $PBS_NODEFILE /home/jz/helloworld 此例中-np 后的4 是并行数(2 × 2 = 4 个cpu ), –hostfile $PBS_NODEFILE 不需要改变。 /home/jz/helloworld 是你编译好的可执行文件名,需修改。 对于每个你要运行的mpi 程序都需要这样一个.pbs 配置文件 也就是说大家原来的操作是:mpirun………… 现在改成2 步走:1)写个pbs 配置文件(比如xxx.pbs);2)向pbs 提交(qsub xxx.pbs) 实例2:运行非mpi 程序 有些用户并不是自己编写mpi 程序,同样也可以用pbs 提交。 比如物理系运行程序时一般输入的命令是 RunDMol3.sh TiFeCp2-pbe-dspp-m=1-opt ,那么配置文件可以 这样写: 命令行:#vi job.pbs 编辑的内容:

#PBS -N physics_job
#PBS -o /home/physics/physics_job.out
#PBS -e /home/physics/physics_job.err
#PBS -l nodes=1:ppn=2
#PBS -r y
cd 目录(你们原来直接在节点上运行时所在的目录)
RunDMol3.sh TiFeCp2-pbe-dspp-m=1-opt

解释:也就是说把原来在终端直接输入的命令RunDMol3.sh TiFeCp2-pbe-dspp-m=1-opt 放到pbs 配置 文件中,因为你们只要一个节点,所以nodes=1,至于用哪个节点系统自动分配,你们肯定很关心是分配 了哪个节点给你们,那么可以用qstat 命令查询(比如qstat -n)。

  1. 提交作业示例
命令行:#qsub aaa.pbs

显示结果:

  1. 作业状态查询示例 Qstat 后加不同参数可以查看不同的信息(各参数的意思,上面有详细的说明,你们可以一个个试验一 下,以后就知道查看哪些信息,需要哪些参数) 实例:
命令行:#qstat –a (查看作业的状态)

显示结果: 解释:Job id 211 是给你提交的任务分配的任务号,S(任务状态,R 表示正在运行,Q 表示正在排 队等候调度)

命令行:#qstat –n (查看作业使用的节点)

显示结果: 解释:blade32 就是分给你这个任务的节点 命令行:#qstat –f 211 (查看有关作业运行具体信息) 显示结果: 解释:exec_host 显示的是实际执行该任务的节点

↑ 返回目录页

Module环境变量管理工具

使用module环境变量管理工具可以很方便管理linux中的环境变量,用户不需要修改.bashrc,从而避免误操作。

  1. module load | add 加载环境变量 module unload | rm 移除环境变量
module load R  #加载R,或者使用module add R
which R   # (查看是否加载成功)
# 结果:/app/R/R-3.5.3/bin/R
module unload R #从环境变量中移除R,或者使用module rm R
module load gcc/5.1.0 #加载gcc的5.1.0版本
module swap R R/3.6.0 # 将当前环境变量中的R替换成R3.6.0版本作为环境变量
  1. module avail – 显示系统可用的编译器及库

  2. module list 显示用户加载的编译器及库

  3. module help 帮助命令

↑ 返回目录页

vi/vim编辑器的使用

sed命令示例见网址: https://www.cnblogs.com/feixiangmanon/p/12043757.html

  1. 打开文件、保存、关闭文件(vi命令模式下使用)
vi filename       //打开filename文件
:w       //保存文件
:w vpser.net //保存至vpser.net文件
:q          //退出编辑器,如果文件已修改请使用下面的命令
:q!        //退出编辑器,且不保存
:wq         //退出编辑器,且保存文件
  1. 插入文本或行(vi命令模式下使用,执行下面命令后将进入插入模式,按ESC键可退出插入模式)
a      //在当前光标位置的右边添加文本
i       //在当前光标位置的左边添加文本
A     //在当前行的末尾位置添加文本
I      //在当前行的开始处添加文本(非空字符的行首)
O     //在当前行的上面新建一行
o     //在当前行的下面新建一行
R    //替换(覆盖)当前光标位置及后面的若干文本
J    //合并光标所在行及下一行为一行(依然在命令模式)
  1. 移动光标(vi命令模式下使用)
1、使用上下左右方向键

2、命令模式下:h   向左、j   向下 、k   向上、l  向右。
空格键 向右、Backspace  向左、Enter  移动到下一行首、-  移动到上一行首。
  1. 删除、恢复字符或行(vi命令模式下使用)
x         //删除当前字符
nx         //删除从光标开始的n个字符
dd      //删除当前行
ndd   //向下删除当前行在内的n行
u       //撤销上一步操作
U      //撤销对当前行的所有操作
/vpser     //向光标下搜索vpser字符串
?vpser     //向光标上搜索vpser字符串
n           //向下搜索前一个搜素动作
N         //向上搜索前一个搜索动作

↑ 返回目录页