《Linux – Ubuntu 5分鐘搞懂chmod與chown – 學習筆記》

Telegram share !

相信很多Linux的系統維運人員與開發人員,日常都會處理到有關於檔案的權限問題,如開發網站程式的時候,開發人員上傳本機的程式檔案至Web Server後,發現程式無法執行,這時候很有可能是因為該檔案的擁有者從www-data變成你的帳號,導致無法執行,這時候就需要做chown來變更使用者,如果變更後還是無法執行,這時候權限部分,也要一併調整,這時候可以透過chmod來做調整,本篇筆記我會記錄關於chmod與chown,我所知道的知識分享給大家參考,我也順便紀錄下來當作備忘錄,也希望藉由此次分享讓初學者能更快掌握相關語法。

測試資料

1.可以先在/var/www/建立一個 test資料夾

2.檔案名稱可以用testdata.txt,使用vim testdata.txt建立並將以下資料貼入即可開始測試

chmod & chown測試

測試資料權限

查詢一下這個檔案的權限

root@ip-192-168-0-99:/var/www/test# ls -l testdata.txt 
-rw-r--r-- 1 ubuntu ubuntu 13 Oct  5 20:47 testdata.txt
#很明顯地這個檔案權限是644,後面會詳細介紹該權限的意思

chmod基本用法:

1.數字模式

chmod指令

修改檔案及目錄權限:sudo chmod ××× [檔案或目錄]

root@ip-192-168-0-99:/var/www/test# sudo chmod 755 testdata.txt 
root@ip-192-168-0-99:/var/www/test# ls -l testdata.txt 
-rwxr-xr-x 1 ubuntu ubuntu 13 Oct  5 20:52 testdata.txt
#可以參考上面的圖片解釋

常用的chmod數字指令

sudo chmod 600 [檔案或目錄] (只有User有讀和寫的權限)
sudo chmod 644 [檔案或目錄] (User有讀和寫的權限,Group,Other只有讀的權限)
sudo chmod 700 [檔案或目錄] (只有User有讀和寫以及執行的權限)
sudo chmod 666 [檔案或目錄] (每個人都有讀和寫的權限)
sudo chmod 755 [檔案或目錄] (User有讀、寫、執行的權限,Group,Other有讀和執行的權限)
sudo chmod 777 [檔案或目錄] (每個人都有讀和寫以及執行的權限)

指令解析

chmod [參數] [模式] [檔案或目錄]

選項:
-f, –silent, –quiet:隱藏任何錯誤訊息。
-v, –verbose:列出每個檔案處理之詳細過程。
-c, –changes:與-v類似,但是只列出有更改之過程。
-R, –recursive:以遞迴的方式對目前目錄下的所有檔案及子目錄進行更改。
–help:列出幫助資訊。
–version:列出版本資訊。

模式:

模式代表著要開啟什麼樣的權限,可以用字串模式或數字模式表達。

※如果還是覺得複雜也可以用這種線上工具勾一勾即可幫你算出權限數字=>Chmod Calculator

2.字串模式

使用者縮寫
u = User(擁有者)
g = Group(群組)
o = Others(公開)
a = all(所有使用者)

功能縮寫
+ = 增加權限
- = 去除權限
= = 重新設定指定使用者類型的權限

模式縮寫
r = 可讀權限
w = 可寫權限
x = 可執行權限

#ug+rwx意思是User與Group增加讀、寫、執行權限
root@ip-192-168-0-99:/var/www/test# sudo chmod ug+rwx testdata.txt 

#ug=rwx意思是User與Group重新設定權限,增加讀、寫、執行權限
root@ip-192-168-0-99:/var/www/test# sudo chmod ug=rwx testdata.txt 

#ug-rwx意思是User與Group移除讀、寫、執行權限
root@ip-192-168-0-99:/var/www/test# sudo chmod ug-rwx testdata.txt 

#a-x意思是移除所有人的執行權限
root@ip-192-168-0-99:/var/www/test# sudo chmod a-x testdata.txt 

#-x意思是移除所有人的執行權限(未指定Scope則會對所有人執行)
root@ip-192-168-0-99:/var/www/test# sudo chmod -x testdata.txt 

#ug+rw,a-x意思是新增讀與寫權限給user及group,然後移除所有人的執行權限
root@ip-192-168-0-99:/var/www/test# sudo chmod ug+rw,a-x testdata.txt 

綜合練習

sudo chmod 777 testdata.txt 

sudo chmod ugo=rwx testdata.txt 

sudo chmod a=rwx testdata.txt     

sudo chmod =rwx testdata.txt 

※如果還是覺得複雜也可以用這種線上工具勾一勾即可幫你算出權限字串模式=>Chmod Calculator

chown基本用法:

變更檔案和目錄的擁有者和所屬群組

# 將 testdata.txt 的擁有者改為 username
root@ip-192-168-0-99:/var/www/test#  sudo chown username testdata.txt 

# 將 testdata.txt 的群組改為 groupname
root@ip-192-168-0-99:/var/www/test#  sudo chown :groupname testdata.txt 

# 將 testdata.txt 的使用者:群組改為 username:groupname
root@ip-192-168-0-99:/var/www/test#  sudo chown username:groupname testdata.txt 

# 將 testdata.txt 的使用者:群組改為 username:groupname,加上-v印出輸出執行結果
root@ip-192-168-0-99:/var/www/test#  sudo chown -v username:groupname testdata.txt 
changed ownership of 'testdata.txt' from ubuntu:ubuntu to username:groupname

# 一次修改某個目錄下所有檔案與子目錄的使用者與群組,將 myfolder 的使用者:群組改為 username:groupname
root@ip-192-168-0-99:/var/www/test#  sudo chown -R username:groupname myfolder  

# 確認舊的使用者與群組為 ubuntu:ubuntu才進行變更權限
sudo chown --from=ubuntu:ubuntu username:groupname testdata.txt 

Reference

  • computerhope網站:連結
  • wikipedia chmod網站:連結