<?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>Diagnosis on Tarragon</title><link>https://tarrragon.github.io/blog/tags/diagnosis/</link><description>Recent content in Diagnosis 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/diagnosis/index.xml" rel="self" type="application/rss+xml"/><item><title>診斷心法：讀權威狀態，不靠肉眼猜表象</title><link>https://tarrragon.github.io/blog/linux/debug/diagnosis-read-authoritative-state/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/debug/diagnosis-read-authoritative-state/</guid><description>&lt;p>診斷一個 Linux 問題時，第一個動作不是猜「這看起來像什麼」，而是問「這件事的權威狀態在哪裡、我怎麼去讀它」。畫面上的現象、終端機捲過的輸出、一個視窗長什麼樣，都是表象；表象會騙人。真正能定案的是系統裡記錄這件事的那個權威來源——程式自己的 log、服務註冊表、核心與 systemd 的狀態、資源用量。把判斷建立在權威狀態上，而不是肉眼看到的樣子，是快速且不猜錯的除錯的核心。&lt;/p>
&lt;p>這篇講的是一套判讀紀律，不是某個特定工具。後面幾篇（&lt;a href="../ssh-and-terminal-troubleshooting/">遠端連線與終端機問題&lt;/a>、&lt;a href="../machine-unreachable/">機器連不到或起不來&lt;/a>、&lt;a href="../process-service-state-diagnosis/">程序、服務與狀態怎麼判&lt;/a>）是這套紀律在各種具體情境的應用。&lt;/p>
&lt;h2 id="表象會騙人一個判斷被畫面帶偏兩次的實例">表象會騙人：一個判斷被畫面帶偏兩次的實例&lt;/h2>
&lt;p>一個具體案例最能說明為什麼不能靠肉眼。在一次桌面 shell（畫桌面 UI 的圖形程式，不是 bash/zsh 那種命令列 shell）的除錯裡，畫面中央出現一個「輸入密碼」的覆蓋層，配著時鐘、天氣、通知的整片儀表板。第一眼的判斷很自然：螢幕被鎖住了。&lt;/p>
&lt;p>接著幾個看似合理的檢查反而把判斷帶得更偏：&lt;code>loginctl&lt;/code> 查不到這個 session 的 &lt;code>LockedHint&lt;/code>、&lt;code>pgrep&lt;/code> 找不到任何獨立的鎖屏程式、那個 shell 的 CLI 也沒有 lock 指令。三個訊號湊起來，得出一個「更正」的結論：這不是真的鎖，只是一個長得像鎖屏的儀表板面板。&lt;/p>
&lt;p>這個「更正」是錯的。真正定案是靠讀那個 shell &lt;strong>自己寫的 log&lt;/strong>：log 裡明明白白有鎖屏模組被載入、有 idle 計時器在數秒數、時間到就觸發鎖定。它是一個真的螢幕鎖，走的是 Wayland 的 session-lock 協議。&lt;/p>
&lt;p>為什麼前面三個檢查會誤導？因為它們讀的是&lt;strong>錯的權威來源&lt;/strong>。&lt;code>loginctl&lt;/code> 的 &lt;code>LockedHint&lt;/code> 是 logind（systemd 的登入管理）那一層的鎖定狀態，而這個鎖走的是 Wayland 合成器（compositor，負責把視窗合成到螢幕、管輸入輸出的核心程式）那一層的協議，兩者是獨立機制——查 logind 對合成器層的鎖天生查不到，不是「沒鎖」，是查錯地方。&lt;code>pgrep&lt;/code> 找不到獨立程式，是因為鎖屏畫面由 shell 主程式在自己的行程內畫，本來就沒有另一個可執行檔可抓。真正記錄「有沒有鎖、為什麼鎖」的權威來源，是那個 shell 的 log；讀到它，一次就定案。&lt;/p>
&lt;p>肉眼加上讀錯層的檢查，猜錯了兩次；讀對權威來源，一次就對。教訓不是「那些工具沒用」，是&lt;strong>要先確認你讀的是不是這件事的權威狀態&lt;/strong>。&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;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>某程式的行為&lt;/td>
 &lt;td>那個程式自己的 log 檔&lt;/td>
 &lt;td>程式的 log 路徑、&lt;code>journalctl -u &amp;lt;服務&amp;gt;&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>服務由誰提供&lt;/td>
 &lt;td>D-Bus / socket 的服務註冊&lt;/td>
 &lt;td>&lt;code>busctl&lt;/code>、&lt;code>ss&lt;/code>、&lt;code>lsof&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>登入 / 鎖定狀態&lt;/td>
 &lt;td>logind&lt;/td>
 &lt;td>&lt;code>loginctl show-session&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>服務有沒有在跑&lt;/td>
 &lt;td>systemd unit 狀態&lt;/td>
 &lt;td>&lt;code>systemctl status&lt;/code>、&lt;code>systemctl is-active&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>程式有沒有活著&lt;/td>
 &lt;td>行程表（比對正確的 comm 名）&lt;/td>
 &lt;td>&lt;code>pgrep -x&lt;/code>、&lt;code>ps&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>網路通不通&lt;/td>
 &lt;td>介面 / 路由 / 鄰居表&lt;/td>
 &lt;td>&lt;code>ip -brief a&lt;/code>、&lt;code>ip neigh&lt;/code>、&lt;code>ss&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>磁碟 / 記憶體&lt;/td>
 &lt;td>檔案系統與記憶體用量&lt;/td>
 &lt;td>&lt;code>df -h&lt;/code>、&lt;code>du -sh&lt;/code>、&lt;code>free&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>核心 / 硬體 / 被殺行程&lt;/td>
 &lt;td>kernel ring buffer&lt;/td>
 &lt;td>&lt;code>dmesg&lt;/code>、&lt;code>journalctl -k&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>程式 log 沉默時的 syscall&lt;/td>
 &lt;td>系統呼叫層&lt;/td>
 &lt;td>&lt;code>strace -f -e trace=file&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>這張表的用法不是背它，是養成一個反射：看到現象先問「這件事的權威狀態記在哪張表裡」，再去讀那張表，而不是從畫面推測。下面幾個常見的判錯，都是讀了表象而不是權威來源。&lt;/p>
