<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Tools on Tarragon</title><link>https://tarrragon.github.io/blog/tags/tools/</link><description>Recent content in Tools on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Thu, 02 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/tools/index.xml" rel="self" type="application/rss+xml"/><item><title>CLI 環境工具</title><link>https://tarrragon.github.io/blog/linux/tools/cli/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/cli/</guid><description>&lt;p>在純文字終端機下做事的工具分兩個家族。第一個是&lt;strong>日常指令的現代替代品&lt;/strong>：&lt;code>grep&lt;/code> / &lt;code>find&lt;/code> / &lt;code>cat&lt;/code> / &lt;code>ls&lt;/code> 這些預設指令的現代版（&lt;code>ripgrep&lt;/code> / &lt;code>fd&lt;/code> / &lt;code>bat&lt;/code> / &lt;code>eza&lt;/code> + 互動式的 &lt;code>fzf&lt;/code>），在每天重複幾十次的搜尋與瀏覽上更快更省力。第二個是&lt;strong>終端機圖形化介面（TUI）&lt;/strong>：用 ASCII 與 Unicode 製圖字元做出的監控、圖表、多視窗、資料庫操作介面，只傳純文字、不依賴影像協定，在 SSH、手機平板、低頻寬連線下最穩。&lt;/p>
&lt;h2 id="日常指令的現代替代品">日常指令的現代替代品&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="modern-cli-replacements/">現代 CLI 替代工具&lt;/a>&lt;/strong> — &lt;code>grep&lt;/code> → &lt;code>ripgrep&lt;/code>、&lt;code>find&lt;/code> → &lt;code>fd&lt;/code>、&lt;code>cat&lt;/code> → &lt;code>bat&lt;/code>、&lt;code>ls&lt;/code> → &lt;code>eza&lt;/code>，加上互動式模糊搜尋 &lt;code>fzf&lt;/code>。什麼情境值得換、換了要注意什麼、為什麼別在腳本裡依賴它們。&lt;/li>
&lt;/ul>
&lt;h2 id="終端機圖形化介面tui">終端機圖形化介面（TUI）&lt;/h2>
&lt;p>這一類「圖形化」是用製圖字元畫出來的介面，而不是把 PNG／JPG 渲染進終端機，所以傳輸量小、在低頻寬與手機連線下最穩。大致分六類：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>TUI 監控與儀表板&lt;/strong> — &lt;code>btop&lt;/code> / &lt;code>htop&lt;/code> / &lt;code>k9s&lt;/code> / &lt;code>ncdu&lt;/code> 等系統監控的全螢幕互動介面；版控專用的 git 線圖工具（&lt;code>tig&lt;/code> / &lt;code>lazygit&lt;/code> / &lt;code>gitui&lt;/code>）是同類 TUI 但獨立的子題。&lt;/li>
&lt;li>&lt;strong>ASCII 與文字圖表&lt;/strong> — &lt;code>gnuplot&lt;/code> / &lt;code>termgraph&lt;/code> / &lt;code>plotext&lt;/code> 等把資料畫成終端機圖表的工具。&lt;/li>
&lt;li>&lt;strong>終端機多工器&lt;/strong> — &lt;code>tmux&lt;/code> / &lt;code>zellij&lt;/code>，分割畫面、連線斷了 session 還在。&lt;/li>
&lt;li>&lt;strong>檔案管理器&lt;/strong> — &lt;code>broot&lt;/code>（樹狀）/ &lt;code>yazi&lt;/code> / &lt;code>ranger&lt;/code>（Miller 欄狀），像 IDE 側邊欄那樣瀏覽目錄與預覽檔案。&lt;/li>
&lt;li>&lt;strong>SQL 客戶端&lt;/strong> — &lt;code>harlequin&lt;/code>（IDE 風）/ &lt;code>lazysql&lt;/code>（瀏覽器風）/ &lt;code>pgcli&lt;/code>、&lt;code>litecli&lt;/code>（增強 REPL），在終端機連資料庫跑查詢。&lt;/li>
&lt;li>&lt;strong>訊息佇列客戶端&lt;/strong> — Kafka 的 &lt;code>kaskade&lt;/code> / &lt;code>yozefu&lt;/code> / &lt;code>ktea&lt;/code>（全螢幕 TUI）、Redis 的 &lt;code>iredis&lt;/code>（增強 REPL），在終端機連 broker 瀏覽 topic 與訊息。&lt;/li>
&lt;/ul>
&lt;p>這個系列的每篇文章都用實機驗證導向的流程生產（裝起來實跑、TUI 交人互動驗、驗不了的標 caveat）。要擴展新類別時，照 &lt;a href="https://tarrragon.github.io/blog/posts/%E9%A9%97%E8%AD%89%E5%B0%8E%E5%90%91%E7%9A%84-cli-%E5%B7%A5%E5%85%B7%E6%96%87%E7%AB%A0%E5%AE%98%E6%96%B9-docs-%E6%9F%A5%E6%A0%B8%E6%94%BE%E9%81%8E%E7%9A%84%E8%90%BD%E5%B7%AE%E9%A1%9E%E5%9E%8B/" data-link-title="驗證導向的 CLI 工具文章：官方 docs 查核放過的落差類型" data-link-desc="CLI 工具教學的指令正確性不能只靠官方文件查核、要實機驗證時回來。官方文件驗的是「文件說的是否正確」、驗不了「文件沒說的是否存在」。">驗證導向的 CLI 工具文章生產流程&lt;/a> 走。&lt;/p>
&lt;hr>
&lt;h2 id="跟工具選單其他子系列的邊界">跟工具選單其他子系列的邊界&lt;/h2>
&lt;p>CLI 環境工具跟 tools 底下另外兩個子系列的分界：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>情境&lt;/th>
 &lt;th>該看&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>純終端機下的指令替代與 TUI&lt;/td>
 &lt;td>本系列&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>有圖形環境、要挑桌面 app（檔案管理員、DE）&lt;/td>
 &lt;td>&lt;a href="../gui/">圖形桌面工具&lt;/a>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>遠端操作、把 session 留在遠端不掉&lt;/td>
 &lt;td>&lt;a href="../remote/">遠端工具&lt;/a>（多工器的遠端應用面）&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>多工器（&lt;code>tmux&lt;/code> / &lt;code>zellij&lt;/code>）與檔案瀏覽（&lt;code>broot&lt;/code> / &lt;code>yazi&lt;/code>）這類工具兩邊都會提到：本系列講它們在純終端機下的用法與選型，遠端 / 圖形的情境應用則由 remote / gui 兩系列承接。這些工具的配置檔怎麼版控、跨機器同步，見 &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/" data-link-title="Dotfile 工作環境配置指南" data-link-desc="個人開發環境的配置管理 — dotfile 結構設計、同步策略、shell 與終端機配置、平鋪式視窗管理、桌面客製化，從個人工具鏈延伸到團隊環境標準化">Dotfile 管理&lt;/a> 的&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/03-terminal-ecosystem/" data-link-title="模組三：終端機與編輯器" data-link-desc="終端機相關工具的配置檔散落在不同位置、不確定哪些該進 dotfile repo 時回來讀">終端機與編輯器&lt;/a>模組。&lt;/p>
&lt;hr>
&lt;p>底下自動列出本系列的所有文章、依日期排序。&lt;/p></description><content:encoded><![CDATA[<p>在純文字終端機下做事的工具分兩個家族。第一個是<strong>日常指令的現代替代品</strong>：<code>grep</code> / <code>find</code> / <code>cat</code> / <code>ls</code> 這些預設指令的現代版（<code>ripgrep</code> / <code>fd</code> / <code>bat</code> / <code>eza</code> + 互動式的 <code>fzf</code>），在每天重複幾十次的搜尋與瀏覽上更快更省力。第二個是<strong>終端機圖形化介面（TUI）</strong>：用 ASCII 與 Unicode 製圖字元做出的監控、圖表、多視窗、資料庫操作介面，只傳純文字、不依賴影像協定，在 SSH、手機平板、低頻寬連線下最穩。</p>
<h2 id="日常指令的現代替代品">日常指令的現代替代品</h2>
<ul>
<li><strong><a href="modern-cli-replacements/">現代 CLI 替代工具</a></strong> — <code>grep</code> → <code>ripgrep</code>、<code>find</code> → <code>fd</code>、<code>cat</code> → <code>bat</code>、<code>ls</code> → <code>eza</code>，加上互動式模糊搜尋 <code>fzf</code>。什麼情境值得換、換了要注意什麼、為什麼別在腳本裡依賴它們。</li>
</ul>
<h2 id="終端機圖形化介面tui">終端機圖形化介面（TUI）</h2>
<p>這一類「圖形化」是用製圖字元畫出來的介面，而不是把 PNG／JPG 渲染進終端機，所以傳輸量小、在低頻寬與手機連線下最穩。大致分六類：</p>
<ul>
<li><strong>TUI 監控與儀表板</strong> — <code>btop</code> / <code>htop</code> / <code>k9s</code> / <code>ncdu</code> 等系統監控的全螢幕互動介面；版控專用的 git 線圖工具（<code>tig</code> / <code>lazygit</code> / <code>gitui</code>）是同類 TUI 但獨立的子題。</li>
<li><strong>ASCII 與文字圖表</strong> — <code>gnuplot</code> / <code>termgraph</code> / <code>plotext</code> 等把資料畫成終端機圖表的工具。</li>
<li><strong>終端機多工器</strong> — <code>tmux</code> / <code>zellij</code>，分割畫面、連線斷了 session 還在。</li>
<li><strong>檔案管理器</strong> — <code>broot</code>（樹狀）/ <code>yazi</code> / <code>ranger</code>（Miller 欄狀），像 IDE 側邊欄那樣瀏覽目錄與預覽檔案。</li>
<li><strong>SQL 客戶端</strong> — <code>harlequin</code>（IDE 風）/ <code>lazysql</code>（瀏覽器風）/ <code>pgcli</code>、<code>litecli</code>（增強 REPL），在終端機連資料庫跑查詢。</li>
<li><strong>訊息佇列客戶端</strong> — Kafka 的 <code>kaskade</code> / <code>yozefu</code> / <code>ktea</code>（全螢幕 TUI）、Redis 的 <code>iredis</code>（增強 REPL），在終端機連 broker 瀏覽 topic 與訊息。</li>
</ul>
<p>這個系列的每篇文章都用實機驗證導向的流程生產（裝起來實跑、TUI 交人互動驗、驗不了的標 caveat）。要擴展新類別時，照 <a href="/blog/posts/%E9%A9%97%E8%AD%89%E5%B0%8E%E5%90%91%E7%9A%84-cli-%E5%B7%A5%E5%85%B7%E6%96%87%E7%AB%A0%E5%AE%98%E6%96%B9-docs-%E6%9F%A5%E6%A0%B8%E6%94%BE%E9%81%8E%E7%9A%84%E8%90%BD%E5%B7%AE%E9%A1%9E%E5%9E%8B/" data-link-title="驗證導向的 CLI 工具文章：官方 docs 查核放過的落差類型" data-link-desc="CLI 工具教學的指令正確性不能只靠官方文件查核、要實機驗證時回來。官方文件驗的是「文件說的是否正確」、驗不了「文件沒說的是否存在」。">驗證導向的 CLI 工具文章生產流程</a> 走。</p>
<hr>
<h2 id="跟工具選單其他子系列的邊界">跟工具選單其他子系列的邊界</h2>
<p>CLI 環境工具跟 tools 底下另外兩個子系列的分界：</p>
<table>
  <thead>
      <tr>
          <th>情境</th>
          <th>該看</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>純終端機下的指令替代與 TUI</td>
          <td>本系列</td>
      </tr>
      <tr>
          <td>有圖形環境、要挑桌面 app（檔案管理員、DE）</td>
          <td><a href="../gui/">圖形桌面工具</a></td>
      </tr>
      <tr>
          <td>遠端操作、把 session 留在遠端不掉</td>
          <td><a href="../remote/">遠端工具</a>（多工器的遠端應用面）</td>
      </tr>
  </tbody>
</table>
<p>多工器（<code>tmux</code> / <code>zellij</code>）與檔案瀏覽（<code>broot</code> / <code>yazi</code>）這類工具兩邊都會提到：本系列講它們在純終端機下的用法與選型，遠端 / 圖形的情境應用則由 remote / gui 兩系列承接。這些工具的配置檔怎麼版控、跨機器同步，見 <a href="/blog/linux/dotfile/" data-link-title="Dotfile 工作環境配置指南" data-link-desc="個人開發環境的配置管理 — dotfile 結構設計、同步策略、shell 與終端機配置、平鋪式視窗管理、桌面客製化，從個人工具鏈延伸到團隊環境標準化">Dotfile 管理</a> 的<a href="/blog/linux/dotfile/03-terminal-ecosystem/" data-link-title="模組三：終端機與編輯器" data-link-desc="終端機相關工具的配置檔散落在不同位置、不確定哪些該進 dotfile repo 時回來讀">終端機與編輯器</a>模組。</p>
<hr>
<p>底下自動列出本系列的所有文章、依日期排序。</p>
]]></content:encoded></item><item><title>桌面環境選型：整合度與組裝自由度的取捨</title><link>https://tarrragon.github.io/blog/linux/tools/gui/desktop-environment-selection/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/gui/desktop-environment-selection/</guid><description>&lt;p>桌面環境（desktop environment，DE）是一整套讓你能用圖形介面操作 Linux 的元件集合——它同時提供視窗管理、面板/工作列、應用啟動器、設定中心、通知、檔案管理員、鎖屏這些功能，並保證它們彼此整合、開箱即用。這跟只負責「畫視窗、管理視窗位置」的 window manager 或 compositor 是不同層次的東西：DE 通常內含一個 window manager，再把上面那一整圈桌面服務組裝好交給你。理解這個責任邊界，是選型的起點——你在選的不是「哪個比較漂亮」，是「別人幫你整合到什麼程度、你自己要組裝多少」。&lt;/p>
&lt;h2 id="選型的真正軸線整合度-vs-組裝自由度">選型的真正軸線：整合度 vs 組裝自由度&lt;/h2>
&lt;p>桌面環境的選擇，核心不是「輕或重」，是&lt;strong>別人幫你整合好多少、你保留多少自己組裝的自由&lt;/strong>。這條軸線的一端是 GNOME 這種高整合方案：面板、設定、通知、檔案管理全部設計成一致的整體，你開機就有一台能用的機器，代價是想改動它預設的行為要對抗它的設計哲學。另一端是 Hyprland 這種 compositor：它只負責畫面與視窗，面板、啟動器、鎖屏、通知你全部自己挑自己接，代價是要花時間組裝、每個元件都要自己維護。&lt;/p>
&lt;p>「輕/重」只是這條軸線的副產品。高整合方案因為要保證所有元件協同，通常帶較多常駐服務、吃較多記憶體；自己組裝的方案可以只裝你要的，所以輕——但如果你把面板、啟動器、通知、鎖屏一個個補齊，最後的資源佔用未必比一個現成 DE 省多少。所以判選型別問「哪個輕」，要問「我想花多少時間在組裝與維護、換到多少客製自由」。&lt;/p>
&lt;h2 id="五個主流選項的定位">五個主流選項的定位&lt;/h2>
&lt;p>下表是常見選項在「整合度」這條軸線上的位置與代價。每個選項底下有延伸說明，因為同樣一句「適合客製」在不同方案裡的實際體驗差很多：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>方案&lt;/th>
 &lt;th>定位&lt;/th>
 &lt;th>整合度&lt;/th>
 &lt;th>資源&lt;/th>
 &lt;th>客製自由&lt;/th>
 &lt;th>預設顯示協定&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>GNOME&lt;/td>
 &lt;td>高整合、意見鮮明的現代桌面&lt;/td>
 &lt;td>高&lt;/td>
 &lt;td>較高&lt;/td>
 &lt;td>低（要對抗設計）&lt;/td>
 &lt;td>Wayland&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>KDE Plasma&lt;/td>
 &lt;td>高整合但高度可調&lt;/td>
 &lt;td>高&lt;/td>
 &lt;td>中&lt;/td>
 &lt;td>高（內建設定深）&lt;/td>
 &lt;td>Wayland&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>XFCE&lt;/td>
 &lt;td>輕量傳統桌面&lt;/td>
 &lt;td>中&lt;/td>
 &lt;td>低&lt;/td>
 &lt;td>中&lt;/td>
 &lt;td>X11&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Cinnamon&lt;/td>
 &lt;td>傳統桌面隱喻、易上手&lt;/td>
 &lt;td>中高&lt;/td>
 &lt;td>中&lt;/td>
 &lt;td>中&lt;/td>
 &lt;td>X11&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Hyprland（WM）&lt;/td>
 &lt;td>自己組裝的平鋪式 compositor&lt;/td>
 &lt;td>無（自組）&lt;/td>
 &lt;td>最低（裸）&lt;/td>
 &lt;td>最高&lt;/td>
 &lt;td>Wayland&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="gnome把選擇替你做完的現代桌面">GNOME：把選擇替你做完的現代桌面&lt;/h3>
