Linux文件屬性、所有者、群組、其他組及文件權限操作簡要總結
首先介紹一個重要的知識點:文件屬性控制權限
[root@www ~]# ls -al
total 156
drwxr-x--- 4 root root 4096 Sep 8 14:06 .
drwxr-xr-x 23 root root 4096 Sep 8 14:21 ..
-rw------- 1 root root 1474 Sep 4 18:27 anaconda-ks.cfg
-rw-r--r-- 1 root root 100 Jan 6 2007 .cshrc
drwx------ 3 root root 4096 Sep 5 10:37 .gconf <=范例說明處
drwx------ 2 root root 4096 Sep 5 14:09 .gconfd
-rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log <=范例說明處
-rw-r--r-- 1 root root 5661 Sep 4 18:25 install.log.syslog
[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ]
[ 權限 ][文件數][擁有者][群組] [文件大小] [ 修改日期 ] [ 文件名 ]
如果這個文件被修改的時間距離現在太久了,那么時間部分會僅顯示年份而已。 如下所示:
[root@www ~]# ls -l /etc/termcap /root/install.log
-rw-r--r-- 1 root root 807103 Jan 7 2007 /etc/termcap
-rw-r--r-- 1 root root 42304 Sep 4 18:26 /root/install.log
# 如上所示,/etc/termcap 為 2007 年所修改過的文件,離現在太遠之故;
# 至於 install.log 是今年 (2009) 所建立的,所以就顯示完整的時間了。
如果想要讓系統默認的語系變成英文的話,那么你可以修改系統配置文件『/etc/sysconfig/i18n』,修改該文件的內容,使LANG這個變量成為上述的內容即可。如果想要顯示完整的時間格式,可以利用ls的選項,亦即:『ls -l --full-time』就能夠顯示出完整的時間格式了!包括年、月、日、時間喔。 另外,如果你當初是以繁體中文安裝你的Linux系統,那么日期字段將會以中文來顯示。 可惜的是,中文並沒有辦法在純文本的終端機模式中正確的顯示,所以此欄會變成亂碼。 那你就得要使用『LANG=en_US』來修改語系喔!
第七欄為這個文件的檔名
這個字段就是檔名了。比較特殊的是:如果檔名之前多一個『 . 』,則代表這個文件為『隱藏檔』,例如上表中的.gconf那一行,該文件就是隱藏檔。 你可以使用『ls』及『ls -a』這兩個指令去感受一下什么是隱藏檔啰!
這七個字段的意義是很重要的!務必清楚的知道各個字段代表的意義!尤其是第一個字段的九個權限, 那是整個Linux文件權限的重點之一。
總結如下
通過查看ls -l命令可以查看文件的詳細列表信息(如文件類型、所在組、文件名等) 如:-rwxrw-r-- 1 501 502 100 Mar Test.java 【-rwxrw-r--】各個段的含義 將【-rwxrw-r--】拆分為 【-| rwx| rw-| r--】四段 第一段【-】代表的是文件類型,一般有三種(-代表是文件)、(d代表是文件夾)、(l代表是鏈接)可以用字符表示的文件類型
【rwx代表的含義】,在linux系統中,r代表用戶對該文件或者文件夾擁有可讀權限、w代表可寫權限、x代表可執行權限
在linux系統中,每個權限都有一個數字來表示,r(可讀權限)用數字4表示,w(可寫權限)用數字2表示,x(可執行權限)用數字1表示
第二段【rwx】代表的是該文件(或文件夾)的【所有者(誰創建了該文件,誰就是該文件的所有者)】對該文件的訪問權限,如該所有者對該文件的權限是可讀、可寫、可執行
第三段【rw-】代表的是該用戶【所在組的其它用戶】對該文件的訪問權限,如該用戶組其它用戶對該文件的訪問權限是可讀、可寫
第四段【r--】代表的是【除了該用戶所在組的其他組】對該文件的訪問權限,如其他組用戶對該文件的訪問權限是可讀
【注:權限都可以用數字來代替,例如 rwx 可用 4+2+1 =7 來表示,rw可用數字6來表示等】
1:代表的文件個數,如果是文件則是1,若是文件夾,則顯示該文件夾下子文件數目 501:代表哪個用戶,在每創建一個用戶時,都會為該用戶創建一個唯一的用戶id,501就是指代該用戶的id 502:代表該用戶所在組,在創建每一個組時,linux也會為該組創建一個唯一的組id,502就是代表該用戶所在組的id 100:代表文件的大小 Mar:代表文件創建時間 Test.java:代表文件名
如何改變文件屬性與權限
linux系統文件權限分為三種:(1)使用者(2)群組(3)其他人
我們現在知道文件權限對於一個系統的安全重要性了,也知道文件的權限對於使用者與群組的相關性, 那么如何修改一個文件的屬性與權限呢?又!有多少文件的權限我們可以修改呢? 其實一個文件的屬性與權限有很多!我們先介紹幾個常用於群組、擁有者、各種身份的權限之修改的指令,如下所示:
- chgrp :改變文件所屬群組
- chown :改變文件擁有者
- chmod :改變文件的權限, SUID, SGID, SBIT等等的特性
改變所屬群組:chgrp
改變一個文件的群組真是很簡單的,直接以chgrp來改變即可,咦!這個指令就是change group的縮寫嘛!這樣就很好記了吧! ^_^。不過,請記得,要被改變的組名必須要在/etc/group文件內存在才行,否則就會顯示錯誤!
假設你是以root的身份登入Linux系統的,那么在你的家目錄內有一個install.log的文件, 如何將該文件的群組改變一下呢?假設你已經知道在/etc/group里面已經存在一個名為users的群組, 但是testing這個群組名字就不存在/etc/group當中了,此時改變群組成為users與testing分別會有什么現象發生呢?
[root@www ~]# chgrp [-R] dirname/filename ... 選項與參數: -R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件、目錄 都更新成為這個群組之意。常常用在變更某一目錄內所有的文件之情況。 范例: [root@www ~]# chgrp users install.log [root@www ~]# ls -l -rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log [root@www ~]# chgrp testing install.log chgrp: invalid group name `testing' <== 發生錯誤訊息啰~找不到這個群組名~
發現了嗎?文件的群組被改成users了,但是要改成testing的時候, 就會發生錯誤~注意喔!發生錯誤訊息還是要努力的查一查錯誤訊息的內容才好! 將他英文翻譯成為中文,就知道問題出在哪里了。
改變文件擁有者:chown
如何改變一個文件的擁有者呢?很簡單呀!既然改變群組是change group,那么改變擁有者就是change owner啰!BINGO!那就是chown這個指令的用途,要注意的是, 用戶必須是已經存在系統中的賬號,也就是在/etc/passwd 這個文件中有紀錄的用戶名稱才能改變。
chown的用途還滿多的,他還可以順便直接修改群組的名稱呢!此外,如果要連目錄下的所有次目錄或文件同時更改文件擁有者的話,直接加上 -R 的選項即可!我們來看看語法與范例:
[root@www ~]# chown [-R] 賬號名稱 文件或目錄
[root@www ~]# chown [-R] 賬號名稱:組名 文件或目錄
選項與參數:
-R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件都變更
范例:將install.log的擁有者改為bin這個賬號:
[root@www ~]# chown bin install.log
[root@www ~]# ls -l
-rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log
范例:將install.log的擁有者與群組改回為root:
[root@www ~]# chown root:root install.log
[root@www ~]# ls -l
-rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log
假設你今天要將.bashrc這個文件拷貝成為.bashrc_test檔名,且是要給bin這個人,你可以這樣做
[root@www ~]# cp .bashrc .bashrc_test [root@www ~]# ls -al .bashrc* -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc -rw-r--r-- 1 root root 395 Jul 13 11:31 .bashrc_test <==新文件的屬性沒變
由於復制行為(cp)會復制執行者的屬性與權限,所以!怎么辦?.bashrc_test還是屬於root所擁有, 如此一來,即使你將文件拿給bin這個使用者了,那他仍然無法修改的(看屬性/權限就知道了吧), 所以你就必須要將這個文件的擁有者與群組修改一下!
改變權限:chmod
文件權限的改變使用的是chmod這個指令,但是,權限的設定方法有兩種, 分別可以使用數字或者是符號來進行權限的變更。我們就來談一談:
數字類型改變文件權限
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的語法是這樣的:
[root@www ~]# chmod [-R] xyz 文件或目錄 選項與參數: xyz : 就是剛剛提到的數字類型的權限屬性,為 rwx 屬性數值的相加。 -R : 進行遞歸(recursive)的持續變更,亦即連同次目錄下的所有文件都會變更
舉例來說,如果要將.bashrc這個文件所有的權限都設定啟用,那么就下達:
[root@www ~]# ls -al .bashrc -rw-r--r-- 1 root root 395 Jul 4 11:45 .bashrc [root@www ~]# chmod 777 .bashrc [root@www ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .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 』吧!
符號類型改變文件權限
還有一個改變權限的方法呦!從之前的介紹中我們可以發現,基本上就九個權限分別是(1)user (2)group (3)others三種身份啦!那么我們就可以藉由u, g, o來代表三種身份的權限!此外, a 則代表 all 亦即全部的身份!那么讀寫的權限就可以寫成r, w, x!也就是可以使用底下的方式來看:
u + r
chmod g - w 文件或目錄
o = x
a
來實作一下吧!假如我們要『設定』一個文件的權限成為『-rwxr-xr-x』時,基本上就是:
user (u):具有可讀、可寫、可執行的權限;
group 與 others (g/o):具有可讀與執行的權限。
所以就是:
[root@www ~]# chmod u=rwx,go=rx .bashrc
# 注意喔!那個 u=rwx,go=rx 是連在一起的,中間並沒有任何空格!
[root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc
那么假如是『 -rwxr-xr-- 』這樣的權限呢?可以使用『 chmod u=rwx,g=rx,o=r filename 』來設定。此外,如果我不知道原先的文件屬性,而我只想要增加.bashrc這個文件的每個人均可寫入的權限, 那么我就可以使用:
[root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc [root@www ~]# chmod a+w .bashrc [root@www ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc
而如果是要將權限去掉而不更動其他已存在的權限呢?例如要拿掉全部人的可執行權限,則:
[root@www ~]# chmod a-x .bashrc [root@www ~]# ls -al .bashrc -rw-rw-rw- 1 root root 395 Jul 4 11:45 .bashrc
知道 +, -, = 的不同點了嗎?對啦! + 與 – 的狀態下,只要是沒有指定到的項目,則該權限『不會被變動』, 例如上面的例子中,由於僅以 – 拿掉 x 則其他兩個保持當時的值不變!多多實作一下,你就會知道如何改變權限啰! 這在某些情況底下很好用的~舉例來說,你想要教一個朋友如何讓一個程序可以擁有執行的權限, 但你又不知道該文件原本的權限為何,此時,利用『chmod a+x filename』 ,就可以讓該程序擁有執行的權限了。是否很方便?