&lt;h3 id="讀對權威來源但查詢條件要對">讀對權威來源、但查詢條件要對&lt;/h3>
&lt;p>有時權威來源對了，還是會被誤導——因為查詢的條件寫錯。判程式活著沒，行程表是對的權威、&lt;code>pgrep&lt;/code> 是對的工具，但你得比對它&lt;strong>實際的行程名&lt;/strong>：一個程式可能以 symlink 的短名在跑，用你以為的名字 &lt;code>pgrep&lt;/code> 就掃不到、誤判成掛了。判服務由誰提供，權威是服務註冊表而非畫面（送一則通知看畫面有沒有跳不可靠——沒跳可能是勿擾吃掉或根本沒送出）。這兩類的具體查法（&lt;code>pgrep -x&lt;/code>、&lt;code>busctl&lt;/code> 查 D-Bus 擁有者）見 &lt;a href="../process-service-state-diagnosis/">程序、服務與狀態怎麼判&lt;/a>。重點是：權威來源對，還要問對地方、用對條件。&lt;/p>
&lt;h3 id="卡住是資源問題還是相容問題先看資源別先怪相容性">卡住是資源問題還是相容問題：先看資源，別先怪相容性&lt;/h3>
&lt;p>一個耗時的操作中途停住時，很容易直接跳到「是不是這個平台不相容 / 這個東西在這台機器上跑不起來」。但這個結論成本很高（可能讓你放棄一條其實可行的路），而它的權威狀態很好查。一次原始碼編譯跑到一半停住，第一個該看的是資源：&lt;code>df -h&lt;/code> 看磁碟是不是滿了、記憶體是不是被吃光——一次實際的案例就是主機磁碟寫滿把編譯中途打斷，清出空間後同一份原始碼接著編就過，跟平台相容性完全無關。先讀資源狀態排除掉最廉價的解釋，再去懷疑相容性這種昂貴的結論。&lt;/p>
&lt;h2 id="讀程式自己的-log從症狀往上游找">讀程式自己的 log：從症狀往上游找&lt;/h2>
&lt;p>當現象是「某個程式行為不對」，它自己的 log 幾乎總是比終端機捲過的畫面更接近真相。很多程式在終端機只印一段摘要，卻同時把詳細執行紀錄寫進一個 log 檔或系統日誌；當畫面上的訊息不足以定位時，那份 log 裡往往就有明確答案。&lt;/p>
&lt;p>找 log 的常見去處：程式自己的 log 檔（常在 &lt;code>~/.local/state/&amp;lt;程式&amp;gt;/&lt;/code> 或 &lt;code>~/.cache/&amp;lt;程式&amp;gt;/&lt;/code> 底下）、systemd 服務的 &lt;code>journalctl -u &amp;lt;服務名&amp;gt;&lt;/code>、或程式啟動時印出的 log 路徑。找到之後，關鍵是&lt;strong>用症狀當關鍵字往上游搜&lt;/strong>——&lt;code>grep -iE 'error|fail|not found|does not exist' &amp;lt;log&amp;gt;&lt;/code> 挑出異常行，或在 &lt;code>less&lt;/code> 裡用 &lt;code>?pattern&lt;/code> 往回找「第一個」異常（不是停在最後一個下游錯）。一個指令因為前面某個檔案不存在而失敗，終端機可能只報一個看似無關的下游錯誤，但 log 裡會有那句 &lt;code>File does not exist&lt;/code> 直指源頭。一個實際案例：某 shell 換了配色卻沒生效，畫面上什麼錯都沒有，是它的 log 裡一句「讀取 scheme 檔失敗：檔案不存在」點出根因——原來那個檔在 shell 啟動當下還沒被建出來。畫面沉默，log 說話。&lt;/p>
&lt;p>這一層跟 &lt;a href="../../install/observable-bootstrap/">可除錯的 bootstrap&lt;/a> 是一體兩面：那篇談怎麼讓你自己寫的腳本&lt;strong>產生&lt;/strong>一份可診斷的 log，這裡談除錯時怎麼&lt;strong>去讀&lt;/strong>程式自己的 log。兩邊的共同紀律是：不要只盯著終端機捲動，去找那份持久的、詳細的權威紀錄。&lt;/p></description><content:encoded><![CDATA[<p>診斷一個 Linux 問題時，第一個動作不是猜「這看起來像什麼」，而是問「這件事的權威狀態在哪裡、我怎麼去讀它」。畫面上的現象、終端機捲過的輸出、一個視窗長什麼樣，都是表象；表象會騙人。真正能定案的是系統裡記錄這件事的那個權威來源——程式自己的 log、服務註冊表、核心與 systemd 的狀態、資源用量。把判斷建立在權威狀態上，而不是肉眼看到的樣子，是快速且不猜錯的除錯的核心。</p>
<p>這篇講的是一套判讀紀律，不是某個特定工具。後面幾篇（<a href="../ssh-and-terminal-troubleshooting/">遠端連線與終端機問題</a>、<a href="../machine-unreachable/">機器連不到或起不來</a>、<a href="../process-service-state-diagnosis/">程序、服務與狀態怎麼判</a>）是這套紀律在各種具體情境的應用。</p>
<h2 id="表象會騙人一個判斷被畫面帶偏兩次的實例">表象會騙人：一個判斷被畫面帶偏兩次的實例</h2>
<p>一個具體案例最能說明為什麼不能靠肉眼。在一次桌面 shell（畫桌面 UI 的圖形程式，不是 bash/zsh 那種命令列 shell）的除錯裡，畫面中央出現一個「輸入密碼」的覆蓋層，配著時鐘、天氣、通知的整片儀表板。第一眼的判斷很自然：螢幕被鎖住了。</p>
<p>接著幾個看似合理的檢查反而把判斷帶得更偏：<code>loginctl</code> 查不到這個 session 的 <code>LockedHint</code>、<code>pgrep</code> 找不到任何獨立的鎖屏程式、那個 shell 的 CLI 也沒有 lock 指令。三個訊號湊起來，得出一個「更正」的結論：這不是真的鎖，只是一個長得像鎖屏的儀表板面板。</p>
<p>這個「更正」是錯的。真正定案是靠讀那個 shell <strong>自己寫的 log</strong>：log 裡明明白白有鎖屏模組被載入、有 idle 計時器在數秒數、時間到就觸發鎖定。它是一個真的螢幕鎖，走的是 Wayland 的 session-lock 協議。</p>
<p>為什麼前面三個檢查會誤導？因為它們讀的是<strong>錯的權威來源</strong>。<code>loginctl</code> 的 <code>LockedHint</code> 是 logind（systemd 的登入管理）那一層的鎖定狀態，而這個鎖走的是 Wayland 合成器（compositor，負責把視窗合成到螢幕、管輸入輸出的核心程式）那一層的協議，兩者是獨立機制——查 logind 對合成器層的鎖天生查不到，不是「沒鎖」，是查錯地方。<code>pgrep</code> 找不到獨立程式，是因為鎖屏畫面由 shell 主程式在自己的行程內畫，本來就沒有另一個可執行檔可抓。真正記錄「有沒有鎖、為什麼鎖」的權威來源，是那個 shell 的 log；讀到它，一次就定案。</p>
<p>肉眼加上讀錯層的檢查，猜錯了兩次；讀對權威來源，一次就對。教訓不是「那些工具沒用」，是<strong>要先確認你讀的是不是這件事的權威狀態</strong>。</p>
<h2 id="每種問題都有它的權威狀態來源">每種問題都有它的權威狀態來源</h2>
<p>除錯的第一步，是為眼前的現象找到記錄它的權威來源。不同類別的問題，權威來源不同：</p>
<table>
  <thead>
      <tr>
          <th>問題類別</th>
          <th>權威狀態來源</th>
          <th>讀它的工具</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>某程式的行為</td>
          <td>那個程式自己的 log 檔</td>
          <td>程式的 log 路徑、<code>journalctl -u &lt;服務&gt;</code></td>
      </tr>
      <tr>
          <td>服務由誰提供</td>
          <td>D-Bus / socket 的服務註冊</td>
          <td><code>busctl</code>、<code>ss</code>、<code>lsof</code></td>
      </tr>
      <tr>
          <td>登入 / 鎖定狀態</td>
          <td>logind</td>
          <td><code>loginctl show-session</code></td>
      </tr>
      <tr>
          <td>服務有沒有在跑</td>
          <td>systemd unit 狀態</td>
          <td><code>systemctl status</code>、<code>systemctl is-active</code></td>
      </tr>
      <tr>
          <td>程式有沒有活著</td>
          <td>行程表（比對正確的 comm 名）</td>
          <td><code>pgrep -x</code>、<code>ps</code></td>
      </tr>
      <tr>
          <td>網路通不通</td>
          <td>介面 / 路由 / 鄰居表</td>
          <td><code>ip -brief a</code>、<code>ip neigh</code>、<code>ss</code></td>
      </tr>
      <tr>
          <td>磁碟 / 記憶體</td>
          <td>檔案系統與記憶體用量</td>
          <td><code>df -h</code>、<code>du -sh</code>、<code>free</code></td>
      </tr>
      <tr>
          <td>核心 / 硬體 / 被殺行程</td>
          <td>kernel ring buffer</td>
          <td><code>dmesg</code>、<code>journalctl -k</code></td>
      </tr>
      <tr>
          <td>程式 log 沉默時的 syscall</td>
          <td>系統呼叫層</td>
          <td><code>strace -f -e trace=file</code></td>
      </tr>
  </tbody>
</table>
<p>這張表的用法不是背它，是養成一個反射：看到現象先問「這件事的權威狀態記在哪張表裡」，再去讀那張表，而不是從畫面推測。下面幾個常見的判錯，都是讀了表象而不是權威來源。</p>
<h3 id="讀對權威來源但查詢條件要對">讀對權威來源、但查詢條件要對</h3>
<p>有時權威來源對了，還是會被誤導——因為查詢的條件寫錯。判程式活著沒，行程表是對的權威、<code>pgrep</code> 是對的工具，但你得比對它<strong>實際的行程名</strong>：一個程式可能以 symlink 的短名在跑，用你以為的名字 <code>pgrep</code> 就掃不到、誤判成掛了。判服務由誰提供，權威是服務註冊表而非畫面（送一則通知看畫面有沒有跳不可靠——沒跳可能是勿擾吃掉或根本沒送出）。這兩類的具體查法（<code>pgrep -x</code>、<code>busctl</code> 查 D-Bus 擁有者）見 <a href="../process-service-state-diagnosis/">程序、服務與狀態怎麼判</a>。重點是：權威來源對，還要問對地方、用對條件。</p>
<h3 id="卡住是資源問題還是相容問題先看資源別先怪相容性">卡住是資源問題還是相容問題：先看資源，別先怪相容性</h3>
<p>一個耗時的操作中途停住時，很容易直接跳到「是不是這個平台不相容 / 這個東西在這台機器上跑不起來」。但這個結論成本很高（可能讓你放棄一條其實可行的路），而它的權威狀態很好查。一次原始碼編譯跑到一半停住，第一個該看的是資源：<code>df -h</code> 看磁碟是不是滿了、記憶體是不是被吃光——一次實際的案例就是主機磁碟寫滿把編譯中途打斷，清出空間後同一份原始碼接著編就過，跟平台相容性完全無關。先讀資源狀態排除掉最廉價的解釋，再去懷疑相容性這種昂貴的結論。</p>
<h2 id="讀程式自己的-log從症狀往上游找">讀程式自己的 log：從症狀往上游找</h2>
<p>當現象是「某個程式行為不對」，它自己的 log 幾乎總是比終端機捲過的畫面更接近真相。很多程式在終端機只印一段摘要，卻同時把詳細執行紀錄寫進一個 log 檔或系統日誌；當畫面上的訊息不足以定位時，那份 log 裡往往就有明確答案。</p>
<p>找 log 的常見去處：程式自己的 log 檔（常在 <code>~/.local/state/&lt;程式&gt;/</code> 或 <code>~/.cache/&lt;程式&gt;/</code> 底下）、systemd 服務的 <code>journalctl -u &lt;服務名&gt;</code>、或程式啟動時印出的 log 路徑。找到之後，關鍵是<strong>用症狀當關鍵字往上游搜</strong>——<code>grep -iE 'error|fail|not found|does not exist' &lt;log&gt;</code> 挑出異常行，或在 <code>less</code> 裡用 <code>?pattern</code> 往回找「第一個」異常（不是停在最後一個下游錯）。一個指令因為前面某個檔案不存在而失敗，終端機可能只報一個看似無關的下游錯誤，但 log 裡會有那句 <code>File does not exist</code> 直指源頭。一個實際案例：某 shell 換了配色卻沒生效，畫面上什麼錯都沒有，是它的 log 裡一句「讀取 scheme 檔失敗：檔案不存在」點出根因——原來那個檔在 shell 啟動當下還沒被建出來。畫面沉默，log 說話。</p>
<p>這一層跟 <a href="../../install/observable-bootstrap/">可除錯的 bootstrap</a> 是一體兩面：那篇談怎麼讓你自己寫的腳本<strong>產生</strong>一份可診斷的 log，這裡談除錯時怎麼<strong>去讀</strong>程式自己的 log。兩邊的共同紀律是：不要只盯著終端機捲動，去找那份持久的、詳細的權威紀錄。</p>
<h2 id="遠端除錯反而逼出好紀律">遠端除錯反而逼出好紀律</h2>
<p>透過 SSH 遠端除錯時，你看不到那台機器的畫面——這個限制反而是好事。看不到畫面，你就沒得靠肉眼猜，只能去讀權威狀態：查 log、查服務註冊、查行程表、查資源。很多在本地會犯的「看畫面就下結論」的錯，在遠端因為根本沒畫面可看而自動被避開。</p>
<p>反過來說，在本地（或看得到畫面的 VM）除錯時，畫面的存在是個誘惑：它讓你以為看到了就懂了。前面那個鎖屏誤判，正是發生在「看得到畫面」的情境——畫面上的密碼框太有說服力，反而蓋過了去讀 log 的動作。把遠端那套「沒有畫面、只信權威狀態」的紀律，也用在本地，就不會被畫面帶偏。</p>
<h2 id="判讀紀律四步">判讀紀律：四步</h2>
<p>把上面的東西收成一套每次都能跑的流程：</p>
<ol>
<li><strong>描述症狀</strong>：現象是什麼，先講清楚，不要在這步就急著下結論（「畫面出現密碼框」，不是「螢幕鎖了」）。</li>
<li><strong>定位權威來源</strong>：這件事的權威狀態記在哪——log、服務註冊、logind / systemd、行程表、資源用量（用上面那張表對照）。</li>
<li><strong>用對的工具讀它</strong>：讀那個權威來源，不是讀畫面、不是讀終端機捲過的殘影。</li>
<li><strong>權威跟表象矛盾時，信權威</strong>：如果讀到的權威狀態跟你肉眼的第一印象打架，信權威狀態、回頭修正第一印象——那個矛盾點通常就是你原本會猜錯的地方。</li>
</ol>
<p>這套流程的價值不在任何單一工具，在於它讓你的判斷有一個可回溯的依據，而不是一串越猜越偏的直覺。</p>
<h2 id="下一步">下一步</h2>
<ul>
<li>這套心法在遠端連線與終端機情境的應用，見 <a href="../ssh-and-terminal-troubleshooting/">遠端連線與終端機問題</a>。</li>
<li>機器連不到、或根本起不來時怎麼從權威狀態往下查，見 <a href="../machine-unreachable/">機器連不到或起不來</a>。</li>
<li>程序在不在、服務歸誰、狀態怎麼判的具體招式，見 <a href="../process-service-state-diagnosis/">程序、服務與狀態怎麼判</a>。</li>
<li>怎麼讓你自己的 bootstrap 腳本產生可讀的 log，見 <a href="../../install/observable-bootstrap/">可除錯的 bootstrap</a>。</li>
</ul>
]]></content:encoded></item><item><title>Linux 除錯與診斷</title><link>https://tarrragon.github.io/blog/linux/debug/</link><pubDate>Thu, 02 Jul 2026 00:00:00 +0000</pubDate><guid>https://tarrragon.github.io/blog/linux/debug/</guid><description>&lt;p>這個系列處理機器裝好、能連入之後出問題時怎麼判。核心是一套判讀紀律：先讀權威狀態，不靠肉眼猜表象——因為 Linux 上一個現象看起來像 A 卻常常是 B，看畫面就下結論容易猜錯。系列特別涵蓋遠端使用與本地除錯兩種情境，因為遠端看不到畫面，反而逼出「只信權威狀態」的好紀律。&lt;/p>
&lt;p>內容來自一次完整的 Arch Linux / Hyprland VM 實測與除錯：SSH 連不上、終端機噴亂碼、虛擬機開不起來、鎖屏狀態判錯、服務歸屬搞混——每個卡關點都被記錄下來，蒸餾成可重用的判讀路由，不綁特定發行版。&lt;/p>
&lt;h2 id="從哪篇開始">從哪篇開始&lt;/h2>
&lt;p>先讀 &lt;a href="diagnosis-read-authoritative-state/">診斷心法&lt;/a> 建立判讀紀律（讀權威狀態、四步流程），再依症狀進對應情境。&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;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="diagnosis-read-authoritative-state/">診斷心法：讀權威狀態，不靠肉眼猜表象&lt;/a>&lt;/td>
 &lt;td>貫穿所有除錯的判讀紀律：每種問題的權威狀態來源、讀程式自己的 log、四步流程&lt;/td>
 &lt;td>一個現象看起來像 A 卻可能是 B，怎麼不猜錯&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="ssh-and-terminal-troubleshooting/">遠端連線與終端機問題&lt;/a>&lt;/td>
 &lt;td>SSH 斷線後終端機噴亂碼、遠端打字亂碼（locale/terminfo）、從 SSH 操控圖形桌面&lt;/td>
 &lt;td>連上了但終端機或 session 狀態不對怎麼修&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="machine-unreachable/">機器連不到或起不來&lt;/a>&lt;/td>
 &lt;td>SSH 突然連不上（ARP 診斷）、虛擬機開不起來（guest vs 宿主側）、磁碟滿的連鎖&lt;/td>
 &lt;td>一台機器連不到或開不了機，從哪一層往下查&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="process-service-state-diagnosis/">程序、服務與狀態怎麼判&lt;/a>&lt;/td>
 &lt;td>程式活著沒（pgrep 陷阱）、服務由誰提供（busctl）、session 鎖沒鎖、多工器 session 存活&lt;/td>
 &lt;td>判某個東西的狀態時，該讀哪個權威來源&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="service-failure-monitoring/">服務掛了怎麼自動知道&lt;/a>&lt;/td>
 &lt;td>從手動 systemctl 到 OnFailure 主動告警、先重啟才告警、hung 偵測、canary、機器死掉的體外心跳&lt;/td>
 &lt;td>不想肉眼盯服務死活，怎麼自動監控並推播&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="ntfy-push-notification-service/">ntfy：推送通知服務&lt;/a>&lt;/td>
 &lt;td>ntfy 的 pub-sub 模型、開源 vs 標準、公共站 vs 自架、topic 就是密碼的安全模型、同類對照&lt;/td>
 &lt;td>用 ntfy 推告警、想搞懂它是什麼、該不該自架&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="依症狀的讀法">依症狀的讀法&lt;/h2>