&lt;p>GNOME 的定位是「一套有明確設計主張的完整桌面」——它預設一個不同於 Windows/macOS 的工作流（頂欄 + Activities 總覽 + 動態工作區），並且刻意收斂可調選項，讓多數人不用設定就有一致體驗。從 Windows/macOS 轉來、想要「裝好就能用、不想折騰」的人，GNOME 是穩妥選擇：它的整合度最高，通知、設定、線上帳號、檔案管理彼此協調。&lt;/p>
&lt;p>代價在客製。GNOME 把很多設定收進 extension 或需要另裝 &lt;code>gnome-tweaks&lt;/code>（Arch：&lt;code>pacman -S gnome-tweaks&lt;/code>）才改得動的角落，想把它調成傳統工作列風格是在對抗它的設計方向，而 extension 又會隨 GNOME 大版本更新而失效。所以 GNOME 適合「接受它的工作流」的人，不適合「想按自己習慣重排一切」的人。資源上它是這幾個裡偏吃的，老硬體上會感覺得到。&lt;/p>
&lt;h3 id="kde-plasma整合度高但幾乎每個角落都能調">KDE Plasma：整合度高、但幾乎每個角落都能調&lt;/h3>
&lt;p>KDE Plasma 少見地同時做到高整合與高可調：它像 GNOME 一樣開箱即用、元件協調，但幾乎每個行為都攤在設定介面裡讓你改——面板可以拆解重組、視窗規則、快捷鍵、視覺效果都有深度選項。從 Windows 轉來的人會覺得它的預設隱喻（底部工作列 + 開始選單）親切，又保留了往下鑽的空間。&lt;/p>
&lt;p>它的代價不在資源（現代 Plasma 已相當精實，中階機器順暢），在「選項多到需要自己收斂」——設定深意味著你可能花很多時間在調整上。想要「高整合又想保留大量客製、但不想從零組裝」的人，Plasma 通常是比 GNOME 和 Hyprland 都平衡的落點。它的 Wayland session 近年已是預設且成熟。&lt;/p>
&lt;h3 id="xfce老硬體與要傳統要穩要輕的預設">XFCE：老硬體與「要傳統、要穩、要輕」的預設&lt;/h3>
&lt;p>XFCE 的定位是輕量而傳統：它給你熟悉的桌面隱喻（工作列、選單、系統匣），資源佔用在這幾個裡最低，且以穩定少變著稱——它不追新，多年來介面與行為變動小。老硬體、低階 VM、或「我只要一個不吵不鬧、能穩定工作的桌面」的場景，XFCE 是可靠預設。&lt;/p>
&lt;p>它的取捨是現代感與顯示協定：XFCE 目前仍以 X11 為主，Wayland 化在進行但尚未是預設，所以想要 Wayland 的分數效益（見下節）目前要往別的方案找。客製自由度中等——比 GNOME 開放、但沒有 KDE 那種深度設定，也沒有 Hyprland 那種完全重組的自由。&lt;/p>
&lt;h3 id="cinnamon給要-windows-式熟悉感的轉移者">Cinnamon：給「要 Windows 式熟悉感」的轉移者&lt;/h3>
&lt;p>Cinnamon 出身 Linux Mint，定位是把傳統桌面隱喻做得順手好上手——底部工作列、開始選單式的應用選單、系統匣，對從 Windows 轉來的人幾乎零學習曲線。它比 XFCE 現代一點、視覺完整度高一些，整合度也高（自帶檔案管理員 Nemo、設定中心、特效）。&lt;/p>
&lt;p>代價與 XFCE 類似：以 X11 為主，資源比 XFCE 略高。它適合「要一台立刻上手、像 Windows 但是 Linux」的工作機，不適合追求 Wayland 或極致輕量的場景。附帶一提，Cinnamon 的檔案管理員 Nemo 假設 Cinnamon 桌面服務在旁邊，把它單獨裝進裸 window manager 會拖進整套 Cinnamon 元件——這正是&lt;a href="../gui-file-manager-dependencies/">加圖形檔案管理員那篇&lt;/a>講的桌面環境耦合。&lt;/p>
&lt;h3 id="hyprland不是-de是你自己組一個桌面">Hyprland：不是 DE，是你自己組一個桌面&lt;/h3>
&lt;p>Hyprland 嚴格說不是桌面環境，是一個平鋪式（tiling）Wayland compositor——它只負責畫面合成與視窗排列，面板、啟動器、鎖屏、通知、桌布、音量控制全部不含，要你自己挑元件接上去。選它意味著你接受「從零組裝一個桌面」這件事，換來的是最高的客製自由（每個元件都你選、佈局規則完全你定）和最低的裸資源佔用。&lt;/p>
&lt;p>它適合「把配置桌面當成一種投入、想要一套完全長成自己樣子的環境」的人，不適合「只想裝好開始工作」的人。組裝過程本身有相當的學習曲線與維護成本——這也是為什麼本系列用一整個 &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/06-rice-design/" data-link-title="模組六：桌面 Rice 設計" data-link-desc="Hyprland 桌面從能用到好看好用 — 狀態列、啟動器、通知、鎖屏、配色系統的設計與配置">Rice 設計模組&lt;/a>談「選了 Hyprland 之後怎麼把它組起來」。如果你還在「要不要走這條路」的階段，這篇就是那個模組的上游：先確認你要的是組裝自由、而不是開箱即用。&lt;/p>
&lt;h2 id="wayland-vs-x11選型時避不開的底層判斷">Wayland vs X11：選型時避不開的底層判斷&lt;/h2>
&lt;p>顯示協定是選型時的一條隱形軸線，因為它決定了一部分未來相容性。Wayland 是較新的顯示協定，設計上更安全、對高 DPI 與多螢幕不同刷新率支援更好，是 Linux 桌面的方向；X11 是沿用數十年的舊協定，相容性最廣但架構老舊、社群維護逐漸收斂到維持模式。GNOME、KDE Plasma、Hyprland 都已預設或原生 Wayland；XFCE、Cinnamon 目前仍以 X11 為主。&lt;/p>
&lt;p>實務判讀：如果你用 NVIDIA 專有驅動、或依賴某些只支援 X11 的老工具（部分螢幕錄製、遠端桌面、自動化工具），X11 方案目前可能更少驚喜；如果你要高 DPI 筆電、多螢幕混合刷新率、或想跟上長期方向，優先選 Wayland 方案。這不是非此即彼的道德選擇，是看你的硬體與工具鏈落在哪邊。&lt;/p></description><content:encoded><![CDATA[<p>桌面環境（desktop environment，DE）是一整套讓你能用圖形介面操作 Linux 的元件集合——它同時提供視窗管理、面板/工作列、應用啟動器、設定中心、通知、檔案管理員、鎖屏這些功能，並保證它們彼此整合、開箱即用。這跟只負責「畫視窗、管理視窗位置」的 window manager 或 compositor 是不同層次的東西：DE 通常內含一個 window manager，再把上面那一整圈桌面服務組裝好交給你。理解這個責任邊界，是選型的起點——你在選的不是「哪個比較漂亮」，是「別人幫你整合到什麼程度、你自己要組裝多少」。</p>
<h2 id="選型的真正軸線整合度-vs-組裝自由度">選型的真正軸線：整合度 vs 組裝自由度</h2>
<p>桌面環境的選擇，核心不是「輕或重」，是<strong>別人幫你整合好多少、你保留多少自己組裝的自由</strong>。這條軸線的一端是 GNOME 這種高整合方案：面板、設定、通知、檔案管理全部設計成一致的整體，你開機就有一台能用的機器，代價是想改動它預設的行為要對抗它的設計哲學。另一端是 Hyprland 這種 compositor：它只負責畫面與視窗，面板、啟動器、鎖屏、通知你全部自己挑自己接，代價是要花時間組裝、每個元件都要自己維護。</p>
<p>「輕/重」只是這條軸線的副產品。高整合方案因為要保證所有元件協同，通常帶較多常駐服務、吃較多記憶體；自己組裝的方案可以只裝你要的，所以輕——但如果你把面板、啟動器、通知、鎖屏一個個補齊，最後的資源佔用未必比一個現成 DE 省多少。所以判選型別問「哪個輕」，要問「我想花多少時間在組裝與維護、換到多少客製自由」。</p>
<h2 id="五個主流選項的定位">五個主流選項的定位</h2>
<p>下表是常見選項在「整合度」這條軸線上的位置與代價。每個選項底下有延伸說明，因為同樣一句「適合客製」在不同方案裡的實際體驗差很多：</p>
<table>
  <thead>
      <tr>
          <th>方案</th>
          <th>定位</th>
          <th>整合度</th>
          <th>資源</th>
          <th>客製自由</th>
          <th>預設顯示協定</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>GNOME</td>
          <td>高整合、意見鮮明的現代桌面</td>
          <td>高</td>
          <td>較高</td>
          <td>低（要對抗設計）</td>
          <td>Wayland</td>
      </tr>
      <tr>
          <td>KDE Plasma</td>
          <td>高整合但高度可調</td>
          <td>高</td>
          <td>中</td>
          <td>高（內建設定深）</td>
          <td>Wayland</td>
      </tr>
      <tr>
          <td>XFCE</td>
          <td>輕量傳統桌面</td>
          <td>中</td>
          <td>低</td>
          <td>中</td>
          <td>X11</td>
      </tr>
      <tr>
          <td>Cinnamon</td>
          <td>傳統桌面隱喻、易上手</td>
          <td>中高</td>
          <td>中</td>
          <td>中</td>
          <td>X11</td>
      </tr>
      <tr>
          <td>Hyprland（WM）</td>
          <td>自己組裝的平鋪式 compositor</td>
          <td>無（自組）</td>
          <td>最低（裸）</td>
          <td>最高</td>
          <td>Wayland</td>
      </tr>
  </tbody>
</table>
<h3 id="gnome把選擇替你做完的現代桌面">GNOME：把選擇替你做完的現代桌面</h3>
<p>GNOME 的定位是「一套有明確設計主張的完整桌面」——它預設一個不同於 Windows/macOS 的工作流（頂欄 + Activities 總覽 + 動態工作區），並且刻意收斂可調選項，讓多數人不用設定就有一致體驗。從 Windows/macOS 轉來、想要「裝好就能用、不想折騰」的人，GNOME 是穩妥選擇：它的整合度最高，通知、設定、線上帳號、檔案管理彼此協調。</p>
<p>代價在客製。GNOME 把很多設定收進 extension 或需要另裝 <code>gnome-tweaks</code>（Arch：<code>pacman -S gnome-tweaks</code>）才改得動的角落，想把它調成傳統工作列風格是在對抗它的設計方向，而 extension 又會隨 GNOME 大版本更新而失效。所以 GNOME 適合「接受它的工作流」的人，不適合「想按自己習慣重排一切」的人。資源上它是這幾個裡偏吃的，老硬體上會感覺得到。</p>
<h3 id="kde-plasma整合度高但幾乎每個角落都能調">KDE Plasma：整合度高、但幾乎每個角落都能調</h3>
<p>KDE Plasma 少見地同時做到高整合與高可調：它像 GNOME 一樣開箱即用、元件協調，但幾乎每個行為都攤在設定介面裡讓你改——面板可以拆解重組、視窗規則、快捷鍵、視覺效果都有深度選項。從 Windows 轉來的人會覺得它的預設隱喻（底部工作列 + 開始選單）親切，又保留了往下鑽的空間。</p>
<p>它的代價不在資源（現代 Plasma 已相當精實，中階機器順暢），在「選項多到需要自己收斂」——設定深意味著你可能花很多時間在調整上。想要「高整合又想保留大量客製、但不想從零組裝」的人，Plasma 通常是比 GNOME 和 Hyprland 都平衡的落點。它的 Wayland session 近年已是預設且成熟。</p>
<h3 id="xfce老硬體與要傳統要穩要輕的預設">XFCE：老硬體與「要傳統、要穩、要輕」的預設</h3>
<p>XFCE 的定位是輕量而傳統：它給你熟悉的桌面隱喻（工作列、選單、系統匣），資源佔用在這幾個裡最低，且以穩定少變著稱——它不追新，多年來介面與行為變動小。老硬體、低階 VM、或「我只要一個不吵不鬧、能穩定工作的桌面」的場景，XFCE 是可靠預設。</p>
<p>它的取捨是現代感與顯示協定：XFCE 目前仍以 X11 為主，Wayland 化在進行但尚未是預設，所以想要 Wayland 的分數效益（見下節）目前要往別的方案找。客製自由度中等——比 GNOME 開放、但沒有 KDE 那種深度設定，也沒有 Hyprland 那種完全重組的自由。</p>
<h3 id="cinnamon給要-windows-式熟悉感的轉移者">Cinnamon：給「要 Windows 式熟悉感」的轉移者</h3>
<p>Cinnamon 出身 Linux Mint，定位是把傳統桌面隱喻做得順手好上手——底部工作列、開始選單式的應用選單、系統匣，對從 Windows 轉來的人幾乎零學習曲線。它比 XFCE 現代一點、視覺完整度高一些，整合度也高（自帶檔案管理員 Nemo、設定中心、特效）。</p>
<p>代價與 XFCE 類似：以 X11 為主，資源比 XFCE 略高。它適合「要一台立刻上手、像 Windows 但是 Linux」的工作機，不適合追求 Wayland 或極致輕量的場景。附帶一提，Cinnamon 的檔案管理員 Nemo 假設 Cinnamon 桌面服務在旁邊，把它單獨裝進裸 window manager 會拖進整套 Cinnamon 元件——這正是<a href="../gui-file-manager-dependencies/">加圖形檔案管理員那篇</a>講的桌面環境耦合。</p>
<h3 id="hyprland不是-de是你自己組一個桌面">Hyprland：不是 DE，是你自己組一個桌面</h3>
<p>Hyprland 嚴格說不是桌面環境，是一個平鋪式（tiling）Wayland compositor——它只負責畫面合成與視窗排列，面板、啟動器、鎖屏、通知、桌布、音量控制全部不含，要你自己挑元件接上去。選它意味著你接受「從零組裝一個桌面」這件事，換來的是最高的客製自由（每個元件都你選、佈局規則完全你定）和最低的裸資源佔用。</p>
<p>它適合「把配置桌面當成一種投入、想要一套完全長成自己樣子的環境」的人，不適合「只想裝好開始工作」的人。組裝過程本身有相當的學習曲線與維護成本——這也是為什麼本系列用一整個 <a href="/blog/linux/dotfile/06-rice-design/" data-link-title="模組六：桌面 Rice 設計" data-link-desc="Hyprland 桌面從能用到好看好用 — 狀態列、啟動器、通知、鎖屏、配色系統的設計與配置">Rice 設計模組</a>談「選了 Hyprland 之後怎麼把它組起來」。如果你還在「要不要走這條路」的階段，這篇就是那個模組的上游：先確認你要的是組裝自由、而不是開箱即用。</p>
<h2 id="wayland-vs-x11選型時避不開的底層判斷">Wayland vs X11：選型時避不開的底層判斷</h2>
<p>顯示協定是選型時的一條隱形軸線，因為它決定了一部分未來相容性。Wayland 是較新的顯示協定，設計上更安全、對高 DPI 與多螢幕不同刷新率支援更好，是 Linux 桌面的方向；X11 是沿用數十年的舊協定，相容性最廣但架構老舊、社群維護逐漸收斂到維持模式。GNOME、KDE Plasma、Hyprland 都已預設或原生 Wayland；XFCE、Cinnamon 目前仍以 X11 為主。</p>
<p>實務判讀：如果你用 NVIDIA 專有驅動、或依賴某些只支援 X11 的老工具（部分螢幕錄製、遠端桌面、自動化工具），X11 方案目前可能更少驚喜；如果你要高 DPI 筆電、多螢幕混合刷新率、或想跟上長期方向，優先選 Wayland 方案。這不是非此即彼的道德選擇，是看你的硬體與工具鏈落在哪邊。</p>
<h2 id="依情境選從你的處境倒推">依情境選：從你的處境倒推</h2>
<p>選型的最後一步是把上面的定位對回你自己的處境，不是背「哪個最好」：</p>
<ul>
<li><strong>剛從 Windows/macOS 轉來、只想要能用</strong>：KDE Plasma（熟悉隱喻 + 之後可深調）或 GNOME（接受新工作流、要最省心）。要極致熟悉感就 Cinnamon。</li>
<li><strong>老硬體 / 低階 VM / 要穩定不折騰的工作機</strong>：XFCE。資源最低、變動最少。</li>
<li><strong>想把桌面調成完全自己的樣子、願意投入組裝</strong>：Hyprland（或其他 WM）。先讀 <a href="/blog/linux/dotfile/06-rice-design/" data-link-title="模組六：桌面 Rice 設計" data-link-desc="Hyprland 桌面從能用到好看好用 — 狀態列、啟動器、通知、鎖屏、配色系統的設計與配置">Rice 設計模組</a> 確認你要的是這條路。</li>
<li><strong>要高整合又要大量客製、不想從零組裝</strong>：KDE Plasma，是這兩個需求的平衡點。</li>
<li><strong>硬體是 NVIDIA 或依賴 X11 工具</strong>：優先 X11 成熟的方案（XFCE / Cinnamon），或確認你的 Wayland 方案在該硬體上的狀況再決定。</li>
</ul>
<p>判準是把「我願意花多少時間在桌面本身、我對客製的需求有多強、我的硬體與工具落在 Wayland 還是 X11」三個問題答清楚，選項自然收斂。沒有一個 DE 對所有人最好——選錯最常見的原因是拿別人的推薦套自己不同的處境。</p>
<h2 id="桌面環境的擴充生態">桌面環境的擴充生態</h2>
<p>選好 DE 之後，各方案還有自己的擴充路徑，這是「選項之下還有選項」的一層：</p>
<ul>
<li><strong>GNOME</strong>：透過 GNOME Extensions 加面板、工作流、狀態列元件，但要注意 extension 綁 GNOME 版本、大版本更新可能失效。</li>
<li><strong>KDE Plasma</strong>：內建的 widget（plasmoid）、全域主題、視窗規則系統，多數擴充不需要離開設定介面。</li>
<li><strong>XFCE / Cinnamon</strong>：panel plugin、applet、主題，擴充幅度中等但穩定。</li>
<li><strong>Hyprland</strong>：因為本來就是自己組，擴充等於換元件——換 bar（waybar/其他）、換啟動器、換通知 daemon，自由度最高也最需要自己維護。這一整套怎麼組，是 <a href="/blog/linux/dotfile/06-rice-design/" data-link-title="模組六：桌面 Rice 設計" data-link-desc="Hyprland 桌面從能用到好看好用 — 狀態列、啟動器、通知、鎖屏、配色系統的設計與配置">Rice 設計模組</a> 的主題。</li>
</ul>
<h2 id="下一步">下一步</h2>
<ul>
<li>選了 Hyprland、要開始組裝：<a href="/blog/linux/dotfile/06-rice-design/" data-link-title="模組六：桌面 Rice 設計" data-link-desc="Hyprland 桌面從能用到好看好用 — 狀態列、啟動器、通知、鎖屏、配色系統的設計與配置">Dotfile 管理：桌面 Rice 設計</a> 是「選了之後怎麼把它長成自己的樣子」的完整模組。</li>
<li>桌面選好、要裝檔案管理員這類 GUI app 時的相依判讀：<a href="../gui-file-manager-dependencies/">在 Hyprland 加圖形檔案管理員</a>。</li>
<li>純終端機環境不需要桌面環境、但需要對應的 CLI 工具：<a href="../../cli/">CLI 環境工具</a>。</li>
<li>桌面裝好後遇到顯示、鎖屏、服務層的問題怎麼診斷：<a href="../../../debug/">除錯與診斷</a>。</li>
</ul>
]]></content:encoded></item><item><title>現代 CLI 替代工具：grep、find、cat 之外的選擇</title><link>https://tarrragon.github.io/blog/linux/tools/cli/modern-cli-replacements/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/cli/modern-cli-replacements/</guid><description>&lt;p>Linux 的預設指令（&lt;code>grep&lt;/code>、&lt;code>find&lt;/code>、&lt;code>cat&lt;/code>、&lt;code>ls&lt;/code>）能用，但它們是幾十年前為當時的環境設計的。過去十年出現一批用現代語言（多為 Rust）重寫的替代品，在同樣的工作上更快、預設行為更貼近日常開發、輸出更好讀。認識這些替代品的價值不在「預設的錯了」，而在你能在對的情境用更省力的工具——尤其是每天重複幾十次的搜尋與瀏覽。&lt;/p>
&lt;p>這篇按「你原本用什麼」對照現代替代品，講清楚每個替代品解掉原工具的什麼痛點、什麼情境值得換、以及換了要注意的地方。核心的搜尋三件套（&lt;code>ripgrep&lt;/code> / &lt;code>fd&lt;/code> / &lt;code>fzf&lt;/code>）值得優先掌握，其餘按需採用。&lt;/p>
&lt;h2 id="搜尋文字內容grep--ripgreprg">搜尋文字內容：grep → ripgrep（rg）&lt;/h2>
&lt;p>&lt;code>ripgrep&lt;/code>（指令是 &lt;code>rg&lt;/code>）是 &lt;code>grep&lt;/code> 的現代替代品，最大差別在它預設就做了開發者幾乎每次都要的事：遞迴搜尋當前目錄、尊重 &lt;code>.gitignore&lt;/code>（不會翻進 &lt;code>node_modules&lt;/code>、&lt;code>.git&lt;/code>、build 產物）、自動跳過二進位檔、輸出帶顏色與行號。用 &lt;code>grep&lt;/code> 搜整個專案常要寫 &lt;code>grep -rn --exclude-dir=node_modules pattern .&lt;/code>，用 &lt;code>rg pattern&lt;/code> 一句就到位且更快（Rust 實作 + 平行搜尋）。&lt;/p>
&lt;p>什麼情境值得換：在專案目錄裡找程式碼、找字串出現在哪些檔案——這是 &lt;code>rg&lt;/code> 最省力的地方。什麼時候還是用 &lt;code>grep&lt;/code>：處理 pipe 進來的串流（&lt;code>command | grep x&lt;/code>）兩者差不多；寫要在任何機器都能跑的腳本時 &lt;code>grep&lt;/code> 是保證存在的（&lt;code>rg&lt;/code> 要另外裝）。注意點：&lt;code>rg&lt;/code> 預設跳過 &lt;code>.gitignore&lt;/code> 忽略的檔，要搜被忽略的檔案得加 &lt;code>-u&lt;/code>（或 &lt;code>-uu&lt;/code> 連隱藏檔一起）。&lt;/p>
&lt;h2 id="找檔案find--fd">找檔案：find → fd&lt;/h2>
&lt;p>&lt;code>fd&lt;/code> 是 &lt;code>find&lt;/code> 的現代替代品，把 &lt;code>find&lt;/code> 那套冗長語法換成直覺的用法。&lt;code>find . -name '*.md' -type f&lt;/code> 用 &lt;code>fd&lt;/code> 是 &lt;code>fd -e md&lt;/code>；&lt;code>fd pattern&lt;/code> 直接對檔名做模糊比對，一樣預設遞迴、尊重 &lt;code>.gitignore&lt;/code>、跳過隱藏檔、輸出帶色。速度也快得多。&lt;/p>
&lt;p>什麼情境值得換：日常找檔案（「這個 config 檔在哪」「有哪些 .test.ts」）。什麼時候還是用 &lt;code>find&lt;/code>：&lt;code>find&lt;/code> 的 &lt;code>-exec&lt;/code>、複雜的時間 / 權限 / 大小條件組合仍然更全面，寫可攜腳本時 &lt;code>find&lt;/code> 保證存在。注意點：&lt;code>fd&lt;/code> 的正則 / glob 預設是 smart case（有大寫才區分大小寫），跟 &lt;code>find&lt;/code> 的精確比對行為不同。&lt;/p>
&lt;h2 id="互動式模糊搜尋fzf不是替代是加一層">互動式模糊搜尋：fzf（不是替代，是加一層）&lt;/h2>
&lt;p>&lt;code>fzf&lt;/code> 不替代任何工具，它是一層&lt;strong>互動式模糊選擇器&lt;/strong>，把「一堆候選 → 你挑一個」這件事變得極快。它從 stdin 吃候選清單、開一個可即時模糊過濾的介面、把你選的印到 stdout，所以能跟任何產生清單的指令組合：&lt;code>fd -e md | fzf&lt;/code> 挑一個 markdown 檔、&lt;code>git branch | fzf&lt;/code> 挑分支、&lt;code>rg --files | fzf&lt;/code> 挑檔案開。&lt;/p>
&lt;p>最高價值的兩個內建整合：&lt;code>Ctrl+R&lt;/code> 覆寫 shell 的歷史搜尋（模糊搜尋整個命令歷史，比預設的反向搜尋強太多）、&lt;code>Ctrl+T&lt;/code> 把檔案路徑插進當前命令列。這兩個 key binding &lt;strong>不是裝完自動生效的&lt;/strong>，要在 shell 設定裡啟用——新版 &lt;code>fzf&lt;/code> 直接在 &lt;code>.zshrc&lt;/code> / &lt;code>.bashrc&lt;/code> 加一行 &lt;code>eval &amp;quot;$(fzf --zsh)&amp;quot;&lt;/code>（bash 用 &lt;code>--bash&lt;/code>）；舊版則 source 套件附的整合檔（Arch 在 &lt;code>/usr/share/fzf/key-bindings.zsh&lt;/code> 與 &lt;code>completion.zsh&lt;/code>，路徑隨發行版不同）。沒加這行，&lt;code>Ctrl+R&lt;/code> 不會有反應。&lt;code>fd&lt;/code> 跟 &lt;code>rg&lt;/code> 可以當 &lt;code>fzf&lt;/code> 的預設來源，三者是一組。&lt;/p>
&lt;h2 id="看檔案內容cat--bat">看檔案內容：cat → bat&lt;/h2>
&lt;p>&lt;code>bat&lt;/code> 是 &lt;code>cat&lt;/code> 加上語法高亮、行號、Git 修改標記、自動分頁。看程式碼 / 設定檔時比 &lt;code>cat&lt;/code> 好讀很多。&lt;code>bat file.py&lt;/code> 直接帶高亮顯示。&lt;/p>
&lt;p>什麼情境值得換：人在終端機讀檔案內容。什麼時候還是用 &lt;code>cat&lt;/code>：把檔案內容 pipe 給其他程式、或在腳本裡——這時要純內容，用 &lt;code>cat&lt;/code>（&lt;code>bat&lt;/code> 在偵測到輸出不是終端機時會自動退化成類 &lt;code>cat&lt;/code> 行為，但明確用 &lt;code>cat&lt;/code> 更穩）。注意點：&lt;code>bat&lt;/code> 預設會分頁（走 &lt;code>less&lt;/code>），在腳本 / pipe 情境要加 &lt;code>--paging=never&lt;/code> 或 &lt;code>-pp&lt;/code>。&lt;/p>
&lt;h2 id="列目錄ls--eza">列目錄：ls → eza&lt;/h2>
&lt;p>&lt;code>eza&lt;/code>（&lt;code>exa&lt;/code> 的維護接棒者）是 &lt;code>ls&lt;/code> 的現代替代品，預設輸出帶顏色與圖示、更好的欄位對齊、內建 Git 狀態欄、&lt;code>--tree&lt;/code> 直接畫樹狀。&lt;code>eza -la --git&lt;/code> 一眼看到權限、大小、修改時間、Git 狀態。&lt;/p>
&lt;p>什麼情境值得換：人在終端機瀏覽目錄。什麼時候還是用 &lt;code>ls&lt;/code>：腳本裡解析輸出用 &lt;code>ls&lt;/code> 更穩定（現代替代品的欄位格式可能隨版本變），可攜腳本 &lt;code>ls&lt;/code> 保證存在。&lt;/p></description><content:encoded><![CDATA[<p>Linux 的預設指令（<code>grep</code>、<code>find</code>、<code>cat</code>、<code>ls</code>）能用，但它們是幾十年前為當時的環境設計的。過去十年出現一批用現代語言（多為 Rust）重寫的替代品，在同樣的工作上更快、預設行為更貼近日常開發、輸出更好讀。認識這些替代品的價值不在「預設的錯了」，而在你能在對的情境用更省力的工具——尤其是每天重複幾十次的搜尋與瀏覽。</p>
<p>這篇按「你原本用什麼」對照現代替代品，講清楚每個替代品解掉原工具的什麼痛點、什麼情境值得換、以及換了要注意的地方。核心的搜尋三件套（<code>ripgrep</code> / <code>fd</code> / <code>fzf</code>）值得優先掌握，其餘按需採用。</p>
<h2 id="搜尋文字內容grep--ripgreprg">搜尋文字內容：grep → ripgrep（rg）</h2>
<p><code>ripgrep</code>（指令是 <code>rg</code>）是 <code>grep</code> 的現代替代品，最大差別在它預設就做了開發者幾乎每次都要的事：遞迴搜尋當前目錄、尊重 <code>.gitignore</code>（不會翻進 <code>node_modules</code>、<code>.git</code>、build 產物）、自動跳過二進位檔、輸出帶顏色與行號。用 <code>grep</code> 搜整個專案常要寫 <code>grep -rn --exclude-dir=node_modules pattern .</code>，用 <code>rg pattern</code> 一句就到位且更快（Rust 實作 + 平行搜尋）。</p>
<p>什麼情境值得換：在專案目錄裡找程式碼、找字串出現在哪些檔案——這是 <code>rg</code> 最省力的地方。什麼時候還是用 <code>grep</code>：處理 pipe 進來的串流（<code>command | grep x</code>）兩者差不多；寫要在任何機器都能跑的腳本時 <code>grep</code> 是保證存在的（<code>rg</code> 要另外裝）。注意點：<code>rg</code> 預設跳過 <code>.gitignore</code> 忽略的檔，要搜被忽略的檔案得加 <code>-u</code>（或 <code>-uu</code> 連隱藏檔一起）。</p>
<h2 id="找檔案find--fd">找檔案：find → fd</h2>
<p><code>fd</code> 是 <code>find</code> 的現代替代品，把 <code>find</code> 那套冗長語法換成直覺的用法。<code>find . -name '*.md' -type f</code> 用 <code>fd</code> 是 <code>fd -e md</code>；<code>fd pattern</code> 直接對檔名做模糊比對，一樣預設遞迴、尊重 <code>.gitignore</code>、跳過隱藏檔、輸出帶色。速度也快得多。</p>
<p>什麼情境值得換：日常找檔案（「這個 config 檔在哪」「有哪些 .test.ts」）。什麼時候還是用 <code>find</code>：<code>find</code> 的 <code>-exec</code>、複雜的時間 / 權限 / 大小條件組合仍然更全面，寫可攜腳本時 <code>find</code> 保證存在。注意點：<code>fd</code> 的正則 / glob 預設是 smart case（有大寫才區分大小寫），跟 <code>find</code> 的精確比對行為不同。</p>
<h2 id="互動式模糊搜尋fzf不是替代是加一層">互動式模糊搜尋：fzf（不是替代，是加一層）</h2>
<p><code>fzf</code> 不替代任何工具，它是一層<strong>互動式模糊選擇器</strong>，把「一堆候選 → 你挑一個」這件事變得極快。它從 stdin 吃候選清單、開一個可即時模糊過濾的介面、把你選的印到 stdout，所以能跟任何產生清單的指令組合：<code>fd -e md | fzf</code> 挑一個 markdown 檔、<code>git branch | fzf</code> 挑分支、<code>rg --files | fzf</code> 挑檔案開。</p>
<p>最高價值的兩個內建整合：<code>Ctrl+R</code> 覆寫 shell 的歷史搜尋（模糊搜尋整個命令歷史，比預設的反向搜尋強太多）、<code>Ctrl+T</code> 把檔案路徑插進當前命令列。這兩個 key binding <strong>不是裝完自動生效的</strong>，要在 shell 設定裡啟用——新版 <code>fzf</code> 直接在 <code>.zshrc</code> / <code>.bashrc</code> 加一行 <code>eval &quot;$(fzf --zsh)&quot;</code>（bash 用 <code>--bash</code>）；舊版則 source 套件附的整合檔（Arch 在 <code>/usr/share/fzf/key-bindings.zsh</code> 與 <code>completion.zsh</code>，路徑隨發行版不同）。沒加這行，<code>Ctrl+R</code> 不會有反應。<code>fd</code> 跟 <code>rg</code> 可以當 <code>fzf</code> 的預設來源，三者是一組。</p>
<h2 id="看檔案內容cat--bat">看檔案內容：cat → bat</h2>
<p><code>bat</code> 是 <code>cat</code> 加上語法高亮、行號、Git 修改標記、自動分頁。看程式碼 / 設定檔時比 <code>cat</code> 好讀很多。<code>bat file.py</code> 直接帶高亮顯示。</p>
<p>什麼情境值得換：人在終端機讀檔案內容。什麼時候還是用 <code>cat</code>：把檔案內容 pipe 給其他程式、或在腳本裡——這時要純內容，用 <code>cat</code>（<code>bat</code> 在偵測到輸出不是終端機時會自動退化成類 <code>cat</code> 行為，但明確用 <code>cat</code> 更穩）。注意點：<code>bat</code> 預設會分頁（走 <code>less</code>），在腳本 / pipe 情境要加 <code>--paging=never</code> 或 <code>-pp</code>。</p>
<h2 id="列目錄ls--eza">列目錄：ls → eza</h2>
<p><code>eza</code>（<code>exa</code> 的維護接棒者）是 <code>ls</code> 的現代替代品，預設輸出帶顏色與圖示、更好的欄位對齊、內建 Git 狀態欄、<code>--tree</code> 直接畫樹狀。<code>eza -la --git</code> 一眼看到權限、大小、修改時間、Git 狀態。</p>
<p>什麼情境值得換：人在終端機瀏覽目錄。什麼時候還是用 <code>ls</code>：腳本裡解析輸出用 <code>ls</code> 更穩定（現代替代品的欄位格式可能隨版本變），可攜腳本 <code>ls</code> 保證存在。</p>
<h2 id="其他常見替代">其他常見替代</h2>
<p>按需採用，痛點對上了再裝：</p>
<table>
  <thead>
      <tr>
          <th>原工具</th>
          <th>替代品</th>
          <th>解的痛點</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>cd</code></td>
          <td><code>zoxide</code></td>
          <td>記住常去的目錄，<code>z proj</code> 跳到最常用的（需 <code>eval &quot;$(zoxide init zsh)&quot;</code> 進 shell 才攔截 <code>z</code>）</td>
      </tr>
      <tr>
          <td><code>ps</code></td>
          <td><code>procs</code></td>
          <td>帶色、預設欄位更實用、支援樹狀與關鍵字過濾</td>
      </tr>
      <tr>
          <td><code>du</code></td>
          <td><code>ncdu</code> / <code>dust</code></td>
          <td>找誰佔空間：<code>ncdu</code> 互動逐層鑽 + 就地刪，<code>dust</code> 一次性樹狀視覺（見下）</td>
      </tr>
      <tr>
          <td><code>df</code></td>
          <td><code>duf</code></td>
          <td>表格化、帶色、好讀的磁碟用量</td>
      </tr>
      <tr>
          <td><code>top</code></td>
          <td><code>htop</code> / <code>btop</code></td>
          <td>互動式監控：<code>htop</code> 輕量近乎必備，<code>btop</code> 更完整的全螢幕儀表（見下）</td>
      </tr>
      <tr>
          <td><code>git diff</code></td>
          <td><code>delta</code> / <code>difftastic</code></td>
          <td>diff pager：<code>delta</code> 語法高亮 + 並排，<code>difftastic</code> 語法感知（比 AST 不比行；執行檔是 <code>difft</code>）</td>
      </tr>
      <tr>
          <td><code>man</code></td>
          <td><code>tldr</code></td>
          <td>只給常用範例，不用讀完整 man page</td>
      </tr>
      <tr>
          <td><code>sed</code>（簡單替換）</td>
          <td><code>sd</code></td>
          <td>直覺的 <code>sd 舊 新</code>，不用記 <code>sed</code> 的跳脫規則</td>
      </tr>
  </tbody>
</table>
<p>有兩個替代品的那幾格，差別不是「新舊」而是不同的使用模型，值得分清楚：</p>
<ul>
<li><strong><code>du</code> 的 <code>ncdu</code> vs <code>dust</code></strong>：兩者解的動作不同。<code>ncdu</code> 是互動式的——它掃一次目錄，開一個能逐層往下鑽、當場按鍵刪檔的介面，是「磁碟滿了、要找出並清掉大檔」這個任務的正典（清空間邊找邊刪）。<code>dust</code> 是一次性的——跑完印一張樹狀 + 長條的靜態報告，適合「快速看一眼誰佔空間」而不打算就地刪。要清理用 <code>ncdu</code>，要瞄一眼用 <code>dust</code>。</li>
<li><strong><code>top</code> 的 <code>htop</code> vs <code>btop</code></strong>：<code>htop</code> 是輕量、幾乎每台機器都該有的安全預設——彩色、可捲動、能直接對 process 送訊號，資源佔用極低，SSH 進一台陌生機器臨時看負載首選它。<code>btop</code> 是更完整的全螢幕儀表（CPU / 記憶體 / 網路 / 磁碟的圖形化面板），好看資訊多，但相對重、依賴多；當常駐監控台用很讚，臨時排查用 <code>htop</code> 更快到位。TUI 監控工具的完整比較見 <a href="../tui-monitoring-tools/">TUI 監控工具</a>。</li>
</ul>
<h2 id="採用策略與注意事項">採用策略與注意事項</h2>
<p><strong>優先順序</strong>：搜尋三件套（<code>rg</code> / <code>fd</code> / <code>fzf</code>）投報率最高，每天用幾十次、學習成本低，先裝這三個。<code>bat</code> / <code>eza</code> 是體驗提升，其餘按痛點採用。</p>
<p><strong>跨機器 / CI 的腳本別依賴它們</strong>：要在別台機器或 CI 跑的腳本，用保證存在的 <code>grep</code> / <code>find</code> / <code>cat</code>，因為現代替代品不一定裝了。專案內部、已宣告了 dev 依賴的腳本（devcontainer、Makefile）另當別論——那裡明確裝了 <code>rg</code> / <code>fd</code>，用它們（甚至還因為 <code>rg</code> 尊重 <code>.gitignore</code> 的語意才選它）很合理。分界是「這段腳本會在沒裝這些工具的環境跑嗎」，不是「腳本一律不能用」。</p>
<p><strong>安裝</strong>：多數在各發行版套件庫直接有。Arch：<code>pacman -S ripgrep fd fzf bat eza zoxide</code>，按需再加 <code>procs ncdu htop git-delta</code>（<code>delta</code> 的套件名是 <code>git-delta</code>）。Debian / Ubuntu 有兩個要注意的改名坑——<code>fd</code> 的執行檔在 apt 上叫 <code>fdfind</code>、<code>bat</code> 叫 <code>batcat</code>（都是為了避免跟既有套件撞名），要自己 alias 回 <code>fd</code> / <code>bat</code>；<code>eza</code> 較舊的 apt 源可能還沒有，用 cargo 或官方 repo 裝。macOS 用 <code>brew install ripgrep fd fzf bat eza zoxide</code>。裝好後它們該進你的 <a href="/blog/linux/dotfile/08-sync-bootstrap/bootstrap-script-packages/" data-link-title="Bootstrap Script 與套件清單管理" data-link-desc="寫 dotfile 的 install script、或整理「這台機器裝了什麼」的套件清單時回來讀">dotfile 套件清單</a>，新機器 bootstrap 時一次裝齊。</p>
<h2 id="相關">相關</h2>
<ul>
<li>這篇是「日常指令替代」；全螢幕 TUI 工具（監控、Git、檔案瀏覽、資料庫）見 <a href="../">CLI 環境工具</a> 的其他文章。</li>
<li>為什麼把工具當成「有取捨的選項」而非唯一答案，見 <a href="../">工具選單總覽</a>。</li>
<li>這些工具進 dotfile 套件清單、一鍵安裝的做法，見 <a href="/blog/linux/dotfile/08-sync-bootstrap/bootstrap-script-packages/" data-link-title="Bootstrap Script 與套件清單管理" data-link-desc="寫 dotfile 的 install script、或整理「這台機器裝了什麼」的套件清單時回來讀">模組八：Bootstrap script 與套件清單</a>。</li>
</ul>
]]></content:encoded></item><item><title>遠端連線與同步工具選型：連得穩、斷得起、檔案一致</title><link>https://tarrragon.github.io/blog/linux/tools/remote/connection-and-sync-tools/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/remote/connection-and-sync-tools/</guid><description>&lt;p>遠端工作有三塊彼此獨立的能力：&lt;strong>保住 session&lt;/strong>（多工器讓遠端的工作不隨連線消失）、&lt;strong>連線層&lt;/strong>（決定你怎麼接上遠端、斷了怎麼辦）、&lt;strong>同步層&lt;/strong>（決定本地與遠端的檔案怎麼保持一致）。多工器是地基、已在&lt;a href="../">遠端工具總覽&lt;/a>談過；這篇補另外兩塊——連線用什麼、檔案怎麼同步。這三塊要分開看，因為它們解的是不同問題，混在一起挑會挑錯：session 掉了是多工器的事，打字延遲高是連線層的事，本地改了遠端沒更新是同步層的事。&lt;/p>
&lt;h2 id="連線層從-ssh-出發按弱點往上補">連線層：從 SSH 出發，按弱點往上補&lt;/h2>
&lt;p>連線層的基準是 SSH——它是遠端登入的通用標準，加密、認證、port forwarding 都靠它，多數情況直接用 SSH 就夠。往上補工具的時機，是 SSH 在特定弱點上讓你難受的時候，而不是「有更潮的工具就換」。SSH 的兩個典型弱點是「網路一換就斷」（筆電休眠、Wi-Fi 換點、行動網路切換）和「連線中斷後要手動重連」，mosh 與 autossh 各補一個。&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>工具&lt;/th>
 &lt;th>解的問題&lt;/th>
 &lt;th>代價&lt;/th>
 &lt;th>何時值得換&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>SSH&lt;/td>
 &lt;td>通用遠端登入基準&lt;/td>
 &lt;td>網路一換 IP 就斷、休眠喚醒常要重連&lt;/td>
 &lt;td>預設就用它&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>mosh&lt;/td>
 &lt;td>漫遊不斷線、高延遲下打字順&lt;/td>
 &lt;td>走 UDP 要開額外 port、不支援 port forwarding&lt;/td>
 &lt;td>行動網路 / Wi-Fi 換點 / 高延遲&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>autossh&lt;/td>
 &lt;td>SSH 斷線自動重連&lt;/td>
 &lt;td>只是重連、session 內容還是靠多工器保住&lt;/td>
 &lt;td>需要一條長期自動維持的隧道&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="mosh換網路不掉線高延遲下還能打字">mosh：換網路不掉線、高延遲下還能打字&lt;/h3>
