适用人群:刚入行/在校的芯片方向新人,Linux 零基础或半吊子阅读目标:看完能自己登录服务器、操作文件、看懂同事的命令、不把 rm -rf 打错
写在前面
碰到过公司新来的实习生还有新来的研究生师弟连Linux系统都没有用过,所以本文就给这些同学作为开始芯片开发的起点吧haha。
不管你是做设计、验证、后端还是 DFT,有一件事逃不掉——你每天都要跟 Linux 打交道。Windows?不存在的。Mac?偶尔见,但也是 ssh 到服务器上干活。芯片行业的工具链——VCS、Verdi、DC、Innovus、PrimeTime——清一色跑在 Linux 上。
所以,Linux 是你的生存技能,不是加分项。
这篇文章的目标很简单:把一个完全没用过 Linux 的人,在一天之内拉到"能独立干活"的水平。不讲原理讲到你头疼,只讲你每天都要用的东西。
一、Linux 到底是个啥
1.1 三十秒起源故事
1991 年,芬兰有个大学生叫 Linus Torvalds,觉得当时的操作系统又贵又难用,于是自己写了一个内核,放到了网上,说:"大家随便用,随便改。"
这就是 Linux 的开始。
关键点来了——Linux 内核是开源的。任何人都可以拿到源代码,修改它,打包成自己的版本。所以 Linux 不是"一个操作系统",而是"一个内核 + 一堆人各自打包出来的发行版"。
1.2 为什么芯片行业用 Linux
| |
|---|
| EDA 工具原生支持 | VCS、Verdi、DC 等工具只认 Linux(部分支持 Unix),Windows 连安装包都没有 |
| 命令行效率高 | 芯片开发动辄处理几万个文件、跑几十小时仿真,脚本化+命令行是刚需 |
| 多用户/多任务 | 一台服务器几十人同时用,互不干扰,Windows 做不到 |
| 稳定性和长运行时间 | 仿真跑 48 小时不停机是家常便饭,Linux 稳如老狗 |
| 远程开发友好 | |
| 生态成熟 | Git、Make、Python、Perl、Shell 在 Linux 上是原住民 |
1.3 常见发行版
你进公司后大概率会遇到以下几种之一:
| | |
|---|
| CentOS 7 | 曾经的绝对主流,2024年停止维护,但很多老服务器还在跑 | |
| Rocky Linux | CentOS 的继任者,完全兼容 RHEL,新服务器首选 | |
| Ubuntu | | |
| RHEL | | |
你不需要纠结选哪个——公司给你什么账号,你就用什么。学会一套命令,换个发行版照样能用,不过一般都是CentOS7啦,实习过的两家公司都是用的这个。
二、目录结构:你的文件在哪
Windows 有 C 盘、D 盘,Linux 没有盘符概念。所有东西都从根目录/开始,像一棵倒挂的树。
/├── home/ ← 你的个人目录(相当于 C:\Users\你的名字)│ └── yourname/├── bin/ ← 系统命令(ls, cp, mv 这些程序住这)├── etc/ ← 系统配置文件├── opt/ ← 第三方软件(EDA 工具常装这)├── tmp/ ← 临时文件(重启可能清空,别放重要东西)├── usr/ ← 用户程序和数据│ ├── bin/ ← 更多命令│ ├── lib/ ← 库文件│ └── local/ ← 本地安装的软件├── var/ ← 可变数据(日志、缓存)├── dev/ ← 设备文件(Linux 一切皆文件)├── proc/ ← 进程信息(虚拟文件系统)└── mnt/ 或 media/ ← 挂载点(U盘、网络硬盘)
你只需要记住这几个路径的两种写法
绝对路径:从 / 开始,写全 /home/zhang/sim/run_test.sh相对路径:从当前所在位置开始 ./run_test.sh ← 当前目录下的文件 ../rtl/counter.v ← 上一级目录的 rtl 子目录里 ~/sim/ ← ~ 代表你的 home 目录
三、文件操作:每天都要用的命令
3.1 查看你在哪、有什么
pwd # Print Working Directory,我在哪?ls # 列出当前目录的文件ls -l # 长格式(显示权限、大小、日期)ls -la # 包括隐藏文件(以 . 开头的文件)ls -lh # 文件大小用人类可读格式(K/M/G)ls -lt # 按修改时间排序(新的在前)ls -lrt # 按时间排序,旧的在前(找最新生成的文件很常用)ls -R # 递归显示子目录
实战tip:ls -lrt 是芯片工程师的高频操作——仿真跑完,看最新生成的 log 文件是哪个。
3.2 移动和切换
cd /home/zhang/sim # 切到指定目录cd sim # 切到当前目录下的 simcd .. # 回上一级cd ../.. # 回上两级cd ~ # 回 homecd # 不带参数也回 homecd - # 回到上次所在的目录(很实用!)
3.3 复制、移动、删除
# 复制cp file.v file_bak.v # 复制文件cp -r rtl/ rtl_bak/ # 复制目录(必须加 -r)cp -i file.v /tmp/ # 覆盖前询问确认(保险起见加 -i)cp -p file.v /tmp/ # 保留权限和时间戳# 移动/重命名(mv 既是移动也是重命名)mv old_name.v new_name.v # 重命名mv file.v /tmp/N # 移动到 /tmpmv -i file.v /tmp/ # 覆盖前确认# 删除(⚠️ 危险操作!)rm file.v # 删除文件rm -f file.v # 强制删除,不问确认rm -r rtl/ # 删除目录及内容rm -rf rtl/ # 强制递归删除(最危险的命令,没有之一)
⚠️ 血泪警告rm -rf / 或者 rm -rf * 在错误的目录下执行 = 炸。养成三个习惯:尤其是当你 sudo 了的时候,rm -rf 可以瞬间删掉整个系统。这不是开玩笑。
3.4 创建
mkdir sim # 创建目录mkdir -p tb/agent/driver # 递归创建多级目录(父目录不存在也能创建)touch new_file.v # 创建空文件 / 更新已有文件的时间戳
3.5 查找文件
# find:按条件搜索find . -name ”*.v” # 当前目录下所有 .v 文件find /project -name ”counter*” # 指定目录下找文件名包含 counter 的find . -name ”*.f” -mtime -1 # 1天内修改过的 .f 文件find . -name ”*.log” -size +100M # 大于 100M 的 log 文件find . -type d -name ”tb*” # 只找目录# which/whereis:找命令在哪which vcS # vcs 命令的完整路径whereis python3 # python3 的路径和 man 页位置# locate:快速搜索(需要.updatedb,不是所有机器都有)locate counter.v # 从数据库里找,比 find 快很多
四、文件内容查看
4.1 快速查看
cat file.v # 直接打印到屏幕cat -n file.v # 带行号cat file.v file2.v # 多个文件一起看head file.v # 前 10 行head -50 file.v # 前 50 行tail file.v # 后 10 行tail -50 file.v # 后 50 行tail -f sim.log # 持续追踪文件末尾(看仿真日志最常用!)tail -f sim.log # Ctrl+C 退出追踪
实战tip:tail -f 是看仿真的神器。仿真一边跑,你一边 tail -f sim.log,新出来的 log 实时刷到屏幕上。比反复 cat 强一万倍。
4.2 翻页查看(less)
文件太长用 cat 会刷屏,用 less 可以翻页:
进入 less 后的快捷键:
4.3 搜索文件内容(grep)
grep ”UVM_ERROR” sim.log # 在文件中搜索关键词grep -i ”error” sim.log # 忽略大小写grep -n ”UVM_ERROR” sim.log # 显示行号grep -c ”UVM_ERROR” sim.log # 只显示匹配行数grep -v ”UVM_INFO” sim.log # 反向:显示不包含 UVM_INFO 的行grep -r ”module” ./rtl/ # 递归搜索目录下所有文件grep -rn ”module” ./rtl/ # 递归 + 行号grep -E ”UVM_ERROR|UVM_FATAL” sim.log # 同时搜多个关键词(扩展正则)grep --color ”UVM_ERROR” sim.log # 关键词高亮显示
实战tip:grep -in --color "uvm_error|uvm_fatal" sim.log 是验证工程师每天打几十遍的命令。加 --color 高亮,加 -i 忽略大小写,加 -E 用正则同时搜多个。
4.4 统计(wc)
wc file.v # 行数、单词数、字节数wc -l file.v # 只看行数wc -l *.v # 统计所有 .v 文件的行数
五、权限管理
5.1 看懂权限
ls -l 看到的每一行开头那一串就是权限:
drwxr-xr-x 2 zhang eng 4096 Jul 19 10:30 sim/-rw-r--r-- 1 zhang eng 256 Jul 19 10:30 run.sh
拆解一下:
d rwx r-x r-x │ │ │ │ │ │ │ └─ 其他用户(Other):r-x = 可读可执行,不可写 │ │ └────── 同组用户(Group):r-x = 可读可执行,不可写 │ └─────────── 文件所有者(User):rwx = 可读可写可执行 └─────────────── 文件类型:d=目录,-=普通文件,l=链接
权限字母含义:
5.2 改权限(chmod)
# 符号法(直观)chmod +x run.sh # 给所有人加执行权限chmod u+x run.sh # 只给所有者加执行权限chmod g-w file.v # 去掉同组用户的写权限chmod a+r file.v # 所有人可读(a = all)# 数字法(高效)chmod 755 run.sh # rwxr-xr-x(所有者可读写执行,其他人可读可执行)chmod 644 file.v # rw-r--r--(所有者可读写,其他人只读)chmod 777 shared/ # rwxrwxrwx(所有人完全控制,谨慎使用)
数字怎么算?把 rwx 对应的数字加起来:
rwx = 4+2+1 = 7r-x = 4+0+1 = 5rw- = 4+2+0 = 6r-- = 4+0+0 = 4
5.4 sudo:临时当管理员
sudo apt install vim # 临时用管理员权限装软件sudo rm /opt/old_tool/ # 临时用管理员权限删文件
注意:公司服务器上你没有 sudo 权限(大概率),不过你也应该用不到这个命令。
六、管道与重定向
这是 Linux 最强大的概念之一,理解了它你的效率翻倍。
6.1 重定向:把输出存到文件
ls -l > file_list.txt # 输出写入文件(覆盖已有内容)ls -l >> file_list.txt # 输出追加到文件末尾echo ”hello” > greeting.txt # 把字符串写入文件cat file.v > file_copy.v # 相当于复制grep ”ERROR” sim.log > errors.txt# 把搜索结果存到文件# 标准错误重定向vcs -f file.f 2> compile_err.log # 只把错误信息存到文件vcs -f file.f > compile.log 2>&1 # 正常输出和错误都存到同一个文件vcs -f file.f > /dev/null 2>&1 # 丢弃所有输出(只要退出码)
解释一下 2>&1:
- 2>&1 的意思是"把 stderr 重定向到 stdout 所去的地方"
6.2 管道:把一个命令的输出喂给另一个命令
| 就是管道符,把左边的输出变成右边的输入:
ls -l | grep ”.v” # 列出文件,只看 .v 文件ls -l | wc -l # 统计当前目录有多少个文件grep ”UVM_ERROR” sim.log | wc -l # 统计 sim.log 里有多少行 UVM_ERRORcat sim.log | grep -i ”error” | head -20 # 找 error,只看前 20 条ps aux | grep vcs # 查看进程,只看 vcs 相关的find . -name ”*.log” | xargs grep ”FATAL” # 找到的文件全部 grep
管道是 Linux 的灵魂。你可以把简单命令像积木一样拼起来,完成复杂任务。不会管道的 Linux 用户相当于只会开自动挡,会了管道才算会开车。
6.3 tee:既要存文件又要看屏幕
vcs -f file.f 2>&1 | tee compile.log # 编译输出同时显示在屏幕和写入文件vcs -f file.f 2>&1 | tee -a compile.log # 追加模式
编译 EDA 工具时非常常用——屏幕上能看实时进度,同时 log 文件也留着后面查。
七、进程管理
7.1 查看进程
ps # 只看当前终端的进程ps aux # 查看所有进程(最常用)ps aux | grep vcs # 找 vcs 进程ps -ef | grep username # 找某用户的进程top # 实时进程监控(类似任务管理器)jobs # 查看当前终端的后台任务
7.2 后台运行
# 命令后面加 & 就能放到后台vcs -f file.f &./run_sim.sh &
7.3 杀进程
kill 12345 # 发送 SIGTERM(温和终止,进程可以清理后退出)kill -9 12345 # 发送 SIGKILL(强制杀死,进程立刻消失)killall vcs # 按名字杀(杀所有叫 vcs 的进程)pkill -f ”run_sim” # 按命令行匹配杀
找到 PID 再杀:先用 ps aux | grep vcs 找到进程的 PID(第二列),然后 kill PID。kill -9 是最后手段,进程卡死时才用。
7.4 系统资源查看
df -h # 查看磁盘使用情况(挂载点、总量、已用、可用)du -sh * # 当前目录下各文件/目录的大小du -sh . # 当前目录总大小free -h # 查看内存使用情况
磁盘满了是常见事故。仿真日志动不动几十 G,du -sh * | sort -rh | head -10 找到罪魁祸首然后删掉。
八、vim 编辑器
服务器上没有 VS Code(好吧现在有了 Remote,但以前真没有),改文件全靠 vim,你必须会基本的 vim 操作,不过我一般用Gvim,可是看成是图形化界面的vim,之前还被同事说了喜欢图形化界面就是菜鸟工程师的标志haha。
8.1 三种模式
vim 有三种模式,搞清楚这个你就理解了 vim 的逻辑:
- 普通模式:默认进来的模式,键盘按键是命令而不是文字。移动光标、复制粘贴都在这里。
- 插入模式:按i/
a/o 进入,可以打字。按 Esc 回到普通模式。 - 命令行模式:在普通模式按 :进入,输入命令后回车执行。保存退出在这里。
8.2 基本操作速查
进入和退出:
编辑(进入插入模式):
搜索和替换:
/关键词 ” 向下搜索?关键词 ” 向上搜索n ” 下一个匹配N ” 上一个匹配:%s/old/new/g ” 全文替换 old 为 new:%s/old/new/gc ” 全文替换,每次确认:1,10s/old/new/g ” 只替换第 1-10 行
九、环境变量
环境变量是 Linux 系统的"设置项"——告诉系统各种工具在哪、用什么参数。
9.1 查看环境变量
echo $PATH # 查看命令搜索路径echo $HOME # 查看 home 目录路径echo $USER # 当前用户名env # 查看所有环境变量printenv PATH # 查看指定环境变量
9.2 设置环境变量
# 临时设置(只在当前终端有效)export PATH=/opt/synopsys/bin:$PATH # 把 EDA 工具路径加到 PATHexport WORK_DIR=/project/chip_aexport VCS_HOME=/opt/synopsys/vcs/T-2022.06 # 查看是否设置成功echo $VCS_HOME
9.3 永久设置
把 export 命令写进配置文件,每次登录自动执行:
vim ~/.bashrc # 当前用户的配置(bash)# 或vim ~/.bash_profile # 登录时执行的配置
在文件末尾加上你需要的 export 语句,然后:
source ~/.bashrc # 重新加载配置,不用重新登录
芯片工程师的 .bashrc 通常很长——各种 EDA 工具的路径、license 设置、别名定义。建议从同事那里拷一份作为起点。
9.4 PATH 是什么
PATH 是最重要的环境变量。当你输入 vcs 时,系统会按 PATH 里列出的目录顺序找叫 vcs 的可执行文件。
echo $PATH# 输出示例:# /opt/synopsys/bin:/usr/local/bin:/usr/bin:/bin:/home/zhang/bin
如果提示 command not found,十有八九是这个命令不在 PATH 里。
9.5 别名(alias)
alias ll='ls -lh'# ll 就等于 ls -lhalias la='ls -la'alias gs='git status'alias rv='verdi &'# 永久生效就写进 ~/.bashrc
十、Shell 脚本基础
把多条命令写进一个文件,一次性执行——这就是 Shell 脚本。
#!/bin/bash# 这是一个简单的仿真脚本echo ”=== 开始编译 ===”vcs -f filelist.f -o simvif [ $? -eq 0 ]; then echo ”编译成功,开始仿真” ./simv +UVM_TESTNAME=my_testelse echo ”编译失败!” exit 1fi
保存为 run_sim.sh,然后:
chmod +x run_sim.sh # 加执行权限./run_sim.sh # 运行# 或者bash run_sim.sh # 用 bash 执行,不需要执行权限
写在最后
Linux 不是学出来的,是用出来的。这篇文章里的命令你不需要全记住——用到了回来查就行。
真正让你熟练的不是教程,是每天 cd、ls、grep、vim 的肌肉记忆。用上一个月,你会发现这些命令像呼吸一样自然。强烈建议装个vmware搞个linux虚拟机自己玩一玩,或者去闲鱼买一个别人搞好的虚拟机也就几块钱的事。