詳解Linux系統中的檔案名稱和檔案種類以及檔案許可權

來源:互聯網
上載者:User

Linux檔案種類與副檔案名稱

一直強調一個概念,那就是:任何裝置在Linux底下都是檔案, 不僅如此,連資料溝通的介面也有專屬的檔案在負責~所以,你會?解到,Linux的檔案種類真的很多~ 除了前面提到的一般檔案(-)與目錄檔案(d)之外,還有哪些種類的檔案呢?

* 檔案種類:

我們在剛剛提到使用‘ls -l’觀察到第一欄那十個字元中,第一個字元為檔案的類型。 除了常見的一般檔案(-)與目錄檔案(d)之外,還有哪些種類的檔案類型呢?

* 正規檔案(regular file ):
      就是一般我們在進行存取的類型的檔案,在由 ls -al 所顯示出來的屬性方面,第一個字元為 [ - ],例如 [-rwxrwxrwx ]。另外,依照檔案的內容,又大略可以分為:

o 純文字檔案(ASCII):這是Linux系統中最多的一種檔案類型?? 稱為純文字檔案是因為內容為我們人類可以直接讀到的資料,例如數字、字母等等。 幾乎只要我們可以用來做為設定的檔案都屬於這一種檔案類型。 舉例來說,你可以下達‘ cat ~/.bashrc ’就可以看到該檔案的內容。 (cat 是將一個檔案內容讀出來的指令)

o 二進位檔案(binary):還記得我們在‘ 第零章、電腦概論 ’裡面的軟體程式的運作中提過, 我們的系統其實僅認識且可以執行二進位檔案(binary file)吧?沒錯~ 你的Linux當中的可執行檔(scripts, 文字型批次檔案不算)就是這種格式的啦~ 舉例來說,剛剛下達的指令cat就是一個binary file。

o 資料格式檔案(data): 有些程式在運作的過程當中會讀取某些特定格式的檔案,那些特定格式的檔案可以被稱為資料檔案 (data file)。舉例來說,我們的Linux在使用者登入時,都會將登入的資料記錄在 /var/log/wtmp那個檔案內,該檔案是一個data file,他能夠透過last這個指令讀出來! 但是使用cat時,會讀出亂碼~因為他是屬於一種特殊格式的檔案。?乎?

* 目錄(directory):
      就是目錄???諞桓鍪糶暈 [ d ],例如 [drwxrwxrwx]。

* 連結檔案(link):
      就是類似Windows系統底下的捷徑啦! 第一個屬性為 [ l ](英文L的小寫),例如 [lrwxrwxrwx] ;

* 裝置與裝置檔案(device):
      與系統周邊及儲存等相關的一些檔案, 通常都集中在/dev這個目錄之下!通常又分為兩種:

o 區塊(block)裝置檔案 :就是一些儲存資料, 以提供系統隨機存取的周邊裝置,舉例來說,硬碟與軟碟等就是啦! 你可以隨機的在硬碟的不同區塊讀寫,這種裝置就是區塊裝置??∧憧梢宰孕脅橐幌?dev/sda看看, 會發現第一個屬性為[ b ]喔!

o 字元(character)裝置檔案:亦即是一些序列埠的周邊裝置, 例如鍵盤、滑鼠等等!這些裝置的特色就是‘一次性讀取’的,不能夠截斷輸出。 舉例來說,你不可能讓滑鼠‘跳到’另一個畫面,而是‘滑動’到另一個地方啊!第一個屬性為 [ c ]。

* 資料介面檔案(sockets):
      既然被稱為資料介面檔案, 想當然爾,這種類型的檔案通常被用在網路上的資料承接了。我們可以啟動一個程式來監聽使用者端的要求, 而使用者端就可以透過這個socket來進行資料的溝通了。第一個屬性為 [ s ], 最常在/var/run這個目錄中看到這種檔案類型了。

* 資料輸送檔案(FIFO, pipe):
      FIFO也是一種特殊的檔案類型,他主要的目的在解決多個程式同時存取一個檔案所造成的錯誤問題。 FIFO是first-in-first-out的縮寫。第一個屬性為[p] 。

除了裝置檔案是我們系統中很重要的檔案,最好不要隨意修改之外(通常他也不會讓你修改的啦!), 另一個比較有趣的檔案就是連結檔案。如果你常常將應用程式捉到案頭來的話,你就應該知道在 Windows底下有所謂的‘捷徑’。同樣的,你可以將 linux下的連結檔案簡單的視為一個檔案或目錄的捷徑。 至於socket與FIFO檔案比較難理解,因為這兩個咚咚與程式(process)比較有關係, 這個等到未來你?解process之後,再回來查閱吧!此外, 你也可以透過man fifo及man socket來查閱系統上的說明!