&lt;p>mosh（mobile shell）解的是「連線的存活與手感」：它在 SSH 之上用 UDP 維持一個跟客戶端 IP 無關的 session，所以你的筆電從家裡 Wi-Fi 換到行動網路、或休眠喚醒換了 IP，連線不會斷。它還做本地回顯預測，高延遲鏈路上打字不會有一個字一個字等回應的黏滯感。從咖啡廳、通勤、跨國高延遲連遠端時，mosh 的體驗明顯優於裸 SSH。&lt;/p>
&lt;p>它的代價是走 UDP，要在遠端開一段 UDP port 範圍（防火牆/雲端 security group 要放行），且不做 SSH 的 port forwarding——需要轉發本地端口時還是得另開一條 SSH。所以 mosh 通常跟多工器搭配用：mosh 保住連線手感、多工器保住 session 內容，兩者互補。&lt;/p>
&lt;h3 id="autossh維持一條會自己重連的隧道">autossh：維持一條會自己重連的隧道&lt;/h3>
&lt;p>autossh 解的是「隧道的自動存活」：它監控一條 SSH 連線，斷了就自動重建，適合需要長期維持的場景——例如把遠端某個服務 port forward 回本地、或維持一條反向隧道讓 NAT 後的機器可被連入。它本身只負責「重連」這個動作，重連後你原本的工作是否還在，取決於你有沒有用多工器把 session 保住。&lt;/p>
&lt;p>判讀：autossh 是「基礎設施型」工具，用在你要一條無人值守、掉了要自己回來的隧道；日常互動式登入用 mosh 的漫遊能力更順。兩者不衝突。&lt;/p>
&lt;h2 id="網路層機器根本連不到時先解可達性">網路層：機器根本連不到時，先解可達性&lt;/h2>
&lt;p>前面的連線工具都假設「遠端機器的 IP 你連得到」。當遠端機器在 NAT 或防火牆後面、沒有公開 IP 時，連不到是可達性問題，要在網路層解，而不是換 SSH 客戶端。WireGuard 是現代的輕量 VPN 協定，讓兩台機器像在同一個私網裡直接互連；Tailscale 建在 WireGuard 之上，把「交換金鑰、打洞穿透 NAT、管理裝置清單」這些麻煩事自動化，通常裝好登入就能讓你的所有裝置互相 SSH，不必自己配 VPN。&lt;/p>
&lt;p>判讀：家裡的機器、公司內網的開發機、雲端私網裡的主機，想從外面連進去又不想開公網 port 暴露 SSH，用 Tailscale（要省事）或自建 WireGuard（要完全自主、不依賴第三方協調伺服器）在網路層打通，之後 SSH/mosh 照常用。這一層跟連線層是疊加關係：先有可達性，上面才談連線手感。（機器連不到的診斷——是網路層、服務層還是機器沒起——見&lt;a href="../../../debug/machine-unreachable/">機器連不到或起不來&lt;/a>。）&lt;/p>
&lt;h2 id="同步層三種語義依-workflow-選">同步層：三種語義，依 workflow 選&lt;/h2>
&lt;p>檔案同步不是一個問題，是三種不同語義的問題，挑錯工具會很痛。核心差異在「同步是單向還是雙向、是一次性快照還是持續即時、檔案存在本地還是遠端」。rsync、sshfs、mutagen 各自代表一種語義：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>工具&lt;/th>
 &lt;th>語義&lt;/th>
 &lt;th>檔案實際在哪&lt;/th>
 &lt;th>適合的 workflow&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>rsync&lt;/td>
 &lt;td>單向、一次性快照、增量傳輸&lt;/td>
 &lt;td>兩邊各一份&lt;/td>
 &lt;td>部署、備份、把成果拉回來&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>sshfs&lt;/td>
 &lt;td>把遠端目錄掛載成本地路徑&lt;/td>
 &lt;td>只在遠端&lt;/td>
 &lt;td>偶爾存取遠端檔案、當本地資料夾用&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>mutagen&lt;/td>
 &lt;td>雙向、持續、即時同步&lt;/td>
 &lt;td>兩邊各一份即時&lt;/td>
 &lt;td>本地編輯、遠端執行的開發迴圈&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h3 id="rsync單向增量部署與拉回成果的正典">rsync：單向增量，部署與拉回成果的正典&lt;/h3>
