多次在 Mac 使用過程中遇到 Operation Not Permitted 問題痢缎,之前都是略過,今天好好摸索了一把,搞明白了道理主儡,記錄下來。
好幾次整理移動硬盤數(shù)據(jù)的時候惨缆,都遇到了?Operation Not Permitted?問題糜值,文件移動不了,也刪除不掉坯墨,第一次遇到?jīng)]理會寂汇,第二次是打開虛擬機,在 Windows 中操作這些問題文件捣染,今天又遇到了骄瓣,決定消滅它。
Apple 在 OS X 10.11 以后的版本中默認(rèn)啟動了一項系統(tǒng)保護(hù)程序耍攘,叫做 System Integrity Protection榕栏,也被喚作 rootless(寓意讓 root 弱一點),該程序意在保護(hù)電腦不被惡意程序攻擊蕾各,但是對于我們這群程序員扒磁,很多保護(hù)是多余的,甚至給我們帶來了很多麻煩示损。
SIP 會鎖定幾個系統(tǒng)文件目錄:
/System
/sbin
/usr (/usr/local 除外)
在 SIP 的保護(hù)下渗磅,部分軟件、功能检访、腳本都會失效始鱼,我們可以通過如下步驟關(guān)閉 SIP:
重啟電腦,按下?Command + R?直到聽到開機聲音脆贵,此時電腦會進(jìn)入恢復(fù)模式(Recovery Mode)
當(dāng) OSX 工具出現(xiàn)在屏幕中時医清,下拉工具(Utilities)菜單,選擇終端(Terminal)
鍵入?csrutil disable卖氨,回車
電腦重啟后会烙,SIP 就關(guān)閉了
恢復(fù) SIP 的方式同上,只不過終端中鍵入?csrutil enable筒捺。通過?csrutil status?可以檢測系統(tǒng)當(dāng)前 SIP 的啟動狀態(tài):
$ csrutil status
System Integrity Protection status: enabled.
可能你也遇到過在 Linux 下刪除文件報錯:
root@ubuntu:/home/barret/work# rm -f 1.md
rm: cannot remove ‘1.md’: Operation not permitted
這個時候可以通過?lsattr?命令看看該文件是否被打了 flags:
root@ubuntu:/home/barret/work# lsattr 1.md
----i--------e-- ./1.md
如果文件上存在?i?標(biāo)記柏腻,那肯定是刪不掉的,同樣這個文件也不能被編輯系吭∥迳可以進(jìn)入 root 模式,去除這個標(biāo)記:
root@ubuntu:/home/barret/work# chattr -i 1.md
給保護(hù)文件添加標(biāo)記的方式:
root@ubuntu:/home/barret/work# chattr +i 1.md
也比較簡單。
文本算是一個經(jīng)驗性的小科普沃缘,希望對你有幫助躯枢。