Fastfetch 使用与定制完全指南:基于 C 语言的高性能系统信息获取工具
【免费下载链接】fastfetchA maintained, feature-rich and performance oriented, neofetch like system information tool.项目地址: https://gitcode.com/GitHub_Trending/fa/fastfetch
Fastfetch 是一款类 neofetch 的系统信息获取与展示工具,以 C 语言编写,主打性能与可定制性,支持 Linux、macOS、Windows 8.1+、Android、FreeBSD、OpenBSD、NetBSD、DragonFly、Haiku 与 SunOS(illumos、Solaris)等多平台。本文以仓库根目录的 README.md 为主线,结合 doc/help.json、presets 目录下的预置配置与src/源码,系统讲解安装、命令行使用、JSONC 配置、模块与格式化、Logo 定制等实战内容,读完即可上手配置一套属于你自己的 fetch 输出。
注意:项目仅在 x86-64 与 aarch64 平台上被主动测试,其他平台可能可以运行但不保证稳定性。同时,部分发行版仓库打包的 fastfetch 版本较旧且不再受支持,建议优先使用最新版本。
为什么选择 fastfetch
README 的 FAQ 中直接回答了"Neofetch 已经够用,为什么还需要 fastfetch"这一问题,可归纳为六点:
- 活跃维护:项目持续迭代,而 neofetch 已停止维护;
- 更快:如项目名所示,性能是核心卖点;
- 功能更丰富:默认只启用少数模块,通过
fastfetch -c all可以发掘全部能力; - 更可配置:模块、格式、颜色、单位等几乎一切均可自定义;
- 更精致:例如 neofetch 内存显示
555 MiB、磁盘显示23 G,而 fastfetch 默认输出555.00 MiB与22.97 GiB(两位小数、统一单位); - 更准确:例如 neofetch 从未真正支持 Wayland 协议,而 fastfetch 在 显示服务器检测 中提供了 Wayland、X11、DRM 等多种途径。
安装方式
Linux
部分发行版打包了旧版本 fastfetch,旧版本不受支持,请尽量使用最新版本。
- Ubuntu:
ppa:zhangsongcui3371/fastfetch(要求 Ubuntu 22.04 或更新,提供最新版本) - Debian / Ubuntu:
apt install fastfetch(Debian 13+、Ubuntu 25.04+) - Debian / Ubuntu:从 GitHub Releases 下载
fastfetch-linux-<架构>.deb后双击安装(适用于 Ubuntu 20.04+、Debian 11+) - Arch Linux:
pacman -S fastfetch - Fedora:
dnf install fastfetch - Gentoo:
emerge --ask app-misc/fastfetch - Alpine:
apk add --upgrade fastfetch - NixOS:
nix-shell -p fastfetch - openSUSE:
zypper install fastfetch - ALT Linux:
apt-get install fastfetch - Exherbo:
cave resolve --execute app-misc/fastfetch - Solus:
eopkg install fastfetch - Slackware:
sbopkg -i fastfetch - Void Linux:
xbps-install fastfetch - Venom Linux:
scratch install fastfetch
以上命令视系统权限可能需要sudo、doas或sup。若你的发行版未打包或版本过旧,Linuxbrew 是很好的替代方案:brew install fastfetch。
macOS
- Homebrew:
brew install fastfetch - MacPorts:
sudo port install fastfetch
Windows
- scoop:
scoop install fastfetch - Chocolatey:
choco install fastfetch - winget:
winget install fastfetch - MSYS2 MinGW:
pacman -S mingw-w64-<subsystem>-<arch>-fastfetch
也可直接从 GitHub Releases 页面下载压缩包形式的程序。
BSD 系统
- FreeBSD:
pkg install fastfetch - NetBSD:
pkgin in fastfetch - OpenBSD:
pkg_add fastfetch(仅快照版) - DragonFly BSD:
pkg install fastfetch(仅快照版)
Android(Termux)
pkg install fastfetch
Nightly 版本
可通过项目 CI 工作流的 nightly 链接获取每日构建版本。
从源码构建
仓库根目录提供了 run.sh 一键构建脚本,其核心流程为:
mkdir -p build/ cd build/ cmake .. cmake --build . --target fastfetch -j$(nproc) ./fastfetch "$@"脚本会根据内核类型自动选择并行参数(Linux/MINGW 用nproc,Darwin/BSD 用sysctl -n hw.ncpu),构建完成后直接运行二进制。构建配置定义在 CMakeLists.txt 中,可用fastfetch --list-features查看当前二进制编译时启用的功能特性。
快速上手
README 给出的四条入门命令是:
# 1. 以默认配置运行 fastfetch # 2. 启用全部支持的模块,发掘你感兴趣的模块 fastfetch -c all.jsonc # 3. 查看 fastfetch 检测到的所有数据(JSON 输出) fastfetch -s <module1>[:<module2>][:<module3>] --format json # 4. 查看帮助 fastfetch --help其中-c all.jsonc加载的是 presets/all.jsonc——这份预置配置列出了项目支持的绝大部分模块,从title、os、host、kernel、packages、shell到cpu、gpu、memory、disk、localip、wifi、weather、tpm、version等,是了解全部模块能力的最佳入口。默认配置则只启用少量常用模块(如title、os、host、kernel、uptime、packages、shell、cpu、gpu、memory等),详见 presets/ci.jsonc 中"logo": null的禁用写法。
另外,fastfetch --gen-config可以交互式生成最小配置,生成路径默认为~/.config/fastfetch/config.jsonc;若想生成包含全部可选选项的完整配置,README 建议使用在线配置生成器。
命令行选项速览
所有命令行选项的定义与默认值都集中在 doc/help.json(共约 100 个选项),并在运行时由 src/common/commandoption.c 解析。以下是按分组整理的常用选项:
信息类(Informative)
| 选项 | 作用 |
|---|---|
-h, --help | 显示帮助,或指定命令查看专项帮助(如-h gpu-format) |
-v, --version | 显示完整版本;--version-raw显示major.minor.patch |
--list-config-paths | 列出配置文件搜索路径 |
--list-data-paths | 列出预置配置与 Logo 的搜索路径 |
--list-logos/--print-logos | 列出/打印可用 Logo |
--list-modules | 列出可用模块 |
--list-presets | 列出可用预置配置,可用--config <preset-name>加载 |
--list-features | 列出编译时启用的特性(主要用于开发) |
--print-structure | 打印默认模块结构 |
--format json/-j | JSON 输出 |
--dynamic-interval <ms> | 每 N 毫秒刷新一次输出(-w/--watch是秒为单位的别名,不传值默认 1 秒) |
配置类(Config)
| 选项 | 作用 |
|---|---|
-c, --config <file> | 指定配置文件或预置名;-从 stdin 读取,none禁用后续配置加载 |
--gen-config [path] | 交互式生成配置文件,默认~/.config/fastfetch/config.jsonc,路径为-时打印到 stdout |
Logo 类(Logo)
| 选项 | 作用 |
|---|---|
-l, --logo <src> | 设置 Logo 来源,none禁用 Logo |
--logo-type <type> | 指定 Logo 类型,见下文"Logo 类型" |
--logo-width / --logo-height | 图片 Logo 的宽/高(字符数,iTerm 协议必填) |
--logo-color-[1-9] <color> | 覆盖 Logo 中的第 N 个颜色占位符 |
--logo-padding[-left/right/top] | 设置 Logo 四周留白 |
--logo-position <left/top/right> | 设置 Logo 与模块列表的相对位置 |
显示类(Display)
| 选项 | 作用 |
|---|---|
-s, --structure <mod1:mod2:...> | 设置模块结构(冒号分隔);--structure-disabled批量禁用 |
--stat | 显示每个模块的执行耗时(毫秒),用于性能分析 |
--pipe | 禁用颜色(默认根据 stdout 是否为 TTY 自动判断) |
--color-keys / --color-title / --color-output / --color-separator | 分别设置键、标题、输出值、分隔符颜色 |
--separator <str> | 设置键值分隔符,默认: |
--key-width <n> | 将键对齐到 N 个字符宽 |
--key-type <type> | 键的显示形式:string(默认)、icon(需 Nerd Font)、both及both-0..4间距变体 |
--key-language <lang> | 键的语言(en/zh_CN/ja/ru 等约 20 种,留空则按系统 locale 自动检测) |
--percent-type <n> | 百分比样式:1 数字、2 多色条、3 两者、6 仅条、9 彩色数字(默认)、10 单色条 |
--bar-char-elapsed / --bar-char-total | 进度条已用/剩余字符(默认■与-) |
--bar-width <n> | 进度条宽度,默认 10 字符 |
--size-binary-prefix <IEC/SI/JEDEC> | 容量单位制:IEC(1024 进制,默认)/ SI(1000 进制)/ JEDEC |
--size-max-prefix <B..YB> | 最大单位,默认YB |
--size-ndigits <n> | 容量数值小数位数 |
--freq-ndigits <n> | CPU/GPU 频率(GHz)小数位数,默认 2 |
--temp-unit <D/C/F/K> | 温度单位,默认跟随系统(D) |
配置系统:JSONC
Fastfetch 使用JSONC(带注释的 JSON)作为配置格式,这与 README 中"配置复杂,文档在哪里"的 FAQ 直接相关:推荐使用支持 JSON Schema 的 IDE(如 VSCode)编辑,schema 文件位于 doc/json_schema.json,官方文档即由此生成。
配置文件的核心结构如下(节选自 presets/neofetch.jsonc):
{ "$schema": "https://github.com/fastfetch-cli/fastfetch/raw/dev/doc/json_schema.json", "display": { "size": { "maxPrefix": "MB", "ndigits": 0, "spaceBeforeUnit": "never" }, "freq": { "ndigits": 3, "spaceBeforeUnit": "never" } }, "modules": [ "title", "separator", "os", "host", "kernel", "uptime", "packages", "shell", "cpu", "gpu", "memory", "break", "colors" ] }这份neofetch.jsonc正是 README 提到的"把容量单位从 MiB/GiB 改成 MB/GB"的示例:display.size.maxPrefix限制最大单位、ndigits设为 0 位小数、spaceBeforeUnit设为从不空格,从而模拟 neofetch 的显示风格;对应的命令行写法是--size-max-prefix MB --size-ndigits 0。默认情况下 fastfetch 使用 IEC 前缀(1024 进制)且保留两位小数,这就是 FAQ 中555.00 MiB与22.97 GiB的来源,相关默认值可在 doc/help.json 的size-binary-prefix、size-ndigits等选项中查到。
presets 目录还提供了其他可直接用-c <文件名>加载的预置:
- presets/neofetch.jsonc:模拟 neofetch 风格输出;
- presets/all.jsonc:启用全部模块(README 推荐用
fastfetch -c all发掘功能); - presets/paleofetch.jsonc、presets/screenfetch.jsonc、presets/archey.jsonc:复古风格;
- presets/examples:30 余个带完整
display/logo/modules配置的示例文件,README 中多张截图对应配置就在此目录,例如 presets/examples/10.jsonc 演示了custom模块与{#90}形式的十六进制颜色内联用法。
模块结构的两种定义方式
README 给出的 JSONC 模块写法与命令行等价:
{ "modules": [ { "type": "gpu", "format": "{name}" } ] }等价于命令行fastfetch -s gpu --gpu-format '{name}'。此外,每个模块都支持以对象形式携带私有参数,例如 presets/all.jsonc 中的{"type": "cpu", "showPeCoreCount": true, "temp": true}会额外显示 P 核/E 核数量与温度,{"type": "gpu", "driverSpecific": true, "temp": true}会尝试向驱动询问 GPU 名称并显示温度,{"type": "localip", "showIpv6": true, "showMac": true, "showSpeed": true}则让本地 IP 模块显示 IPv6、MAC、速率等信息。
每个模块的检测逻辑分布在 src/detection/ 下按模块名分目录组织(如src/detection/gpu/、src/detection/memory/),各平台分别实现(*_linux.c、*_windows.c、*_apple.c等);输出渲染则由 src/modules/ 下同名目录实现。模块的注册表位于 src/modules/modules.c,它同时定义了每个模块支持的format变量,供-h <module>-format查询。
模块输出格式化(format)
Fastfetch 用format字符串控制模块输出。README 以 GPU 模块为例:只显示 GPU 名称、隐藏其他信息,配置为:
{ "modules": [ { "type": "gpu", "format": "{name}" // 详见 fastfetch -h gpu-format } ] }{name}中的大括号语法即"格式化变量"。相关机制在 src/fastfetch.c 的printCommandFormatHelp函数中实现:程序会遍历模块注册表(ffModuleInfos),为每个声明了formatArgs的模块生成专项帮助。因此:
fastfetch -h format:查看 format 字符串的基础用法;fastfetch -h <module>-format:查看某个模块支持的变量列表,例如fastfetch -h gpu-format会列出 GPU 模块可用的{name}、{vendor}、{coreCount}等变量及其含义;- 配置中的
format与命令行--<module>-format完全等价(presets/neofetch.jsonc 中{"type": "kernel", "format": "{release}"}、{"type": "memory", "format": "{used} / {total}"}都是典型应用)。
format 字符串还支持条件语法,例如 presets/neofetch.jsonc 中的终端字体模块"{/name}{-}{/}{name}{?size} {size}{?}"——{/name}表示当 name 为空时输出空、{-}表示条件连字符、{?size}...{?}表示当 size 存在时输出。{icon}则是 presets/examples/10.jsonc 中演示的"模块图标"变量,配合 Nerd Font 使用。
Logo 定制
README 专门指出"Logo 也可以重度定制"。仓库内置了大量 ASCII Logo(见 src/logo/ascii/,含 500+ 个发行版/系统 Logo 文本与 26 个.inc头文件),运行时用fastfetch -l <名称或路径>加载自定义 Logo。
Logo 类型(--logo-type)
从 doc/help.json 可以看到完整枚举:
- 文本类:
builtin(内置 ASCII 图)、small(内置小尺寸版)、file(文本文件,做颜色码替换)、file-raw(文本文件原样输出)、data/data-raw(直接内联文本数据); - 图片类:
sixel、kitty(Kitty 图形协议)、kitty-direct、kitty-icat(调用kitten icat)、iterm(iTerm 图形协议)、chafa(libchafa 转 ASCII)、raw(原始二进制输出); - 特殊:
auto(默认,自动检测)、none(禁用 Logo)。
命令行还提供便捷别名:--file <path>等价于--logo-type file --logo <path>,--sixel、--kitty、--iterm、--chafa、--raw等同理。--logo-width、--logo-height控制图片显示尺寸(iTerm 协议必填),--logo-preserve-aspect-ratio在不变形前提下尽量填满指定宽高,--logo-padding*控制留白。
ASCII Logo 换色
README 示例:
fastfetch --logo-color-1 red --logo-color-2 green等价于 JSONC 写法:
{ "logo": { "color": { "1": "red", "2": "green" } } }--logo-color-[1-9]中的数字是 Logo 文本里的颜色占位符索引,在 doc/help.json 中被标记为pseudo选项(一个选项展开为 9 个)。颜色值语法可用fastfetch -h color查看。
使用自己的 ASCII 图 / 图片
fastfetch -l /path/to/logo若只想在顶部显示 FIGlet 风格的系统名,README 给出了一段脚本:
# 先安装 pyfiglet 和 jq pyfiglet -s -f small_slant $(fastfetch -s os --format json | jq -r '.[0].result.name') && fastfetch -l none先用 JSON 输出取出系统名,交给 pyfiglet 生成大字,再让 fastfetch 不显示 Logo。
Windows 上的图片 Logo
README 针对 Windows 各终端给出了明确方案(以下信息以 README 撰写时间为准):
- mintty(Windows 上 Bash / MSYS2 使用)与 Wezterm(仅 nightly):支持 iTerm 图片协议,配置为:
{ "logo": { "type": "iterm", "source": "C:/path/to/image.png", "width": <num-in-chars> } }- Windows Terminal:仅支持 sixel 协议。经 MSYS2 安装时,先
pacman -S mingw-w64-<subsystem>-x86_64-imagemagick,然后:
{ "logo": { "type": "sixel", // 不要用 "auto" "source": "C:/path/to/image.png", // 不要用 ~,fastfetch 是原生 Windows 程序,不做 cygwin 路径转换 "width": <image-width-in-chars>, // 可选 "height": <image-height-in-chars> // 可选 } }- 通过 scoop 或 Releases 安装时,需先把图片手工转成 sixel 格式,再使用
"type": "raw"且width/height必填:
{ "logo": { "type": "raw", // 不要用 "auto" "source": "C:/path/to/image.sixel", "width": <image-width-in-chars>, // 必填 "height": <image-height-in-chars> // 必填 } }Command 模块与安全警告
README 明确给出了一个重要安全警告:fastfetch 的Command模块可以执行任意 shell 命令,从不可信来源复制粘贴的配置文件可能包含恶意命令,危害系统或泄露隐私,使用前务必审查配置内容。
Command 模块同时也被推荐为"实现个人定制功能"的通用手段,README 中"想要功能 A/B/C"的 FAQ 建议优先用它包装自定义脚本,例如显示默认编辑器:
// 此模块显示默认编辑器 { "modules": [ { "type": "command", "text": "$EDITOR --version | head -1", "key": "Editor" } ] }该模块的检测实现位于 src/detection/command/command.c,与命令行模块相关的选项可查看src/modules/command/。
FAQ 实战要点
README 后半部分是高频问题解答,以下为可直接落地的要点:
1. 本地 IP 会不会泄露隐私?本地 IP(10.x.x.x、172.x.x.x、192.168.x.x)只有在同一网络(如同一 Wi-Fi)内才有意义,与隐私无关。作者本人还提到Local IP模块对他 SSH 进虚拟机测试最有帮助。如果不喜欢,在config.jsonc中禁用localip模块即可。
2. 配置文件在哪?找不到怎么办?fastfetch不会自动生成配置文件。用fastfetch --gen-config生成,默认保存到~/.config/fastfetch/config.jsonc;也可以fastfetch --list-config-paths查看完整搜索路径。
3. 想隐藏某个 key(键名)?把key设为一个空格即可:
{ "key": " " }4. 启动时输出黑白(常见于 p10k 用户)?p10k 的 instant prompt 机制要求初始化后不得再向 stdout 输出内容,需要把fastfetch放到p10k-instant-prompt初始化之前;也可用fastfetch --pipe false强制彩色输出。
5. 为什么 fastfetch 与 neofetch 显示的内存/包数量不同?
- 内存统计口径不同(详见项目 issue #1096);
- dpkg 数量差异:neofetch 会错误统计 apt 中已删除但残留配置的
rc包;rpm 方面 neofetch 会把gpg-pubkey误算为软件包,可用dnf list --installed | wc -l与rpm -qa | wc -l对比验证。
6. Debian/Ubuntu 上 GPU 显示为 "XXXX Device XXXX (VGA compatible)"?这是pci.ids数据库过旧所致:下载新版pci.ids覆盖/usr/share/hwdata/pci.ids;AMD 显卡还需更新amdgpu.ids覆盖/usr/share/libdrm/amdgpu.ids。或者直接fastfetch --gpu-driver-specific,让 fastfetch 在支持时向驱动询问 GPU 名称。
7. root 运行时提示Authorization required, but no authorization protocol specified?执行export XAUTHORITY=$HOME/.Xauthority。
8. macOS 上第三方窗口管理器检测不到?试试fastfetch --wm-detect-plugin。
9. 想让 macOS 下第三方 WM 被识别?macOS 检测不到自研第三方窗口管理器时,尝试fastfetch --wm-detect-plugin(README FAQ 明确给出此选项)。
获取帮助
- 使用类问题:在项目的 GitHub Discussions 中发起讨论;
- Bug 类问题:在 GitHub Issues 中提交,填写 Bug 报告模板有助于开发者排查;
- 配置类问题:优先参考 presets 目录中的预置配置与 doc/json_schema.json;
- 想要新功能:项目只接受硬件或系统级软件的功能请求,个人化需求优先用
Command模块自实现(见上文示例)。
综上所述,fastfetch 的完整使用路径是:安装 →fastfetch快速体验 →fastfetch -c all.jsonc发掘模块 →--gen-config生成配置 → 按 doc/help.json 与 presets 示例逐步定制模块、format 与 Logo。其全部选项、默认值与格式语法均可在本地fastfetch --help、fastfetch -h <module>-format与仓库文档中查阅,无需依赖外部资料即可完成深度配置。
【免费下载链接】fastfetchA maintained, feature-rich and performance oriented, neofetch like system information tool.项目地址: https://gitcode.com/GitHub_Trending/fa/fastfetch
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考