&lt;p>rsync 解的是「把一批檔案有效率地從 A 複製到 B」：它只傳有變動的部分（增量），可保留權限與時間戳，是單向的一次性動作——你下指令、它同步一次、結束。它適合明確的「推上去」或「拉回來」：把本地建好的東西部署到遠端、把遠端跑完的產出拉回本地、定期備份。它不做「持續盯著兩邊、誰改了就同步」，所以拿它當即時開發同步用會很累（每次改都要手動跑）。&lt;/p>
&lt;p>因為單向且明確，rsync 也是三者裡最可預測、最不會意外覆蓋的——你清楚知道哪邊是來源、哪邊被更新。無人值守的成果回收（遠端跑完長任務、把結果 rsync 回本地）用它最穩。&lt;/p>
&lt;h3 id="sshfs把遠端目錄當本地資料夾掛載">sshfs：把遠端目錄當本地資料夾掛載&lt;/h3>
&lt;p>sshfs 解的是「我想用本地的工具存取遠端的檔案、但不想先複製下來」：它透過 SSH 把遠端目錄掛載成本地的一個路徑，你用本地的編輯器、檔案管理員直接開，實際檔案仍只在遠端。適合偶爾存取、檔案不宜落地到本地的場景。&lt;/p>
&lt;p>它的代價是脆與慢：每次存取都走網路，延遲高時開大目錄、跑 &lt;code>git status&lt;/code> 這種大量小檔操作會很卡；連線一斷，掛載點就進入壞狀態要重掛。所以 sshfs 適合「輕度、偶爾」的遠端存取，不適合當重度開發的主力——重度開發本地要有一份真的檔案，那是 mutagen 的場景。&lt;/p>
&lt;h3 id="mutagen雙向即時本地編輯遠端執行的開發迴圈">mutagen：雙向即時，本地編輯遠端執行的開發迴圈&lt;/h3>
&lt;p>mutagen 解的是現代遠端開發最常見的迴圈：「在本地用順手的編輯器改、在遠端（有算力、有環境、有相依）執行」，它在兩邊各保留一份實體檔案並持續雙向即時同步——你本地存檔，遠端幾乎同時更新；遠端產生的檔案也同步回本地。因為兩邊都是本地檔案，&lt;code>git status&lt;/code>、搜尋、建置都快，沒有 sshfs 那種每次存取走網路的黏滯。&lt;/p>
&lt;p>它的代價是多一個常駐同步 daemon 與初次設定，且雙向同步要處理衝突（兩邊同時改同一檔）。適合「本地機器弱/環境不對、但要在強遠端上跑」的長期開發關係。如果你的需求只是「偶爾拉個檔」，mutagen 是殺雞用牛刀，rsync 或 sshfs 更省。&lt;/p>
&lt;h2 id="ide-remote把編輯器的執行環境整個搬到遠端">IDE remote：把編輯器的執行環境整個搬到遠端&lt;/h2>
&lt;p>VS Code Remote（SSH/Containers/WSL）與 JetBrains Gateway 是另一條路線：它們不同步檔案，而是把編輯器的後端（語言伺服器、終端機、除錯器）整個跑在遠端，本地只留 UI。你在本地視窗編輯，但索引、建置、執行全發生在遠端那台機器上，檔案也只在遠端。這解掉了同步的衝突問題（沒有兩份檔案要對齊），代價是綁定該編輯器、且需要一條夠穩的連線維持 UI 與後端的通訊。&lt;/p>
&lt;p>判讀：如果你本來就用 VS Code / JetBrains，remote 模式通常比自己接 mutagen + SSH 更省事、體驗更整合；如果你用終端機編輯器（Vim/Neovim/Emacs）或要編輯器無關的方案，走 mutagen（雙向同步）或直接在遠端多工器裡編輯（檔案只在遠端、靠多工器保住 session）。&lt;/p></description><content:encoded><![CDATA[<p>遠端工作有三塊彼此獨立的能力：<strong>保住 session</strong>（多工器讓遠端的工作不隨連線消失）、<strong>連線層</strong>（決定你怎麼接上遠端、斷了怎麼辦）、<strong>同步層</strong>（決定本地與遠端的檔案怎麼保持一致）。多工器是地基、已在<a href="../">遠端工具總覽</a>談過；這篇補另外兩塊——連線用什麼、檔案怎麼同步。這三塊要分開看，因為它們解的是不同問題，混在一起挑會挑錯：session 掉了是多工器的事，打字延遲高是連線層的事，本地改了遠端沒更新是同步層的事。</p>
<h2 id="連線層從-ssh-出發按弱點往上補">連線層：從 SSH 出發，按弱點往上補</h2>
<p>連線層的基準是 SSH——它是遠端登入的通用標準，加密、認證、port forwarding 都靠它，多數情況直接用 SSH 就夠。往上補工具的時機，是 SSH 在特定弱點上讓你難受的時候，而不是「有更潮的工具就換」。SSH 的兩個典型弱點是「網路一換就斷」（筆電休眠、Wi-Fi 換點、行動網路切換）和「連線中斷後要手動重連」，mosh 與 autossh 各補一個。</p>
<table>
  <thead>
      <tr>
          <th>工具</th>
          <th>解的問題</th>
          <th>代價</th>
          <th>何時值得換</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>SSH</td>
          <td>通用遠端登入基準</td>
          <td>網路一換 IP 就斷、休眠喚醒常要重連</td>
          <td>預設就用它</td>
      </tr>
      <tr>
          <td>mosh</td>
          <td>漫遊不斷線、高延遲下打字順</td>
          <td>走 UDP 要開額外 port、不支援 port forwarding</td>
          <td>行動網路 / Wi-Fi 換點 / 高延遲</td>
      </tr>
      <tr>
          <td>autossh</td>
          <td>SSH 斷線自動重連</td>
          <td>只是重連、session 內容還是靠多工器保住</td>
          <td>需要一條長期自動維持的隧道</td>
      </tr>
  </tbody>
</table>
<h3 id="mosh換網路不掉線高延遲下還能打字">mosh：換網路不掉線、高延遲下還能打字</h3>
<p>mosh（mobile shell）解的是「連線的存活與手感」：它在 SSH 之上用 UDP 維持一個跟客戶端 IP 無關的 session，所以你的筆電從家裡 Wi-Fi 換到行動網路、或休眠喚醒換了 IP，連線不會斷。它還做本地回顯預測，高延遲鏈路上打字不會有一個字一個字等回應的黏滯感。從咖啡廳、通勤、跨國高延遲連遠端時，mosh 的體驗明顯優於裸 SSH。</p>
<p>它的代價是走 UDP，要在遠端開一段 UDP port 範圍（防火牆/雲端 security group 要放行），且不做 SSH 的 port forwarding——需要轉發本地端口時還是得另開一條 SSH。所以 mosh 通常跟多工器搭配用：mosh 保住連線手感、多工器保住 session 內容，兩者互補。</p>
<h3 id="autossh維持一條會自己重連的隧道">autossh：維持一條會自己重連的隧道</h3>
<p>autossh 解的是「隧道的自動存活」：它監控一條 SSH 連線，斷了就自動重建，適合需要長期維持的場景——例如把遠端某個服務 port forward 回本地、或維持一條反向隧道讓 NAT 後的機器可被連入。它本身只負責「重連」這個動作，重連後你原本的工作是否還在，取決於你有沒有用多工器把 session 保住。</p>
<p>判讀：autossh 是「基礎設施型」工具，用在你要一條無人值守、掉了要自己回來的隧道；日常互動式登入用 mosh 的漫遊能力更順。兩者不衝突。</p>
<h2 id="網路層機器根本連不到時先解可達性">網路層：機器根本連不到時，先解可達性</h2>
<p>前面的連線工具都假設「遠端機器的 IP 你連得到」。當遠端機器在 NAT 或防火牆後面、沒有公開 IP 時，連不到是可達性問題，要在網路層解，而不是換 SSH 客戶端。WireGuard 是現代的輕量 VPN 協定，讓兩台機器像在同一個私網裡直接互連；Tailscale 建在 WireGuard 之上，把「交換金鑰、打洞穿透 NAT、管理裝置清單」這些麻煩事自動化，通常裝好登入就能讓你的所有裝置互相 SSH，不必自己配 VPN。</p>
<p>判讀：家裡的機器、公司內網的開發機、雲端私網裡的主機，想從外面連進去又不想開公網 port 暴露 SSH，用 Tailscale（要省事）或自建 WireGuard（要完全自主、不依賴第三方協調伺服器）在網路層打通，之後 SSH/mosh 照常用。這一層跟連線層是疊加關係：先有可達性，上面才談連線手感。（機器連不到的診斷——是網路層、服務層還是機器沒起——見<a href="../../../debug/machine-unreachable/">機器連不到或起不來</a>。）</p>
<h2 id="同步層三種語義依-workflow-選">同步層：三種語義，依 workflow 選</h2>
<p>檔案同步不是一個問題，是三種不同語義的問題，挑錯工具會很痛。核心差異在「同步是單向還是雙向、是一次性快照還是持續即時、檔案存在本地還是遠端」。rsync、sshfs、mutagen 各自代表一種語義：</p>
<table>
  <thead>
      <tr>
          <th>工具</th>
          <th>語義</th>
          <th>檔案實際在哪</th>
          <th>適合的 workflow</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>rsync</td>
          <td>單向、一次性快照、增量傳輸</td>
          <td>兩邊各一份</td>
          <td>部署、備份、把成果拉回來</td>
      </tr>
      <tr>
          <td>sshfs</td>
          <td>把遠端目錄掛載成本地路徑</td>
          <td>只在遠端</td>
          <td>偶爾存取遠端檔案、當本地資料夾用</td>
      </tr>
      <tr>
          <td>mutagen</td>
          <td>雙向、持續、即時同步</td>
          <td>兩邊各一份即時</td>
          <td>本地編輯、遠端執行的開發迴圈</td>
      </tr>
  </tbody>
</table>
<h3 id="rsync單向增量部署與拉回成果的正典">rsync：單向增量，部署與拉回成果的正典</h3>
<p>rsync 解的是「把一批檔案有效率地從 A 複製到 B」：它只傳有變動的部分（增量），可保留權限與時間戳，是單向的一次性動作——你下指令、它同步一次、結束。它適合明確的「推上去」或「拉回來」：把本地建好的東西部署到遠端、把遠端跑完的產出拉回本地、定期備份。它不做「持續盯著兩邊、誰改了就同步」，所以拿它當即時開發同步用會很累（每次改都要手動跑）。</p>
<p>因為單向且明確，rsync 也是三者裡最可預測、最不會意外覆蓋的——你清楚知道哪邊是來源、哪邊被更新。無人值守的成果回收（遠端跑完長任務、把結果 rsync 回本地）用它最穩。</p>
<h3 id="sshfs把遠端目錄當本地資料夾掛載">sshfs：把遠端目錄當本地資料夾掛載</h3>
<p>sshfs 解的是「我想用本地的工具存取遠端的檔案、但不想先複製下來」：它透過 SSH 把遠端目錄掛載成本地的一個路徑，你用本地的編輯器、檔案管理員直接開，實際檔案仍只在遠端。適合偶爾存取、檔案不宜落地到本地的場景。</p>
<p>它的代價是脆與慢：每次存取都走網路，延遲高時開大目錄、跑 <code>git status</code> 這種大量小檔操作會很卡；連線一斷，掛載點就進入壞狀態要重掛。所以 sshfs 適合「輕度、偶爾」的遠端存取，不適合當重度開發的主力——重度開發本地要有一份真的檔案，那是 mutagen 的場景。</p>
<h3 id="mutagen雙向即時本地編輯遠端執行的開發迴圈">mutagen：雙向即時，本地編輯遠端執行的開發迴圈</h3>
<p>mutagen 解的是現代遠端開發最常見的迴圈：「在本地用順手的編輯器改、在遠端（有算力、有環境、有相依）執行」，它在兩邊各保留一份實體檔案並持續雙向即時同步——你本地存檔，遠端幾乎同時更新；遠端產生的檔案也同步回本地。因為兩邊都是本地檔案，<code>git status</code>、搜尋、建置都快，沒有 sshfs 那種每次存取走網路的黏滯。</p>
<p>它的代價是多一個常駐同步 daemon 與初次設定，且雙向同步要處理衝突（兩邊同時改同一檔）。適合「本地機器弱/環境不對、但要在強遠端上跑」的長期開發關係。如果你的需求只是「偶爾拉個檔」，mutagen 是殺雞用牛刀，rsync 或 sshfs 更省。</p>
<h2 id="ide-remote把編輯器的執行環境整個搬到遠端">IDE remote：把編輯器的執行環境整個搬到遠端</h2>
<p>VS Code Remote（SSH/Containers/WSL）與 JetBrains Gateway 是另一條路線：它們不同步檔案，而是把編輯器的後端（語言伺服器、終端機、除錯器）整個跑在遠端，本地只留 UI。你在本地視窗編輯，但索引、建置、執行全發生在遠端那台機器上，檔案也只在遠端。這解掉了同步的衝突問題（沒有兩份檔案要對齊），代價是綁定該編輯器、且需要一條夠穩的連線維持 UI 與後端的通訊。</p>
<p>判讀：如果你本來就用 VS Code / JetBrains，remote 模式通常比自己接 mutagen + SSH 更省事、體驗更整合；如果你用終端機編輯器（Vim/Neovim/Emacs）或要編輯器無關的方案，走 mutagen（雙向同步）或直接在遠端多工器裡編輯（檔案只在遠端、靠多工器保住 session）。</p>
<h2 id="在-arch-上的安裝與依賴實測-aarch64">在 Arch 上的安裝與依賴（實測 aarch64）</h2>
<p>這些工具多數在官方 repo，但有幾個安裝陷阱與部署前提是實機才看得出來的，選好工具後要一起確認：</p>
<ul>
<li><strong>mosh</strong>：官方 repo（<code>pacman -S mosh</code>）。同一套件同時含 client（<code>mosh</code>）與 server（<code>mosh-server</code>），所以<strong>遠端機器也要裝 mosh</strong>——遠端是別人的伺服器時這是前提；另外 UDP 埠範圍（預設 60000–61000）要在防火牆 / security group 放行。</li>
<li><strong>autossh</strong> / <strong>rsync</strong> / <strong>sshfs</strong>：都在官方 repo（<code>pacman -S autossh rsync sshfs</code>）。<code>sshfs</code> 會自動拉 <code>fuse3</code> 相依，不用手動裝 FUSE；掛載需要 <code>/dev/fuse</code> 可存取（一般環境已就緒）。</li>
<li><strong>tailscale</strong>：官方 repo（<code>pacman -S tailscale</code>），但<strong>裝完 daemon 預設沒起</strong>——要 <code>sudo systemctl enable --now tailscaled</code> 之後才能 <code>tailscale up</code>。少了這步，<code>tailscale</code> 指令會因 daemon 未運行而失敗。</li>
<li><strong>wireguard</strong>：裝 <code>wireguard-tools</code>（<code>wg</code> / <code>wg-quick</code>）。核心模組在多數發行版是 loadable module，<code>wg-quick</code> 會在需要時自動 <code>modprobe wireguard</code>，日常不用手動處理。</li>
<li><strong>mutagen</strong>：<strong>不在官方 repo</strong>，且 <code>pacman -S mutagen</code> 會裝到完全無關的 <code>python-mutagen</code>（音訊 metadata 函式庫）。正確安裝是 AUR 的 <code>mutagen.io-bin</code>（<code>paru -S mutagen.io-bin</code>），提供 <code>mutagen</code> 執行檔，aarch64 有官方 binary。這是「以為一句 pacman 就有、實際會裝錯東西」的典型坑。</li>
<li><strong>VS Code Remote / JetBrains Gateway</strong>：綁各自的 IDE，不透過套件管理器單獨裝，隨 IDE 的 remote 擴充啟用。</li>
</ul>
<h2 id="依情境選">依情境選</h2>
<p>把上面的工具對回你的實際處境：</p>
<ul>
<li><strong>日常從筆電連遠端、常換網路</strong>：mosh（漫遊）+ 多工器（保 session）。</li>
<li><strong>要一條長期自動維持的隧道 / 反向連接</strong>：autossh + 多工器。</li>
<li><strong>遠端機器在 NAT 後、根本連不到</strong>：先用 Tailscale 或 WireGuard 在網路層打通，再照常 SSH/mosh。</li>
<li><strong>部署上去、或把遠端跑完的成果拉回來</strong>：rsync（單向、可預測）。</li>
<li><strong>偶爾存取遠端幾個檔、不想複製下來</strong>：sshfs（掛載）。</li>
<li><strong>本地編輯、遠端執行的長期開發迴圈</strong>：mutagen（雙向即時）或你的 IDE 的 remote 模式。</li>
<li><strong>無人值守跑長任務、跑完自動回收成果</strong>：多工器保住任務 + rsync 拉回產出，見<a href="../../../install/unattended-remote-work/">讓機器跑無人值守的長任務</a>。</li>
</ul>
<p>判準是先分清「你缺的是連線存活、可達性、還是檔案一致」，再在對應那一層挑工具——三層各挑各的，不要拿同步工具去解連線問題。</p>
<h2 id="下一步">下一步</h2>
<ul>
<li>保住遠端 session 的多工器（tmux / zellij）配置與比較：<a href="../">遠端工具總覽</a> 與 <a href="../../cli/">CLI 環境工具</a> 的多工器篇。</li>
<li>連不上、終端機噴亂碼、要從 SSH 操控圖形桌面等連線本身的問題：<a href="../../../debug/ssh-and-terminal-troubleshooting/">除錯與診斷：遠端連線與終端機問題</a>。</li>
<li>機器完全沒回應、域名解析不了、虛擬機起不來：<a href="../../../debug/machine-unreachable/">機器連不到或起不來</a>。</li>
<li>把遠端機器設成無人值守、離開後自己跑完長任務送回成果：<a href="../../../install/unattended-remote-work/">讓機器跑無人值守的長任務</a>。</li>
</ul>
]]></content:encoded></item><item><title>圖形桌面工具</title><link>https://tarrragon.github.io/blog/linux/tools/gui/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/gui/</guid><description>&lt;p>有圖形環境時，桌面應用的選擇跟 CLI 工具是不同的判斷：同一個功能（檔案管理、桌面 shell）不同實作拖進來的相依可以差一個數量級，因為有些應用假設某個桌面環境的服務就在旁邊、有些刻意做成桌面無關的獨立程式。在 Hyprland 這類不預設桌面環境的 window manager 上，「加一個 GUI app 的真正成本是它的相依樹」這個判斷特別重要。&lt;/p>
&lt;p>這個系列講的不只是「有哪些桌面工具」，而是選它們時該看什麼：相依足跡、桌面環境耦合、功能相依（掛載 / 縮圖 / 網路這些側欄功能背後各是一個額外套件）。&lt;/p>
&lt;h2 id="文章">文章&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>文章&lt;/th>
 &lt;th>主題&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="desktop-environment-selection/">桌面環境選型：整合度與組裝自由度的取捨&lt;/a>&lt;/td>
 &lt;td>GNOME / KDE / Hyprland / XFCE / Cinnamon 的定位、資源與客製代價、Wayland 判斷&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="gui-file-manager-dependencies/">加圖形檔案管理員：依賴足跡與桌面環境耦合&lt;/a>&lt;/td>
 &lt;td>Thunar / PCManFM-Qt / Nemo 的相依樹實測對照、gvfs 與縮圖的功能相依、選型判準&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="相關">相關&lt;/h2>