* Linux檔案副檔案名稱:

基本上,Linux的檔案是沒有所謂的‘副檔案名稱’的,我們剛剛就談過,一個Linux檔案能不能被執行,與他的第一欄的十個屬性有關, 與檔案名稱根本一點關係也沒有。這個觀念跟Windows的情況不相同喔!在Windows底下, 能被執行的檔案副檔案名稱通常是 .com .exe .bat等等,而在Linux底下,只要你的許可權當中具有x的話,例如[ -rwx-r-xr-x ] 即代表這個檔案可以被執行喔!

不過,可以被執行跟可以執行成功是不一樣的~舉例來說,在root家目錄下的install.log 是一個純文字檔案,如果經由修改許可權成為 -rwxrwxrwx 後,這個檔案能夠真的執行成功嗎? 當然不行~因為他的內容根本就沒有可以執行的資料。所以說,這個x代表這個檔案具有可執行檔能力, 但是能不能執行成功,當然就得要看該檔案的內容???/p>

雖然如此,不過我們仍然希望可以藉由副檔案名稱來?解該檔案是什麼東西,所以, 通常我們還是會以適當的副檔案名稱來表示該檔案是什麼種類的。底下有數種常用的副檔案名稱:

* *.sh : 批次檔案( scripts ),因為批次檔案為使用shell寫成的,所以副檔案名稱就編成 .sh ???/p>

* *Z, *.tar, *.tar.gz, *.zip, *.tgz: 經過打包的壓縮檔。這是因為壓縮軟體分別為 gunzip, tar 等等的,由於不同的壓縮軟體,而取其相關的副檔案名稱???/p>

* *.html, *.php:網頁相關檔案,分別代表 HTML 文法與 PHP 文法的網頁檔案?? .html 的檔案可使用網頁瀏覽器來直接開啟,至於 .php 的檔案, 則可以透過 client 端的瀏覽器來 server 端瀏覽,以得到運算後的網頁結果呢!

基本上,Linux系統上的檔案名稱真的只是讓你?解該檔案可能的用途而已, 真正的執行與否仍然需要許可權的規範才行!例如雖然有一個檔案為可執行檔, 如常見的/bin/ls這個顯示檔案屬性的指令,不過,如果這個檔案的許可權被修改成無法執行時, 那麼ls就變成不能執行???/p>

上述的這種問題最常發生在檔案傳送的過程中。例如你在網路上下載一個可執行檔,但是偏偏在你的 Linux系統中就是無法執行!呵呵!那麼就是可能檔案的屬性被改變了!不要懷疑,從網路上傳送到你的 Linux系統中,檔案的屬性與許可權確實是會被改變的喔!

* Linux檔案長度限制:

在Linux底下,使用預設的Ext2/Ext3檔案系統時,針對檔案的檔案名稱長度限制為:

* 單一檔案或目錄的最大容許檔案名稱為 255 個字元;
    * 包含完整路徑名稱及目錄 (/) 之完整檔案名稱為 4096 個字元。

是相當長的檔案名稱喔!我們希望Linux的檔案名稱可以一看就知道該檔案在幹嘛的, 所以檔案名稱通常是很長很長!而用慣了Windows的人可能會受不了,因為檔案名稱通常真的都很長, 對於用慣Windows而導致打字速度不快的朋友來說,嗯!真的是很困擾.....不過,只得勸你好好的加強打字的訓練???/p>

* Linux檔案名稱的限制:

由於Linux在文字介面下的一些指令操作關係,一般來說,你在設定Linux底下的檔案名稱時, 最好可以避免一些特殊字元比較好!例如底下這些:

* ? > < ; & ! [ ] | \ ' " ` ( ) { }

因為這些符號在文字介面下,是有特殊意義的!另外,檔案名稱的開頭為小數點‘.’時, 代表這個檔案為‘隱藏檔案’喔!同時,由於指令下達當中,常常會使用到 -option 之類的選項, 所以你最好也避免將檔案檔案名稱的開頭以 - 或 + 來命名啊!

目錄與檔案許可權
現在我們知道了Linux系統內檔案的三種身份(擁有者、群組與其他人),知道每種身份都有三種許可權(rwx), 已知道能夠使用chown, chgrp, chmod去修改這些許可權與屬性,當然,利用ls -l去觀察檔案也沒問題。 前兩小節也談到了這些檔案許可權對於資料安全的重要性。那麼,這些檔案許可權對於一般檔案與目錄檔案有何不同呢? 有大大的不同啊!底下就讓鳥哥來說清楚,講明白!

* 許可權對檔案的重要性

