當初我買MacBook Air的時候特意選擇了高配版本,硬盤空間是128G(2011年的古董機器),在最開始的1-2年內使用還不錯,後來發現愈來愈力不從心,爲了儘量騰出空間,幾乎把全部的照片、視頻和PDF文檔都移到了雲上,也常常用CleanMyMac等工具進行清理,但仍是發現空間被一些已經卸載的App蠶食,既然沒有更好的方案,那就本身寫一個工具來清理吧。css
前幾節內容是比較繁瑣的技術介紹,不感興趣的同窗能夠直接跳到工具的使用那一節html
Mac和Windows操做系統有一個很大的不一樣,大部分App是沒有安裝程序的,通常下載下來就是一個dmg文件,解開以後直接將App拖到應用程序
目錄下就能夠了,因此給人感受卸載也就是將App拖到廢紙簍
而後清空。若是真這樣作就大錯特錯,即便一個最簡單的App都會在下面幾個目錄中或多或少留下記念,這些目錄通常有:前端
~/Libraryreact
~/Library/Application Supportios
~/Library/Application Support/CrashReportergit
~/Library/Cachesgithub
~/Library/Containers正則表達式
~/Library/LaunchAgentsshell
~/Library/Preferences編程
~/Library/PreferencePanes
若是一個程序是經過pkg
方式安裝,或者是在第一次運行時請求管理員權限,那通常還會在以下幾個目錄中留點記念:
/Library
/Library/Application Support
/Library/Extensions
/Library/LaunchAgents
/Library/LaunchDaemons
/Library/PreferencePanes
/Library/Preferences
以上都仍是隻是列出了部分,不一樣的App因爲須要還會在其餘目錄中安裝一些文件,好比字處理軟件通常會在/Library/Fonts下面安裝字體,有些擴展組件會放在/Library/ScriptingAdditions下面。
限於篇幅,我不能一一介紹全部目錄的內容,選幾個重點的目錄大概說一下:
這個目錄能夠說是App最重要的文件目錄,一些App自己並不大,可是須要的支持組件和內容很是多,特別是採用第三方插件和緩存網絡內容的軟件,例如我用的Dash
,自己的大小隻有24MB左右,可是因爲常常瀏覽資料,因此緩存了不少網絡內容,使得它的Support目錄達到了1.37GB!可想而知,若是隻是將App扔到廢紙簍,幾乎不會節省任何空間。
這個目錄下保存的是App設置,通常來講,稍微有點規模的軟件都有本身的配置信息,放在這裏的文件雖然佔空間很少,可是清理掉仍是有好處的,例若有些App不能正常工做,即便卸載重裝也不行,每每就是配置文件出錯了,把這裏清理掉以後再重裝就會有比較好的效果。
這個目錄對於App Store上下載的軟件來講,是最重要的一個目錄,因爲Apple的限制,AppStore的軟件都在沙箱
中運行,每一個軟件在沙箱都有本身的一個完整空間,對於App來講,它覺得本身在一個正常的目錄系統中運行,但實際上不是,操做系統重定位了讀寫位置到沙箱之中。
要是卸載軟件的時候,只是簡單的在Launchpad
中點一下叉來刪除,那不知道又有多少空間莫名其妙地消失了,我曾經用這種方式卸載了網易雲音樂,結果後來才發現,整整417MB的空間不見了……
Mac上的隨機啓動方式之一,熟悉OS X操做系統的同窗應該馬上想到了launchctl
,這裏就是存放啓動配置文件的地方,大部分App只會往這裏寫啓動信息,請神容易送神難,要送神,只有用第三方工具或是本身手動清理了,還有,LaunchAgents 和 LaunchDaemons 是有一些區別的,二者雖然都是隨機啓動,詳細對比請看LaunchAgents VS LaunchDaemons
直到如今我還在想,要是用Cocoa來寫這個工具的話,程序會小不少,如今這個程序壓縮包有40+MB,其實絕大部分都是Electron、React的框架庫,真正的代碼也就幾個文件,加起來不到1M大小。而之因此選擇用JavaScript來作,其實就是想驗證一下React開發一個桌面應用到底會怎樣,JavaScript是否是有一統江湖的本事?
用JavaScript最大的顧慮也許是性能問題,程序雖然難度不大,也有幾個運算比較密集的地方,一是plist信息的解析,二是正則表達式。我將plist解析放到外部庫去作了,正則表達式仍然用Google的V8引擎,目前來看還行。
程序的I/O比較多,須要頻繁統計文件佔用空間大小,查找相關文件,讀取文件信息,雖然JavaScript的最大好處是異步操做,可是在統計出結果以前,界面能作出再多的響應也沒有什麼意義,所以在有些地方,我沒有使用異步操做,要是你感受界面有點卡,那是個人緣由,不是React的錯:)
再給你們推薦一下Mac系統上自帶的AppleScript,這個是Mac上的瑞士軍刀,能和Windows上的Powershell有得一比,我在這個軟件中最後的清理工做實質上就是經過AppleScript來完成的,例如清理工做首先要關閉目標程序,你要是本身編程打算怎樣實現?枚舉系統進程而後kill?用AppleScript就能很是優雅地完成,例如你打開Safari,再同時開一個終端窗口,而後在終端中輸入
osascript -e 'quit app "safari"'
來自於同名電影《Total Recall》,奎德在一次虛擬體驗以後,忽然發現本身原來不是一個默默無聞的工人,而是一個超級特工,那本身究竟是什麼呢?也許真正的本身永遠也找不回來了,可是至少不是如今這樣渾渾噩噩。
我也想借這個意思表示即便經過努力清理,也不必定能還原到最初的狀態,但至少不會這麼糟糕。
這個好像沒有什麼太多能夠說的了,我只是對比了和CleanMyMac的清理效果,至少,在大部分狀況下,我感受還不錯。
能夠清楚地看到,CleanMyMac沒有找到百度雲的Application Support目錄,此外,只找到了登陸項,沒有找到啓動項和啓動文件。
Total Recall不只找到了CleanMyMac全部的內容,還找到了Application Support,這裏有1.14MB空間,此外還找到了LaunchDeamons裏面的啓動項和啓動文件,還發現了com.baidu.netdiskmac.BDYunFinderInstaller
這麼一個鬼……
CleanMyMac列出了一大堆感受挺嚇人的,仔細看才發現其實都是Containers\com.tencent.xinWeChat
這個目錄裏面的子目錄,還拿一個系統臨時目錄來充數(電腦重啓後系統臨時目錄都會清空),卸載的時候其實只要刪除沙箱目錄就萬事大吉。
有一類軟件是以Package方式發佈的,裏面有複雜的安裝步驟,例如Microsoft Office 2016 for Mac這樣的,對於這類軟件,須要分析的內容比較多,打算在完善後將Package卸載整合
軟件界面很簡陋,一是不大會玩CSS和HTML佈局,二是初次使用React,前端高手能夠指點我一下?
《深刻解析MAC OS X & IOS操做系統》 這本書對於想了解Mac系統的人來講是不二之選,值得擁有
Information Property List Key Reference App裏最重要的文件Info.plist的介紹,開發必備
Electron 若是打算用Electron構建一個桌面App,必須從這裏開始
React React的官方網站,雖然個人界面作得挺難看,那是由於我還不怎麼會玩css
Total Recall 這……