2013年9月18日 星期三

每天一個Linux指令- Linux檔案類型和副檔名

每天一個Linux指令- Linux檔案類型和副檔名


拷貝來源:


01.http://www.cnblogs.com/peida/archive/2012/12/05/2803591.html


02.http://www.cnblogs.com/peida/archive/2012/11/22/2781912.html


Linux檔類型和Linux檔案名所代表的意義是兩個不同的概念。我們通過一般應用程式而創建的比如file.txt、file.tar.gz ,這些檔雖然要用不同的程式來打開,但放在Linux檔類型中衡量的話,大多是常規檔(也被稱為普通檔)。


一. 文件類型


Linux文件類型常見的有:普通檔、目錄、字元設備檔塊設備檔、符號鏈結檔等現在我們進行一個簡要的說明。


1. 普通檔 


我們用 ls -lh 來查看某個檔的屬性,可以看到有類似-rwxrwxrwx,值得注意的是第一個符號是 - ,這樣的檔在Linux中就是普通檔。這些檔一般是用一些相關的應用程式創建,比如圖像工具、文檔工具、歸檔工具... .... 或 cp工具等。這類檔的刪除方式是用rm 命令。 另外,依照檔的內容,又大略可以分為:


1>. 純文本檔(ASCII):


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


2>. 二進位檔(binary):


Linux系統其實僅認識且可以執行二進位檔(binary file)Linux當中的可執行檔(scripts, 文字型批次檔案不算)就是這種格式的檔。 剛剛使用令cat就是一個binary file。


3>. 資料格式檔(data): 


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


2. 目錄檔


當我們在某個目錄下執行,看到有類似 drwxr-xr-x ,這樣的檔就是目錄,目錄在Linux是一個比較特殊的檔。注意它的第一個字元是d。創建目錄的命令可以用 mkdir 命令,或cp命令,cp可以把一個目錄複製為另一個目錄。刪除用rm 或rmdir命令。 


3. 字元設備或塊設備檔 


如時您進入/dev目錄,列一下檔,會看到類似如下的:


[root@localhost ~]# ls -al /dev/tty


crw-rw-rw- 1 root tty 5, 0 11-03 15:11 /dev/tty


[root@localhost ~]# ls -la /dev/sda1


brw-r----- 1 root disk 8, 1 11-03 07:11 /dev/sda1


我們看到/dev/tty的屬性是 crw-rw-rw- ,注意前面第一個字元是 c ,這表示字元設備檔。比如貓等串口設備。我們看到 /dev/sda1 的屬性是 brw-r----- ,注意前面的第一個字元是b,這表示塊設備,比如硬碟,光碟機等設備


這個種類的檔,是用mknode來創建,用rm來刪除。目前在最新的Linux發行版本中,我們一般不用自己來創建設備檔。因為這些檔是和內核相關聯的。


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


區塊(block)設備檔 :


就是一些儲存資料, 以提供系統隨機存取的周邊設備,舉例來說,硬碟與軟碟等就是啦! 你可以隨機的在硬碟的不同區塊讀寫,這種裝置就是成組設備!你可以自行查一下/dev/sda看看, 會發現第一個屬性為[ b ]!


字元(character)設備檔:


亦即是一些序列埠的周邊設備, 例如鍵盤、滑鼠等等!這些設備的特色就是一次性讀取的,不能夠截斷輸出。 舉例來說,你不可能讓滑鼠跳到另一個畫面,而是滑動到另一個地方!第一個屬性為 [ c ]。


4. 資料介面檔(sockets): 


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


例如:當我們啟動MySQL伺服器時,會產生一個mysql.sock的文件。


[root@localhost ~]# ls -lh /var/lib/mysql/mysql.sock 


srwxrwxrwx 1 mysql mysql 0 04-19 11:12 /var/lib/mysql/mysql.sock


注意這個檔的屬性的第一個字元是 s。


5. 符號鏈結檔 


當我們查看檔屬性時,會看到有類似 lrwxrwxrwx,注意第一個字元是l,這類檔是鏈結檔。是通過ln -s 原始檔案名 新檔案名 。上面是一個例子,表示setup.log是install.log的軟鏈結檔。怎麼理解呢?這和Windows作業系統中的快捷方式有點相似。


符號鏈結檔的創建方法舉例:


[root@localhost test]# ls -lh log2012.log


-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log


[root@localhost test]# ln -s log2012.log  linklog.log


[root@localhost test]# ls -lh *.log


lrwxrwxrwx 1 root root   11 11-22 06:58 linklog.log -> log2012.log


-rw-r--r-- 1 root root 296K 11-13 06:03 log2012.log


6. 資料輸送檔(FIFO,pipe):


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


二. Linux文件副檔名


1. 副檔名類型


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


不過,可以被執行跟可以執行成功是不一樣的~舉例來說,在root家目錄下的install.log 是一個純文本檔,如果經由修改許可權成為 -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系統中,檔的屬性與許可權確實是會被改變的


2. Linux檔案長度限制


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


單一檔或目錄的最大容許檔案名為 255 個字元


包含完整路徑名稱及目錄 (/) 之完整檔名為 4096 個字元


是相當長的檔名!我們希望Linux的檔案名可以一看就知道該檔在幹嘛的, 所以檔名通常是很長很長


3. Linux檔案名的字元的限制


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


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


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


 


 


沒有留言:

張貼留言