文件種類
用『ls -l』看到第一欄那十個字符中,第一個字符爲文件的類型。 除了常見的一般文件(-)與目錄文件(d)外,還有以下文件種類:
1、正規文件(regular file )
就是一般我們在進行存取的類型的文件,在由 ls -al 所顯示出來的屬性方面,第一個字符爲 [ - ],例如[-rwxrwxrwx ]。另外,依照文件的內容,又大略可以分爲:
- 純文本檔(ASCII):這是 Linux 系統中最多的一種文件類型囉, 稱爲純文本檔是因爲內容爲我們人類可以直接讀到的數據,例如數字、字母等等。 幾乎只要我們可以用來做爲設定的文件都屬於這一種文件類型。 舉例來說,你可以下達『 cat ~/.bashrc 』就可以看到該文件的內容。 (cat 是將一個文件內容讀出來的指令)
- 二進制文件(binary):Linux的可執行文件(scripts, 文字型批處理文件不算)就是這種格式~如下達指令 cat 就是一個binary file。
- 數據格式文件(data): 有些程序在運作的過程當中會讀取某些特定格式的文件,那些特定格式的文件可以被稱爲數據文件 (data file)。舉例來說,我們的 Linux 在使用者登入時,都會將登錄的數據記錄在 /var/log/wtmp 那個文件內,該文件是一個 data file,他能夠透過 last 這個指令讀出來! 但是使用 cat 時,會讀出亂碼~因爲他是屬於一種特殊格式的文件。
2、目錄(directory)
就是目錄囉~第一個屬性爲 [ d ],例如 [drwxrwxrwx]。
3、連結檔(link)
就是類似 Windows 系統底下的快捷方式啦! 第一個屬性爲 [ l ](英文 L 的小寫),例如 [lrwxrwxrwx] ;
4、設備與裝置文件(device)
與系統周邊及儲存等相關的一些文件, 通常都集中在/dev 這個目錄之下!通常又分爲兩種:
- 區塊(block)設備檔 :就是一些儲存數據, 以提供系統隨機存取的接口設備,舉例來說,硬盤與軟盤等就是啦! 你可以隨機的在硬盤的不同區塊讀寫,這種裝置就是成組設備囉!你可以自行查一下/dev/sda 看看, 會發現第一個屬性爲[ b ]喔!
- 字符(character)設備文件:即一些串行端口的接口設備, 如鍵盤、鼠標等等!這些設備的特色就是『一次性讀取』的,不能夠截斷輸出。 舉例來說,你不可能讓鼠標『跳到』另一個畫面, 而是『連續性滑動』到另一個地方啊!第一個屬性爲 [ c ]。
5、資料接口文件(sockets)
既然被稱爲數據接口文件, 這種類型的文件通常被用在網絡上的數據承接了。我們可以啓動一個程序來監聽客戶端的要求, 而客戶端就可以透過這個 socket 來進行數據的溝通了。第一個屬性爲 [ s ], 最常在/run 或/tmp 這些個目錄中看到這種文件類型了。
6、數據輸送文件(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 的話,例如[ -rwxr-xr-x ] 即代表這個文件具有可以被執行的能力喔!
注意:具有『可執行的權限』以及『具有可執行的程序代碼』是兩回事!在 Linux 底下,可以讓一個文本文件,例如我們之前寫的 text.txt 具有『可執行的權限』 (加入 x 權限即可), 但是這個文件明顯的無法執行,因爲他不具備可執行的程序代碼!而如果你將上面提到的 cat 這個可以執行的指令,將他的 x 拿掉, 那麼 cat 將無法被你執行!不過,可以被執行跟可以執行成功是不一樣的~如在 root 家目錄下的 initial-setup-ks.cfg 是一個純文本檔,如果經由修改權限成爲 -rwxrwxrwx 後,這個文件能夠真的執行成功嗎? 當然不行~ 因爲他的內容根本就沒有可以執行的數據。所以說,這個 x 代表這個文件具有可執行的能力, 但是能不能執行成功,當然就得要看該文件的內容囉~
雖然如此,不過我們仍然希望可以藉由擴展名來了解該文件是什麼東西,所以, 通常我們還是會以適當的擴展名來表示該文件是什麼種類的。底下有數種常用的擴展名:
- *.sh : 腳本或批處理文件 (scripts),因爲批處理文件爲使用 shell 寫成的,所以擴展名就編成 .sh 囉;
- *Z, *.tar, *.tar.gz, *.zip, *.tgz: 經過打包的壓縮文件。這是因爲壓縮軟件分別爲 gunzip, tar 等等的,由於不同的壓縮軟件,而取其相關的擴展名囉!
- *.html, *.php:網頁相關文件,分別代表 HTML 語法與 PHP 語法的網頁文件囉! .html 的文件可使用網頁瀏覽器來直接開啓,至於 .php 的文件, 則可以透過 client 端的瀏覽器來 server 端瀏覽,以得到運算後的網頁結果呢!
基本上,Linux 系統上的文件名真的只是讓你瞭解該文件可能的用途而已,真正的執行與否仍然需要權限的規範纔行!例如雖然有一個文件爲可執行文件, 如常見的/bin/ls 這個顯示文件屬性的指令, 不過,如果這個文件的權限被修改成無法執行時, 那麼 ls 就變成不能執行囉!
上述這種問題最常發生在文件傳送的過程中。如在網絡上下載一個可執行文件,但偏偏在你的 Linux 系統中就是無法執行!那麼就是可能文件的屬性被改變了!不要懷疑,從網絡上傳送到你的 Linux 系統中,文件的屬性與權限確實是會被改變的喔!
Linux 文件長度限制
在Linux下,使用傳統的 Ext2/Ext3/Ext4 文件系統和被CentOS 7當作預設文件系統的 xfs而言,針對文件的檔名長度限制爲:
- 單一文件或目錄的最大容許文件名爲 255bytes,以一個 ASCII 英文佔用一個 bytes 來說,則大約可達 255個字符長度。若是以每個中文字佔用 2bytes 來說, 最大檔名就是大約在 128 箇中文字之譜!
是相當長的檔名喔!我們希望 Linux 的文件名可以一看就知道該文件在幹嘛的, 所以檔名通常是很長很長!而用慣了 Windows 的人可能會受不了,因爲文件名通常真的都很長, 對於用慣 Windows 而導致打字速度不快的朋友來說,嗯!真的是很困擾。
Linux 文件名的限制
由於 Linux 在文字接口下的一些指令操作關係,一般來說,你在設定 Linux 底下的文件名時, 最好可以避免一些特殊字符比較好,因爲這些符號在文字接口下,是有特殊意義的!例如:* ? > < ; & ! [ ] | \ ' " ` ( ) { }
注意:文件名的開頭爲小數點『.』時, 代表這個文件爲『隱藏檔』喔!同時,由於指令下達當中,常常會使用到 -option 之類的選項, 所以你最好也避免將文件檔名的開頭以 - 或 + 來命名啊!