• -rw-r—r—指明瞭1.txt文件是一個普通文件,1.txt和myprog04文件都是普通文件。以」-「開頭的都是普通文件,而以」d」開頭的是目錄文件。
• brw-rw---- 指明瞭/dev/sda1是一個塊設備(Block Device)文件。以」b」開頭的文件都是塊設備文件。•
• crw-rw----指明瞭/dev/lp0是一個字符設備(Chartacter Device)文件,以」c」開頭的文件都是字符設備文件。
• srwxrwxrwx 指明瞭/var/lib/mysql/mysql.sock是一個socket文件。以」」開頭的文件都是socket文件。
• prwxr—r--指明瞭了mypipe 是一個管道文件。管道文件的一個屬性是」p」。
• lrwxrwxrwx 指明瞭softlinkof1.txt 是一個軟連接文件(或稱符號連接文件),該文件指向了1.txt。以」l」開頭的文件是軟連接文件。
• -rw-r—r—開頭的hard_link_of_1.txt看上去是個普通文件,但它其實是一個硬連接文件。
• -rwsr-xr-x指明瞭myprog01是一個setUid的可執行文件,這是根據第四個字符」s」判斷的。
• -rwxr-sr-x指明瞭myprog03是一個setGid的可執行文件,這是根據第七個字符中的」s」判斷的。
• -rwsr-sr-x指明瞭myprog02是一個setUid加setGid的可執行文件,這是根據第四個和第七個字符中的」s」判斷的。
• drwxrwxrwt 中的第一個」d」字指明瞭tmp文件是一個目錄,最後一個字符」t」指明瞭該目錄被設置了粘着位。
1、設備文件
Linux下的/dev 目錄中有大量的設備文件。主要是塊設備文件和字符設備文件。
塊設備文件
在過去,在添加新磁盤後,每每須要手動增長塊設備文件。如今一般咱們不須要手動增長塊設備文件,運行一下service kudzu start ,系統就會自動爲您配置相應的設備。塊設備的主要特色是能夠隨機讀寫,而最多見的塊設備就是磁盤,如/dev/hda1 、/dev/sda二、/dev/fd0等。
字符設備文件
同塊設備同樣,咱們通常均可以用service kudzu start命令來自動增長、刪除或修改字符設備。最多見的字符設備是打印機和終端,他們能夠接受字符流。
/dev/null是一個很是有用的字符設備文件,送入這個設備的全部東西都被忽略。若是將任何程序的輸出結果重定向到/dev/null,則看不到任何輸出信息。甚至於,您能夠將某一用戶的shell指向/dev/null 以禁止其登錄。
管道設備文件
管道設備文件有時候也被叫作FIFO文件(FIFO是先進先出的意思),從字面上理解,管道設備文件就是從一頭流入,從另外一頭流出。一般咱們會在其中作一些工做,以達到咱們「吃的是草,擠出來的是奶」的目的,管道文件也有其妙用。
之前,Unix系統對文件的最大用量用2GB的限制,雖然如今新版本的Linux、Solaris、FreeBSD等再也不有此限制,但處理大文件的需求仍然存在,假設您想用鏡像(dd命令)的方式來備份一個容量爲20GB分區的分區,就會產生一個20GB的文件,根據您磁盤實際的使用情況,這個文件在壓縮後可能只有數MB到數GB,咱們能夠創建一個管道文件來自動實現這個壓縮過程。
[root@linux236 root]# mknod mypipe p
[root@linux236 root]# ls -l mypipe
prw-r--r-- 1 root root 0 Aug 5 23:27 mypipe
[root@linux236 root]#
[root@linux236 root]# ls -l mypipe
prw-r--r-- 1 root root 0 Aug 5 23:27 mypipe
[root@linux236 root]#
在這裏,咱們創建了一個叫mypipe的管道文件,用ls -l 命令能夠看到它的屬性是prw-r--r--,用下面的組合命令實現鏡像和壓縮:
[root@linux236 root]# compress < mypipe > sda6.img.Z &
[root@linux236 root]# dd if=/dev/sda6 of=mypipe
[root@linux236 root]# ls sda6.img.Z
sda6.img.Z
[root@linux236 root]# dd if=/dev/sda6 of=mypipe
[root@linux236 root]# ls sda6.img.Z
sda6.img.Z
第一個命令使得從mypipe管道中流出的文件被壓縮爲sda.img.Z文件,注意這個命令的結尾必須使用"&"符號。第二個命令將/dev/sda6分區中的資料道入管道文件mypipe,換句話說,/dev/sda6分區中的數據進入管道,而壓縮文件sda6.img.Z文件從管道中流出。
在導出Oracle、DB2等大型數據庫時等常常會生成很大的文件,熟練的數據庫管理員每每會選擇經過管道進行壓縮的方式,對於Oracle數據庫,咱們可使用下邊的組合命令:
這樣,就會將Oracle導出的內容直接壓縮成爲expdat.dmp.Z文件。
compress < mypipe > expdat.dmp.Z &
exp userid=system file=mypipe owner=scott
第二章 連接文件
連接文件有點相似於Windows 的所謂快捷方式,但並不徹底同樣。連接有兩種方式,軟連接和硬連接。
軟連接文件
軟連接又叫符號連接,這個文件包含了另外一個文件的路徑名。能夠是任意文件或目錄,能夠連接不一樣文件系統的文件。連接文件甚至能夠連接不存在的文件,這就產生通常稱之爲"斷鏈"的問題(或曰「現象"),連接文件甚至能夠循環連接本身。相似於編程語言中的遞歸。
[yaoyao@linux236 yaoyao]$ ls -l
total 0
lrwxrwxrwx 1 yaoyao yaoyao 5 Aug 6 17:39 1.txt -> 3.txt
lrwxrwxrwx 1 yaoyao yaoyao 5 Aug 6 17:38 2.txt -> 1.txt
lrwxrwxrwx 1 yaoyao yaoyao 5 Aug 6 17:39 3.txt -> 2.txt
total 0
lrwxrwxrwx 1 yaoyao yaoyao 5 Aug 6 17:39 1.txt -> 3.txt
lrwxrwxrwx 1 yaoyao yaoyao 5 Aug 6 17:38 2.txt -> 1.txt
lrwxrwxrwx 1 yaoyao yaoyao 5 Aug 6 17:39 3.txt -> 2.txt
上面的三個文件造成了一個遞歸,實質上沒有任何做用。系統管理員應該避免系統出現斷鏈或循環連接。
用ln -s 命令能夠生成一個軟鏈接,以下:
[root@linux236 test]# ln -s source_file softlink_file
在對符號文件進行讀或寫操做的時候,系統會自動把該操做轉換爲對源文件的操做,但刪除連接文件時,系統僅僅刪除連接文件,而不刪除源文件自己。
硬連接文件
info ln 命令告訴您,硬連接是已存在文件的另外一個名字(A "hard link" is another name for an existing file),這多少有些使人困惑。硬鏈接的命令是
ln -d existfile newfile
硬連接文件有兩個限制
一、不容許給目錄建立硬連接;
二、只有在同一文件系統中的文件之間才能建立連接。
二、只有在同一文件系統中的文件之間才能建立連接。
對硬連接文件進行讀寫和刪除操做時候,結果和軟連接相同。但若是咱們刪除硬連接文件的源文件,硬連接文件仍然存在,並且保留了願有的內容。這時,系統就「忘記」了它曾經是硬連接文件。而把他當成一個普通文件。
3、setUid、setGid文件和帶粘着位的目錄文件
在Linux/Unix下,有一種可執行文件被setUid,這使得任意使用者在執行該文件時,都綁定了文件擁有者的權限。就好像文件帶了一把尚方寶劍同樣,setUid文件一般用來提高使用者的權限.最有表明性的su命令.普通用戶能夠能夠執行該命令,使本身升級爲root。setUid命令的用法是:
chmod 4755 your_program
setGid 文件和setUid文件很是相似,它使得這使得任意使用者在執行該文件時,都綁定了文件全部組的權限.單獨setGid的文件很是少用,一般都是即setUid又setGid。不過和您猜測的可能有點不一樣。setUid+setGid一般並非用來提高權限的,而是爲了綁定某個特殊用戶及其組的特殊權限,例如qmail 的外圍軟件vpopmail,就使用了一個setUid+setGid的程序vchkpw來校驗用戶名和密碼。這個道理和Apache經常以nobody用戶運行同樣。其目的是爲了更加安全。
setGid 命令的用法爲
chmod 2755 your_program
chmod 2755 your_program
一般使用命令
chmod 6755 yourprogram
chmod 6755 yourprogram
來使得某可執行程序同時setUid和setGid
全能的root用戶固然能夠任意setUid和setGid。但尚方寶劍不能用來假傳聖旨,普通用戶只能給屬於本身的文件配置setUid或setGid。因爲setUid或setGid文件會使普通用戶提高權限,謹慎的系統管理員一般會留意系統中有setUid或setGid文件的變化。減小安全隱患。
在Linux下,/tmp是一個存放臨時文件的目錄,要求是對全部用戶可寫。但每一個用戶都只能刪除本身擁有的文件。這種狀況下,就能夠把目錄加一個粘着位。
[root@yaoyao /]# ls -l |grep tmp
drwsrwsrwt 9 root root 4096 8月7 10:50 tmp
drwsrwsrwt 9 root root 4096 8月7 10:50 tmp
注意第是個字符"t",它表明了這個目錄被設置了粘着位。
咱們自行創建一個abc的目錄,使之具備和/tmp相同的特色
chmod 777 abc
chmod +t abc
chmod +t abc
上述的個兩個命令組合等同於下邊的一個命令:
chmod 1777 abc
用ls –l 看abc 目錄的屬性以下:
[root@yaoyao test]# ls -l
總用量 4
drwsrwsrwt 2 root root 4096 8月 7 11:32 abc
和/tmp目錄相同的需求每每在ftp服務器的upload 目錄中也存在。能夠用相同的方式處理。
4、socket 文件
socket文件相似於管道,但它是在網絡上面工做的。您到計算機就是靠它來作網絡處理的。您可能據說過「Winsock」,那是 Windows 的套接口。咱們在這裏不深刻談有關套接口,由於若是您不寫程序,您不會用到它,但若是您看到您系統裏有個文件類型是s,您知道它是什麼就好了。
好比說mysql 運行的時候一般會產生一個socket文件。
[root@yaoyao tmp]# ls -l /tmp/mysql.sock
srwxrwxrwx 1 mysql mysql 08月 7 10:03 mysql.sock
/tmp目錄下還有一些socket文件,多半是運行Xwindows的時候產生的。
5、疑難雜症--刪除不掉的文件
「爲何有些文件以討厭的減號("-")開頭作文件名,不管如何都刪除不掉,這到底爲何?",您可能聽過您臨桌的新手這樣的叫喊過,但願一樣的事情不會發生在您的身上,這個很是容易解決,您只要用帶路徑的方法就能夠把他們刪除了,假定一個文件名爲"-abc",您能夠用:
rm ./-abc 或者
rm /home/yaoyao/-abc
rm /home/yaoyao/-abc
命令將其輕鬆刪除,另外您也能夠用相同的方式用vi或者其餘工具對他們進行修改。
另外一些文件看上去可能一切正常,但當您嘗試刪除的時候,竟然也會報錯,就象下邊同樣:
[root@linux236 root]# ls -l 1.txt
-rw-r--r-- 1 root root 0 Aug 5 23:00 1.txt
[root@linux236 root]# rm -rf 1.txt
rm: cannot unlink `1.txt': Operation not permitted
-rw-r--r-- 1 root root 0 Aug 5 23:00 1.txt
[root@linux236 root]# rm -rf 1.txt
rm: cannot unlink `1.txt': Operation not permitted
您是全能root用戶,竟然系統告訴您操做不容許,是Linux瘋了麼?固然不是,若是您會用lsattr命令,問題就有了答案。
[root@linux236 root]# lsattr
---i---------- ./1.txt
-------------- ./weiqi.ldif
-------------- ./qi.schema
祕密終於暴露了,在lsattr命令下,這個1.txt文件帶有一個"i"的屬性,因此纔不能夠刪除。您如今能夠用下邊的一系列命令:
[root@linux236 root]# lsattr 1.txt
---i---------- 1.txt
[root@linux236 root]# chattr -i 1.txt
[root@linux236 root]# rm -rf 1.txt
[root@linux236 root]#
---i---------- 1.txt
[root@linux236 root]# chattr -i 1.txt
[root@linux236 root]# rm -rf 1.txt
[root@linux236 root]#
成功了,這個屬性專門用來保護重要的文件不被刪除,一般的狀況下,懂得用這幾個命令的一般系統管理員有能力判斷這個文件是否能夠被刪除。 若是您想給一個文件多加點保護,可使用下邊的命令:
chattr +i filename
命令,這樣一來,想要刪除這個文件就要多一個步驟。同時,這樣的文件也是不能夠編輯和修改的。只有root用戶才能使用chattr命令。此命令能夠在Linux ext2或ext3系統上使用。
相似於Dos和Windows文件系統,不能隨意刪除的文件多半都有其道理,即便您知道如何刪除,都應該三思然後行。
總結
Linux/Unix系統管理是個複雜的工做,掌握和理解Linux/Unix文件類型是必備的基礎之一。學習Linux/Unix沒有捷徑,必需經過大量的實踐和努力學習。