3. Linux进阶操作:文本编辑器vim的使用、文件权限管理(chmod/chown)、环境变量与PATH、包管理器使用(apt/yum)、进程管理(ps/top/kill)

说实话,很多做数字IC验证的朋友,刚开始接触Linux时都觉得够用就行。不就是跑个仿真、看个波形嘛?嗯,我以前也这么想。直到有一次,我在调试一个复杂的UVM验证环境时,需要同时管理十几个终端窗口、频繁修改配置文件、还要盯着仿真进程别跑死……那时候我才意识到,Linux玩得溜不溜,直接决定了你的工作效率。

这一章,我就把验证工程师最常用的几个Linux进阶操作掰开揉碎讲清楚。你想想看,这些操作几乎每天都会用到,早学会早省心。

3.1 文本编辑器vim的使用

在服务器上做验证,你基本离不开vim。为什么?因为服务器通常没有图形界面,你总不能每次都把文件拖到本地改完再传回去吧?

我个人习惯用vim来编辑Verilog文件、Makefile、脚本等等。刚开始用vim确实有点别扭,但一旦上手,效率真的很高。

我的小建议: 别试图一次性记住所有vim命令。先掌握最核心的几个,剩下的遇到再查,慢慢就熟练了。

3.1.1 vim的三种模式

vim有三种模式,这是理解vim的关键:

  • 普通模式(Normal Mode):刚打开vim时的默认模式。可以移动光标、复制粘贴、删除等操作。
  • 插入模式(Insert Mode):按 i 进入,可以输入文本。按 Esc 返回普通模式。
  • 命令行模式(Command-Line Mode):按 : 进入,可以保存退出、查找替换等。

说白了,你大部分时间就是在普通模式和插入模式之间来回切换。编辑文本时按 i,编辑完了按 Esc,就这么简单。

3.1.2 验证工程师最常用的vim命令

我整理了一份清单,都是我在写Verilog和调试脚本时高频使用的命令:

操作 命令 说明
移动光标 h/j/k/l 左/下/上/右,比方向键快多了
跳转到行首/行尾 0 / $ 0跳到行首,$跳到行尾
跳转到文件首/尾 gg / G gg到第一行,G到最后一行
复制当前行 yy 相当于Ctrl+C
粘贴 p 在光标后粘贴
删除当前行 dd 剪切当前行
撤销 u 撤销上一步操作
查找 /关键词 按n查找下一个,N查找上一个
保存退出 :wq 保存并退出
不保存退出 :q! 强制退出不保存

避坑指南: 我曾经在服务器上改一个关键的Makefile,改完后习惯性按了 :q 而不是 :wq,结果改了一小时的内容全没了。从那以后,我每次退出前都会确认一下是不是保存了。你也可以在vimrc里设置 set autowrite,这样切换文件时会自动保存。

3.1.3 针对Verilog的vim配置小技巧

我个人习惯在 ~/.vimrc 里加上这几行,对写Verilog特别友好:

" 显示行号
set number

" 语法高亮
syntax on

" 自动缩进
set autoindent
set shiftwidth=2

" 搜索时高亮
set hlsearch

" 显示匹配的括号
set showmatch

有了语法高亮,你写Verilog时信号名、关键字、注释一目了然,找bug都方便很多。

3.2 文件权限管理(chmod/chown)

做验证时,经常需要多人共享一个项目目录。你写的testbench,同事要跑;同事生成的波形文件,你要看。这时候文件权限就很重要了。

我记得有一次,同事跑了一整夜的回归测试,生成了几百个波形文件。结果第二天我想打开看看,发现权限不够——他忘了给其他人读权限。嗯,这种事其实挺常见的。

3.2.1 理解文件权限

Linux里每个文件都有三组权限:

  • 所有者(Owner):文件创建者
  • 所属组(Group):文件所属的用户组
  • 其他人(Others):其他用户

每组权限又分为三种:读(r)、写(w)、执行(x)。用 ls -l 查看时,你会看到类似这样的输出:

-rw-r--r-- 1 alice verify_group 1024 Mar 15 10:30 testbench.sv

这串字符怎么读?我来拆解一下:

  • 第一个 - 表示普通文件(如果是目录则是 d)
  • rw-:所有者有读写权限
  • r--:所属组只有读权限
  • r--:其他人只有读权限

3.2.2 chmod:修改权限

chmod有两种用法:符号模式和数字模式。我个人更推荐数字模式,简洁明了。

数字模式用三位八进制数表示权限:

数字 权限 说明
7 rwx 读+写+执行
6 rw- 读+写
5 r-x 读+执行
4 r-- 只读
0 --- 无权限

举个例子,你想让所有人都能读写执行一个脚本:

chmod 777 run_sim.sh

但说实话,777权限太开放了,不安全。我一般这样用:

# 自己可读写,同组可读,其他人不可访问
chmod 640 testbench.sv

# 自己可读写执行,同组可读执行,其他人可读执行
chmod 755 run_sim.sh
注意: 别轻易给脚本777权限。我曾经在一个共享项目里看到有人把所有文件都设成777,结果某天有人不小心删了别人的关键文件……权限管理,说白了就是「够用就好,别太松也别太紧」。

3.2.3 chown:修改文件所有者

有时候你需要把文件的所有权转给其他人。比如你离职了,要把项目交接给同事:

# 修改文件所有者为bob
sudo chown bob testbench.sv

# 同时修改所有者和所属组
sudo chown bob:verify_group testbench.sv

# 递归修改整个目录
sudo chown -R bob:verify_group project_dir/

注意,chown通常需要root权限,所以前面要加 sudo。

3.3 环境变量与PATH