&lt;ul>
&lt;li>&lt;strong>連不上、開不了機&lt;/strong>：機器 SSH 連不到、或虛擬機開不起來 → &lt;a href="machine-unreachable/">機器連不到或起不來&lt;/a>。&lt;/li>
&lt;li>&lt;strong>終端機行為怪&lt;/strong>：SSH 斷線後終端機噴亂碼、遠端打字亂碼、要從 SSH 操控圖形桌面 → &lt;a href="ssh-and-terminal-troubleshooting/">遠端連線與終端機問題&lt;/a>。&lt;/li>
&lt;li>&lt;strong>某個狀態判不準&lt;/strong>：程式活著沒、服務歸誰、鎖沒鎖、session 還在不在 → &lt;a href="process-service-state-diagnosis/">程序、服務與狀態怎麼判&lt;/a>。&lt;/li>
&lt;li>&lt;strong>不想手動盯服務死活&lt;/strong>：想讓 service 掛掉時主動推播、或擔心整台機器當掉沒人知道 → &lt;a href="service-failure-monitoring/">服務掛了怎麼自動知道&lt;/a>。&lt;/li>
&lt;li>&lt;strong>想建立通用紀律&lt;/strong>：想要一套適用各種症狀的「不猜錯」判讀方法 → &lt;a href="diagnosis-read-authoritative-state/">診斷心法&lt;/a>。&lt;/li>
&lt;/ul>
&lt;h2 id="跟其他模組的交叉引用">跟其他模組的交叉引用&lt;/h2>
&lt;ul>
&lt;li>&lt;a href="../install/">Linux 安裝與機器初始化&lt;/a>——本系列的上游；把機器裝好、連入之後才輪到除錯。其中 &lt;a href="../install/observable-bootstrap/">可除錯的 bootstrap&lt;/a> 談怎麼讓腳本產生可診斷的 log，與診斷心法的「讀程式自己的 log」一體兩面。&lt;/li>
&lt;li>&lt;a href="../tools/">Linux 工具選單&lt;/a>——除錯要用的工具（CLI / 圖形桌面 / 遠端）有哪些選擇。&lt;/li>
&lt;li>&lt;a href="https://tarrragon.github.io/blog/linux/dotfile/07-desktop-maintenance/log-reading-diagnostic-tools/" data-link-title="日誌判讀與診斷工具" data-link-desc="知道桌面出了問題但不確定原因時回來讀 — journalctl、dmesg、hyprctl、systemctl 的使用方式和常見 log pattern">模組七：日誌判讀與診斷工具&lt;/a>——桌面環境層的日誌判讀，與這裡的通用診斷紀律呼應。&lt;/li>
&lt;/ul></description><content:encoded><![CDATA[<p>這個系列處理機器裝好、能連入之後出問題時怎麼判。核心是一套判讀紀律：先讀權威狀態，不靠肉眼猜表象——因為 Linux 上一個現象看起來像 A 卻常常是 B，看畫面就下結論容易猜錯。系列特別涵蓋遠端使用與本地除錯兩種情境，因為遠端看不到畫面，反而逼出「只信權威狀態」的好紀律。</p>
<p>內容來自一次完整的 Arch Linux / Hyprland VM 實測與除錯：SSH 連不上、終端機噴亂碼、虛擬機開不起來、鎖屏狀態判錯、服務歸屬搞混——每個卡關點都被記錄下來，蒸餾成可重用的判讀路由，不綁特定發行版。</p>
<h2 id="從哪篇開始">從哪篇開始</h2>
<p>先讀 <a href="diagnosis-read-authoritative-state/">診斷心法</a> 建立判讀紀律（讀權威狀態、四步流程），再依症狀進對應情境。</p>
<h2 id="文章">文章</h2>
<table>
  <thead>
      <tr>
          <th>文章</th>
          <th>主題</th>
          <th>回答什麼問題</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td><a href="diagnosis-read-authoritative-state/">診斷心法：讀權威狀態，不靠肉眼猜表象</a></td>
          <td>貫穿所有除錯的判讀紀律：每種問題的權威狀態來源、讀程式自己的 log、四步流程</td>
          <td>一個現象看起來像 A 卻可能是 B，怎麼不猜錯</td>
      </tr>
      <tr>
          <td><a href="ssh-and-terminal-troubleshooting/">遠端連線與終端機問題</a></td>
          <td>SSH 斷線後終端機噴亂碼、遠端打字亂碼（locale/terminfo）、從 SSH 操控圖形桌面</td>
          <td>連上了但終端機或 session 狀態不對怎麼修</td>
      </tr>
      <tr>
          <td><a href="machine-unreachable/">機器連不到或起不來</a></td>
          <td>SSH 突然連不上（ARP 診斷）、虛擬機開不起來（guest vs 宿主側）、磁碟滿的連鎖</td>
          <td>一台機器連不到或開不了機，從哪一層往下查</td>
      </tr>
      <tr>
          <td><a href="process-service-state-diagnosis/">程序、服務與狀態怎麼判</a></td>
          <td>程式活著沒（pgrep 陷阱）、服務由誰提供（busctl）、session 鎖沒鎖、多工器 session 存活</td>
          <td>判某個東西的狀態時，該讀哪個權威來源</td>
      </tr>
      <tr>
          <td><a href="service-failure-monitoring/">服務掛了怎麼自動知道</a></td>
          <td>從手動 systemctl 到 OnFailure 主動告警、先重啟才告警、hung 偵測、canary、機器死掉的體外心跳</td>
          <td>不想肉眼盯服務死活，怎麼自動監控並推播</td>
      </tr>
      <tr>
          <td><a href="ntfy-push-notification-service/">ntfy：推送通知服務</a></td>
          <td>ntfy 的 pub-sub 模型、開源 vs 標準、公共站 vs 自架、topic 就是密碼的安全模型、同類對照</td>
          <td>用 ntfy 推告警、想搞懂它是什麼、該不該自架</td>
      </tr>
  </tbody>
</table>
<h2 id="依症狀的讀法">依症狀的讀法</h2>
<ul>
<li><strong>連不上、開不了機</strong>：機器 SSH 連不到、或虛擬機開不起來 → <a href="machine-unreachable/">機器連不到或起不來</a>。</li>
<li><strong>終端機行為怪</strong>：SSH 斷線後終端機噴亂碼、遠端打字亂碼、要從 SSH 操控圖形桌面 → <a href="ssh-and-terminal-troubleshooting/">遠端連線與終端機問題</a>。</li>
<li><strong>某個狀態判不準</strong>：程式活著沒、服務歸誰、鎖沒鎖、session 還在不在 → <a href="process-service-state-diagnosis/">程序、服務與狀態怎麼判</a>。</li>
<li><strong>不想手動盯服務死活</strong>：想讓 service 掛掉時主動推播、或擔心整台機器當掉沒人知道 → <a href="service-failure-monitoring/">服務掛了怎麼自動知道</a>。</li>
<li><strong>想建立通用紀律</strong>：想要一套適用各種症狀的「不猜錯」判讀方法 → <a href="diagnosis-read-authoritative-state/">診斷心法</a>。</li>
</ul>
<h2 id="跟其他模組的交叉引用">跟其他模組的交叉引用</h2>
<ul>
<li><a href="../install/">Linux 安裝與機器初始化</a>——本系列的上游；把機器裝好、連入之後才輪到除錯。其中 <a href="../install/observable-bootstrap/">可除錯的 bootstrap</a> 談怎麼讓腳本產生可診斷的 log，與診斷心法的「讀程式自己的 log」一體兩面。</li>
<li><a href="../tools/">Linux 工具選單</a>——除錯要用的工具（CLI / 圖形桌面 / 遠端）有哪些選擇。</li>
<li><a href="/blog/linux/dotfile/07-desktop-maintenance/log-reading-diagnostic-tools/" data-link-title="日誌判讀與診斷工具" data-link-desc="知道桌面出了問題但不確定原因時回來讀 — journalctl、dmesg、hyprctl、systemctl 的使用方式和常見 log pattern">模組七：日誌判讀與診斷工具</a>——桌面環境層的日誌判讀，與這裡的通用診斷紀律呼應。</li>
</ul>
]]></content:encoded></item></channel></rss>