Linux——改變文件屬性與權限

其實一個文件的屬性與權限有很多!先介紹幾個常用於羣組、擁有者、各種身份的權限之修改的指令,如下所示:

  • chgrp :改變文件所屬羣組
  • chown :改變文件擁有者
  • chmod :改變文件的權限, SUID, SGID, SBIT 等等的特性

改變所屬羣組—— chgrp

改變一個文件的羣組真是很簡單的,直接以 chgrp 來改變即可,這個指令是 change group 的縮寫!要被改變的組名必須要在/etc/group 文件內存在纔行,否則就會顯示錯誤!假設你已經是 root 的身份了,那麼在你的家(home)目錄內有一個名爲 initial-setup-ks.cfg 的文件, 如何將該文件的羣組改變一下呢?假設你已經知道在/etc/group 裏面已經存在一個名爲 users 的羣組, 但是testing 這個羣組名字就不存在/etc/group 當中了,此時改變羣組成爲 users testing 分別會有什麼現象發生呢?

發現了嗎?文件的羣組被改成 users 了,但是要改成 testing 的時候, 就會發生錯誤~注意喔!發生錯誤訊息還是要努力的查一查錯誤訊息的內容纔好! 將他英文翻譯成爲中文,就知道問題出在哪裏了。

改變文件擁有者—— chown

既然改變羣組是 change group,那麼改變擁有者就是 change owner 囉!BINGO!那就是 chown 這個指令的用途,要注意的是, 用戶必須是已經存在系統中的賬號,也就是在/etc/passwd 這個文件中有紀錄的用戶名稱才能改變。chown 的用途還滿多的,他還可以順便直接修改羣組的名稱呢!此外,如果要連目錄下的所有次目錄或文件同時更改文件擁有者的話,直接加上 -R 的選項即可!我們來看看語法與範例:

注意:事實上chown 也可以使用『chown user.group file亦即在擁有者與羣組間加上小數點『 . 』也行! 不過很多朋友設定賬號時,喜歡在賬號當中加入小數點(例如 vbird.tsai 這樣的賬號格式),這就會造成系統的誤判了! 所以我們比較建議使用冒號『:』來隔開擁有者與羣組啦!此外,chown 也能單純的修改所屬羣組呢! 例如『chown .sshd initial-setup-ks.cfg』就是修改羣組~看到了嗎?就是那個小數點的用途!

知道如何改變文件的羣組與擁有者了,那麼什麼時候要使用 chown chgrp 呢?或許你會覺得奇怪吧? 是的,確實有時候需要變更文件的擁有者的,最常見的例子就是在複製文件給你之外的其他人時, 我們使用最簡單的 cp 指令來說明好了:

假設你今天要將.bashrc 這個文件拷貝成爲.bashrc_test 檔名,且是要給 bin 這個人,你可以這樣做:

由於複製行爲(cp)會複製執行者的屬性與權限,所以!怎麼辦?.bashrc_test 還是屬於 root 所擁有, 如此一來,即使你將文件拿給 bin 這個使用者了,那他仍然無法修改的, 所以你就必須要將這個文件的擁有者與羣組修改一下囉!知道如何修改了吧?

改變權限—— chmod

 文件權限的改變使用的是 chmod 這個指令,但是,權限的設定方法有兩種, 分別可以使用數字或者是符號來進行權限的變更。我們就來談一談:

1、數字類型改變文件權限

Linux 文件的基本權限有九個,分別是 owner/group/others 三種身份各有自己的read/write/execute 權限,先複習一下上面提到的數據:文件的權限字符爲:『-rwxrwxrwx』, 這九個權限是三個三個一組的!可使用數字來代表各個權限,各權限的分數對照表如下:

r:4、w:2、x:1

每種身份(owner/group/others)各自的三個權限(r/w/x)分數是需要累加的,例如當權限爲: [-rwxrwx---] 分數則是:

  • owner = rwx = 4+2+1 = 7
  • group = rwx = 4+2+1 = 7
  • others= --- = 0+0+0 = 0

所以等一下我們設定權限的變更時,該文件的權限數字就是 770 啦!變更權限的指令 chmod 的語法是這樣的:

舉例來說,如果要將.bashrc 這個文件所有的權限都設定啓用,那麼就下達:

那如果要將權限變成『 -rwxr-xr-- 』呢?那麼權限的分數就成爲 [4+2+1][4+0+1][4+0+0]=754 囉!所以你需要下達『 chmod 754 filename』。 另外,在實際的系統運作中最常發生的一個問題就是,常常我們以 vim 編輯一個 shell 的文字批處理文件後,他的權限通常是 -rw-rw-r-- 也就是 664, 如果要將該文件變成可執行文件,並且不要讓其他人修改此一文件的話, 那麼就需要-rwxr-xr-x 這樣的權限,此時就得要下達:『 chmod 755 test.sh 』的指令囉!另外,如果有些文件你不希望被其他人看到,那麼應該將文件的權限設定爲例如:『-rwxr------ ,那就下達『 chmod 740 filename 』吧

例題:將剛剛你的.bashrc 這個文件的權限修改回-rw-r--r--的情況吧!

答:-rw-r--r--的分數是 644,所以指令爲: chmod 644 .bashrc

​​​​​​​2、符號類型改變文件權限

還有一個改變權限的方法呦!從之前的介紹中我們可以發現,基本上就九個權限分別是(1)user (2)group (3)others 三種身份啦!那麼我們就可以由 u, g, o 來代表三種身份的權限!此外, a 則代表 all 亦即全部的身份!那麼讀寫的權限就可以寫成 r, w, x 囉!也就是可以使用底下的方式來看:

來實作一下吧!假如我們要『設定』一個文件的權限成爲『-rwxr-xr-x』時,基本上就是:

  • user (u):具有可讀、可寫、可執行的權限;
  • group others (g/o):具有可讀與執行的權限。

所以就是:

那麼假如是『 -rwxr-xr-- 』這樣的權限呢可以使用『 chmod u=rwx,g=rx,o=r filename 』來設定。此外,如果我不知道原先的文件屬性,而我只想要增加.bashrc 這個文件的每個人均可寫入的權限, 那麼我就可以使用:

而如果是要將權限去掉而不更動其他已存在的權限呢?例如要拿掉全部人的可執行權限,則: 

知道 +, -, = 的不同點了嗎?對啦!+ 的狀態下,只要是沒有指定到的項目,則該權限『不會被變動』, 例如上面的例子中,由於僅以 拿掉 x 則其他兩個保持當時的值不變!多多實作一下,你就會知道如何改變權限囉! 這在某些情況底下很好用的~舉例來說,你想要教一個朋友如何讓一個程序可以擁有執行的權限, 但你又不知道該文件原本的權限爲何,此時,利用『chmod a+x filename』 ,就可以讓該程序擁有執行的權限了。是否很方便?

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章