<?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>File-Manager on Tarragon</title><link>https://tarrragon.github.io/blog/tags/file-manager/</link><description>Recent content in File-Manager on Tarragon</description><generator>Hugo -- gohugo.io</generator><language>zh-TW</language><copyright>Tarragon (CC BY 4.0)</copyright><lastBuildDate>Wed, 01 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://tarrragon.github.io/blog/tags/file-manager/index.xml" rel="self" type="application/rss+xml"/><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>終端機檔案管理器：broot、yazi、ranger 的遠端瀏覽與選型</title><link>https://tarrragon.github.io/blog/linux/tools/cli/file-manager-tuis/</link><pubDate>Mon, 15 Jun 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/tools/cli/file-manager-tuis/</guid><description>&lt;p>終端機檔案管理器把資料夾結構與檔案內容做成全螢幕互動介面，讓遠端只有終端機時也能像 IDE 側邊欄那樣瀏覽目錄、預覽檔案、搬移與改名，取代反覆 &lt;code>ls&lt;/code>、&lt;code>cd&lt;/code>、&lt;code>cat&lt;/code> 的來回。在純 SSH 情境下，它補上 git 線圖與系統監控之外的另一塊日常需求：檔案層級的導覽與操作。&lt;/p>
&lt;p>本文承接 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽&lt;/a> 的檔案瀏覽分類。&lt;/p>
&lt;h2 id="兩種介面範式樹狀與-miller-欄狀">兩種介面範式：樹狀與 Miller 欄狀&lt;/h2>
&lt;p>檔案管理器的版面分兩種範式，直接決定操作手感，也是「我記得的是哪一個」最快的辨認點。&lt;/p>
&lt;p>樹狀（tree）範式像 IDE 的左側邊欄：一棵可展開、收合的目錄樹，深層結構的層級關係一眼看到。&lt;code>broot&lt;/code> 是代表，它的官方定位就是「tree-like view」，配上模糊輸入過濾能直接跳到深層目錄，&lt;code>--max-depth&lt;/code> 還能控制樹要展開幾層。&lt;/p>
&lt;p>Miller 欄狀（Miller columns）範式像 macOS Finder 的欄狀檢視：並列數欄（父目錄、當前目錄、預覽），游標右移進入子目錄、左移回上層，最右欄即時預覽當前檔案內容。&lt;code>yazi&lt;/code> 與 &lt;code>ranger&lt;/code> 走這條，預覽窗大、適合邊瀏覽邊讀內容。&lt;/p>
&lt;p>辨認方式很單純：記得的是「可展開／收合的樹」就是 broot 這類；記得的是「左邊瀏覽、右邊一大塊預覽」就是 yazi／ranger 這類。&lt;/p>
&lt;h2 id="工具對照">工具對照&lt;/h2>
&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>&lt;code>broot&lt;/code>&lt;/td>
 &lt;td>Rust&lt;/td>
 &lt;td>可展開樹&lt;/td>
 &lt;td>樹狀 + 模糊跳轉 + 退出時 cd 整合（&lt;code>br&lt;/code>）&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>yazi&lt;/code>&lt;/td>
 &lt;td>Rust&lt;/td>
 &lt;td>Miller 欄狀&lt;/td>
 &lt;td>非同步預覽（圖片／程式碼）、反應最快&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>ranger&lt;/code>&lt;/td>
 &lt;td>Python&lt;/td>
 &lt;td>Miller 欄狀&lt;/td>
 &lt;td>老牌、外掛與設定分享生態最大&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>nnn&lt;/code>&lt;/td>
 &lt;td>C&lt;/td>
 &lt;td>細節／預覽&lt;/td>
 &lt;td>極簡超快、資源佔用低&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>lf&lt;/code>&lt;/td>
 &lt;td>Go&lt;/td>
 &lt;td>Miller 欄狀&lt;/td>
 &lt;td>ranger 風、單一 binary&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>&lt;code>broot&lt;/code> 把目錄做成可展開的樹，輸入幾個字就模糊過濾並跳轉到符合的路徑，是深層 monorepo 裡找檔最快的範式。它的 &lt;code>br&lt;/code> shell function 讓退出時把工作目錄切到所在位置，等於用它當互動式 &lt;code>cd&lt;/code> — 純 &lt;code>broot&lt;/code> 指令做不到這件事，因為子行程改不了父 shell 的目錄。&lt;code>br&lt;/code> 不會自動就位：首次執行 &lt;code>broot&lt;/code> 會跳出提示問是否安裝（答 &lt;code>Y&lt;/code>，或手動跑 &lt;code>broot --install&lt;/code>），它把函式寫進 shell rc，重新載入 rc 後改用 &lt;code>br&lt;/code> 啟動。如果還沒安裝 &lt;code>br&lt;/code>，在 broot 裡按 &lt;code>Alt + Enter&lt;/code>（&lt;code>:cd&lt;/code>）跳轉會看到 &lt;code>This verb needs broot to be launched as br&lt;/code> 的提示 — 這就是還沒透過 &lt;code>br&lt;/code> 啟動的訊號，裝好 &lt;code>br&lt;/code> 並改用 &lt;code>br&lt;/code> 啟動就能跳轉。&lt;/p>
