2. Linux基础操作:为什么选择Linux、常用Linux发行版推荐(Ubuntu/CentOS)、终端与Shell基础、文件系统导航命令(cd/ls/pwd)、文件操作命令(cp/mv/rm/touch)
2.1 为什么选择Linux?
做数字IC验证,你迟早要跟Linux打交道。这不是选择题,是必答题。
我刚开始入行时也纳闷:Windows用得好好的,干嘛非得折腾Linux?后来在项目里跑一次仿真就明白了——Windows下开一个VCS或者QuestaSim,内存占用直接飙红,编译速度慢得让人抓狂。而同样的工具链,在Linux上跑得飞快,资源调度也干净利落。
说白了,EDA工具(比如Synopsys、Cadence、Mentor家的那些)原生就是为Linux设计的。你在Windows上装个虚拟机跑Linux,性能打七折;直接在Linux物理机上跑,效率拉满。我见过不少团队,服务器清一色CentOS,工作站用Ubuntu,没人用Windows做主力验证环境。
另外,Linux的脚本能力太强了。你想想看,验证流程里动不动就要批量跑几百个testcase,还要自动收集覆盖率、比对log。这些活儿,用Shell脚本或者Python一组合,几行代码搞定。Windows的批处理?嗯,不是不能用,但体验差太远。
2.2 常用Linux发行版推荐
Linux版本很多,但做验证常用的就两个:Ubuntu 和 CentOS(现在更多用Rocky Linux或AlmaLinux替代)。
| 发行版 | 特点 | 适用场景 |
|---|---|---|
| Ubuntu(LTS版本) | 社区活跃、软件包新、apt安装方便 | 个人开发机、学习环境 |
| CentOS / Rocky Linux | 稳定、企业级支持、与RHEL兼容 | 服务器、公司统一环境 |
我个人习惯:笔记本上装Ubuntu 20.04 LTS,因为驱动支持好,装EDA工具时踩坑少。服务器上则用Rocky Linux,图它稳定,跑几个月不用重启。
曾经有个同事,非要在Ubuntu上装最新内核,结果某个版本的VCS死活编译不过,折腾了两天。后来换成LTS版本,一次搞定。所以我的建议是:别追新,用LTS。
2.3 终端与Shell基础
终端(Terminal)就是你的战场。在Linux下干活,90%的时间都在敲命令。别怕,习惯就好。
Shell有很多种,bash、zsh、sh……最常用的是bash。你打开终端,默认就是bash。怎么确认?敲这个命令:
echo $SHELL
输出一般是 /bin/bash。如果是zsh,也别慌,基本命令都一样。
我建议你把终端固定在任务栏,或者学会用快捷键(Ctrl+Alt+T)。验证工程师一天要开十几个终端窗口,每个窗口跑不同的仿真任务。你想想看,要是每次都得去菜单里找终端,多耽误事。
Tab 键可以自动补全命令和文件名。按一次补全,按两次列出所有匹配项。这个习惯越早养成越好。
2.4 文件系统导航命令
在Linux里,没有C盘D盘,只有一个根目录 /。所有文件和设备都挂在这个树形结构下。刚开始可能不习惯,但用熟了你会发现,这种设计其实更清晰。
pwd —— 我在哪?
刚打开终端,你面对的是一个黑框框。想知道当前在哪个目录?敲:
pwd
输出类似 /home/yourname。这就是你的家目录。每个用户都有自己的家目录,放个人文件。
ls —— 看看有啥
想知道当前目录下有哪些文件?用 ls:
ls
ls -l # 显示详细信息(权限、大小、修改时间)
ls -a # 显示隐藏文件(以.开头的文件)
ls -lh # 人性化显示文件大小
我经常用 ls -l,因为能看到文件权限。有一次仿真报错说“权限不够”,我一看,原来是脚本没加执行权限。用 ls -l 一眼就能发现问题。
cd —— 去别处
切换目录用 cd:
cd /home/project # 路径
cd project # 相对路径(从当前位置往下)
cd .. # 返回上一级目录
cd ~ # 回到家目录
cd - # 回到上一个目录
这里有个坑:路径别打错。Linux是大小写敏感的,Project 和 project 是两个不同的目录。我曾经因为大小写问题,找了一个文件找了十分钟……
2.5 文件操作命令
验证工作中,天天要跟文件打交道。复制、移动、删除、创建,这些命令必须烂熟于心。
touch —— 创建空文件
touch testbench.sv
touch run.log
如果文件不存在,touch 会创建一个空文件。如果文件已存在,它只更新文件的修改时间。我经常用它来快速生成一个占位文件,或者刷新log文件的时间戳。
cp —— 复制
cp source.sv dest.sv # 复制文件
cp -r src_dir/ dest_dir/ # 递归复制目录
cp -i file1.sv file2.sv # 覆盖前提示(安全)
复制目录时一定要加 -r,否则会报错。我刚开始学Linux时就忘了加,结果目录没复制成,还一脸懵。
mv —— 移动或重命名
mv old_name.sv new_name.sv # 重命名
mv file.sv /home/project/ # 移动文件到其他目录
mv 既可以移动文件,也可以重命名。说白了,移动和重命名在Linux里是同一个操作——把文件从一个路径挪到另一个路径。
rm —— 删除
rm test.log # 删除文件
rm -r temp_dir/ # 递归删除目录
rm -f core_dump # 强制删除(不提示)
rm -rf * # 慎用!删除当前目录所有内容
这里我要特别强调:Linux没有回收站。文件被 rm 删了,就真的没了。我曾经有一次在服务器上跑 rm -rf,手一抖多打了个空格,差点把整个项目删了。从那以后,我养成了两个习惯:
- 删除前先用
ls确认路径 - 重要文件用
cp备份一份再删
rm -rf,尤其是带通配符的时候。先 ls 看看要删的是啥,再动手。
2.6 本章知识体系
下面这张图帮你理清本章的核心逻辑:
嗯,这一章的内容就这些。Linux命令不难,难的是养成习惯。多敲几次,肌肉记忆就形成了。下次打开终端,试试不用鼠标,纯键盘操作——你会发现效率提升一大截。
可可精品资料库