2012年5月11日 星期五

改變檔案/目錄的權限

公司前陣子在進行主機的整理,部分服服搬到的新家,也因此出現一些煩人的小問題。其中一個是網路磁碟的連接。本來應該運作正常的服務,不知道是在什麼時候,所有連線的檔案和目錄權限都變成「770」,明明設定一行都沒改過,讓人摸不著頭腦。

權限上的改變,一來讓檔案是在命令列裡看起來怪怪的,一般的圖片檔案名稱變成可執行的綠色,二來是本來可以使用 apache 服務以唯讀方式取出的檔案也因為檔案不允許 other 身分存取而發生錯誤。因此搞得不能無視它,要想辦法解決。

連線的兩台主機都是 Linux ,所以當時選擇的是 nfs 協定串接,不過在檢查過設定仍沒有找到解決方式,加上傳輸的資料並不大,只是偶而檢查的使用需要。所以打算改成其它主機使用的 samba 協定(雖然主機中沒有一台是 windows 系統),看看是不是就避開權限問題。

改變協定的結果是……沒有用。所有的檔案還是處於 770 的權限設定,至於它是因為系統有問題,還是這是新一代的網路連線設定就不得而知了,這部分的理解工作就先交給 MIS 負責去作,因為手上還有許多工作得處理。

最後解決的方式,是在 mount 的時候加上指定擁有者的參數,讓網頁服務的執行帳號(那台是 nobody)是其擁有者或群組成員。雖然沒有辦法解決奇怪權限的現象,但是至少可以讓服務正常運作。

而不久之後,又發現到有部分資料有缺漏的狀況,得由這個網磁碟抓取,複製下來後為了統一將權限修改回「正常」的狀況,也就是資料夾 755 檔案 644 ,所以到網路上查查有沒有類似的指令可以大量進行改寫。

運氣還算不錯,不久就在鳥哥的討論區找到這篇相關的討論,再經過簡單的修改…最終達到我修改權限設定的需求。

指令的原型是…
find . -type d -exec chmod 755 {} \;

可以看得出來是利用 find 指令,去找當前目錄「.」下的所有檔案(含資料夾),而條件是所有的目錄「-type d」再對所有找到的項目進行其它指令呼叫「-exec」,來改變其權限「chmod 775」。不過後面的大括號和「\;」就不知道要怎麼解釋了。

所以,我使用兩行指令達到我的目的。
find . -type f -exec chmod 644 {} \; 
# 我將 -type d 改成 -type f 就表示找一般的檔案
find . -type d -exec chmod 755 {} \; 

作點小小的記錄的,免得未來有需要的時候又要回到茫茫網海裡找答案…

沒有留言:

張貼留言