指南/哪個App在使用檔案

如何在Mac上找出哪個App在使用某個檔案

Atta 🐬

Vitals創辦人

發佈於

簡短回答

若要找出Mac上是哪個App打開了某個檔案,請在「終端機」中輸入lsof和一個空格,把檔案拖到視窗中,然後按下Return。第一欄就是程序名稱。如果是檔案夾,lsof +D會列出其中打開的所有項目。在活動監視器中,按兩下一個程序並打開「打開的檔案和連接埠」,這在你已經懷疑是某個App時很有用。結束那個App,檔案就釋放了。Vitals是一款Mac活動監視器和程序檢查器,能一次搜尋所有打開的檔案:在「打開的檔案」中輸入名稱的一部分,就會列出佔用它的App。

如何用「終端機」找出在使用檔案的App

  1. 01 打開「終端機」,它位於「應用程式」→「工具程式」。
  2. 02 輸入lsof和一個空格,從Finder把檔案拖到視窗中,然後按下Return。
  3. 03 看前兩欄:程序名稱和它的PID。沒有輸出表示你的程序都沒有打開這個檔案。
  4. 04 在前面加上sudo再執行一次,就會包括macOS和其他使用者執行的程序。
  5. 05 結束它列出的App。對於沒有視窗的程序,執行kill <PID>並加上它的PID。

這個程序可能是輔助程式而不是App:QuickLookUIService屬於快速查看,名稱以Helper結尾的則屬於名稱前半段的那個App。

程式打開檔案時,macOS會讓檔案保持忙碌,所以垃圾桶不肯刪除它、重新命名會失敗,或磁碟無法退出。只要知道去哪裡找,程序很容易找到。下表把每種訊息和它常見的原因配對。

檔案正在使用中:你看到的訊息,以及可能的原因

你看到的可能的原因怎麼做
「無法完成操作,因為項目正在使用中」 有App打開了檔案,或快速查看正在預覽它 關閉文件或預覽,然後再試一次
垃圾桶清不掉 垃圾桶裡的某個檔案仍在某個App中打開著 結束App,或重新開機後清空垃圾桶
檔案無法重新命名或搬移 有App正在寫入它 等儲存或輸出完成
磁碟無法退出 上面有檔案或檔案夾打開著 請參閱Mac無法退出磁碟
檔案已鎖定 「取得資訊」中勾選了「已鎖定」,這和正在使用中不一樣 在「取得資訊」中取消勾選「已鎖定」

在活動監視器中尋找

活動監視器無法跨檔案搜尋。如果你懷疑是某個App,就按兩下它,打開「打開的檔案和連接埠」標籤頁,在列表中找那個檔案的路徑。忙碌的App列表會很長,而且一次只涵蓋一個程序。

解讀lsof的輸出結果

每一行是一個打開的檔案。COMMAND是程序,PID是它的編號,FD是檔案的打開方式,NAME是路徑。在FD中,數字後面加r表示讀取、w表示寫入、u表示兩者皆是;cwd是程序工作所在的檔案夾,txt是程式本身和它載入的程式庫。

某個程序打開的所有項目

若要反過來從程序查它的檔案,請執行lsof -p <PID>並加上它的PID。lsof -c Preview會列出名稱以你給的字母開頭的每個程序的檔案。

檔案在垃圾桶裡時

只要垃圾桶裡有任何檔案打開著,就無法清空垃圾桶。結束打開它的App。如果你看不出是哪個,lsof +D ~/.Trash會列出那裡打開的項目;「終端機」可能需要「完整磁碟取用權限」才能查看。重新開機會關閉所有東西,之後垃圾桶就能清空了。

沒有東西打開它時

如果加上sudo後lsof仍什麼都沒印出,檔案就沒有在使用中。仍然無法更改的檔案,可能是已鎖定、屬於其他使用者,或位於以唯讀方式裝載的磁碟上。「取得資訊」會顯示「已鎖定」註記框和權限。

Vitals多了什麼

Vitals會依名稱搜尋Mac上所有打開的檔案。

  • 「開發者」標籤頁中的「打開的檔案」:按⌘F,輸入檔案名稱或路徑的一部分,佔用相符檔案的每個App都會列出
  • 依App分組,而不是依程序:輔助程式會算在它所屬的App底下
  • 每個App在磁碟上的檔案,以及有幾個是為寫入而打開的
  • 在同一列中結束App,確認後執行

小提醒

  • 沒有「完整系統指標」時,macOS自己的程序所打開的檔案不會列出,Vitals會說明略過了幾個。
  • Vitals會顯示是誰打開了檔案。它不會解鎖檔案,也不會更改檔案的權限。
  • 「打開的檔案」在視窗中,不在選單列下拉式面板中。
購買Vitals $29 在首發期間以$29終身使用,之後為$49,一次付清,14天內可退款。或一年更新$15。

大家常問的問題

如何在Mac上查看是哪個程序在使用某個檔案?

在「終端機」中執行lsof,後面加上檔案的路徑。第一欄是程序,第二欄是它的PID。

為什麼我的Mac說項目正在使用中?

某個App或預覽仍然打開著這個檔案。關閉文件、結束App或關閉快速查看預覽,然後再試一次。

如何在Mac上刪除正在使用中的檔案?

用lsof找出那個App並結束它,然後把檔案移到垃圾桶。如果什麼都沒列出,就重新開機後再刪除它。

活動監視器會顯示打開的檔案嗎?

會,但一次只顯示一個程序:按兩下一個程序,然後打開「打開的檔案和連接埠」。它無法跨所有程序搜尋某個檔案。

lsof需要sudo嗎?

不加sudo時,它只列出你自己的程序。加上sudo後,macOS自己的程序也會包括在內,例如Spotlight的。

有沒有能顯示是哪個App打開了檔案的App?

Vitals就可以。在它的「打開的檔案」區塊中輸入檔案名稱的一部分,不論在哪個磁碟,佔用它的App都會列出。

詞彙表中的相關條目

更多指南