&lt;ul>
&lt;li>純終端機下的檔案管理器（&lt;code>yazi&lt;/code> / &lt;code>broot&lt;/code> / &lt;code>ranger&lt;/code>）是另一條路，見 &lt;a href="../cli/">CLI 環境工具&lt;/a> 的檔案管理器段。&lt;/li>
&lt;li>桌面環境本身（GNOME / KDE / Hyprland）怎麼選、各自的擴充生態，見 &lt;a href="desktop-environment-selection/">桌面環境選型&lt;/a>；選了 Hyprland 之後怎麼組裝，見 &lt;a href="https://tarrragon.github.io/blog/linux/dotfile/06-rice-design/" data-link-title="模組六：桌面 Rice 設計" data-link-desc="Hyprland 桌面從能用到好看好用 — 狀態列、啟動器、通知、鎖屏、配色系統的設計與配置">Dotfile 管理：桌面 Rice 設計&lt;/a>。&lt;/li>
&lt;li>在圖形桌面上安裝這些工具前的環境與相依判讀，跟 &lt;a href="../../debug/">除錯與診斷&lt;/a> 的權威狀態紀律同源。&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>有圖形環境時，桌面應用的選擇跟 CLI 工具是不同的判斷：同一個功能（檔案管理、桌面 shell）不同實作拖進來的相依可以差一個數量級，因為有些應用假設某個桌面環境的服務就在旁邊、有些刻意做成桌面無關的獨立程式。在 Hyprland 這類不預設桌面環境的 window manager 上，「加一個 GUI app 的真正成本是它的相依樹」這個判斷特別重要。</p>
<p>這個系列講的不只是「有哪些桌面工具」，而是選它們時該看什麼：相依足跡、桌面環境耦合、功能相依（掛載 / 縮圖 / 網路這些側欄功能背後各是一個額外套件）。</p>
<h2 id="文章">文章</h2>
<table>
  <thead>
      <tr>
          <th>文章</th>
          <th>主題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="desktop-environment-selection/">桌面環境選型：整合度與組裝自由度的取捨</a></td>
          <td>GNOME / KDE / Hyprland / XFCE / Cinnamon 的定位、資源與客製代價、Wayland 判斷</td>
      </tr>
      <tr>
          <td><a href="gui-file-manager-dependencies/">加圖形檔案管理員：依賴足跡與桌面環境耦合</a></td>
          <td>Thunar / PCManFM-Qt / Nemo 的相依樹實測對照、gvfs 與縮圖的功能相依、選型判準</td>
      </tr>
  </tbody>
</table>
<h2 id="相關">相關</h2>
<ul>
<li>純終端機下的檔案管理器（<code>yazi</code> / <code>broot</code> / <code>ranger</code>）是另一條路，見 <a href="../cli/">CLI 環境工具</a> 的檔案管理器段。</li>
<li>桌面環境本身（GNOME / KDE / Hyprland）怎麼選、各自的擴充生態，見 <a href="desktop-environment-selection/">桌面環境選型</a>；選了 Hyprland 之後怎麼組裝，見 <a href="/blog/linux/dotfile/06-rice-design/" data-link-title="模組六：桌面 Rice 設計" data-link-desc="Hyprland 桌面從能用到好看好用 — 狀態列、啟動器、通知、鎖屏、配色系統的設計與配置">Dotfile 管理：桌面 Rice 設計</a>。</li>
<li>在圖形桌面上安裝這些工具前的環境與相依判讀，跟 <a href="../../debug/">除錯與診斷</a> 的權威狀態紀律同源。</li>
</ul>
]]></content:encoded></item><item><title>在 Hyprland 加圖形檔案管理員：依賴足跡與桌面環境耦合</title><link>https://tarrragon.github.io/blog/linux/tools/gui/gui-file-manager-dependencies/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/gui/gui-file-manager-dependencies/</guid><description>&lt;p>在一個最小化的 Hyprland 環境加一個圖形應用，真正的成本不是那個 app 本身，是它拖進來的相依樹。Hyprland 這類 window manager 刻意不預設桌面環境，所以你手上是一台「只有合成器、沒有 GNOME/KDE/Cinnamon 那層服務」的機器。這時候裝一個看似單純的圖形檔案管理員，不同實作拖進來的東西可以差一個數量級——因為有些檔案管理員假設某個桌面環境的服務就在旁邊，有些則刻意做成桌面無關的獨立程式。&lt;/p>
&lt;p>這篇用「圖形檔案管理員」當具體案例，但判讀方式適用於任何你想加進最小環境的桌面 app：先看它的相依樹拖進什麼，再決定值不值得。&lt;/p>
&lt;h2 id="三種實作的實測相依">三種實作的實測相依&lt;/h2>
&lt;p>同樣是「有側欄、有選單、能瀏覽掛載裝置」的圖形檔案管理員，三個主流實作在一台已有 GTK3 的 Arch ARM 機器上，各自會&lt;strong>新裝&lt;/strong>的套件數量如下（&lt;code>pacman -S --needed --print&lt;/code> 實測）：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>檔案管理員&lt;/th>
 &lt;th>出身&lt;/th>
 &lt;th>新裝套件數&lt;/th>
 &lt;th>會拖進的關鍵相依&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>Thunar&lt;/td>
 &lt;td>XFCE&lt;/td>
 &lt;td>8&lt;/td>
 &lt;td>xfce4 基礎庫（exo、libxfce4util/ui、xfconf、startup-notification、libgtop）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>PCManFM-Qt&lt;/td>
 &lt;td>LXQt&lt;/td>
 &lt;td>7&lt;/td>
 &lt;td>libfm-qt、layer-shell-qt、menu-cache、lxqt-menu-data&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Nemo&lt;/td>
 &lt;td>Cinnamon&lt;/td>
 &lt;td>36&lt;/td>
 &lt;td>cinnamon-desktop、xapp、整套 gvfs + udisks2（libblockdev 主 + 8 子模組、mdadm、parted…）&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>差異的來源不是「檔案管理員本身多大」，Thunar 跟 Nemo 的主程式都在 7–10 MB 量級。差的是後面那條相依鏈。&lt;/p>
