Linux 文件屬性
既然要讓你瞭解 Linux 的文件屬性,那麼有個重要的也是常用的指令就必須要先跟你說囉!那一個?就是『 ls 』這一個察看文件的指令囉!在你以 dmtsai 登入系統,然後使用 su - 切換身份成爲 root 後, 下達『 ls -al 』看看,會看到底下的幾個咚咚:
ls 是『list』的意思,重點在顯示文件的文件名與相關屬性。而選項『-al』則表示列出所有的文件詳細的權限與屬性 (包含隱藏文件,就是文件名第一個字符爲『 . 』的文件)。如上所示,在你第一次以 root 身份登入 Linux 時, 如果你輸入上述指令後,應該有上列的幾個東西,先解釋一下上面七個字段個別的意思:
1、第一欄代表這個文件的類型與權限(permission)(很重要):
這個地方最需要注意了!仔細看的話,你應該可以發現這一欄其實共有十個字符:
第一個字符代表這個文件是『目錄、文件或鏈接文件等等』:
- 當爲[ d ]則是目錄,例如上表檔名爲『.config』的那一行;
- 當爲[ - ]則是文件,例如上表檔名爲『initial-setup-ks.cfg』那一行;
- 若是[ l ]則表示爲連結檔(link file);
- 若是[ b ]則表示爲裝置文件裏面的可供儲存的接口設備(可隨機存取裝置);
- 若是[ c ]則表示爲裝置文件裏面的串行端口設備,例如鍵盤、鼠標(一次性讀取裝置)。
接下來的字符中,以三個爲一組,且均爲『rwx』 的三個參數的組合。其中,[ r ]代表可讀(read)、[ w ]代表可寫(write)、[ x ]代表可執行(execute)。 要注意的是,這三個權限的位置不會改變,如果沒有權限,就會出現減號[ - ]而已。
- 第一組爲『文件擁有者可具備的權限』,以『initial-setup-ks.cfg』那個文件爲例, 該文件的擁有者可以讀寫,但不可執行;
- 第二組爲『加入此羣組之賬號的權限』;
- 第三組爲『非本人且沒有加入本羣組之其他賬號的權限』。
注意:不論是那一組權限,基本上,都是『針對某些賬號來設計的權限』喔!以羣組來說,他規範的是『加入這個羣組的賬號具有什麼樣的權限』之意, 以學校社團爲例,假設學校有個童軍社的社團辦公室,『加入童軍社的同學就可以進出社辦』,主角是『學生(賬號)』而不是童軍社本身喔!這樣可以理解嗎?
例題: 若有一個文件的類型與權限數據爲『-rwxr-xr--』,請說明其意義爲何? 答: 先將整個類型與權限數據分開查閱,並將十個字符整理成爲如下所示: [-][rwx][r-x][r--] 1 234 567 890 1 爲:代表這個文件名爲目錄或文件,本例中爲文件(-); 234 爲:擁有者的權限,本例中爲可讀、可寫、可執行(rwx); 567 爲:同羣組用戶權力,本例中爲可讀可執行(rx); 890 爲:其他用戶權力,本例中爲可讀(r),就是隻讀之意
同時注意到, rwx 所在的位置是不會改變的,有該權限就會顯示字符,沒有該權限就變成減號(-)就是了。 |
2、第二欄表示有多少檔名連結到此節點(i-node):
每個文件都會將他的權限與屬性記錄到文件系統的 i-node 中,不過,我們使用的目錄樹卻是使用文件名來記錄, 因此每個檔名就會連結到一個 i-node 囉!這個屬性記錄的,就是有多少不同的檔名連結到相同的一個 i-node 號碼去就是了。 關於 i-node 的相關資料我們會在第七章談到文件系統時再加強介紹的。
3、第三欄表示這個文件(或目錄)的『擁有者賬號』
4、第四欄表示這個文件的所屬羣組
在Linux 系統下,你的賬號會加入於一個或多個的羣組中。舉剛剛我們提到的例子,class1, class2, class3均屬於 projecta 這個羣組,假設某個文件所屬的羣組爲 projecta,(-rwxrwx---),則 class1, class2, class3 三人對於該文件都具有可讀、可寫、可執行的權限(看羣組權限)。但如果是不屬於 projecta 的其他賬號,對於此文件就不具有任何權限了。
5、第五欄爲這個文件的容量大小,默認單位爲 bytes;
6、第六欄爲這個文件的建檔日期或者是最近的修改日期:
這一欄的內容分別爲日期(月/日)及時間。如果這個文件被修改的時間距離現在太久,那時間部分會僅顯示年份而已。 如下所示:
如果想要顯示完整的時間格式,可利用 ls 的選項,即:『ls -l --full-time』就能夠顯示出完整的時間格式了!包括年、月、日、時間喔。 另外,如果你當初是以繁體中文安裝你的 Linux 系統,那麼日期字段將會以中文來顯示。 可惜的是,中文並沒有辦法在純文本的終端機模式中正確的顯示, 所以此欄會變成亂碼(目前在Centos7.6以上操作系統已經沒有該問題啦,可以忽略該操作方法!!!)。 那你就得要使用『export LC_ALL=en_US.utf8』來修改語系喔!如果想要讓系統默認的語系變成英文的話,那麼你可以修改系統配置文件『/etc/locale.conf』,利用 nano 來修改該文件的內容,使 LANG 這個變量成爲上述的內容即可。
7、第七欄爲這個文件的檔名
這個字段就是檔名了。比較特殊的是:如果檔名之前多一個『 . 』,則代表這個文件爲『隱藏檔』, 例如上表中的.config 那一行,該文件就是隱藏檔。 你可以使用『ls』及『ls -a』這兩個指令去感受一下什麼是隱藏檔囉!
對於更詳細的 ls 用法,還記得怎麼查詢嗎?對啦!使用 ls --help 或 man ls 或 info ls 去看看他的基礎用法去!
Linux 文件權限的重要性
與 Windows 系統不一樣的是,在 Linux 系統當中,每一個文件都多加了很多的屬性進來,尤其是羣組的概念,這樣有什麼用途呢? 其實,最大的用途是在『數據安全性』上面的。
1、系統保護的功能:
舉個例子,在你的系統中,關於系統服務的文件通常只有 root 才能讀寫或者是執行,例如/etc/shadow 這一個賬號管理的文件,由於該文件記錄了你係統中所有賬號的數據, 因此是很重要的一個配置文件,當然不能讓任何人讀取(否則密碼會被竊取啊),只有 root 才能夠來讀取囉!所以該文件的權限就會成爲[ ---------- ],所有人都不能使用?沒關係,root 基本上是不受系統的權限所限制的, 所以無論文件權限爲何,預設root 都可以存取喔!
2、團隊開發軟件或數據共享的功能:
如果你有一個軟件開發團隊,在你的團隊中,你希望每個人都可以使用某一些目錄下的文件, 而非你的團隊的其他人則不予以開放呢?以上面的例子來說,testgroup 的團隊共有三個人,分別是 test1, test2, test3,那麼我就可以將團隊所需的文件權限訂爲[ -rwxrws--- ]來提供給 testgroup 的工作團隊使用!
3、未將權限設定妥當的危害:
再舉個例子來說,如果你的目錄權限沒有作好的話,可能造成其他人都可以在你的系統上面亂搞囉! 例如本來只有 root 才能做的開關機、ADSL 的撥接程序、新增或刪除用戶等等的指令,若被你改成任何人都可以執行的話, 那麼如果使用者不小心給你重新啓動啦!重新撥接啦!等等!那你的系統不就會常常莫名其妙的掛掉囉! 而且萬一你的用戶的密碼被其他不明人士取得的話,只要他登入你的系統就可以輕而易舉的執行一些root 的工作!
注意:在你修改你的 linux 文件與目錄的屬性之前,一定要先搞清楚, 什麼數據是可變的, 什麼是不可變的!