Fastfetch 使用与定制完全指南:基于 C 语言的高性能系统信息获取工具
2026/9/18 5:03:39 网站建设 项目流程

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"这一问题,可归纳为六点:

  1. 活跃维护:项目持续迭代,而 neofetch 已停止维护;
  2. 更快:如项目名所示,性能是核心卖点;
  3. 功能更丰富:默认只启用少数模块,通过fastfetch -c all可以发掘全部能力;
  4. 更可配置:模块、格式、颜色、单位等几乎一切均可自定义;
  5. 更精致:例如 neofetch 内存显示555 MiB、磁盘显示23 G,而 fastfetch 默认输出555.00 MiB22.97 GiB(两位小数、统一单位);
  6. 更准确:例如 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

以上命令视系统权限可能需要sudodoassup。若你的发行版未打包或版本过旧,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——这份预置配置列出了项目支持的绝大部分模块,从titleoshostkernelpackagesshellcpugpumemorydisklocalipwifiweathertpmversion等,是了解全部模块能力的最佳入口。默认配置则只启用少量常用模块(如titleoshostkerneluptimepackagesshellcpugpumemory等),详见 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/-jJSON 输出
--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)、bothboth-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 MiB22.97 GiB的来源,相关默认值可在 doc/help.json 的size-binary-prefixsize-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(直接内联文本数据);
  • 图片类sixelkitty(Kitty 图形协议)、kitty-directkitty-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 -lrpm -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 --helpfastfetch -h <module>-format与仓库文档中查阅,无需依赖外部资料即可完成深度配置。

【免费下载链接】fastfetchA maintained, feature-rich and performance oriented, neofetch like system information tool.项目地址: https://gitcode.com/GitHub_Trending/fa/fastfetch

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询