环境变量这个东西,刚开始接触时觉得挺玄乎的。说白了,它就是操作系统里的一些「全局变量」,告诉系统去哪里找可执行文件、库文件等等。

做验证时,你经常需要设置各种工具的路径——仿真器、编译器、波形查看器……这些都要靠环境变量来管理。

3.3.1 查看和设置环境变量

查看所有环境变量:

env

查看某个特定变量:

echo $PATH
echo $HOME

临时设置一个变量(只在当前终端有效):

export MY_VAR="hello"

3.3.2 PATH变量——你的命令搜索路径

PATH是最重要的环境变量之一。当你输入一个命令时,系统会按PATH里列出的目录顺序去查找这个命令。

举个例子,你安装了VCS仿真器,它的可执行文件在 /tools/synopsys/vcs/bin/ 下。如果不把这个目录加到PATH里,每次运行VCS都得输入完整路径:

/tools/synopsys/vcs/bin/vcs -f filelist.f

多麻烦啊!所以一般会在 ~/.bashrc 或 ~/.bash_profile 里加上:

export PATH=/tools/synopsys/vcs/bin:$PATH

这样你就可以直接输入 vcs 来运行了。

我的习惯: 我会在 ~/.bashrc 里把所有工具的路径集中管理,按工具类型分组,加上注释。这样换服务器或者重装系统时,直接复制过去就能用,省心。

3.3.3 验证环境常用的环境变量

我整理了几个验证工程师经常用到的环境变量:

变量名 用途 示例
VCS_HOME VCS安装目录 /tools/synopsys/vcs
VERDI_HOME Verdi波形查看器目录 /tools/synopsys/verdi
LM_LICENSE_FILE License服务器地址 27000@license_server
WORK_DIR 当前项目工作目录 /home/alice/project_a

3.4 包管理器使用(apt/yum)

做验证时,你经常需要安装一些依赖库——比如Python的某个包、或者系统级的开发工具。这时候包管理器就派上用场了。

不同的Linux发行版用的包管理器不一样:

  • Debian/Ubuntu:用 apt
  • Red Hat/CentOS:用 yum 或 dnf

3.4.1 apt常用命令(Ubuntu/Debian)

# 更新软件包列表
sudo apt update

# 安装软件包
sudo apt install gcc make git

# 卸载软件包
sudo apt remove package_name

# 搜索软件包
apt search package_name

3.4.2 yum常用命令(CentOS/RHEL)

# 更新软件包列表
sudo yum update

# 安装软件包
sudo yum install gcc make git

# 卸载软件包
sudo yum remove package_name

# 搜索软件包
yum search package_name

避坑指南: 我曾经在Ubuntu上装一个库,直接 sudo apt install 结果提示找不到包。后来发现是忘了先 sudo apt update。记住,安装前先更新列表,这是基本操作。

3.5 进程管理(ps/top/kill)

做验证时,你经常要跑长时间的仿真。有时候仿真卡住了、或者跑得太慢、或者你想看看它到底跑了多久……这时候就需要进程管理了。

我记得有一次,一个回归测试跑了整整一个周末,结果周一来看发现进程早就挂了,但没人知道。从那以后,我养成了用 top 和 ps 定期检查进程的习惯。

3.5.1 ps:查看进程快照

最常用的用法:

# 查看当前用户的所有进程
ps -u $USER

# 查看所有进程的详细信息
ps -ef

# 查看某个特定进程(比如vcs)
ps -ef | grep vcs

输出里你会看到PID(进程ID)、CPU使用率、运行时间等信息。PID很重要,后面kill进程时会用到。

3.5.2 top:实时监控进程

top命令会实时显示系统里最活跃的进程,有点像Windows的任务管理器:

top

在top界面里,你可以看到:

  • 系统总体的CPU和内存使用情况
  • 每个进程的CPU和内存占用
  • 进程的运行状态(R运行中、S睡眠、Z僵尸等)

按 q 退出top界面。按 k 可以输入PID来杀掉进程。

3.5.3 kill:终止进程

当仿真卡死或者跑偏了,你需要强制终止它:

# 正常终止(发送SIGTERM信号)
kill PID

# 强制终止(发送SIGKILL信号)
kill -9 PID

# 按进程名终止
pkill vcs
注意: kill -9 是最后的手段。它直接杀掉进程,不给进程任何清理的机会。我一般先用 kill(不带-9),等几秒看进程有没有正常退出。实在不行了再用 kill -9。你想想看,如果仿真正在写波形文件,直接-9可能会把文件写坏。

3.6 本章知识体系总览

为了让你更直观地理解这一章的知识结构,我画了一张图:

Linux进阶操作知识体系 Linux进阶操作 vim文本编辑器 文件权限管理 环境变量与PATH 包管理器(apt/yum) 进程管理(ps/top/kill) 核心操作 三种模式切换 常用命令(复制/粘贴/查找) Verilog配置技巧 核心操作 chmod修改权限 chown修改所有者 数字权限表示法 核心操作 查看/设置环境变量 PATH路径配置 验证工具变量设置 核心操作 apt update/install yum update/install 搜索/卸载软件包 核心操作 ps查看进程快照 top实时监控 kill终止进程

这张图把这一章的内容串起来了。你想想看,vim是编辑工具,文件权限是安全基础,环境变量是配置核心,包管理器是软件来源,进程管理是运行保障。五个模块缺一不可。

好了,这一章的内容就到这里。记住,这些操作不是背出来的,是用出来的。下次在服务器上做验证时,试着多用用vim的快捷键、用chmod管理好你的文件权限、用top看看仿真进程的状态……用着用着就熟练了。

可可精品资料库