&lt;h3 id="thunar-與-pcmanfm-qt桌面無關的獨立程式">Thunar 與 PCManFM-Qt：桌面無關的獨立程式&lt;/h3>
&lt;p>Thunar 與 PCManFM-Qt 都是刻意做成「不依賴完整桌面環境」的檔案管理員。Thunar 雖然出身 XFCE，但它拖進的 8 個套件是 XFCE 的&lt;strong>基礎函式庫&lt;/strong>（設定系統 xfconf、工具庫 libxfce4util、UI 庫 libxfce4ui），不是 XFCE 桌面本身——你不會因此裝到 XFCE 的面板、視窗管理器或 session。PCManFM-Qt 走 Qt 棧，帶的 &lt;code>layer-shell-qt&lt;/code> 反而是 Wayland 原生整合的加分項。這兩個裝下去，機器還是那台只有 Hyprland 的機器，只是多了一個能開的檔案管理員。&lt;/p>
&lt;h3 id="nemo為-cinnamon-而生假設-cinnamon-在旁邊">Nemo：為 Cinnamon 而生，假設 Cinnamon 在旁邊&lt;/h3>
&lt;p>Nemo 是 Cinnamon 桌面的檔案管理員，它的相依反映了這個出身：&lt;code>cinnamon-desktop&lt;/code> 提供背景與顯示設定的整合、&lt;code>xapp&lt;/code> 是 Cinnamon 系列跨桌面的整合層。即使你只想要「開一個視窗看檔案」，這些桌面元件也會一起裝上，因為 Nemo 在程式碼層面就假設它們存在。這不是 Nemo 寫得差，是它本來就不是設計給「裸 window manager」用的——它預期自己跑在 Cinnamon session 裡。&lt;/p>
&lt;p>Nemo 那 36 個套件裡，還有一大塊來自它把 &lt;code>gvfs&lt;/code> 列成硬相依（下一節說明 gvfs 是什麼），而 gvfs 又拖進整套磁碟管理棧（udisks2、libblockdev 的 8 個子模組、mdadm、parted、volume_key）。所以 Nemo 的相依樹是「Cinnamon 桌面元件」加「完整磁碟/檔案系統管理」兩層疊起來的結果。&lt;/p>
&lt;h2 id="gvfs側欄那些功能不是檔案管理員自己做的">gvfs：側欄那些功能不是檔案管理員自己做的&lt;/h2>
&lt;p>截圖裡檔案管理員側欄常見的「Devices（掛載裝置）」「Network（瀏覽網路芳鄰）」「Trash（垃圾桶）」，多半不是檔案管理員自己實作的，是 &lt;strong>gvfs（GNOME Virtual File System）&lt;/strong> 這個後端提供的。gvfs 用一層虛擬檔案系統把「掛載 USB 隨身碟」「連 SMB 網路分享」「把檔案丟垃圾桶」這些操作抽象成統一介面，讓檔案管理員不必自己處理每一種裝置與協定。&lt;/p>
&lt;p>這帶出一個重要判讀：&lt;strong>輕量不是免費的，當功能對等時，相依會靠攏。&lt;/strong> Thunar 與 PCManFM-Qt 把 gvfs 列成 optional dependency——不裝也能開檔案管理員，但側欄就沒有掛載、垃圾桶、網路那些功能。要讓輕量檔案管理員有截圖裡那種完整側欄，你得自己補 gvfs，而補上 gvfs 就會連帶拖進它的相依（udisks2、polkit、fuse3、libsecret 等）。Nemo 把 gvfs 設成硬相依，只是把這個選擇替你做了。&lt;/p>
&lt;p>所以公平的比較不是「Thunar 8 個 vs Nemo 36 個」，而是「Thunar + gvfs + 縮圖 vs Nemo」。補齊功能後，Thunar 這條路線仍然省下的是 Nemo 獨有的那層——&lt;code>cinnamon-desktop&lt;/code>、&lt;code>xapp&lt;/code>、&lt;code>xapp-symbolic-icons&lt;/code> 這些桌面環境耦合元件。那層，才是「為了一個檔案管理員裝半個 Cinnamon」真正可以省掉的部分。&lt;/p>
&lt;h2 id="tumbler縮圖也是一個額外套件">tumbler：縮圖也是一個額外套件&lt;/h2>
&lt;p>檔案管理員顯示圖片/影片縮圖，同樣不是內建的，靠的是縮圖服務。Thunar 家族用 &lt;code>tumbler&lt;/code>，影片縮圖再另外需要 &lt;code>ffmpegthumbnailer&lt;/code>。這是「一個功能對應一個額外套件」的又一個例子——最小環境裡，縮圖、掛載、網路瀏覽每一項都是你明確選擇要不要付相依成本的功能，而不是預設就有。&lt;/p>
&lt;h2 id="wayland--hyprland-下的注意事項">Wayland / Hyprland 下的注意事項&lt;/h2>
&lt;p>這些檔案管理員多數是 X11 時代的 GTK/Qt 程式，在 Wayland 下會透過 XWayland 或原生 Wayland 後端執行。PCManFM-Qt 帶的 &lt;code>layer-shell-qt&lt;/code> 是 Wayland 的 layer-shell 整合；GTK 的 Thunar/Nemo 在 Wayland 下一般走 GTK 自己的 Wayland 後端。開啟/儲存檔案對話框、拖放、縮圖預覽在裸 Hyprland（沒有完整 portal 服務）下的實際行為，取決於有沒有裝 &lt;code>xdg-desktop-portal&lt;/code> 與對應的後端。&lt;/p></description><content:encoded><![CDATA[<p>在一個最小化的 Hyprland 環境加一個圖形應用，真正的成本不是那個 app 本身，是它拖進來的相依樹。Hyprland 這類 window manager 刻意不預設桌面環境，所以你手上是一台「只有合成器、沒有 GNOME/KDE/Cinnamon 那層服務」的機器。這時候裝一個看似單純的圖形檔案管理員，不同實作拖進來的東西可以差一個數量級——因為有些檔案管理員假設某個桌面環境的服務就在旁邊，有些則刻意做成桌面無關的獨立程式。</p>
<p>這篇用「圖形檔案管理員」當具體案例，但判讀方式適用於任何你想加進最小環境的桌面 app：先看它的相依樹拖進什麼，再決定值不值得。</p>
<h2 id="三種實作的實測相依">三種實作的實測相依</h2>
<p>同樣是「有側欄、有選單、能瀏覽掛載裝置」的圖形檔案管理員，三個主流實作在一台已有 GTK3 的 Arch ARM 機器上，各自會<strong>新裝</strong>的套件數量如下（<code>pacman -S --needed --print</code> 實測）：</p>
<table>
  <thead>
      <tr>
          <th>檔案管理員</th>
          <th>出身</th>
          <th>新裝套件數</th>
          <th>會拖進的關鍵相依</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Thunar</td>
          <td>XFCE</td>
          <td>8</td>
          <td>xfce4 基礎庫（exo、libxfce4util/ui、xfconf、startup-notification、libgtop）</td>
      </tr>
      <tr>
          <td>PCManFM-Qt</td>
          <td>LXQt</td>
          <td>7</td>
          <td>libfm-qt、layer-shell-qt、menu-cache、lxqt-menu-data</td>
      </tr>
      <tr>
          <td>Nemo</td>
          <td>Cinnamon</td>
          <td>36</td>
          <td>cinnamon-desktop、xapp、整套 gvfs + udisks2（libblockdev 主 + 8 子模組、mdadm、parted…）</td>
      </tr>
  </tbody>
</table>
<p>差異的來源不是「檔案管理員本身多大」，Thunar 跟 Nemo 的主程式都在 7–10 MB 量級。差的是後面那條相依鏈。</p>
<h3 id="thunar-與-pcmanfm-qt桌面無關的獨立程式">Thunar 與 PCManFM-Qt：桌面無關的獨立程式</h3>
<p>Thunar 與 PCManFM-Qt 都是刻意做成「不依賴完整桌面環境」的檔案管理員。Thunar 雖然出身 XFCE，但它拖進的 8 個套件是 XFCE 的<strong>基礎函式庫</strong>（設定系統 xfconf、工具庫 libxfce4util、UI 庫 libxfce4ui），不是 XFCE 桌面本身——你不會因此裝到 XFCE 的面板、視窗管理器或 session。PCManFM-Qt 走 Qt 棧，帶的 <code>layer-shell-qt</code> 反而是 Wayland 原生整合的加分項。這兩個裝下去，機器還是那台只有 Hyprland 的機器，只是多了一個能開的檔案管理員。</p>
<h3 id="nemo為-cinnamon-而生假設-cinnamon-在旁邊">Nemo：為 Cinnamon 而生，假設 Cinnamon 在旁邊</h3>
<p>Nemo 是 Cinnamon 桌面的檔案管理員，它的相依反映了這個出身：<code>cinnamon-desktop</code> 提供背景與顯示設定的整合、<code>xapp</code> 是 Cinnamon 系列跨桌面的整合層。即使你只想要「開一個視窗看檔案」，這些桌面元件也會一起裝上，因為 Nemo 在程式碼層面就假設它們存在。這不是 Nemo 寫得差，是它本來就不是設計給「裸 window manager」用的——它預期自己跑在 Cinnamon session 裡。</p>
<p>Nemo 那 36 個套件裡，還有一大塊來自它把 <code>gvfs</code> 列成硬相依（下一節說明 gvfs 是什麼），而 gvfs 又拖進整套磁碟管理棧（udisks2、libblockdev 的 8 個子模組、mdadm、parted、volume_key）。所以 Nemo 的相依樹是「Cinnamon 桌面元件」加「完整磁碟/檔案系統管理」兩層疊起來的結果。</p>
<h2 id="gvfs側欄那些功能不是檔案管理員自己做的">gvfs：側欄那些功能不是檔案管理員自己做的</h2>
<p>截圖裡檔案管理員側欄常見的「Devices（掛載裝置）」「Network（瀏覽網路芳鄰）」「Trash（垃圾桶）」，多半不是檔案管理員自己實作的，是 <strong>gvfs（GNOME Virtual File System）</strong> 這個後端提供的。gvfs 用一層虛擬檔案系統把「掛載 USB 隨身碟」「連 SMB 網路分享」「把檔案丟垃圾桶」這些操作抽象成統一介面，讓檔案管理員不必自己處理每一種裝置與協定。</p>
<p>這帶出一個重要判讀：<strong>輕量不是免費的，當功能對等時，相依會靠攏。</strong> Thunar 與 PCManFM-Qt 把 gvfs 列成 optional dependency——不裝也能開檔案管理員，但側欄就沒有掛載、垃圾桶、網路那些功能。要讓輕量檔案管理員有截圖裡那種完整側欄，你得自己補 gvfs，而補上 gvfs 就會連帶拖進它的相依（udisks2、polkit、fuse3、libsecret 等）。Nemo 把 gvfs 設成硬相依，只是把這個選擇替你做了。</p>
<p>所以公平的比較不是「Thunar 8 個 vs Nemo 36 個」，而是「Thunar + gvfs + 縮圖 vs Nemo」。補齊功能後，Thunar 這條路線仍然省下的是 Nemo 獨有的那層——<code>cinnamon-desktop</code>、<code>xapp</code>、<code>xapp-symbolic-icons</code> 這些桌面環境耦合元件。那層，才是「為了一個檔案管理員裝半個 Cinnamon」真正可以省掉的部分。</p>
<h2 id="tumbler縮圖也是一個額外套件">tumbler：縮圖也是一個額外套件</h2>
<p>檔案管理員顯示圖片/影片縮圖，同樣不是內建的，靠的是縮圖服務。Thunar 家族用 <code>tumbler</code>，影片縮圖再另外需要 <code>ffmpegthumbnailer</code>。這是「一個功能對應一個額外套件」的又一個例子——最小環境裡，縮圖、掛載、網路瀏覽每一項都是你明確選擇要不要付相依成本的功能，而不是預設就有。</p>
<h2 id="wayland--hyprland-下的注意事項">Wayland / Hyprland 下的注意事項</h2>
<p>這些檔案管理員多數是 X11 時代的 GTK/Qt 程式，在 Wayland 下會透過 XWayland 或原生 Wayland 後端執行。PCManFM-Qt 帶的 <code>layer-shell-qt</code> 是 Wayland 的 layer-shell 整合；GTK 的 Thunar/Nemo 在 Wayland 下一般走 GTK 自己的 Wayland 後端。開啟/儲存檔案對話框、拖放、縮圖預覽在裸 Hyprland（沒有完整 portal 服務）下的實際行為，取決於有沒有裝 <code>xdg-desktop-portal</code> 與對應的後端。</p>
<blockquote>
<p><strong>[待實機驗證]</strong> 以下行為尚未在本系列的 Hyprland 實機環境確認，先標記待驗證：(1) Thunar 補上 gvfs 後，側欄的 Devices/Network/Trash 是否如預期出現並可用；(2) tumbler + ffmpegthumbnailer 的縮圖在 Wayland 下是否正常產生；(3) 三者在裸 Hyprland（無完整桌面 portal）下的檔案對話框與拖放行為；(4) Nemo 在沒有 Cinnamon session 的情況下，桌面圖示、設定整合等功能是否失效或報錯。這些是「相依裝了之後實際好不好用」的問題，相依數量本身（上表）已是實測確定值。</p></blockquote>
<h2 id="風險與注意事項">風險與注意事項</h2>
<p><strong>移除後的孤兒套件</strong>：裝了 Nemo 再反悔移除時，<code>cinnamon-desktop</code>、<code>xapp</code> 那一票被拖進來的相依會變成沒人依賴的孤兒（<code>pacman -Qtd</code> 可列出）。用 <code>pacman -Rns nemo</code> 移除時帶走遞迴相依，或定期清孤兒，否則那半個 Cinnamon 會留在系統裡。輕量檔案管理員因為拖進的東西少，這個問題也小。</p>
<p><strong>桌面環境服務未跑的副作用</strong>：把為某個桌面環境寫的 app 裝進裸 window manager，它預期的那些服務不在時，部分功能可能靜默失效或在啟動時報錯。這類問題不會在相依解析階段出現——套件裝得起來，是執行時才發現某個整合功能沒作用。（Nemo 在無 Cinnamon 下的具體表現，見上方待驗證項。）</p>
<p><strong>選型判準</strong>：最小化的 Hyprland 想要一個圖形檔案管理員，優先考慮桌面無關的 Thunar 或 PCManFM-Qt；需要截圖那種完整側欄功能時，明確補上 <code>gvfs</code>（掛載/垃圾桶/網路）與 <code>tumbler</code>（縮圖），把相依成本花在你真的要用的功能上。以 Thunar 為例，完整一套是 <code>pacman -S thunar gvfs tumbler ffmpegthumbnailer</code>（<code>gvfs</code> 給掛載/垃圾桶/網路、<code>tumbler</code> + <code>ffmpegthumbnailer</code> 給圖片與影片縮圖）。除非你本來就跑 Cinnamon，否則不建議為了單一檔案管理員把 Nemo 的整套桌面元件裝進來——那是付了桌面環境耦合的代價，卻沒用到那個桌面環境。</p>
<h2 id="待實機驗證清單">待實機驗證清單</h2>
<p>這篇的相依數量與相依樹是實測確定的；以下「裝了之後實際體驗」的部分待在 Hyprland 實機補驗證：</p>
<ul>
<li>Thunar + gvfs + tumbler + ffmpegthumbnailer 的完整側欄與縮圖行為</li>
<li>三種檔案管理員在裸 Hyprland（XWayland vs 原生 Wayland、portal 有無）下的差異</li>
<li>Nemo 脫離 Cinnamon session 的功能缺損範圍</li>
<li>加進 <code>packages-arch.txt</code> 後，bootstrap 一鍵安裝這條路線的實際落地結果</li>
</ul>
<h2 id="為什麼拿-nemo-當重的代表">為什麼拿 Nemo 當「重」的代表</h2>
<p>上表用 Nemo 當桌面環境耦合的代表，是因為它把耦合展示得最乾淨——<code>cinnamon-desktop</code> + <code>xapp</code> 那層桌面元件加上 gvfs 硬相依，剛好對照出 Thunar / PCManFM-Qt 省掉的是什麼。但它不是最重的：GNOME 的 Nautilus（<code>nautilus</code>）與 KDE 的 Dolphin（<code>dolphin</code>）是更 canonical 的「裝檔案管理員就拖進半個桌面」例子。Nautilus 深度綁 GNOME 的 GTK4 / libadwaita / tracker 索引棧，在非 GNOME 環境裝它會拉進一串 GNOME 平台庫；Dolphin 綁 KDE 的 Frameworks（KIO、Baloo 等），在非 KDE 環境同理。判讀方式跟 Nemo 一節相同：檔案管理員的相依樹反映它預期跑在哪個桌面裡。真要在裸 Hyprland 上驗，<code>pacman -S --needed --print nautilus</code> / <code>dolphin</code> 會列出各自那串平台庫——數量通常比 Nemo 更可觀（實測 Nautilus 72、Dolphin 91，約 Nemo 的 2 到 2.5 倍）。</p>
<h2 id="零相依對照純終端機檔案管理員">零相依對照：純終端機檔案管理員</h2>
<p>如果你在意的正是相依足跡，還有一條完全繞開圖形棧的路：終端機檔案管理員（<code>yazi</code> / <code>lf</code> / <code>nnn</code> / <code>ranger</code>）在終端機裡跑，不需要 GTK / Qt / gvfs / 桌面環境那一整套。<code>yazi</code>（Rust、內建預覽與非同步 I/O）與 <code>lf</code>、<code>nnn</code>（C、極小）在裸 Hyprland 或純 SSH 環境下都是近乎零額外相依的選擇——你已經有終端機，它們就能跑。代價是純鍵盤操作、沒有圖形檔案管理員那種拖放與縮圖牆。這是「圖形 vs 終端機」的取捨，不是同一條路上的輕重之分：要滑鼠拖放、縮圖預覽走圖形檔案管理員；要零相依、鍵盤流、SSH 下也能用走 TUI。TUI 檔案管理員的比較見 <a href="../../cli/file-manager-tuis/">CLI 環境工具的檔案管理器 TUI</a>。</p>
<h2 id="下一步">下一步</h2>
<ul>
<li>這篇談的是「加桌面 app 時怎麼判讀相依成本」，套件清單本身怎麼設計、怎麼被 bootstrap 一鍵安裝，見 <a href="/blog/linux/dotfile/08-sync-bootstrap/bootstrap-script-packages/" data-link-title="Bootstrap Script 與套件清單管理" data-link-desc="寫 dotfile 的 install script、或整理「這台機器裝了什麼」的套件清單時回來讀">模組八：Bootstrap script 與套件清單</a>。</li>
<li>Hyprland 本體與配套工具的安裝，見 <a href="/blog/linux/dotfile/05-hyprland-config/hyprland-installation/" data-link-title="Hyprland 安裝與環境建置" data-link-desc="要在 Arch Linux 上從零安裝 Hyprland 桌面環境時回來讀">模組五：安裝與環境建置</a>。</li>
<li>這台 Hyprland 是在 VM 上建起來測的，VM 能測什麼、什麼要留到實機，見 <a href="/blog/linux/dotfile/05-hyprland-config/hyprland-vm-setup/" data-link-title="Hyprland VM 環境設定與測試矩陣" data-link-desc="要在 VM 裡測試 Hyprland 配置、或判斷某個設定該在 VM 還是實機驗證時回來讀">VM 環境設定與測試矩陣</a>。</li>
</ul>
]]></content:encoded></item><item><title>Linux 工具選單</title><link>https://tarrragon.github.io/blog/linux/tools/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/</guid><description>&lt;p>Linux 靈活的代價是選擇太多：同一件事往往有一堆工具，同一類桌面也有多種版本與各自的擴充。知道「有哪些選擇、在什麼情境該用哪個」本身就是一種能力。這個系列把常見情境的工具選項整理出來——不只列出名字，而是講清楚每個工具解什麼問題、跟預設工具（如 &lt;code>grep&lt;/code>、&lt;code>find&lt;/code>）差在哪、什麼情境值得換。&lt;/p>
&lt;p>工具依使用環境分三組，因為同一個需求在不同環境下的可用工具與取捨不同：&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>環境&lt;/th>
 &lt;th>涵蓋&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="cli/">CLI 環境工具&lt;/a>&lt;/td>
 &lt;td>純終端機下的工具：搜尋、檔案、監控、Git、資料庫、日誌等的現代替代品&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="gui/">圖形桌面工具&lt;/a>&lt;/td>
 &lt;td>有圖形環境時的桌面應用：檔案管理員、桌面環境與擴充，以及它們的依賴取捨&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="remote/">遠端工具&lt;/a>&lt;/td>
 &lt;td>遠端操作專用：終端機多工器、連線與同步、把長任務留在遠端跑&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="為什麼把工具當成選項來教">為什麼把工具當成「選項」來教&lt;/h2>
&lt;p>以搜尋為例：多數教材教 &lt;code>grep&lt;/code> 跟 &lt;code>find&lt;/code>，但實務上很多開發者改用 &lt;code>ripgrep&lt;/code>（&lt;code>rg&lt;/code>）跟 &lt;code>fd&lt;/code>——更快、預設尊重 &lt;code>.gitignore&lt;/code>、輸出更好讀；互動式搜尋再加 &lt;code>fzf&lt;/code>。不同情境有更省力的選擇，&lt;code>grep&lt;/code> 本身並沒有錯。把工具當成「有取捨的選項」來認識，你才能在對的情境挑對工具，而不是永遠只會預設的那個。&lt;/p>
&lt;p>同理，圖形桌面下要一個檔案管理員，Thunar、PCManFM-Qt、Nemo 各有相依與桌面耦合的取捨；桌面環境本身也有 GNOME/KDE/Hyprland 等多種版本，各自還有可擴充的元件。這些「選項」的判讀，正是這個系列要補的。&lt;/p>
&lt;h2 id="在其他情境的落點">在其他情境的落點&lt;/h2>
&lt;p>工具選擇不是孤立的，它接在具體任務上：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="../install/">安裝與機器初始化&lt;/a>——新機器要裝哪些工具、進 dotfile 套件清單一次裝齊。&lt;/li>
&lt;li>&lt;a href="../debug/">除錯與診斷&lt;/a>——除錯用的診斷工具（&lt;code>busctl&lt;/code> / &lt;code>journalctl&lt;/code> / &lt;code>ip neigh&lt;/code> 等）在各情境怎麼用。&lt;/li>
&lt;li>&lt;a href="../dotfile/">Dotfile 管理&lt;/a>——選好的工具怎麼把配置檔版控、跨機器同步。&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>Linux 靈活的代價是選擇太多：同一件事往往有一堆工具，同一類桌面也有多種版本與各自的擴充。知道「有哪些選擇、在什麼情境該用哪個」本身就是一種能力。這個系列把常見情境的工具選項整理出來——不只列出名字，而是講清楚每個工具解什麼問題、跟預設工具（如 <code>grep</code>、<code>find</code>）差在哪、什麼情境值得換。</p>
<p>工具依使用環境分三組，因為同一個需求在不同環境下的可用工具與取捨不同：</p>
<table>
  <thead>
      <tr>
          <th>環境</th>
          <th>涵蓋</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="cli/">CLI 環境工具</a></td>
          <td>純終端機下的工具：搜尋、檔案、監控、Git、資料庫、日誌等的現代替代品</td>
      </tr>
      <tr>
          <td><a href="gui/">圖形桌面工具</a></td>
          <td>有圖形環境時的桌面應用：檔案管理員、桌面環境與擴充，以及它們的依賴取捨</td>
      </tr>
      <tr>
          <td><a href="remote/">遠端工具</a></td>
          <td>遠端操作專用：終端機多工器、連線與同步、把長任務留在遠端跑</td>
      </tr>
  </tbody>