&lt;p>操作上記幾個鍵就夠：直接打字會即時模糊過濾目錄樹，方向鍵移動游標；目錄上 &lt;code>Enter&lt;/code> 進入該層、&lt;code>Alt + Enter&lt;/code>（verb &lt;code>:cd&lt;/code>）離開 broot 並把 shell 切到該目錄、檔案上 &lt;code>Enter&lt;/code> 用預設程式開啟；&lt;code>Ctrl + q&lt;/code> 離開，&lt;code>Esc&lt;/code> 退回上一層狀態。完整快捷鍵與 verb 清單按 &lt;code>?&lt;/code> 叫出。深層結構需要綜觀層級時，樹狀比欄狀直觀。要注意 broot 是導覽與啟動器、不內建文字編輯：改檔得在檔案上開外部編輯器（叫出 &lt;code>$EDITOR&lt;/code>），它的強項在樹狀導覽與跳轉，不在看內容或改內容。&lt;/p>
&lt;p>&lt;code>yazi&lt;/code> 是 Miller 欄狀的現代實作，Rust 寫、預覽走非同步，大目錄或檔案很多時捲動不卡。它的程式碼預覽&lt;strong>內建語法高亮&lt;/strong>（用內建 highlighter、開箱就有彩色，不必另裝相依，實測程式碼確實彩色渲染）；圖片預覽則看終端機支援度（見最後一節）。要的是「邊瀏覽邊看大塊內容」且在意速度時，yazi 最順。&lt;/p>
&lt;p>&lt;code>ranger&lt;/code> 是 Miller 欄狀的老牌，外掛、設定檔分享與教學資源最多。它的取捨在依賴：ranger 是 Python，遠端機器要有 Python runtime，而且較新的 Python 版本會在啟動時印 deprecation 警告（實測 ranger 1.9.4 配 Python 3.14 會噴 &lt;code>SyntaxWarning: 'return' in a 'finally' block&lt;/code>，功能不受影響但訊息惱人）。預覽渲染同樣靠外部相依：ranger 預設的程式碼預覽是&lt;strong>純文字、無語法高亮&lt;/strong>，要彩色得另裝 &lt;code>highlight&lt;/code>、&lt;code>bat&lt;/code> 或 &lt;code>pygments&lt;/code> 並啟用 previewer（實測沒裝這些時就只有純文字，與 yazi 開箱即有高亮形成對比）。生態與依賴是它的一體兩面。&lt;/p>
&lt;p>&lt;code>nnn&lt;/code>（C）與 &lt;code>lf&lt;/code>（Go）走輕量路線，啟動極快、資源佔用低，適合老舊或資源吃緊的機器；&lt;code>lf&lt;/code> 是單一 binary，搬檔即用。&lt;/p>
&lt;h2 id="遠端情境的選型">遠端情境的選型&lt;/h2>
&lt;p>選型回到「要哪種瀏覽範式」加上「目標機器能裝什麼」兩條軸：&lt;/p>
&lt;ul>
&lt;li>想要 IDE 式可展開樹、常跳深層目錄：選 &lt;code>broot&lt;/code>，樹狀加模糊跳轉在深層結構找檔最快。&lt;/li>
&lt;li>想要欄狀導覽加強預覽（看圖、讀程式碼）、在意速度：選 &lt;code>yazi&lt;/code>。&lt;/li>
&lt;li>已有 ranger 習慣或需要特定外掛：選 &lt;code>ranger&lt;/code>，但先確認遠端有 Python、並接受啟動時的警告訊息。&lt;/li>
&lt;li>受限或老舊機器、要單一 binary 搬過去就用：&lt;code>lf&lt;/code>（Go）或 &lt;code>nnn&lt;/code>（C）。&lt;/li>
&lt;/ul>
&lt;p>安裝依賴是遠端的隱性分界。編譯型工具（broot、yazi、lf、nnn）搬一個 binary 就近可用；&lt;code>ranger&lt;/code> 的 Python 依賴在不給裝套件或 Python 版本尷尬的機器上較麻煩。編譯型的單一 binary 仍要留意 glibc／musl 對得上目標系統，這點與 git 工具相同，見 &lt;a href="https://tarrragon.github.io/blog/linux/tools/cli/git-line-graph-tools-for-remote-cli/" data-link-title="遠端 CLI 開發的 git 線圖工具選型：tig、lazygit、gitui 與管線增強" data-link-desc="純 CLI、遠端開發情境下查看 git 分支線圖的工具地景，從 tig 唯讀瀏覽到 lazygit/gitui 操作中樞的定位差異，含選型判準與 lazygit 上手、delta side-by-side diff 設定。">git 線圖工具選型&lt;/a> 的單一 binary 注意事項。&lt;/p></description><content:encoded><![CDATA[<p>終端機檔案管理器把資料夾結構與檔案內容做成全螢幕互動介面，讓遠端只有終端機時也能像 IDE 側邊欄那樣瀏覽目錄、預覽檔案、搬移與改名，取代反覆 <code>ls</code>、<code>cd</code>、<code>cat</code> 的來回。在純 SSH 情境下，它補上 git 線圖與系統監控之外的另一塊日常需求：檔案層級的導覽與操作。</p>
<p>本文承接 <a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽</a> 的檔案瀏覽分類。</p>
<h2 id="兩種介面範式樹狀與-miller-欄狀">兩種介面範式：樹狀與 Miller 欄狀</h2>
<p>檔案管理器的版面分兩種範式，直接決定操作手感，也是「我記得的是哪一個」最快的辨認點。</p>
<p>樹狀（tree）範式像 IDE 的左側邊欄：一棵可展開、收合的目錄樹，深層結構的層級關係一眼看到。<code>broot</code> 是代表，它的官方定位就是「tree-like view」，配上模糊輸入過濾能直接跳到深層目錄，<code>--max-depth</code> 還能控制樹要展開幾層。</p>
<p>Miller 欄狀（Miller columns）範式像 macOS Finder 的欄狀檢視：並列數欄（父目錄、當前目錄、預覽），游標右移進入子目錄、左移回上層，最右欄即時預覽當前檔案內容。<code>yazi</code> 與 <code>ranger</code> 走這條，預覽窗大、適合邊瀏覽邊讀內容。</p>
<p>辨認方式很單純：記得的是「可展開／收合的樹」就是 broot 這類；記得的是「左邊瀏覽、右邊一大塊預覽」就是 yazi／ranger 這類。</p>
<h2 id="工具對照">工具對照</h2>
<table>
  <thead>
      <tr>
          <th>工具</th>
          <th>語言</th>
          <th>介面範式</th>
          <th>特色</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><code>broot</code></td>
          <td>Rust</td>
          <td>可展開樹</td>
          <td>樹狀 + 模糊跳轉 + 退出時 cd 整合（<code>br</code>）</td>
      </tr>
      <tr>
          <td><code>yazi</code></td>
          <td>Rust</td>
          <td>Miller 欄狀</td>
          <td>非同步預覽（圖片／程式碼）、反應最快</td>
      </tr>
      <tr>
          <td><code>ranger</code></td>
          <td>Python</td>
          <td>Miller 欄狀</td>
          <td>老牌、外掛與設定分享生態最大</td>
      </tr>
      <tr>
          <td><code>nnn</code></td>
          <td>C</td>
          <td>細節／預覽</td>
          <td>極簡超快、資源佔用低</td>
      </tr>
      <tr>
          <td><code>lf</code></td>
          <td>Go</td>
          <td>Miller 欄狀</td>
          <td>ranger 風、單一 binary</td>
      </tr>
  </tbody>
</table>
<p><code>broot</code> 把目錄做成可展開的樹，輸入幾個字就模糊過濾並跳轉到符合的路徑，是深層 monorepo 裡找檔最快的範式。它的 <code>br</code> shell function 讓退出時把工作目錄切到所在位置，等於用它當互動式 <code>cd</code> — 純 <code>broot</code> 指令做不到這件事，因為子行程改不了父 shell 的目錄。<code>br</code> 不會自動就位：首次執行 <code>broot</code> 會跳出提示問是否安裝（答 <code>Y</code>，或手動跑 <code>broot --install</code>），它把函式寫進 shell rc，重新載入 rc 後改用 <code>br</code> 啟動。如果還沒安裝 <code>br</code>，在 broot 裡按 <code>Alt + Enter</code>（<code>:cd</code>）跳轉會看到 <code>This verb needs broot to be launched as br</code> 的提示 — 這就是還沒透過 <code>br</code> 啟動的訊號，裝好 <code>br</code> 並改用 <code>br</code> 啟動就能跳轉。</p>
<p>操作上記幾個鍵就夠：直接打字會即時模糊過濾目錄樹，方向鍵移動游標；目錄上 <code>Enter</code> 進入該層、<code>Alt + Enter</code>（verb <code>:cd</code>）離開 broot 並把 shell 切到該目錄、檔案上 <code>Enter</code> 用預設程式開啟；<code>Ctrl + q</code> 離開，<code>Esc</code> 退回上一層狀態。完整快捷鍵與 verb 清單按 <code>?</code> 叫出。深層結構需要綜觀層級時，樹狀比欄狀直觀。要注意 broot 是導覽與啟動器、不內建文字編輯：改檔得在檔案上開外部編輯器（叫出 <code>$EDITOR</code>），它的強項在樹狀導覽與跳轉，不在看內容或改內容。</p>
<p><code>yazi</code> 是 Miller 欄狀的現代實作，Rust 寫、預覽走非同步，大目錄或檔案很多時捲動不卡。它的程式碼預覽<strong>內建語法高亮</strong>（用內建 highlighter、開箱就有彩色，不必另裝相依，實測程式碼確實彩色渲染）；圖片預覽則看終端機支援度（見最後一節）。要的是「邊瀏覽邊看大塊內容」且在意速度時，yazi 最順。</p>
<p><code>ranger</code> 是 Miller 欄狀的老牌，外掛、設定檔分享與教學資源最多。它的取捨在依賴：ranger 是 Python，遠端機器要有 Python runtime，而且較新的 Python 版本會在啟動時印 deprecation 警告（實測 ranger 1.9.4 配 Python 3.14 會噴 <code>SyntaxWarning: 'return' in a 'finally' block</code>，功能不受影響但訊息惱人）。預覽渲染同樣靠外部相依：ranger 預設的程式碼預覽是<strong>純文字、無語法高亮</strong>，要彩色得另裝 <code>highlight</code>、<code>bat</code> 或 <code>pygments</code> 並啟用 previewer（實測沒裝這些時就只有純文字，與 yazi 開箱即有高亮形成對比）。生態與依賴是它的一體兩面。</p>
<p><code>nnn</code>（C）與 <code>lf</code>（Go）走輕量路線，啟動極快、資源佔用低，適合老舊或資源吃緊的機器；<code>lf</code> 是單一 binary，搬檔即用。</p>
<h2 id="遠端情境的選型">遠端情境的選型</h2>
<p>選型回到「要哪種瀏覽範式」加上「目標機器能裝什麼」兩條軸：</p>
<ul>
<li>想要 IDE 式可展開樹、常跳深層目錄：選 <code>broot</code>，樹狀加模糊跳轉在深層結構找檔最快。</li>
<li>想要欄狀導覽加強預覽（看圖、讀程式碼）、在意速度：選 <code>yazi</code>。</li>
<li>已有 ranger 習慣或需要特定外掛：選 <code>ranger</code>，但先確認遠端有 Python、並接受啟動時的警告訊息。</li>
<li>受限或老舊機器、要單一 binary 搬過去就用：<code>lf</code>（Go）或 <code>nnn</code>（C）。</li>
</ul>
<p>安裝依賴是遠端的隱性分界。編譯型工具（broot、yazi、lf、nnn）搬一個 binary 就近可用；<code>ranger</code> 的 Python 依賴在不給裝套件或 Python 版本尷尬的機器上較麻煩。編譯型的單一 binary 仍要留意 glibc／musl 對得上目標系統，這點與 git 工具相同，見 <a href="/blog/linux/tools/cli/git-line-graph-tools-for-remote-cli/" data-link-title="遠端 CLI 開發的 git 線圖工具選型：tig、lazygit、gitui 與管線增強" data-link-desc="純 CLI、遠端開發情境下查看 git 分支線圖的工具地景，從 tig 唯讀瀏覽到 lazygit/gitui 操作中樞的定位差異，含選型判準與 lazygit 上手、delta side-by-side diff 設定。">git 線圖工具選型</a> 的單一 binary 注意事項。</p>
<p>預覽能力有一條邊界要先知道：程式碼與純文字檔的預覽在任何終端機都穩定，但圖片預覽需要終端機支援影像協定（sixel／kitty）。純文字遠端通道下，沒有影像協定時圖片會退回檔名與中繼資訊，這與 <a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">總覽</a> 對影像協定的取捨一致。</p>
<h2 id="下一步路由">下一步路由</h2>
<ul>
<li>把檔案管理器擺進可持久化的多工器 pane：<a href="/blog/linux/tools/cli/tmux-persistence-and-basics/" data-link-title="tmux 基礎：遠端 session 持久化與基本操作" data-link-desc="tmux 終端機多工器的遠端使用核心：detach/reattach 讓 session 脫離連線生命週期、prefix key 與 window/pane 操作、手機友善的快捷鍵調校，以及 tmux 與 zellij 的選型對照。">tmux 基礎</a>。</li>
<li>編譯型工具搬到遠端的單一 binary 注意事項：<a href="/blog/linux/tools/cli/git-line-graph-tools-for-remote-cli/" data-link-title="遠端 CLI 開發的 git 線圖工具選型：tig、lazygit、gitui 與管線增強" data-link-desc="純 CLI、遠端開發情境下查看 git 分支線圖的工具地景，從 tig 唯讀瀏覽到 lazygit/gitui 操作中樞的定位差異，含選型判準與 lazygit 上手、delta side-by-side diff 設定。">git 線圖工具選型</a>。</li>
<li>檔案管理在遠端工具分類中的定位：<a href="/blog/linux/tools/cli/cli-graphical-tools-overview/" data-link-title="終端機圖形化工具總覽：遠端操作下的 TUI、文字圖表與多工器" data-link-desc="在純文字終端機裡用 ASCII 與製圖字元做出監控儀表板、資料圖表與多視窗操作的工具總覽，並針對 SSH 伺服器、手機平板、低頻寬三種遠端情境給出選型判讀。">終端機圖形化工具總覽</a>。</li>
</ul>
]]></content:encoded></item></channel></rss>