Linux文件類型
我們使用 ls -l 這個(gè)命令時(shí),可以觀察到第一欄那十個(gè)字符中,第一個(gè)字符為文件的類型。 除了常見的一般文件(-)與目錄文件(d)之外,還有哪些種類的文件類型呢?
普通文件(regular file ):就是一般我們?cè)谶M(jìn)行存取的類型的文件,在由 ls -al 所顯示出來的屬性方面,第一個(gè)字符為 [ - ],例如 [-rwxrwxrwx ]。依照文件的內(nèi)容,大略可以分為:
1.1 純文本檔(ASCII):這是Linux系統(tǒng)中最多的一種文件類型, 稱為純文本檔是因?yàn)閮?nèi)容為我們?nèi)祟惪梢灾苯幼x到的數(shù)據(jù),例如數(shù)字、字母等等。 幾乎只要我們可以用來做為設(shè)定的文件都屬于這一種文件類型。 舉例來說,你可以下達(dá)『 cat ~/.bashrc 』就可以看到該文件的內(nèi)容。 (cat 是將一個(gè)文件內(nèi)容讀出來的指令)
1.2 二進(jìn)制文件(binary):,我們的系統(tǒng)其實(shí)僅認(rèn)識(shí)且可以執(zhí)行二進(jìn)制文件(binary file) 在Linux當(dāng)中的可執(zhí)行文件(scripts, 文字型批處理文件不算)就是這種格式的 舉例來說,我們經(jīng)常使用的 cat 命令就是一個(gè)binary file。
1.3 數(shù)據(jù)格式文件(data): 有些程序在運(yùn)作的過程當(dāng)中會(huì)讀取某些特定格式的文件,那些特定格式的文件可以被稱為數(shù)據(jù)文件 (data file)。舉例來說,我們的Linux在使用者登入時(shí),都會(huì)將登錄的數(shù)據(jù)記錄在 /var/log/wtmp那個(gè)文件內(nèi),該文件是一個(gè)data file,他能夠透過last這個(gè)指令讀出來! 但是使用cat時(shí),會(huì)讀出亂碼 因?yàn)樗菍儆谝环N特殊格式的文件。目錄(directory):就是目錄 第一個(gè)屬性為 [ d ],例如 [drwxrwxrwx]。
連接文件(link):就是類似Windows系統(tǒng)底下的快捷方式! 第一個(gè)屬性為 l ,例如 [lrwxrwxrwx] ;
設(shè)備與裝置文件(device):與系統(tǒng)周邊及儲(chǔ)存等相關(guān)的一些文件, 通常都集中在/dev這個(gè)目錄之下!通常又分為兩種:
4.1 區(qū)塊(block)設(shè)備檔:就是一些儲(chǔ)存數(shù)據(jù), 以提供系統(tǒng)隨機(jī)存取的接口設(shè)備,舉例來說,硬盤與軟盤等就是! 你可以隨機(jī)的在硬盤的不同區(qū)塊讀寫,這種裝置就是成組設(shè)備!你可以自行查一下/dev/sda看看, 會(huì)發(fā)現(xiàn)第一個(gè)屬性為[ b ]。
4.2 字符(character)設(shè)備文件:亦即是一些串行端口的接口設(shè)備, 例如鍵盤、鼠標(biāo)等等!這些設(shè)備的特色就是『一次性讀取』的,不能夠截?cái)噍敵觥?舉例來說,你不可能讓鼠標(biāo)『跳到』另一個(gè)畫面,而是『滑動(dòng)』到另一個(gè)地方啊!第一個(gè)屬性為 [ c ]。數(shù)據(jù)接口文件(sockets):既然被稱為數(shù)據(jù)接口文件, 想當(dāng)然,這種類型的文件通常被用在網(wǎng)絡(luò)上的數(shù)據(jù)承接了。我們可以啟動(dòng)一個(gè)程序來監(jiān)聽客戶端的要求, 而客戶端就可以透過這個(gè)socket來進(jìn)行數(shù)據(jù)的溝通了。第一個(gè)屬性為 [ s ], 最常在/var/run這個(gè)目錄中看到這種文件類型了。
數(shù)據(jù)輸送文件(FIFO, pipe):FIFO也是一種特殊的文件類型,他主要的目的在解決多個(gè)程序同時(shí)存取一個(gè)文件所造成的錯(cuò)誤問題。 FIFO是first-in-first-out的縮寫。第一個(gè)屬性為[p] 。
除了設(shè)備文件是我們系統(tǒng)中很重要的文件,最好不要隨意修改之外(通常只有root用戶才可以修改!), 另一個(gè)比較有趣的文件就是連結(jié)文件。如果你常常將應(yīng)用程序捉到桌面來的話,你就應(yīng)該知道在 Windows底下有所謂的『快捷方式』。同樣的,你可以將 linux下的連結(jié)檔簡單的視為一個(gè)文件或目錄的快捷方式。 至于socket與FIFO文件比較難理解,因?yàn)檫@兩個(gè)玩意與程序(process)比較有關(guān)系, 這個(gè)等到后面學(xué)習(xí)到時(shí)再研究!此外, 你也可以透過man fifo及man socket來查閱系統(tǒng)上的說明!
Linux文件擴(kuò)展名
基本上,Linux的文件是沒有所謂的『擴(kuò)展名』的,一個(gè)Linux文件能不能被執(zhí)行,與他的第一欄的十個(gè)屬性有關(guān), 與檔名根本一點(diǎn)關(guān)系也沒有。這個(gè)觀念跟Windows的情況不相同喔!在Windows底下, 能被執(zhí)行的文件擴(kuò)展名通常是 .exe .bat等等,而在Linux底下,只要你的權(quán)限當(dāng)中具有x的話,例如[ -rwx-r-xr-x ] 即代表這個(gè)文件可以被執(zhí)行喔!
不過,可以被執(zhí)行跟可以執(zhí)行成功是不一樣的~舉例來說,在root家目錄下的install.log 是一個(gè)純文本檔,如果經(jīng)由修改權(quán)限成為 -rwxrwxrwx 后,這個(gè)文件能夠真的執(zhí)行成功嗎? 當(dāng)然不行~因?yàn)樗膬?nèi)容根本就沒有可以執(zhí)行的數(shù)據(jù)。所以說,這個(gè)x代表這個(gè)文件具有可執(zhí)行的能力, 但是能不能執(zhí)行成功,當(dāng)然就得要看該文件的內(nèi)容。
雖然如此,不過我們?nèi)匀幌M梢越逵蓴U(kuò)展名來了解該文件是什么東西,所以, 通常我們還是會(huì)以適當(dāng)?shù)臄U(kuò)展名來表示該文件是什么種類的。底下有數(shù)種常用的擴(kuò)展名:
- .sh : 腳本或批處理文件 (scripts),因?yàn)榕幚砦募槭褂胹hell寫成的,所以擴(kuò)展名就編成 .sh。
- .tar, .tar,.gz, .zip, .tgz: 經(jīng)過打包的壓縮文件。這是因?yàn)閴嚎s軟件分別為 gunzip, tar 等等的,由于不同的壓縮軟件,而取其相關(guān)的擴(kuò)展名。
- .html, .php:網(wǎng)頁相關(guān)文件,分別代表 HTML 語法與 PHP 語法的網(wǎng)頁文件! .html 的文件可使用網(wǎng)頁瀏覽器來直接開啟,至于 .php 的文件, 則可以透過 client 端的瀏覽器來 server 端瀏覽,以得到運(yùn)算后的網(wǎng)頁結(jié)果。
基本上,Linux系統(tǒng)上的文件名真的只是讓你了解該文件可能的用途而已, 真正的執(zhí)行與否仍然需要權(quán)限的規(guī)范才行!例如雖然有一個(gè)文件為可執(zhí)行文件, 如常見的/bin/ls這個(gè)顯示文件屬性的指令,不過,如果這個(gè)文件的權(quán)限被修改成無法執(zhí)行時(shí), 那么ls就變成不能執(zhí)行。