我第一次在论坛里看到有人晒 neofetch 截图,第一反应是:这终端窗口里怎么有个发光的图标?后来才知道,那不是截图特效,也不是壁纸,而是终端里直接跑出来的系统信息展示。那个命令就叫 neofetch。作为一款命令行工具,它干的事并不复杂,却让无数 Linux、macOS 甚至 WSL 用户养成了一个习惯——打开终端先跑一下,看一眼自己的系统状态,顺便截个图。
neofetch 本质上是一个用 Bash 编写的系统信息收集与展示工具。你不用安装什么图形界面,不用启动什么服务,只需要在终端里执行一条命令,它就会把操作系统、内核版本、CPU、GPU、内存、桌面环境、主题、终端模拟器等一大堆信息整合成一张整齐的“信息卡片”。卡片左侧通常是一幅 ASCII 艺术 Logo,右侧是逐行排列的系统信息。这种展示形式既直观又有极强的“晒图”属性,以至于在很多技术社区的提问帖里,你都看到它被作为系统信息的标准展示方式。
这篇内容,我想把 neofetch 拆开来讲清楚:它是怎么工作的、安装和使用有什么讲究、配置文件怎么玩、常见的怪异问题出在哪,以及它在 2024 年停更之后社区都在用什么替代品。虽然它现在已经被归档,但它依然是许多人理解命令行系统信息采集的最好入口。
1. neofetch 到底是个什么工具
1.1 它不是监控工具,而是“系统信息快照”
听到“系统信息工具”这个名字,有人会下意识认为它是用来监控 CPU 温度、磁盘 IO 或者网络流量的。不是。neofetch 更像是一台拍快照的相机,你按下快门,它立刻把当前系统的关键状态显示给你看,拍完就退出,不常驻、不轮询、不吃内存。这也决定了它非常适合做展示:终端画面好看,输出内容清晰,不会产生任何后台负担。
它的信息采集原理并不复杂。比如内核版本来自uname -r,操作系统发行版信息来自/etc/os-release,内存使用情况来自/proc/meminfo或free,CPU 型号则通过解析/proc/cpuinfo或者调用lscpu获取。neofetch 做的事情,本质上就是把这一堆零散的系统命令和配置文件,统一封装成一个好看又有序的界面。因为它只是一个 Bash 脚本,所以几乎没有任何软件依赖,这也是它能在各种发行版上迅速流行的原因之一。
从这个角度看,neofetch 没有解决什么“高精尖”问题,它解决的是很实际的展示与确认需求:我想一眼看清这台机器的系统环境,我不想记一长串查询命令。这种“小而美”的工具,恰好击中了很多人的痛点。
1.2 为什么它能火这么多年
neofetch 能火,和三个因素分不开。第一,它足够轻,轻到一个 Bash 脚本就能完成所有工作,用户不需要学习复杂的依赖管理。第二,它默认输出足够美观,ASCII Logo 加彩色信息行的组合,在那个终端美化文化正兴盛的时期,几乎是所有 “晒桌面” 贴子的标配。第三,它提供了很强的定制能力,从 Logo 到信息字段到颜色排列都能改,这让它变成了一种个人风格的表达方式。
我在不少开源项目文档里看到过 neofetch 输出截图,它被用来快速展示运行环境,这比干巴巴的文字描述要直观得多。前几年社区里甚至流行过一阵子“neofetch 挑战”,大家比谁的输出更特别,有人用自定义 ASCII 画了一只猫,有人把信息行改成歌词。这种“玩起来”的属性,是很多严肃工具不具备的。某种程度上说,neofetch 不仅仅是一个命令行工具,它也是命令行文化里的一个符号。
2. 安装与首次运行:一个命令看到系统全貌
2.1 跨平台安装方法
neofetch 的安装是我见过最省心的那类,几乎所有主流发行版的软件源里都有它。我整理了一份常见系统的安装命令:
| 系统 | 安装命令 |
|---|---|
| Debian / Ubuntu | sudo apt install neofetch |
| Fedora / RHEL | sudo dnf install neofetch |
| Arch / Manjaro | sudo pacman -S neofetch |
| openSUSE | sudo zypper install neofetch |
| Gentoo | sudo emerge --ask neofetch |
| macOS (Homebrew) | brew install neofetch |
| Windows (WSL) | 在 WSL 发行版内使用对应包管理器安装 |
如果你想用最新源码,也可以直接去 GitHub 仓库拉取 release 包,手动放到PATH目录里。neofetch 是纯 Bash 脚本,不需要编译,所以手动部署非常简单。不过对绝大多数人来说,系统包管理器安装已经足够了。需要注意,某些长期支持发行版的软件源版本会偏旧,如果你遇到新硬件信息识别不正常,可以优先考虑从上游更新,而不是折腾配置文件。
2.2 默认输出逐行解读
安装完以后,终端直接输入neofetch,屏幕上就会跳出类似下面的内容:
user@archlinux -------------- OS: Arch Linux x86_64 Kernel: 6.8.9-arch1-1 Uptime: 2 hours, 15 mins Packages: 793 (pacman) Shell: zsh 5.9 Resolution: 1920x1080 DE: Hyprland WM: Hyprland Theme: Adwaita [GTK2] Icons: Adwaita [GTK2] Terminal: kitty CPU: Intel i7-12700H (20) @ 4.7GHz GPU: NVIDIA GeForce RTX 3060 Laptop Memory: 2846MiB / 32025MiB很多人第一次看到这堆信息,只知道好看,不知道每一行是怎么来的。我在下面的表里把字段、源头和含义梳理了一下:
| 输出字段 | 信息来源 / 原理 | 说明 |
|---|---|---|
| 用户@主机名 | whoami+hostname | 顶部标题行,可以通过配置修改显示格式 |
| OS | /etc/os-release、lsb_release等 | 读取发行版 ID 与版本信息 |
| Kernel | uname -r | Linux 内核版本号 |
| Uptime | 解析/proc/uptime后换算 | 开机至今的时长 |
| Packages | 调用 dpkg、rpm、pacman 等 | 不同发行版对应不同包管理器 |
| Shell | $SHELL环境变量 | 当前用户默认 Shell |
| Resolution | 读取显示服务器信息或xrandr | 主屏幕分辨率,无桌面时可能失败 |
| DE / WM | XDG_CURRENT_DESKTOP等环境变量 | 识别桌面环境与窗口管理器 |
| Theme / Icons | GTK 配置、dconf 等 | 主要对桌面环境有效 |
| Terminal | $TERM_PROGRAM或进程名探测 | 当前终端模拟器名称 |
| CPU | 解析/proc/cpuinfo、lscpu | 显示型号、核心数与频率 |
| GPU | lspci或显卡相关 API | 双显卡机器可能只显示部分内容 |
| Memory | free或读取/proc/meminfo | 已用内存 / 总内存 |
注意:如果你看到某些字段显示 unknown,不代表 neofetch 坏了,更多时候是系统缺少对应命令,或者环境变量没有被正确设置。后面排查章节我会细讲。
3. 自定义配置:把它调成你的“门面”
3.1 配置文件是怎么加载的
neofetch 首次运行会使用内置默认配置,不生成任何文件。如果你想长期定制,就需要自己生成一份配置文件。具体步骤是:
- 查看当前完整配置:
neofetch --print_config - 生成用户配置文件:
neofetch --config generate - 编辑文件:
~/.config/neofetch/config.conf - 临时指定其他配置:
neofetch --config /path/to/config.conf
生成配置文件的命令会在~/.config/neofetch/目录下创建config.conf。这个文件本质是一段 Bash 脚本,里面有大量的变量赋值,以及一个决定输出顺序的print_info()函数。
提醒:如果你已经修改过配置,再执行
neofetch --config generate会直接覆盖同名文件,不会备份旧版本。动手前建议先cp ~/.config/neofetch/config.conf ~/.config/neofetch/config.conf.bak。
3.2 输出顺序与字段取舍
配置文件里最核心的段落是print_info()。默认情况下它看起来是这样:
print_info() { info title info underline info os info kernel info uptime info packages info shell info resolution info de info wm info theme info icons info terminal info cpu info gpu info memory }这个函数就是 neofetch 的“排版灵魂”。每一行info xxx代表一个显示字段,从上到下就是输出顺序。想隐藏某个字段,就把对应行注释掉;想调整位置,就把整行上下移动。比如我觉得 GPU 信息很重要,想让它紧跟 OS 显示,那么只需要把info gpu挪到info os后面。
info还支持自定义标签。默认info memory会显示成Memory: 2846MiB / 32025MiB。如果你想改成中文标签,可以写成:
info memory "内存占用"输出就会变成:
内存占用: 2846MiB / 32025MiB这个特性很实用,尤其是需要在文档或截图里展示给非技术背景的人时,自定义标签能让信息一看就懂。
3.3 Logo、颜色与“好看”的学问
neofetch 的视觉主要由两部分组成:左侧的 ASCII Logo 和右侧信息行前的色块。
更换 Logo 有两个途径。临时指定发行版 Logo:
neofetch --ascii_distro debian neofetch --ascii_distro arch neofetch --ascii_distro macos或者直接指定一个纯文本文件作为 Logo:
neofetch --ascii /path/to/my_logo.txt自制 ASCII Logo 有一个核心原则:每行字符数必须控制在终端宽度内,否则终端自动换行,左右就会错位。很多人第一次自定义 Logo 就栽在这个细节上,画了一幅精美字符画,结果一运行,全挤成一团。
颜色控制方面,最常用的是--colors参数。它控制右侧信息行前面的六段色块排列。如果你不喜欢彩色方块,可以关掉:
neofetch --color_blocks off这一关,整个输出会变得非常素净,只剩下黑色字符和系统信息。我自己在写技术文档截图时经常用这种模式,信息可读性更高,也不会因为五颜六色显得喧宾夺主。
3.4 每次打开终端都显示?我建议加个判断
很多人喜欢把neofetch直接写进 shell 启动文件,像这样:
# ~/.bashrc 或 ~/.zshrc neofetch不对,这个做法我劝你谨慎。如果你只是想在打开终端时“欣赏”一下还好,但很多时候你开终端是为了快速跑命令,每次都被一整屏系统信息挡在前面,反而增加干扰。我更推荐两种方案。
第一种,设置别名,想用的时候自己调:
alias sys="neofetch"输入sys就能看到系统信息,不想看就不执行。
第二种,加一个条件判断,只在本地交互终端显示:
if [ -z "$SSH_CONNECTION" ] && [ -t 0 ]; then neofetch fi这个判断的意思是:如果是 SSH 远程会话就跳过,如果当前终端是交互式环境才显示。这样既能保留“打开终端就有系统信息”的仪式感,又不会在远程操作或脚本执行时造成干扰。
4. 常见问题与排查技巧
4.1 输出左右错位怎么办
这是遇到频率最高的问题。明明看别人的截图整整齐齐,自己一跑,Logo 和右侧信息各行其是,像拼图没了参照线。原因通常有三个:
第一个是终端宽度不够。ASCII Logo 占用固定字符宽度,窗口太窄就会触发终端软换行,导致左右对不齐。解决办法是拉宽窗口,或者用--ascii_size调整 Logo 大小:
neofetch --ascii_size small第二个是终端没有使用等宽字体。neofetch 的对齐完全建立在“每个字符等宽”这一前提下,一旦用了非等宽字体,整个排列就会散架。建议换成 Fira Code、JetBrains Mono 等常见等宽字体。
第三个是特殊字符或超长文本导致自动折行。某些终端在收到超长行时会自动换行,你可以尝试把信息字段中过长的主机名缩短,或者减少输出行数来缓解。
4.2 一堆 unknown 是什么意思
unknown 是 neofetch 对“采集失败”的统一表示。常见场景如下:
| 字段 | 常见原因 | 排查方向 |
|---|---|---|
| GPU | 系统缺少lspci命令 | 安装 pciutils |
| DE / WM | 窗口管理器过于小众,或未设置环境变量 | 检查XDG_CURRENT_DESKTOP |
| Shell | $SHELL环境变量未设置 | 检查登录 Shell 配置 |
| Resolution | 无桌面环境或显示服务器未启动 | 确认是否处于图形会话 |
| Song / 音乐状态 | 未安装对应的音乐播放器插件 | 非必要,可忽略 |
你不需要对这些 unknown 太紧张。先用系统自带命令验证一下信息本身能否获取,比如lspci -nn | grep -Ei "vga|3d",如果这条命令能正常输出,那说明系统信息存在,只是 neofetch 依赖的探测环节没找到数据。跟着依赖去补工具,通常就能解决。
4.3 特殊字符变成方块或乱码
如果你看到输出里出现一堆□□或者问号,第一反应应该是检查终端字体,而不是怀疑配置文件。neofetch 在信息标签和某些状态显示里会使用特殊符号,这类字符需要字体库里有对应字形。最直接的办法就是安装 Nerd Fonts 系列字体,然后在终端模拟器设置里把字体切过去。
我在一个远程容器环境里遇到过这个情况,跑 neofetch 全是乱码。折腾了半天配置文件,最后发现是远程终端工具没装 Nerd Font,和 neofetch 一点关系都没有。所以记住:乱码优先查字体,其次再折腾配置。
4.4 配置文件“消失”或解析异常
如果你重装系统后发现~/.config/neofetch/目录不存在,别意外。neofetch 只有在执行--config generate之后才会创建配置文件,平时直接运行命令不会自动生成。需要自定义时手动执行一次生成即可。
另外,从网上复制配置时,要小心 Windows 换行符问题。Windows 的文本文件行尾是\r\n,而 Linux 只需要\n。如果把\r带进了 Bash 配置文件,运行时会报奇怪的语法错误。处理方式很简单:
sed -i 's/\r$//' ~/.config/neofetch/config.conf这个命令会把所有行尾的\r去掉,是解决跨平台复制配置问题的万能手段。
5. 停更之后,它还能继续用吗
5.1 2024 年归档事件
2024 年底,neofetch 的作者 dylanaraps 将 GitHub 仓库标记为 archived,项目进入只读状态。他在归档说明里表达得很坦白:自己对项目的兴趣已经转移,并且对继续用 Bash 维护这样一个大的脚本项目感到疲惫。这个消息出来后,很多老用户心里有点复杂。
但实事求是地说,普通用户受的影响很小。neofetch 的工作是读取系统信息并展示,这个逻辑本身非常稳定,不需要针对新内核或新发行版频繁更新。系统的新版本不会让 neofetch “坏掉”,它只会继续读取并显示仍然存在的信息。真正受影响的,是那些希望增加新 Logo、新动画、新终端图像协议支持的需求,这些后续都不太可能再有了。
所以如果你已经在用 neofetch,并且对它当下的表现满意,继续用完全没问题。软件停更不等于立即死亡,很多经典工具在被归档多年后依然被大量使用。
5.2 社区的主流替代品:fastfetch
如果你想要一个还处于活跃开发中的同类型工具,社区现在最推荐的是 fastfetch。它用 C 语言编写,启动速度比 neofetch 快很多,信息采集是异步并发完成的,而且支持更多现代终端图像协议。从输出效果上看,fastfetch 非常像 neofetch 的“精神续作”,右侧系统信息、左侧 Logo、色块排列,整体风格几乎无缝衔接。
安装 fastfetch 也很方便:
sudo apt install fastfetch sudo dnf install fastfetch sudo pacman -S fastfetch brew install fastfetchfastfetch 的配置文件在~/.config/fastfetch/,格式是 JSONC(带注释的 JSON),信息模块通过 modules 数组控制顺序。相比 neofetch 的 Bash 风格配置,fastfetch 对新手更友好,结构一眼就能看明白。参数名和 neofetch 有些差异,比如 Logo 选择从--ascii_distro变成了--logo,但整体迁移成本很低。我把自己的 neofetch 配置换成 fastfetch,大概只花了不到十分钟。
5.3 一点个人使用体会
如果你刚接触命令行工具,我建议别急着完全转向 fastfetch。neofetch 虽然停更了,但它作为一个学习样本依然非常有价值。你可以打开它的 Bash 源码,看看它是怎么解析/proc文件、怎么调用lspci、怎么匹配发行版 Logo 的。这些代码逻辑并不复杂,但非常实用,是理解系统信息采集最好的入门材料之一。
我自己在旧笔记本上留了一个 neofetch,不是因为 fastfetch 不好,而是它启动极快、输出稳定,而且早被我调教得顺手了。命令行工具的世界里,“新”从来不是最好的标准,“合手”才是。先把 neofetch 玩明白,再去探索 fastfetch,你会更清楚自己需要的到底是什么。