本篇介紹如何在 Linux 系統上使用 chown 指令,更改檔案或目錄的擁有者與群組設定。
在 Linux 系統上如果想要更改檔案或目錄的擁有者或群組,可以使用 chown 這個指令來處理,以下是 chown 的基本用法以及一些實用的範例程式碼。
基本用法
在 Linux 系統上的檔案與目錄都有擁有者以及群組的屬性質,我們可以透過 ls 的輸出來查看每個檔案與目錄的擁有者與群組:
ls -l
ls -l 的輸出中,第三欄與第四欄就是檔案或目錄的擁有者與群組名稱,例如這裡的 log 目錄其擁有者就是 root,群組就是 syslog。
若要更改某個檔案或目錄的擁有者,可以直接使用 chown 更改:
# 將 myfile 的擁有者改為 myuser
sudo chown myuser myfile
這樣就可以將 myfile 這個檔案的擁有者改為 myuser。
如果要更改檔案或目錄的群組,也可以用 chown 更改:
# 將 myfile 的群組改為 mygroup
sudo chown :mygroup myfile
chown 的第一個參數若以冒號開頭,就是代表群組名稱的意思,這一行指令就是將 myfile 這個檔案的群組改為 mygroup。
若要同時更改 myfile 的擁有者與群組,可以這樣寫:
# 同時更改擁有者與群組
sudo chown myuser:mygroup myfile
預設的狀況下,chown 在更改檔案的擁有者與群組後,並不會輸出任何訊息(除非出現錯誤),若要讓 chown 明確顯示更改的結果,可以加上 -v 參數:
# 輸出執行結果 sudo chown -v myuser:mygroup myfile
若不想讓 chown 輸出任何錯誤訊息,可以加上 -f 參數:
# 不輸出任何錯誤訊息 sudo chown -f myuser:mygroup myfile
遞迴更改整個目錄
如果要一次修改某個目錄下所有檔案與子目錄的擁有者與群組,可以使用 chown 加上 -R 參數來處理:
# 遞迴更改整個目錄下的所有檔案 sudo chown -R myuser:mygroup myfolder
這樣就會把 myfolder 這個目錄以及其中所有的檔案與子目錄都改成 myuser:mygroup。
事先確認擁有者與群組
有時候我們在寫指令稿時,會使用 chown 自動更改檔案或目錄的擁有者與群組,此時我們可以在更改擁有者與群組前,先檢查舊的檔案擁有者與群組,確認舊的擁有者與群組屬性是正確的,才繼續更改其擁有者與群組,如果舊的擁有者與群組屬性不符合預期,就不會進行任何變更,避免程式出錯。
chown 的 --from 參數可以指定舊的擁有者與群組,檢查無誤後才會進行變更:
# 確認舊的擁有者與群組為 root:syslog sudo chown --from=root:syslog myuser:mygroup myfile
也可以只檢查擁有者或群組:
# 只確認舊的擁有者為 root sudo chown --from=root myuser:mygroup myfile # 只確認舊的群組為 syslog sudo chown --from=:syslog myuser:mygroup myfile
參考檔案的擁有者與群組
如果我們想要把檔案的擁有者與群組改為跟另一個參考檔案一樣,可以使用 --reference 參數:
# 將 myfile 的擁有者與群組改為跟 reffile 一樣 sudo chown --reference=reffile myfile
這樣就會把 myfile 的擁有者與群組改為跟 reffile 一樣。
實用範例
chown 指令本身的用法很單純,不過我們可以結合 Linux 上面的各種指令工具,寫出各種應用的指令稿。
結合 find 指令與 chown 指令,找出目前目錄下所有的 *.c 檔,並將這些檔案的擁有者與群組改為 myuser:mygroup:
sudo find ./ -name *.c -exec chown myuser:mygroup {} ;
關於 find 指令的用法,可以參考 Unix/Linux 的 find 指令使用教學、技巧與範例整理。
參考資料:HowtoForge