</table>
<h2 id="為什麼把工具當成選項來教">為什麼把工具當成「選項」來教</h2>
<p>以搜尋為例：多數教材教 <code>grep</code> 跟 <code>find</code>，但實務上很多開發者改用 <code>ripgrep</code>（<code>rg</code>）跟 <code>fd</code>——更快、預設尊重 <code>.gitignore</code>、輸出更好讀；互動式搜尋再加 <code>fzf</code>。不同情境有更省力的選擇，<code>grep</code> 本身並沒有錯。把工具當成「有取捨的選項」來認識，你才能在對的情境挑對工具，而不是永遠只會預設的那個。</p>
<p>同理，圖形桌面下要一個檔案管理員，Thunar、PCManFM-Qt、Nemo 各有相依與桌面耦合的取捨；桌面環境本身也有 GNOME/KDE/Hyprland 等多種版本，各自還有可擴充的元件。這些「選項」的判讀，正是這個系列要補的。</p>
<h2 id="在其他情境的落點">在其他情境的落點</h2>
<p>工具選擇不是孤立的，它接在具體任務上：</p>
<ul>
<li><a href="../install/">安裝與機器初始化</a>——新機器要裝哪些工具、進 dotfile 套件清單一次裝齊。</li>
<li><a href="../debug/">除錯與診斷</a>——除錯用的診斷工具（<code>busctl</code> / <code>journalctl</code> / <code>ip neigh</code> 等）在各情境怎麼用。</li>
<li><a href="../dotfile/">Dotfile 管理</a>——選好的工具怎麼把配置檔版控、跨機器同步。</li>
</ul>
]]></content:encoded></item><item><title>遠端工具</title><link>https://tarrragon.github.io/blog/linux/tools/remote/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/remote/</guid><description>&lt;p>遠端操作的工具選擇，圍繞一個核心需求：&lt;strong>把工作留在遠端、連線斷了也不掉。&lt;/strong> SSH 連線本身是脆弱的（網路一抖就斷），所以遠端工作的關鍵是「就算斷了，遠端的 session 與長任務還在、重連就接回去」，而非追求連線本身多穩。這一組工具都在解這件事的不同面向。&lt;/p>
&lt;h2 id="核心終端機多工器">核心：終端機多工器&lt;/h2>
&lt;p>遠端工作的地基是終端機多工器（&lt;code>tmux&lt;/code> / &lt;code>zellij&lt;/code>）——它把你的 session 常駐在遠端，SSH 斷了 session 不受影響，重連 &lt;code>attach&lt;/code> 就回到原狀。這也是把長任務交給遠端機器無人值守跑的前提。深入配置與比較見 &lt;a href="../cli/">CLI 環境工具&lt;/a> 裡的多工器篇：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="../cli/tmux-persistence-and-basics/">tmux 持久化與基礎&lt;/a>——最通用的多工器，session 持久化的核心概念。&lt;/li>
&lt;li>&lt;a href="../cli/zellij-pane/">zellij 分頁與 pane&lt;/a>——較新、開箱即用、內建佈局的多工器。&lt;/li>
&lt;li>&lt;a href="../cli/zellij-remote-web-client/">zellij 遠端 web 客戶端&lt;/a>——從瀏覽器連遠端 session 的路徑。&lt;/li>
&lt;/ul>
&lt;h2 id="連線與同步工具">連線與同步工具&lt;/h2>
&lt;p>多工器保住 session 之後，還有兩塊獨立的能力：連線層（怎麼接上遠端、斷了怎麼辦）與同步層（本地與遠端的檔案怎麼一致）。這兩塊各有多個工具、解不同弱點，挑錯會很痛——連線存活、可達性、檔案一致是三層不同的問題。&lt;/p>
&lt;ul>
&lt;li>&lt;a href="connection-and-sync-tools/">遠端連線與同步工具選型&lt;/a>——&lt;code>ssh&lt;/code> / &lt;code>mosh&lt;/code>（漫遊不斷線）/ &lt;code>autossh&lt;/code>（自動重連）、&lt;code>tailscale&lt;/code> / &lt;code>wireguard&lt;/code>（NAT 後可達性）、&lt;code>rsync&lt;/code> / &lt;code>sshfs&lt;/code> / &lt;code>mutagen&lt;/code>（三種同步語義）、IDE remote 模式的定位與取捨。&lt;/li>
&lt;/ul>
&lt;h2 id="低頻寬--手機連線下的介面">低頻寬 / 手機連線下的介面&lt;/h2>
&lt;p>頻寬低或從手機 / 平板連線時，只傳純文字的 TUI 介面（ASCII / Unicode 製圖，不傳影像）最穩。監控、圖表、檔案瀏覽、資料庫操作都有這類工具，整理在 &lt;a href="../cli/">CLI 環境工具&lt;/a>。&lt;/p>
&lt;h2 id="遠端連線與-session-的除錯">遠端連線與 session 的除錯&lt;/h2>
&lt;p>遠端連線本身出問題時（連不上、終端機噴亂碼、要從 SSH 操控圖形桌面），是診斷問題而非工具選擇問題，見 &lt;a href="../../debug/ssh-and-terminal-troubleshooting/">除錯與診斷：遠端連線與終端機問題&lt;/a> 與 &lt;a href="../../debug/machine-unreachable/">機器連不到或起不來&lt;/a>。&lt;/p>
&lt;h2 id="把機器交給遠端無人值守">把機器交給遠端無人值守&lt;/h2>
&lt;p>設好讓遠端機器在你離開後自己跑完長任務、把成果送回來，見 &lt;a href="../../install/unattended-remote-work/">Linux 安裝與機器初始化：讓機器跑無人值守的長任務&lt;/a>。&lt;/p></description><content:encoded><![CDATA[<p>遠端操作的工具選擇，圍繞一個核心需求：<strong>把工作留在遠端、連線斷了也不掉。</strong> SSH 連線本身是脆弱的（網路一抖就斷），所以遠端工作的關鍵是「就算斷了，遠端的 session 與長任務還在、重連就接回去」，而非追求連線本身多穩。這一組工具都在解這件事的不同面向。</p>
<h2 id="核心終端機多工器">核心：終端機多工器</h2>
<p>遠端工作的地基是終端機多工器（<code>tmux</code> / <code>zellij</code>）——它把你的 session 常駐在遠端，SSH 斷了 session 不受影響，重連 <code>attach</code> 就回到原狀。這也是把長任務交給遠端機器無人值守跑的前提。深入配置與比較見 <a href="../cli/">CLI 環境工具</a> 裡的多工器篇：</p>
<ul>
<li><a href="../cli/tmux-persistence-and-basics/">tmux 持久化與基礎</a>——最通用的多工器，session 持久化的核心概念。</li>
<li><a href="../cli/zellij-pane/">zellij 分頁與 pane</a>——較新、開箱即用、內建佈局的多工器。</li>
<li><a href="../cli/zellij-remote-web-client/">zellij 遠端 web 客戶端</a>——從瀏覽器連遠端 session 的路徑。</li>
</ul>
<h2 id="連線與同步工具">連線與同步工具</h2>
<p>多工器保住 session 之後，還有兩塊獨立的能力：連線層（怎麼接上遠端、斷了怎麼辦）與同步層（本地與遠端的檔案怎麼一致）。這兩塊各有多個工具、解不同弱點，挑錯會很痛——連線存活、可達性、檔案一致是三層不同的問題。</p>
<ul>
<li><a href="connection-and-sync-tools/">遠端連線與同步工具選型</a>——<code>ssh</code> / <code>mosh</code>（漫遊不斷線）/ <code>autossh</code>（自動重連）、<code>tailscale</code> / <code>wireguard</code>（NAT 後可達性）、<code>rsync</code> / <code>sshfs</code> / <code>mutagen</code>（三種同步語義）、IDE remote 模式的定位與取捨。</li>
</ul>
<h2 id="低頻寬--手機連線下的介面">低頻寬 / 手機連線下的介面</h2>
<p>頻寬低或從手機 / 平板連線時，只傳純文字的 TUI 介面（ASCII / Unicode 製圖，不傳影像）最穩。監控、圖表、檔案瀏覽、資料庫操作都有這類工具，整理在 <a href="../cli/">CLI 環境工具</a>。</p>
<h2 id="遠端連線與-session-的除錯">遠端連線與 session 的除錯</h2>
<p>遠端連線本身出問題時（連不上、終端機噴亂碼、要從 SSH 操控圖形桌面），是診斷問題而非工具選擇問題，見 <a href="../../debug/ssh-and-terminal-troubleshooting/">除錯與診斷：遠端連線與終端機問題</a> 與 <a href="../../debug/machine-unreachable/">機器連不到或起不來</a>。</p>
<h2 id="把機器交給遠端無人值守">把機器交給遠端無人值守</h2>
<p>設好讓遠端機器在你離開後自己跑完長任務、把成果送回來，見 <a href="../../install/unattended-remote-work/">Linux 安裝與機器初始化：讓機器跑無人值守的長任務</a>。</p>
]]></content:encoded></item><item><title>效能與容量工具清單</title><link>https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/</link><pubDate>Fri, 15 May 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/</guid><description>&lt;p>效能與容量工具清單的核心責任是把工具名稱放回 workload model、saturation discovery、capacity planning 與 production validation 的服務責任。工具頁先回答它降低哪一種風險，再討論 scenario scripting、distributed load、結果保存、CI 整合、成本與案例回寫。&lt;/p>
&lt;h2 id="讀法">讀法&lt;/h2>
&lt;p>效能工具要從問題節點進入。團隊如果缺 workload model，先讀 &lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/workload-modeling/" data-link-title="9.2 Workload Modeling" data-link-desc="把 production traffic shape 翻成可重播的壓測模型">9.2 Workload Modeling&lt;/a>；如果缺 saturation 邊界，先讀 &lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/saturation-discovery/" data-link-title="9.4 Saturation Discovery" data-link-desc="找出 throughput plateau 與 latency knee 的方法">9.4 Saturation Discovery&lt;/a>；如果缺 production 驗證，先讀 &lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/production-validation/" data-link-title="9.10 Production-Side 驗證" data-link-desc="shadow traffic、dark launch、canary、production-like load test">9.10 Production-Side 驗證&lt;/a>。&lt;/p>
&lt;p>工具頁的任務是承接這些問題節點。k6、JMeter、Gatling、Locust 與 Vegeta 都能產生負載，但它們在腳本語言、protocol 覆蓋、分散式執行、CI integration、報表與團隊學習成本上不同；production replay、profiling 與 cost analysis 工具則承擔不同的證據責任。&lt;/p>
&lt;h2 id="教學順序同步">教學順序同步&lt;/h2>
&lt;p>效能與容量工具頁的教學順序是先建立 load test，再進入 replay / mirroring、profiling、optimization 與 FinOps。這個順序對齊 checkout E7：讀者先理解 workload model、saturation evidence 與 capacity gate，再比較 production traffic evidence、profile evidence、rightsizing 建議與成本 owner 如何形成改善閉環。&lt;/p>
&lt;h2 id="t1-工具頁">T1 工具頁&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>工具&lt;/th>
 &lt;th>類型&lt;/th>
 &lt;th>核心責任&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/k6/" data-link-title="k6" data-link-desc="用 scriptable scenario 建立 API、protocol 與 CI 友善壓測的效能工程工具">k6&lt;/a>&lt;/td>
 &lt;td>Load test&lt;/td>
 &lt;td>用 scriptable scenario 建立 API / protocol 負載&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/jmeter/" data-link-title="Apache JMeter" data-link-desc="用 GUI、plugin 與多 protocol sampler 承接企業壓測資產的效能工程工具">JMeter&lt;/a>&lt;/td>
 &lt;td>Load test&lt;/td>
 &lt;td>用 GUI、plugin 與多 protocol sampler 承接企業測試資產&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/gatling/" data-link-title="Gatling" data-link-desc="用 JVM DSL、simulation 與 injection profile 表達複雜 scenario 的效能工程工具">Gatling&lt;/a>&lt;/td>
 &lt;td>Load test&lt;/td>
 &lt;td>用 JVM DSL 與 injection profile 表達複雜 scenario&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/locust/" data-link-title="Locust" data-link-desc="用 Python user behavior 與 distributed worker 表達高自訂負載模型的效能工程工具">Locust&lt;/a>&lt;/td>
 &lt;td>Load test&lt;/td>
 &lt;td>用 Python user behavior 與 distributed worker 表達高自訂負載&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/vegeta/" data-link-title="Vegeta" data-link-desc="用簡潔 CLI 與固定 rate HTTP attack 快速探測 latency、throughput 與 saturation 的效能工程工具">Vegeta&lt;/a>&lt;/td>
 &lt;td>HTTP probe&lt;/td>
 &lt;td>用固定 rate HTTP attack 快速探測 endpoint saturation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/goreplay/" data-link-title="GoReplay" data-link-desc="用 production HTTP traffic capture 與 replay 驗證真實請求形狀的效能工程工具">GoReplay&lt;/a>&lt;/td>
 &lt;td>Traffic replay&lt;/td>
 &lt;td>捕捉 production HTTP traffic 並重播到 shadow target&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/service-mesh-mirroring/" data-link-title="Service Mesh Mirroring" data-link-desc="用 sidecar / proxy 層 mirror production traffic 到新版本或 shadow service 的 production validation 方式">Service Mesh Mirroring&lt;/a>&lt;/td>
 &lt;td>Traffic mirror&lt;/td>
 &lt;td>用 proxy route policy mirror production traffic&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/aws-vpc-traffic-mirroring/" data-link-title="AWS VPC Traffic Mirroring" data-link-desc="用 VPC 網路層封包鏡像觀察 production traffic 的低侵入 production validation 方式">AWS VPC Traffic Mirroring&lt;/a>&lt;/td>
 &lt;td>Traffic mirror&lt;/td>
 &lt;td>用 VPC 網路層封包鏡像建立低侵入 production evidence&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/datadog-continuous-profiler/" data-link-title="Datadog Continuous Profiler" data-link-desc="用 SaaS APM 整合、deployment marker 與 profile diff 支援 release regression 定位的 profiling 工具">Datadog Continuous Profiler&lt;/a>&lt;/td>
 &lt;td>Profiling&lt;/td>
 &lt;td>用 SaaS APM 整合與 deploy marker 支援 profile diff&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/pyroscope/" data-link-title="Pyroscope" data-link-desc="用 Grafana 生態與開源 profiling backend 建立可自管 profile diff 與 flame graph 的工具">Pyroscope&lt;/a>&lt;/td>
 &lt;td>Profiling&lt;/td>
 &lt;td>用 Grafana / OSS profiling backend 建立可自管 profile diff&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/parca/" data-link-title="Parca" data-link-desc="用 eBPF 與開源 continuous profiling 平台建立 infrastructure-wide profile evidence 的工具">Parca&lt;/a>&lt;/td>
 &lt;td>Profiling&lt;/td>
 &lt;td>用 eBPF 與平台視角建立 infrastructure-wide profile evidence&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/akamas/" data-link-title="Akamas" data-link-desc="用 AI-driven optimization 把效能、可靠性與雲端成本放進同一個容量調校閉環">Akamas&lt;/a>&lt;/td>
 &lt;td>Optimization&lt;/td>
 &lt;td>用 SLO constraint 與配置實驗建立 capacity / cost 調校閉環&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/vantage/" data-link-title="Vantage" data-link-desc="用 cloud cost reports、Kubernetes cost allocation 與 forecast 建立工程可用的成本可見性">Vantage&lt;/a>&lt;/td>
 &lt;td>FinOps&lt;/td>
 &lt;td>用 cost reports、Kubernetes cost 與 forecast 建立成本可見性&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/cloudhealth/" data-link-title="CloudHealth" data-link-desc="用 enterprise FinOps governance、policy 與多雲成本管理支援大型組織的容量成本治理">CloudHealth&lt;/a>&lt;/td>
 &lt;td>FinOps&lt;/td>
 &lt;td>用 enterprise governance、policy 與 allocation 管理雲端成本&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://tarrragon.github.io/blog/backend/09-performance-capacity/vendors/aws-cost-explorer/" data-link-title="AWS Cost Explorer" data-link-desc="用 AWS-native 成本與用量分析建立 account、service、tag 與 usage type 的成本判讀入口">AWS Cost Explorer&lt;/a>&lt;/td>
 &lt;td>AWS FinOps&lt;/td>
 &lt;td>用 AWS-native cost / usage report 建立成本分析 baseline&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>這批工具頁已完成 load test、production traffic replay、continuous profiling 與 capacity / cost analysis 的主要分流。k6 承接 scriptable scenario，JMeter 承接企業測試資產，Gatling 承接 JVM simulation，Locust 承接 Python custom behavior，Vegeta 承接快速 HTTP probe；GoReplay、Service Mesh Mirroring 與 AWS VPC Traffic Mirroring 承接不同層級的 production traffic evidence；Datadog Continuous Profiler、Pyroscope 與 Parca 承接不同操作模型的 profile evidence；Akamas、Vantage、CloudHealth 與 AWS Cost Explorer 承接 cost visibility、optimization 與 FinOps governance。&lt;/p></description><content:encoded><![CDATA[<p>效能與容量工具清單的核心責任是把工具名稱放回 workload model、saturation discovery、capacity planning 與 production validation 的服務責任。工具頁先回答它降低哪一種風險，再討論 scenario scripting、distributed load、結果保存、CI 整合、成本與案例回寫。</p>
<h2 id="讀法">讀法</h2>
<p>效能工具要從問題節點進入。團隊如果缺 workload model，先讀 <a href="/blog/backend/09-performance-capacity/workload-modeling/" data-link-title="9.2 Workload Modeling" data-link-desc="把 production traffic shape 翻成可重播的壓測模型">9.2 Workload Modeling</a>；如果缺 saturation 邊界，先讀 <a href="/blog/backend/09-performance-capacity/saturation-discovery/" data-link-title="9.4 Saturation Discovery" data-link-desc="找出 throughput plateau 與 latency knee 的方法">9.4 Saturation Discovery</a>；如果缺 production 驗證，先讀 <a href="/blog/backend/09-performance-capacity/production-validation/" data-link-title="9.10 Production-Side 驗證" data-link-desc="shadow traffic、dark launch、canary、production-like load test">9.10 Production-Side 驗證</a>。</p>
<p>工具頁的任務是承接這些問題節點。k6、JMeter、Gatling、Locust 與 Vegeta 都能產生負載，但它們在腳本語言、protocol 覆蓋、分散式執行、CI integration、報表與團隊學習成本上不同；production replay、profiling 與 cost analysis 工具則承擔不同的證據責任。</p>
<h2 id="教學順序同步">教學順序同步</h2>
<p>效能與容量工具頁的教學順序是先建立 load test，再進入 replay / mirroring、profiling、optimization 與 FinOps。這個順序對齊 checkout E7：讀者先理解 workload model、saturation evidence 與 capacity gate，再比較 production traffic evidence、profile evidence、rightsizing 建議與成本 owner 如何形成改善閉環。</p>
<h2 id="t1-工具頁">T1 工具頁</h2>
<table>
  <thead>
      <tr>
          <th>工具</th>
          <th>類型</th>
          <th>核心責任</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/k6/" data-link-title="k6" data-link-desc="用 scriptable scenario 建立 API、protocol 與 CI 友善壓測的效能工程工具">k6</a></td>
          <td>Load test</td>
          <td>用 scriptable scenario 建立 API / protocol 負載</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/jmeter/" data-link-title="Apache JMeter" data-link-desc="用 GUI、plugin 與多 protocol sampler 承接企業壓測資產的效能工程工具">JMeter</a></td>
          <td>Load test</td>
          <td>用 GUI、plugin 與多 protocol sampler 承接企業測試資產</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/gatling/" data-link-title="Gatling" data-link-desc="用 JVM DSL、simulation 與 injection profile 表達複雜 scenario 的效能工程工具">Gatling</a></td>
          <td>Load test</td>
          <td>用 JVM DSL 與 injection profile 表達複雜 scenario</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/locust/" data-link-title="Locust" data-link-desc="用 Python user behavior 與 distributed worker 表達高自訂負載模型的效能工程工具">Locust</a></td>
          <td>Load test</td>
          <td>用 Python user behavior 與 distributed worker 表達高自訂負載</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/vegeta/" data-link-title="Vegeta" data-link-desc="用簡潔 CLI 與固定 rate HTTP attack 快速探測 latency、throughput 與 saturation 的效能工程工具">Vegeta</a></td>
          <td>HTTP probe</td>
          <td>用固定 rate HTTP attack 快速探測 endpoint saturation</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/goreplay/" data-link-title="GoReplay" data-link-desc="用 production HTTP traffic capture 與 replay 驗證真實請求形狀的效能工程工具">GoReplay</a></td>
          <td>Traffic replay</td>
          <td>捕捉 production HTTP traffic 並重播到 shadow target</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/service-mesh-mirroring/" data-link-title="Service Mesh Mirroring" data-link-desc="用 sidecar / proxy 層 mirror production traffic 到新版本或 shadow service 的 production validation 方式">Service Mesh Mirroring</a></td>
          <td>Traffic mirror</td>
          <td>用 proxy route policy mirror production traffic</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/aws-vpc-traffic-mirroring/" data-link-title="AWS VPC Traffic Mirroring" data-link-desc="用 VPC 網路層封包鏡像觀察 production traffic 的低侵入 production validation 方式">AWS VPC Traffic Mirroring</a></td>
          <td>Traffic mirror</td>
          <td>用 VPC 網路層封包鏡像建立低侵入 production evidence</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/datadog-continuous-profiler/" data-link-title="Datadog Continuous Profiler" data-link-desc="用 SaaS APM 整合、deployment marker 與 profile diff 支援 release regression 定位的 profiling 工具">Datadog Continuous Profiler</a></td>
          <td>Profiling</td>
          <td>用 SaaS APM 整合與 deploy marker 支援 profile diff</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/pyroscope/" data-link-title="Pyroscope" data-link-desc="用 Grafana 生態與開源 profiling backend 建立可自管 profile diff 與 flame graph 的工具">Pyroscope</a></td>
          <td>Profiling</td>
          <td>用 Grafana / OSS profiling backend 建立可自管 profile diff</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/parca/" data-link-title="Parca" data-link-desc="用 eBPF 與開源 continuous profiling 平台建立 infrastructure-wide profile evidence 的工具">Parca</a></td>
          <td>Profiling</td>
          <td>用 eBPF 與平台視角建立 infrastructure-wide profile evidence</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/akamas/" data-link-title="Akamas" data-link-desc="用 AI-driven optimization 把效能、可靠性與雲端成本放進同一個容量調校閉環">Akamas</a></td>
          <td>Optimization</td>
          <td>用 SLO constraint 與配置實驗建立 capacity / cost 調校閉環</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/vantage/" data-link-title="Vantage" data-link-desc="用 cloud cost reports、Kubernetes cost allocation 與 forecast 建立工程可用的成本可見性">Vantage</a></td>
          <td>FinOps</td>
          <td>用 cost reports、Kubernetes cost 與 forecast 建立成本可見性</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/cloudhealth/" data-link-title="CloudHealth" data-link-desc="用 enterprise FinOps governance、policy 與多雲成本管理支援大型組織的容量成本治理">CloudHealth</a></td>
          <td>FinOps</td>
          <td>用 enterprise governance、policy 與 allocation 管理雲端成本</td>
      </tr>
      <tr>
          <td><a href="/blog/backend/09-performance-capacity/vendors/aws-cost-explorer/" data-link-title="AWS Cost Explorer" data-link-desc="用 AWS-native 成本與用量分析建立 account、service、tag 與 usage type 的成本判讀入口">AWS Cost Explorer</a></td>
          <td>AWS FinOps</td>
          <td>用 AWS-native cost / usage report 建立成本分析 baseline</td>
      </tr>
  </tbody>
</table>
<p>這批工具頁已完成 load test、production traffic replay、continuous profiling 與 capacity / cost analysis 的主要分流。k6 承接 scriptable scenario，JMeter 承接企業測試資產，Gatling 承接 JVM simulation，Locust 承接 Python custom behavior，Vegeta 承接快速 HTTP probe；GoReplay、Service Mesh Mirroring 與 AWS VPC Traffic Mirroring 承接不同層級的 production traffic evidence；Datadog Continuous Profiler、Pyroscope 與 Parca 承接不同操作模型的 profile evidence；Akamas、Vantage、CloudHealth 與 AWS Cost Explorer 承接 cost visibility、optimization 與 FinOps governance。</p>
<h2 id="內容覆蓋進度">內容覆蓋進度</h2>
<p>每個工具頁下會擴充兩類文章：deep article（工具自身的配置、故障、容量、走 <a href="/blog/posts/vendor-%E6%B7%B1%E5%BA%A6%E6%8A%80%E8%A1%93%E6%96%87%E7%AB%A0%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84%E5%90%8C-vendor-%E7%B3%BB%E5%88%97%E7%9A%84%E9%96%8B%E5%A0%B4%E8%BC%AA%E6%9B%BF%E9%A9%97%E8%AD%89/" data-link-title="Vendor 深度技術文章方法論的演化紀錄：同 vendor 系列的開場輪替驗證" data-link-desc="vendor overview 飽和後要寫單一功能深度文章、需要選題與結構依據時回來。這套方法論的驗證來源與 cadence variant 在高風險場景（同 vendor sub-tool 系列）的實證。">6-section 模板</a>）跟 migration playbook（跨工具遷移流程、走 <a href="/blog/posts/migration-playbook-%E6%96%B9%E6%B3%95%E8%AB%96%E7%9A%84%E6%BC%94%E5%8C%96%E7%B4%80%E9%8C%84stage-0-variant-%E8%A6%8F%E5%8A%83%E6%8A%8A-collapse-%E7%8E%87%E5%BE%9E-60-%E9%99%8D%E5%88%B0-0/" data-link-title="Migration Playbook 方法論的演化紀錄：Stage 0 variant 規劃把 collapse 率從 60% 降到 0%" data-link-desc="跨 vendor migration playbook 需要獨立寫作方法論的依據，以及這套方法論從三輪 batch dogfood 中演化出來的驗證證據。">6-type 結構</a>）。「← X」代表從 X 遷入。</p>
<table>
  <thead>
      <tr>
          <th>Vendor</th>
          <th>Deep article</th>
          <th>Migration playbook</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="k6/">k6</a></td>
          <td>—</td>
          <td><a href="k6/migrate-from-jmeter/">← JMeter (Type E)</a></td>
      </tr>
      <tr>
          <td><a href="datadog-continuous-profiler/">Datadog Continuous Profiler</a></td>
          <td>—</td>
          <td><a href="datadog-continuous-profiler/migrate-from-pyroscope/">← Pyroscope (Type C)</a></td>
      </tr>
  </tbody>
</table>
<p>其他 T1 工具（JMeter / Gatling / Locust / Vegeta / GoReplay / Service Mesh Mirroring / AWS VPC Traffic Mirroring / Pyroscope / Parca / Akamas / Vantage / CloudHealth / AWS Cost Explorer）尚未開始。跟 <a href="/blog/backend/06-reliability/vendors/" data-link-title="可靠性 Vendor 清單" data-link-desc="規劃 CI、壓測、chaos engineering 與 SLO 工具的服務頁撰寫順序與判準">06 vendors</a> 共用部分工具（k6 / JMeter / Gatling / Locust），未來寫 deep article 時需明確區分「驗證流程的工具鏈」（06）跟「效能工程的工具鏈」（09）的角度。對應的 backlog 議題見上方「T1 工具頁」段每個工具頁要回答的核心責任、跟各工具 <code>_index.md</code> 的「預計實作話題」段。</p>
<h2 id="後續候選">後續候選</h2>
<table>
  <thead>
      <tr>
          <th>類型</th>
          <th>候選工具</th>
          <th>寫作重點</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Load test</td>
          <td>Artillery、wrk、hey、Grafana k6 Cloud、AWS Distributed Load Testing、BlazeMeter、LoadRunner</td>
          <td>managed runner、跨 region、報表與費用</td>
      </tr>
      <tr>
          <td>Production traffic replay</td>
          <td>shadow traffic pattern、Diffy 類 response diff、proxy mirror variants</td>
          <td>response diff、資料遮罩、side effect 邊界</td>
      </tr>
      <tr>
          <td>Profiling</td>
          <td>GCP Cloud Profiler、AWS CodeGuru Profiler、Azure Application Insights Profiler、New Relic Profiler、Dynatrace Profiling</td>
          <td>雲端整合、採樣成本、profile diff</td>
      </tr>
      <tr>
          <td>Capacity / cost analysis</td>
          <td>Kubecost / OpenCost、CloudZero、CAST AI、Infracost、Harness Cloud Cost Management</td>
          <td>workload-level 成本、rightsizing、IaC cost</td>
      </tr>
      <tr>
          <td>Benchmark / workload model</td>
          <td>YCSB、JMH、pgbench、sysbench</td>
          <td>component benchmark、DB workload、micro vs system boundary</td>
      </tr>
  </tbody>
</table>
<p>Load test 工具頁要保留 workload model 語言。JMeter 適合 protocol 覆蓋與 GUI 驅動團隊，Gatling 適合程式化 scenario 與 JVM 生態，Locust 適合 Python 團隊，Vegeta 適合簡單 HTTP 壓測與 CLI workflow。</p>
<p>Production replay 工具頁要保留安全與副作用邊界。Replay production traffic 會碰到 PII、credential、payment callback、idempotency 與下游配額，因此文章要先定義遮罩、隔離、rate limit 與 stop condition。</p>
<p>Profiling 工具頁要保留長期成本。Continuous profiling 能降低退化定位時間，但會增加採樣成本、儲存成本、敏感資訊治理、symbolization 與 baseline 維護責任。</p>
<p>Capacity / cost analysis 工具頁要保留 owner 與行動閉環。成本報表只有在 tag、label、cost center、service owner、release marker 與 action workflow 對齊後，才會變成容量規劃與成本改善的工程證據。</p>
<p>主流覆蓋檢查的重點是分開 scenario load、quick probe、managed runner、traffic replay、profiling、FinOps 與 component benchmark。k6 / Gatling / Locust 解 scenario；Vegeta / wrk / hey 解 quick HTTP probe；Grafana k6 Cloud / AWS Distributed Load Testing / BlazeMeter 解 managed runner；Pyroscope / Parca / Datadog / cloud profiler 解 profiling；Kubecost / CloudZero / CAST AI 解 workload cost。</p>
<h2 id="工具頁標準章節">工具頁標準章節</h2>
<table>
  <thead>
      <tr>
          <th>章節</th>
          <th>效能與容量工具頁要補的內容</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>工具定位</td>
          <td>它是 load test、replay、traffic mirror、profiler、optimizer 還是 FinOps 工具</td>
      </tr>
      <tr>
          <td>本章目標</td>
          <td>讀者能判斷它降低容量未知、production gap、瓶頸定位或成本歸因哪種風險</td>
      </tr>
      <tr>
          <td>最短判讀路徑</td>
          <td>用「缺 workload、缺 saturation、缺 production evidence、缺 cost owner」快速定位</td>
      </tr>
      <tr>
          <td>日常操作與決策形狀</td>
          <td>scenario、runner、threshold、sampling、dashboard、recommendation、owner</td>
      </tr>
      <tr>
          <td>核心取捨表</td>
          <td>同類工具與相鄰工具的機會成本，例如 k6 vs JMeter、Vantage vs Cost Explorer</td>
      </tr>
      <tr>
          <td>進階主題</td>
          <td>distributed runner、shadow traffic、continuous profiling、optimization guardrail</td>
      </tr>
      <tr>
          <td>排錯與失敗快速判讀</td>
          <td>runner bottleneck、side effect、sampling bias、tag gap、forecast drift</td>
      </tr>
      <tr>
          <td>何時改走其他服務</td>
          <td>驗證流程回 06、觀測資料回 04、部署控制回 05、事故處理回 08</td>
      </tr>
      <tr>
          <td>不在本頁內的主題</td>
          <td>完整工具 CLI 教學、供應商 pricing 細節、所有 dashboard 設定</td>
      </tr>
      <tr>
          <td>案例回寫與下一步路由</td>
          <td>回到 09 cases、6.13 regression gate、4.20 evidence package</td>
      </tr>
  </tbody>
</table>
<h2 id="跨-vendor-議題對照">跨 vendor 議題對照</h2>
<p>本模組 15 個 vendor 跨 5 個 sub-category（load test / production replay / continuous profiling / optimization / FinOps）、解不同效能與容量工程問題、不是同類選一。</p>
<table>
  <thead>
      <tr>
          <th>Sub-category</th>
          <th>典型 vendor</th>
          <th>輸出證據</th>
          <th>Production 風險</th>
          <th>操作成本</th>
          <th>Owner</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Load test</td>
          <td>k6 / JMeter / Gatling / Locust / Vegeta</td>
          <td>threshold pass/fail / p95 p99 / throughput</td>
          <td>低（測試環境）</td>
          <td>scenario 維護 / runner 規模 / 測試資料</td>
          <td>Engineering / QA</td>
      </tr>
      <tr>
          <td>Production replay</td>
          <td>GoReplay / Service Mesh Mirroring / AWS VPC</td>
          <td>response diff / shadow load</td>
          <td>高（PII / side effect / 配額）</td>
          <td>masking / isolation / rate limit</td>
          <td>SRE + Security</td>
      </tr>
      <tr>
          <td>Continuous profiling</td>
          <td>Datadog Profiler / Pyroscope / Parca</td>
          <td>flame graph diff / regression detection</td>
          <td>中（採樣 overhead）</td>
          <td>symbolization / storage / baseline 維護</td>
          <td>Engineering</td>
      </tr>
      <tr>
          <td>Optimization</td>
          <td>Akamas</td>
          <td>recommendation / SLO-constrained config</td>
          <td>中（autopilot rollout）</td>
          <td>objective model / approval workflow</td>
          <td>SRE + FinOps</td>
      </tr>
      <tr>
          <td>FinOps</td>
          <td>Vantage / CloudHealth / AWS Cost Explorer</td>
          <td>cost report / forecast / rightsizing</td>
          <td>無(reporting)</td>
          <td>tag governance / owner mapping / cadence</td>
          <td>FinOps + Eng lead</td>
      </tr>
  </tbody>
</table>
<p>對照表的用途有三：</p>
<ul>
<li>對齊 sub-category 跟問題節點：缺 saturation → load test；缺 production gap → replay；缺 瓶頸定位 → profiler；缺 capacity / cost 閉環 → optimizer + FinOps</li>
<li>評估 production 風險：load test 安全、replay / mirror 要明示 side effect 邊界、profiler 要看採樣 overhead、FinOps reporting 無風險</li>
<li>對齊 owner：load test 多 Engineering / QA、replay 多 SRE + Security、optimization + FinOps 跨團隊</li>
</ul>
<p>下面 5 段把對照表的 sub-category 展開、每段帶 vendor 選型判讀。</p>
<h3 id="load-testk6--jmeter--gatling--locust--vegeta">Load test（k6 / JMeter / Gatling / Locust / Vegeta）</h3>
<p>Load test 是 09 模組的主要 saturation 探測工具、跟 <a href="/blog/backend/06-reliability/vendors/" data-link-title="可靠性 Vendor 清單" data-link-desc="規劃 CI、壓測、chaos engineering 與 SLO 工具的服務頁撰寫順序與判準">06 reliability load test 章節</a> 同 vendor 但角度不同 — 06 看 CI gate / regression evidence、09 看 capacity planning / saturation discovery / peak event readiness。</p>
<p>選型判讀：CI-first JS → <a href="/blog/backend/09-performance-capacity/vendors/k6/" data-link-title="k6" data-link-desc="用 scriptable scenario 建立 API、protocol 與 CI 友善壓測的效能工程工具">k6</a>；JVM + 複雜 scenario → <a href="/blog/backend/09-performance-capacity/vendors/gatling/" data-link-title="Gatling" data-link-desc="用 JVM DSL、simulation 與 injection profile 表達複雜 scenario 的效能工程工具">Gatling</a>；既有 .jmx 資產 → <a href="/blog/backend/09-performance-capacity/vendors/jmeter/" data-link-title="Apache JMeter" data-link-desc="用 GUI、plugin 與多 protocol sampler 承接企業壓測資產的效能工程工具">JMeter</a>；Python custom behavior → <a href="/blog/backend/09-performance-capacity/vendors/locust/" data-link-title="Locust" data-link-desc="用 Python user behavior 與 distributed worker 表達高自訂負載模型的效能工程工具">Locust</a>；快速 HTTP probe / fixed rate → <a href="/blog/backend/09-performance-capacity/vendors/vegeta/" data-link-title="Vegeta" data-link-desc="用簡潔 CLI 與固定 rate HTTP attack 快速探測 latency、throughput 與 saturation 的效能工程工具">Vegeta</a>（單一 HTTP attack 模式、不適合多 step scenario）。</p>
<h3 id="production-replaygoreplay--service-mesh-mirroring--aws-vpc-traffic-mirroring">Production replay（GoReplay / Service Mesh Mirroring / AWS VPC Traffic Mirroring）</h3>
<p>Production replay 把實際流量重播到 shadow target、補 load test 的「人工 scenario 跟真實流量差距」缺口。<strong>GoReplay</strong> 應用層 HTTP traffic capture + replay；<strong>Service Mesh Mirroring</strong> 用 Envoy / Istio proxy mirror、適合 K8s 內部；<strong>AWS VPC Traffic Mirroring</strong> L4 封包鏡像、適合非 HTTP / 低侵入。</p>
<p>選型判讀：HTTP application 層 → GoReplay；K8s 內 service mesh → Service Mesh Mirroring；非 HTTP / 跨 VPC / 低侵入 → AWS VPC。共同議題：PII 遮罩、idempotency boundary、downstream 配額 — 不可省。</p>
<h3 id="continuous-profilingdatadog-continuous-profiler--pyroscope--parca">Continuous profiling（Datadog Continuous Profiler / Pyroscope / Parca）</h3>
<p>Continuous profiling 在 production 持續採樣、退化時可 profile diff 找瓶頸。<strong>Datadog Continuous Profiler</strong> SaaS APM 整合、deploy marker 自動關聯；<strong>Pyroscope</strong> OSS / Grafana 生態、可自管或 Grafana Cloud；<strong>Parca</strong> eBPF-based、infrastructure-wide profile（不需 application instrumentation）。</p>
<p>選型判讀：已用 Datadog APM → Datadog Profiler；Grafana 生態 / OSS → Pyroscope；不想 instrument application + eBPF 友善 → Parca。共同議題：採樣 overhead（CPU / memory）、symbolization、storage cost、敏感資訊。</p>
<h3 id="optimizationakamas">Optimization（Akamas）</h3>
<p>Optimization 把 workload + SLO + cost 放進同一閉環、產出 configuration recommendation。<strong>Akamas</strong> 是 09 模組唯一 optimizer vendor、適合已有可量測 workload 跟成本壓力的服務。</p>
<p>選型判讀：Kubernetes rightsizing + runtime tuning + cost target → Akamas；純 FinOps reporting 不夠（要主動建議）→ Akamas。Akamas 不替代 FinOps tool — Vantage / CloudHealth 看歷史成本、Akamas 提產出未來 recommendation。</p>
<h3 id="finopsvantage--cloudhealth--aws-cost-explorer">FinOps（Vantage / CloudHealth / AWS Cost Explorer）</h3>
<p>FinOps 提供 cost visibility + forecast + allocation。<strong>Vantage</strong> Kubernetes cost + forecast 友善的 startup-friendly 平台；<strong>CloudHealth</strong> enterprise FinOps governance + policy + chargeback；<strong>AWS Cost Explorer</strong> AWS-native cost analysis baseline（免費、限 AWS）。</p>
<p>選型判讀：純 AWS 啟動 → Cost Explorer；多雲 + startup / mid-size → Vantage；enterprise + 多 BU chargeback → CloudHealth；K8s workload cost → Kubecost / OpenCost（不在本表、後續候選）。共同議題：tag governance、cost center mapping、cadence。</p>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>上游：<a href="/blog/backend/09-performance-capacity/load-test-tooling/" data-link-title="9.3 壓測工具選型" data-link-desc="k6 / JMeter / Gatling / Locust / Vegeta / Production Replay 的工程選型">9.3 壓測工具選型</a></li>
<li>上游：<a href="/blog/backend/09-performance-capacity/production-validation/" data-link-title="9.10 Production-Side 驗證" data-link-desc="shadow traffic、dark launch、canary、production-like load test">9.10 Production-Side 驗證</a></li>
<li>服務路徑：<a href="/blog/backend/#%e8%b2%ab%e7%a9%bf%e5%bc%8f%e6%a1%88%e4%be%8bcheckout-%e6%9c%8d%e5%8b%99%e6%bc%94%e9%80%b2" data-link-title="Backend 服務實務指南" data-link-desc="用跨語言教學路線整理資料庫、快取、訊息佇列、觀測、部署、可靠性、資安、事故與容量等後端服務能力">Checkout 服務演進</a></li>
<li>平行：<a href="/blog/backend/06-reliability/vendors/" data-link-title="可靠性 Vendor 清單" data-link-desc="規劃 CI、壓測、chaos engineering 與 SLO 工具的服務頁撰寫順序與判準">06 Reliability vendors</a> — 06 從驗證流程看工具，09 從容量量化與效能工程看工具</li>
</ul>
]]></content:encoded></item></channel></rss>