檔案是實際含有資料的地方,包括一般文字檔案、資料庫內容檔案、二進位可執行檔(binary program)等等。 因此,許可權對於檔案來說,他的意義是這樣的:

* r (read):可讀取此一檔案的實際內容,如讀取文字檔案的文字內容等;
* w (write):可以編輯、新增或者是修改該檔案的內容(但不含刪除該檔案);
* x (eXecute):該檔案具有可以被系統執行的許可權。

那個可讀(r)代表讀取檔案內容是還好?解,那麼可執行(x)呢?這裡你就必須要小心啦! 因為在Windows底下一個檔案是否具有執行的能力是藉由‘ 副檔案名稱 ’來判斷的, 例如:.exe, .bat, .com 等等,但是在Linux底下,我們的檔案是否能被執行,則是藉由是否具有‘x’這個許可權來決定的!跟檔案名稱是沒有絕對的關係的!

至於最後一個w這個許可權呢?當你對一個檔案具有w許可權時,你可以具有寫入/編輯/新增/修改檔案的內容的許可權, 但並不具備有刪除該檔案本身的許可權!對於檔案的rwx來說, 主要都是針對‘檔案的內容’而言,與檔案檔案名稱的存在與否沒有關係喔!因為檔案記錄的是實際的資料嘛!

* 許可權對目錄的重要性

檔案是存放實際資料的所在,那麼目錄主要是儲存啥玩意啊?目錄主要的內容在記錄檔案名稱清單,檔案名稱與目錄有強烈的關連啦! 所以如果是針對目錄時,那個 r, w, x 對目錄是什麼意義呢?

* r (read contents in directory):

表示具有讀取目錄結構清單的許可權,所以當你具有讀取(r)一個目錄的許可權時,表示你可以查詢該目錄下的檔案名稱資料。 所以你就可以利用 ls 這個指令將該目錄的內容列表顯示出來!

* w (modify contents of directory):

這個可寫入的許可權對目錄來說,是很了不起的! 因為他表示你具有移動該目錄結構清單的許可權,也就是底下這些許可權:

o 建立新的檔案與目錄;
          o 刪除已經存在的檔案與目錄(不論該檔案的許可權為何!)
          o 將已存在的檔案或目錄進行更名;
          o 搬移該目錄內的檔案、目錄位置。

總之,目錄的w許可權就與該目錄底下的檔案名稱移動有關就對了啦!

* x (access directory):

咦!目錄的執行許可權有啥用途啊?目錄只是記錄檔案名稱而已,總不能拿來執行吧?沒錯!目錄不可以被執行,目錄的x代表的是使用者能否進入該目錄成為工作目錄的用途! 所謂的工作目錄(work directory)就是你目前所在的目錄啦!舉例來說,當你登入Linux時, 你所在的家目錄就是你當下的工作目錄。而變換目錄的指令是‘cd’(change directory)???/p>

目錄的x許可權決定使用者是否可以進入該目錄。

大致的目錄許可權概念是這樣,底下我們來看幾個範例,讓你?解一下啥是目錄的許可權???/p>

例題:
有個目錄的許可權如下所示:

代碼如下:
drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh

系統有個帳號名稱為vbird,這個帳號並沒有支援root群組,請問vbird對這個目錄有何許可權?是否可切換到此目錄中?
答:
vbird對此目錄僅具有r的許可權,因此vbird可以查詢此目錄下的檔案名稱列表。因為vbird不具有x的許可權,因此vbird並不能切換到此目錄內!(相當重要的概念!)

上面這個例題中因為vbird具有r的許可權,因為是r乍看之下好像就具有可以進入此目錄的許可權,其實那是錯的。 能不能進入某一個目錄,只與該目錄的x許可權有關啦!此外, 工作目錄對於指令的執行是非常重要的,如果你在某目錄下不具有x的許可權, 那麼你就無法切換到該目錄下,也就無法執行該目錄下的任何指令,即使你具有該目錄的r的許可權。

很多朋友在架設網站的時候都會卡在一些許可權的設定上,他們開放目錄資料給網際網路的任何人來瀏覽, 卻只開放r的許可權,如上面的範例所示那樣,那樣的結果就是導致網站伺服器軟體無法到該目錄下讀取檔案(最多隻能看到檔案名稱), 終端使用者總是無法正確的查閱到檔案的內容(顯示許可權不足啊!)。要注意:要開放目錄給任何人瀏覽時,應該至少也要給予r及x的許可權,但w許可權不可隨便給! 為什麼w不能隨便給,我們來看下一個例子:

