Linux中有一句話:一切皆是文件
1、普通文件( - regular file )
(1)、文本文件
文件中的內容是由文本構成的,文本指的是ASCII碼字符。文件里的內容本質上都是數字(不管什么文件內容本質上都是數字,因為計算機本身只有0和1),而文本文件中的數字本身應該被理解為這個數字對應的ASCII碼。常見的有.c文件、.h文件、.txt文件等都是文本文件。文本文件的好處就是可以被人輕松讀懂和編寫。所以說文本文件天生為人類發明的。
(2)、二進制文件
二進制文件中存儲的本質也是數字,只不過這些數字並不是文字的編碼數字,而是真正的數字。常見的可執行文件(gcc編譯生成的a.out,arm-linux-gcc編譯鏈接生成的.bin)都是二進制文件。
(3)、從本質上看,文本文件和二進制文件並沒有二進制文件。都是在一個文件里存放了數字。區別就是理解方式不同,如果把這些數字就當作數字處理則就是二進制文件,如果把這些數字按照某種編碼格式去解碼成文本字符,則就是文本文件。
(4)、我們如何知道一個文件是文本文件還是二進制文件呢?在Linux系統層面是不區分這兩個的(譬如open、read、write等方法操作文本文件和二進制文件時一點區別都沒有),所以我們無法從文件本身准確知道文件屬於哪一種,我們只能本來就知道這個文件的類型然后用這個文件的用法去用他。有時候會用一些后綴名來人為的標記文件的類型。
(5)、使用文本文件時,常規用法就是用文本文件編輯器去打開它、編輯它。常見的文本文件編輯器如vim、gedit、notepad++、sourceinsight等,我們用這些文本文件編輯器去打開文件的時候,編輯器會read讀出文件二進制數字內容,然后按照編碼格式去解碼將其還原成文字展現給我們。如果用文本文件編輯器去打開一個二進制文件會如何?這時候編輯器就以為這個二進制文件還是文本文件,然后試圖去將其解碼成文字,但是解碼過程中很多數字並不對應有意義的文字所以成了亂碼。
(6)、如果用二進制閱讀工具去打開一個文本文件如何?得出的就是文本文件對應的二進制的編碼。
2、目錄文件( d directory )
(1)、目錄就是文件夾,文件夾在Linux中 也是一種文件,不過是特殊文件。用vi打開一個文件夾就能看到,文件夾其實就是一種特殊文件,里邊存的內容包括這個文件的路徑還有文件夾里邊的文件列表。
(2)、但是文件夾這種文件比較特殊,本身並不適合用普通的方式來讀寫。Linux中是使用特殊的一些API來專門讀寫文件夾的。
3、設備文件
(1)、設備文件包括:
字符設備文件(c character)
塊設備文件(b block)。
(2)、設備文件對應的是硬件設備,也就是說這個文件雖然在文件系統中存在,但是並不是真正存在於硬盤上的一個文件,而是文件系統虛擬制造出來的(叫做虛擬文件系統,如/dev /sys /proc等)
(3)、虛擬文件系統中的文件大多數不能或者說是不用直接讀寫的,而是用一些特殊的API產生或者使用的。
4、管道文件(p pipe)
(1)、管道在Linux中是一種通信手段,在通信的時候需要建立管道文件作為輔助。
5、套接字文件(s socket)
(1)、在上網的時候需要建立套接字文件
6、符號鏈接文件(l link)
(1)、類似於Windows中的快捷方式,包括硬鏈接、軟連接等等。
