当前位置:首页>Linux>芯片菜鸟入门第一课——Linux系统使用

芯片菜鸟入门第一课——Linux系统使用

  • 2026-09-02 15:48:26
芯片菜鸟入门第一课——Linux系统使用

适用人群:刚入行/在校的芯片方向新人,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 稳如老狗
远程开发友好
SSH 连上去就能干活,不需要图形界面
生态成熟
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 file.v

进入 less 后的快捷键:

按键
功能
空格
 / f
向下翻一页
b
向上翻一页
↑
 / ↓
上下滚一行
g
跳到文件开头
G
跳到文件末尾
/关键词
向下搜索关键词
?关键词
向上搜索关键词
n
下一个搜索结果
N
上一个搜索结果
q
退出

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=链接

权限字母含义:

字母
数字
含义
r
4
读(Read)
w
2
写(Write)
x
1
执行(eXecute)/ 进入目录
-
0
无权限

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:

  • 0 = 标准输入(stdin)
  • 1 = 标准输出(stdout)——正常输出
  • 2 = 标准错误(stderr)——报错信息
  • 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 基本操作速查

进入和退出:

vim file.v     # 打开文件

编辑(进入插入模式):

按键
功能
i
在光标前插入
a
在光标后插入
o
在下方新开一行插入
O
在上方新开一行插入
dd
删除整行(其实是剪切)
dw
删除一个单词
u
撤销
Ctrl+r
重做(取消撤销)
yy
复制整行
p
粘贴
cc
删除整行并进入插入模式

搜索和替换:

/关键词 ” 向下搜索?关键词 ” 向上搜索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虚拟机自己玩一玩,或者去闲鱼买一个别人搞好的虚拟机也就几块钱的事。


      最新文章

      随机文章