<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>终端 on Ejecta</title>
    <link>https://www.ejecta.app/zh-hans/tags/%E7%BB%88%E7%AB%AF/</link>
    <description>Recent content in 终端 on Ejecta</description>
    <generator>Hugo</generator>
    <language>zh-Hans</language>
    <lastBuildDate>Tue, 10 Feb 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.ejecta.app/zh-hans/tags/%E7%BB%88%E7%AB%AF/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>diskutil eject：如何从 Mac Terminal 推出驱动器</title>
      <link>https://www.ejecta.app/zh-hans/blog/how-to-eject-drive-from-terminal-mac/</link>
      <pubDate>Tue, 10 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://www.ejecta.app/zh-hans/blog/how-to-eject-drive-from-terminal-mac/</guid>
      <description>&lt;p&gt;访达告诉你驱动器正在使用。它不告诉你是什么在使用它，也不告诉你该怎么办。Terminal 两者都能做到。&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;快速答案：&lt;/strong&gt; 运行 &lt;code&gt;diskutil eject /Volumes/YourDriveName&lt;/code&gt; 从 Terminal 推出一个驱动器。如果失败，用 &lt;code&gt;sudo lsof /Volumes/YourDriveName&lt;/code&gt; 查看是什么在阻止推出，用 &lt;code&gt;kill &amp;lt;PID&amp;gt;&lt;/code&gt; 停止那个肇事的进程，然后再推出一次。作为最后手段，&lt;code&gt;diskutil unmountDisk force /dev/diskN&lt;/code&gt; 会强制卸下驱动器，但仅在没有任何东西正在积极写入时才这样做。&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;如果你对命令行得心应手，那么在 macOS 上处理顽固的驱动器推出，Terminal 是最强大的方式。而如果你还不太习惯它，这些命令是一个很好的起点。&lt;/p&gt;&#xA;&lt;h2 id=&#34;用-diskutil-eject-进行基本推出&#34;&gt;用 diskutil eject 进行基本推出&lt;/h2&gt;&#xA;&lt;p&gt;从 Mac Terminal 推出外置驱动器最直接的方式：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;diskutil eject /Volumes/YourDriveName&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将 &lt;code&gt;YourDriveName&lt;/code&gt; 替换为驱动器的实际名称——和它在访达中显示的完全一致。如果名称含有空格，就用引号把它括起来：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;diskutil eject &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;/Volumes/My Drive&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这和点按访达中的推出按钮做的是同一件事。如果成功，驱动器会干净地卸载，你就完事了。如果失败，你会看到一条比访达更详细、更有用的错误消息。&lt;/p&gt;&#xA;&lt;p&gt;你也可以只卸载而不推出（驱动器在磁盘工具中仍可见，但未装载）：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;diskutil unmount /Volumes/YourDriveName&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个区别对多分区驱动器很重要。&lt;code&gt;unmount&lt;/code&gt; 移除一个宗卷。&lt;code&gt;eject&lt;/code&gt; 一次性移除物理设备及其所有宗卷。&lt;/p&gt;&#xA;&lt;h2 id=&#34;用-diskutil-list-找到驱动器的标识符&#34;&gt;用 diskutil list 找到驱动器的标识符&lt;/h2&gt;&#xA;&lt;p&gt;在使用更高级的命令之前，你需要驱动器的标识符。列出所有已连接的磁盘：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;diskutil list&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;输出会显示每个磁盘及其分区。你的外置驱动器会是类似 &lt;code&gt;disk4&lt;/code&gt; 或 &lt;code&gt;disk5&lt;/code&gt; 的形式。内部驱动器通常是 &lt;code&gt;disk0&lt;/code&gt; 和 &lt;code&gt;disk1&lt;/code&gt;。&lt;/p&gt;&#xA;&lt;p&gt;要获得仅含外置驱动器、更易读的概览：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;diskutil list external&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;一旦你知道了磁盘标识符，你也可以用 &lt;code&gt;/dev/&lt;/code&gt; 路径而非宗卷名称来推出：&lt;/p&gt;</description>
    </item>
    <item>
      <title>面向 Mac 用户的 lsof 命令详解</title>
      <link>https://www.ejecta.app/zh-hans/blog/lsof-command-mac-users/</link>
      <pubDate>Mon, 08 Dec 2025 00:00:00 +0000</pubDate>
      <guid>https://www.ejecta.app/zh-hans/blog/lsof-command-mac-users/</guid>
      <description>&lt;p&gt;你的外置驱动器推不出来。macOS 给你那条令人抓狂、含糊其辞的消息，说“可能有一个或多个程序正在使用它”。哪些程序？它不肯说。这正是 &lt;code&gt;lsof&lt;/code&gt; 派上用场的地方。&lt;/p&gt;&#xA;&lt;p&gt;这个名字代表“列出打开的文件”（list open files），而它做的正是这件事。在像 macOS 这样基于 Unix 的系统上，几乎一切都被当作文件，包括网络连接、设备和磁盘宗卷。当你无法推出一个驱动器时，&lt;code&gt;lsof&lt;/code&gt; 会精确地告诉你是哪个进程在扣押它。&lt;/p&gt;&#xA;&lt;h2 id=&#34;基本语法&#34;&gt;基本语法&lt;/h2&gt;&#xA;&lt;p&gt;在推出问题上使用 lsof 最简单的方式是：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsof /Volumes/YourDriveName&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将“YourDriveName”替换为驱动器的实际名称。如果名称含有空格，就用引号把整个路径括起来：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;background-color:#f7f7f7;-moz-tab-size:2;-o-tab-size:2;tab-size:2;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;lsof &lt;span style=&#34;color:#0a3069&#34;&gt;&amp;#34;/Volumes/My Backup Drive&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这会返回一份列表，列出每一个在该宗卷上持有打开文件句柄的进程。每一行显示进程名称、它的 ID（PID）、运行它的用户，以及正被访问的具体文件的相关信息。&lt;/p&gt;&#xA;&lt;h2 id=&#34;读懂输出&#34;&gt;读懂输出&lt;/h2&gt;&#xA;&lt;p&gt;一份典型的 lsof 输出看起来大致是这样的：&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;COMMAND     PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME&#xA;mds_store  1234   root   4r   REG   1,12   524288  ...  /Volumes/External/.Spotlight-V100/...&#xA;Finder     5678   you    3r   DIR   1,12     1024  ...  /Volumes/External&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最重要的几列是 COMMAND（进程名称）、PID（你用来终止它的进程 ID），以及 NAME（正被访问的实际文件路径）。&lt;/p&gt;&#xA;&lt;p&gt;FD 列显示文件是如何被使用的。一个数字后面跟着“r”表示读取访问，“w”表示写入，“u”表示读写皆有。如果你看到“cwd”，说明该进程把那个位置作为它的当前工作目录。当你有一个 Terminal 窗口打开在驱动器上的某个文件夹时，就会发生这种情况。&lt;/p&gt;&#xA;&lt;h2 id=&#34;找出是什么在阻止你的驱动器&#34;&gt;找出是什么在阻止你的驱动器&lt;/h2&gt;&#xA;&lt;p&gt;具体到推出问题，你通常只需知道出现了哪些进程名称。常见的肇事者包括 &lt;code&gt;mds&lt;/code&gt; 和 &lt;code&gt;mds_stores&lt;/code&gt;（聚焦索引）、&lt;code&gt;Finder&lt;/code&gt;、&lt;code&gt;QuickLookUIService&lt;/code&gt;（缩略图生成）和 &lt;code&gt;fsevents&lt;/code&gt;（文件系统监视器）。&lt;/p&gt;&#xA;&lt;p&gt;如果你看到大量输出、想缩小范围，你可以使用 grep：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
