本篇介紹如何在 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