例題:
假設有個帳號名稱為dmtsai,他的家目錄在/home/dmtsai/,dmtsai對此目錄具有[rwx]的許可權。若在此目錄下有個名為the_root.data的檔案,該檔案的許可權如下:

代碼如下:
-rwx------ 1 root root 4365 Sep 19 23:20 the_root.data

請問dmtsai對此檔案的許可權為何?可否刪除此檔案?
答:
如上所示,由於dmtsai對此檔案來說是‘others’的身份,因此這個檔案他無法讀、無法編輯也無法執行,也就是說,他無法變動這個檔案的內容就是了。

但是由於這個檔案在他的家目錄下,他在此目錄下具有rwx的完整許可權,因此對於the_root.data這個‘檔案名稱’來說,他是能夠‘刪除’的!結論就是,dmtsai這個使用者能夠刪除the_root.data這個檔案!

還是看不太懂?有聽沒有懂喔!沒關係~我們底下就來設計一個練習, 讓你實際玩玩看,應該就能夠比較近入狀況啦!不過,由於很多指令我們還沒有教, 所以底下的指令有的先?解即可,詳細的指令用法我們會在後面繼續介紹的。

* 先用root的身份建立所需要的檔案與目錄環境

我們用root的身份在所有人都可以工作的/tmp目錄中建立一個名為testing的目錄, 該目錄的許可權為744且目錄擁有者為root。另外,在testing目錄下在建立一個空的檔案, 檔案名稱亦為testing。建立目錄可用mkdir(make directory),建立空檔案可用touch(下一章會說明)來處理。 所以過程如下所示:

代碼如下:
[root@www ~]# cd /tmp <==切換工作目錄到/tmp
[root@www tmp]# mkdir testing <==建立新目錄
[root@www tmp]# chmod 744 testing <==變更許可權
[root@www tmp]# touch testing/testing <==建立空的檔案
[root@www tmp]# chmod 600 testing/testing <==變更許可權
[root@www tmp]# ls -ald testing testing/testing
drwxr--r-- 2 root root 4096 Sep 19 16:01 testing
-rw------- 1 root root 0 Sep 19 16:01 testing/testing

# 仔細看一下,目錄的許可權是 744 ,且所屬群組與使用者均是 root 喔!
# 那麼在這樣的情況底下,一般身份使用者對這個目錄/檔案的許可權為何?

* 一般使用者的讀寫權限為何?觀察中

在上面的例子中,雖然目錄是744的許可權設定,一般使用者應該能有 r 的許可權, 但這樣的許可權使用者能做啥事呢?假設鳥哥的系統中含有一個帳號名為 vbird 的, 我們可以透過‘ su - vbird ’這個指令來變換身份喔!看看底下的操作先!

代碼如下:
[root@www tmp]# su - vbird <==切換身份成為 vbird ???br />[vbird@www ~]$ cd /tmp <==看一下,身份變了喔!提示字元也變成 $ 了!
[vbird@www tmp]$ ls -l testing/
?--------- ? ? ? ? ? testing
# 因為具有 r 的許可權可以查詢檔案名稱。不過許可權不足(沒有x),所以會有一堆問號。
[vbird@www tmp]$ cd testing/
-bash: cd: testing/: Permission denied
# 因為不具有 x ,所以當然沒有進入的許可權啦!有沒有呼應前面的許可權說明啊!</p> <p>* 如果該目錄屬於使用者本身,會有什麼狀況?

上面的練習我們知道了只有r確實可以讓使用者讀取目錄的檔案名稱列表,不過詳細的資訊卻還是讀不到的, 同時也不能將該目錄變成工作目錄(用 cd 進入該目錄之意)。那如果我們讓該目錄變成使用者的, 那麼使用者在這個目錄底下是否能夠刪除檔案呢?底下的練習做看看:

代碼如下:
[vbird@www tmp]$ exit <==讓 vbird 變回原本的 root 身份喔!
[root@www tmp]# chown vbird testing <==修改許可權,讓vbird擁有此目錄
[root@www tmp]# su - vbird <==再次變成vbird來操作
[vbird@www ~]$ cd /tmp/testing <==可以進入目錄了呢!
[vbird@www testing]$ ls -l
-rw------- 1 root root 0 Sep 19 16:01 testing <==檔案不是vbird的!
[vbird@www testing]$ rm testing <==嘗試殺掉這個檔案看看!
rm: remove write-protected regular empty file `testing'? y
# 竟然可以刪除!這樣理解了嗎?!

透過上面這個簡單的步驟,你就可以清楚的知道, x 在目錄當中是與‘能否進入該目錄’有關, 至於那個 w 則具有相當重要的許可權,因為他可以讓使用者刪除、更新、建立檔案或目錄, 是個很重要的參數啊!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.