解析Linux特殊文件
Linux下可以用ls –l 命令來(lái)判斷文件類型,如上 圖所示??梢砸罁?jù)第一列中的10個(gè)字符來(lái)判斷。
• -rw-r—r—指明了1.txt文件是一個(gè)普通文件,1.txt和myprog04文件都是普通文件。以”-“開(kāi)頭的都是普通文件,而以”d”開(kāi)頭的是目錄文件。
• brw-rw---- 指明了/dev/sda1是一個(gè)塊設(shè)備(Block Device)文件。以”b”開(kāi)頭的文件都是塊設(shè)備文件。•
• crw-rw----指明了/dev/lp0是一個(gè)字符設(shè)備(Chartacter Device)文件,以”c”開(kāi)頭的文件都是字符設(shè)備文件。
• srwxrwxrwx 指明了/var/lib/mysql/mysql.sock是一個(gè)socket文件。以””開(kāi)頭的文件都是socket文件。
• prwxr—r--指明了了mypipe 是一個(gè)管道文件。管道文件的一個(gè)屬性是”p”。
• lrwxrwxrwx 指明了softlinkof1.txt 是一個(gè)軟鏈接文件(或稱符號(hào)鏈接文件),該文件指向了1.txt。以”l”開(kāi)頭的文件是軟鏈接文件。
• -rw-r—r—開(kāi)頭的hard_link_of_1.txt看上去是個(gè)普通文件,但它實(shí)際上是一個(gè)硬鏈接文件。
• -rwsr-xr-x指明了myprog01是一個(gè)setUid的可執(zhí)行文件,這是根據(jù)第四個(gè)字符”s”判斷的。
• -rwxr-sr-x指明了myprog03是一個(gè)setGid的可執(zhí)行文件,這是根據(jù)第七個(gè)字符中的”s”判斷的。
• -rwsr-sr-x指明了myprog02是一個(gè)setUid加setGid的可執(zhí)行文件,這是根據(jù)第四個(gè)和第七個(gè)字符中的”s”判斷的。
• drwxrwxrwt 中的第一個(gè)”d”字指明了tmp文件是一個(gè)目錄,最后一個(gè)字符”t”指明了該目錄被設(shè)置了粘著位。
一、設(shè)備文件
Linux下的/dev 目錄中有大量的設(shè)備文件。主要是塊設(shè)備文件和字符設(shè)備文件。
塊設(shè)備文件
在過(guò)去,在添加新磁盤后,往往需要手動(dòng)增加塊設(shè)備文件?,F(xiàn)在通常我們不需要手動(dòng)增加塊設(shè)備文件,運(yùn)行一下service kudzu start ,系統(tǒng)就會(huì)自動(dòng)為您配置相應(yīng)的設(shè)備。塊設(shè)備的主要特點(diǎn)是可以隨機(jī)讀寫(xiě),而最常見(jiàn)的塊設(shè)備就是磁盤,如/dev/hda1 、/dev/sda2、/dev/fd0等。
字符設(shè)備文件
同塊設(shè)備一樣,我們一般都可以用service kudzu start命令來(lái)自動(dòng)增加、刪除或修改字符設(shè)備。最常見(jiàn)的字符設(shè)備是打印機(jī)和終端,他們可以接受字符流。
/dev/null是一個(gè)非常有用的字符設(shè)備文件,送入這個(gè)設(shè)備的所有東西都被忽略。如果將任何程序的輸出結(jié)果重定向到/dev/null,則看不到任何輸出信息。甚至于,您可以將某一用戶的shell指向/dev/null 以禁止其登陸。
管道設(shè)備文件
管道設(shè)備文件有時(shí)候也被叫做FIFO文件(FIFO是先進(jìn)先出的意思),從字面上理解,管道設(shè)備文件就是從一頭流入,從另一頭流出。通常我們會(huì)在其中做一些工作,以達(dá)到我們“吃的是草,擠出來(lái)的是奶”的目的,管道文件也有其妙用。
以前,Unix系統(tǒng)對(duì)文件的最大用量用2GB的限制,雖然現(xiàn)在新版本的Linux、Solaris、FreeBSD等不再有此限制,但處理大文件的需求仍然存在,假設(shè)您想用鏡像(dd命令)的方式來(lái)備份一個(gè)容量為20GB分區(qū)的分區(qū),就會(huì)產(chǎn)生一個(gè)20GB的文件,根據(jù)您磁盤實(shí)際的使用狀況,這個(gè)文件在壓縮后可能只有數(shù)MB到數(shù)GB,我們可以建立一個(gè)管道文件來(lái)自動(dòng)實(shí)現(xiàn)這個(gè)壓縮過(guò)程。
[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]#
在這里,我們建立了一個(gè)叫mypipe的管道文件,用ls -l 命令可以看到它的屬性是prw-r--r--,用下面的組合命令實(shí)現(xiàn)鏡像和壓縮:
[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
第一個(gè)命令使得從mypipe管道中流出的文件被壓縮為sda.img.Z文件,注意這個(gè)命令的結(jié)尾必須使用"&"符號(hào)。第二個(gè)命令將/dev/sda6分區(qū)中的資料道入管道文件mypipe,換句話說(shuō),/dev/sda6分區(qū)中的數(shù)據(jù)進(jìn)入管道,而壓縮文件sda6.img.Z文件從管道中流出。
在導(dǎo)出Oracle、DB2等大型數(shù)據(jù)庫(kù)時(shí)等經(jīng)常會(huì)生成很大的文件,熟練的數(shù)據(jù)庫(kù)管理員往往會(huì)選擇通過(guò)管道進(jìn)行壓縮的方式,對(duì)于Oracle數(shù)據(jù)庫(kù),我們可以使用下邊的組合命令:
這樣,就會(huì)將Oracle導(dǎo)出的內(nèi)容直接壓縮成為expdat.dmp.Z文件。
compress < mypipe > expdat.dmp.Z &
exp userid=system file=mypipe owner=scott
第二章 鏈接文件
鏈接文件有點(diǎn)類似于Windows 的所謂快捷方式,但并不完全一樣。鏈接有兩種方式,軟鏈接和硬鏈接。
軟鏈接文件
軟鏈接又叫符號(hào)鏈接,這個(gè)文件包含了另一個(gè)文件的路徑名??梢允侨我馕募蚰夸洠梢枣溄硬煌募到y(tǒng)的文件。鏈接文件甚至可以鏈接不存在的文件,這就產(chǎn)生一般稱之為"斷鏈"的問(wèn)題(或曰“現(xiàn)象"),鏈接文件甚至可以循環(huán)鏈接自己。類似于編程語(yǔ)言中的遞歸。
[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
上面的三個(gè)文件形成了一個(gè)遞歸,實(shí)質(zhì)上沒(méi)有任何作用。系統(tǒng)管理員應(yīng)該避免系統(tǒng)出現(xiàn)斷鏈或循環(huán)鏈接。
用ln -s 命令可以生成一個(gè)軟連接,如下:
[root@linux236 test]# ln -s source_file softlink_file
在對(duì)符號(hào)文件進(jìn)行讀或?qū)懖僮鞯臅r(shí)候,系統(tǒng)會(huì)自動(dòng)把該操作轉(zhuǎn)換為對(duì)源文件的操作,但刪除鏈接文件時(shí),系統(tǒng)僅僅刪除鏈接文件,而不刪除源文件本身。
硬鏈接文件
info ln 命令告訴您,硬鏈接是已存在文件的另一個(gè)名字(A "hard link" is another name for an existing file),這多少有些令人困惑。硬連接的命令是
ln -d existfile newfile
硬鏈接文件有兩個(gè)限制
1、不允許給目錄創(chuàng)建硬鏈接;
2、只有在同一文件系統(tǒng)中的文件之間才能創(chuàng)建鏈接。
對(duì)硬鏈接文件進(jìn)行讀寫(xiě)和刪除操作時(shí)候,結(jié)果和軟鏈接相同。但如果我們刪除硬鏈接文件的源文件,硬鏈接文件仍然存在,而且保留了愿有的內(nèi)容。這時(shí),系統(tǒng)就“忘記”了它曾經(jīng)是硬鏈接文件。而把他當(dāng)成一個(gè)普通文件。
三、setUid、setGid文件和帶粘著位的目錄文件
在Linux/Unix下,有一種可執(zhí)行文件被setUid,這使得任意使用者在執(zhí)行該文件時(shí),都綁定了文件擁有者的權(quán)限。就好像文件帶了一把尚方寶劍一樣,setUid文件通常用來(lái)提升使用者的權(quán)限.最有代表性的su命令.普通用戶可以可以執(zhí)行該命令,使自己升級(jí)為root。setUid命令的用法是:
chmod 4755 your_program
setGid 文件和setUid文件非常類似,它使得這使得任意使用者在執(zhí)行該文件時(shí),都綁定了文件所有組的權(quán)限.單獨(dú)setGid的文件非常少用,通常都是即setUid又setGid。不過(guò)和您猜想的可能有點(diǎn)不同。setUid+setGid通常并不是用來(lái)提升權(quán)限的,而是為了綁定某個(gè)特殊用戶及其組的特殊權(quán)限,例如qmail 的外圍軟件vpopmail,就使用了一個(gè)setUid+setGid的程序vchkpw來(lái)校驗(yàn)用戶名和密碼。這個(gè)道理和Apache常常以nobody用戶運(yùn)行一樣。其目的是為了更加安全。
setGid 命令的用法為
chmod 2755 your_program
通常使用命令
chmod 6755 yourprogram
來(lái)使得某可執(zhí)行程序同時(shí)setUid和setGid
全能的root用戶當(dāng)然可以任意setUid和setGid。但尚方寶劍不能用來(lái)假傳圣旨,普通用戶只能給屬于自己的文件配置setUid或setGid。由于setUid或setGid文件會(huì)使普通用戶提升權(quán)限,謹(jǐn)慎的系統(tǒng)管理員通常會(huì)留意系統(tǒng)中有setUid或setGid文件的變化。減少安全隱患。
在Linux下,/tmp是一個(gè)存放臨時(shí)文件的目錄,要求是對(duì)所有用戶可寫(xiě)。但每個(gè)用戶都只能刪除自己擁有的文件。這種情況下,就可以把目錄加一個(gè)粘著位。
[root@yaoyao /]# ls -l |grep tmp
drwsrwsrwt 9 root root 4096 8月7 10:50 tmp
注意第是個(gè)字符"t",它代表了這個(gè)目錄被設(shè)置了粘著位。
我們自行建立一個(gè)abc的目錄,使之具有和/tmp相同的特點(diǎn)
chmod 777 abc
chmod +t abc
上述的個(gè)兩個(gè)命令組合等同于下邊的一個(gè)命令:
chmod 1777 abc
用ls –l 看abc 目錄的屬性如下:
[root@yaoyao test]# ls -l
總用量 4
drwsrwsrwt 2 root root 4096 8月 7 11:32 abc
和/tmp目錄相同的需求往往在ftp服務(wù)器的upload 目錄中也存在??梢杂孟嗤姆绞教幚怼?/P>
四、socket 文件
socket文件類似于管道,但它是在網(wǎng)絡(luò)上面工作的。您到計(jì)算機(jī)就是靠它來(lái)做網(wǎng)絡(luò)處理的。您可能聽(tīng)說(shuō)過(guò)“Winsock”,那是 Windows 的套接口。我們?cè)谶@里不深入談?dòng)嘘P(guān)套接口,因?yàn)槿绻粚?xiě)程序,您不會(huì)用到它,但如果您看到您系統(tǒng)里有個(gè)文件類型是s,您知道它是什么就行了。
比如說(shuō)mysql 運(yùn)行的時(shí)候通常會(huì)產(chǎn)生一個(gè)socket文件。
[root@yaoyao tmp]# ls -l /tmp/mysql.sock
srwxrwxrwx 1 mysql mysql 08月 7 10:03 mysql.sock
/tmp目錄下還有一些socket文件,多半是運(yùn)行Xwindows的時(shí)候產(chǎn)生的。
五、疑難雜癥--刪除不掉的文件
“為什么有些文件以討厭的減號(hào)("-")開(kāi)頭做文件名,無(wú)論如何都刪除不掉,這到底為什么?",您可能聽(tīng)過(guò)您臨桌的新手這樣的叫喊過(guò),希望同樣的事情不會(huì)發(fā)生在您的身上,這個(gè)非常容易解決,您只要用帶路徑的方法就可以把他們刪除了,假定一個(gè)文件名為"-abc",您可以用:
rm ./-abc 或者
rm /home/yaoyao/-abc
命令將其輕松刪除,另外您也可以用相同的方式用vi或者其他工具對(duì)他們進(jìn)行修改。
另一些文件看上去可能一切正常,但當(dāng)您嘗試刪除的時(shí)候,居然也會(huì)報(bào)錯(cuò),就象下邊一樣:
[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
您是全能root用戶,居然系統(tǒng)告訴您操作不允許,是Linux瘋了么?當(dāng)然不是,如果您會(huì)用lsattr命令,問(wèn)題就有了答案。
[root@linux236 root]# lsattr
---i---------- ./1.txt
-------------- ./weiqi.ldif
-------------- ./qi.schema
秘密終于暴露了,在lsattr命令下,這個(gè)1.txt文件帶有一個(gè)"i"的屬性,所以才不可以刪除。您現(xiàn)在可以用下邊的一系列命令:
[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]#
成功了,這個(gè)屬性專門用來(lái)保護(hù)重要的文件不被刪除,通常的情況下,懂得用這幾個(gè)命令的通常系統(tǒng)管理員有能力判斷這個(gè)文件是否可以被刪除。 如果您想給一個(gè)文件多加點(diǎn)保護(hù),可以使用下邊的命令:
chattr +i filename
命令,這樣一來(lái),想要?jiǎng)h除這個(gè)文件就要多一個(gè)步驟。同時(shí),這樣的文件也是不可以編輯和修改的。只有root用戶才能使用chattr命令。此命令可以在Linux ext2或ext3系統(tǒng)上使用。
類似于Dos和Windows文件系統(tǒng),不能隨意刪除的文件多半都有其道理,即使您知道如何刪除,都應(yīng)該三思而后行。
總結(jié)
Linux/Unix系統(tǒng)管理是個(gè)復(fù)雜的工作,掌握和理解Linux/Unix文件類型是必備的基礎(chǔ)之一。學(xué)習(xí)Linux/Unix沒(méi)有捷徑,必需通過(guò)大量的實(shí)踐和努力學(xué)習(xí)。
相關(guān)文章
Linux基礎(chǔ)知識(shí)99問(wèn)(五)
Linux基礎(chǔ)知識(shí)99問(wèn)(五)...2006-10-10
每個(gè)系統(tǒng)管理員必知的 30 個(gè) Linux 系統(tǒng)監(jiān)控工具
本文提到的是一些基本的命令,用于系統(tǒng)分析和服務(wù)器調(diào)試等,接下來(lái)通過(guò)本文給大家分享每個(gè)系統(tǒng)管理員必知的 30 個(gè) Linux 系統(tǒng)監(jiān)控工具,感興趣的朋友跟隨腳本之家小編一起看看吧2018-03-03
輕松解決 Linux操作系統(tǒng)故障恢復(fù)技巧
輕松解決 Linux操作系統(tǒng)故障恢復(fù)技巧...2006-10-10
簡(jiǎn)析Linux中如何改變文件或目錄的訪問(wèn)權(quán)限
簡(jiǎn)析Linux中如何改變文件或目錄的訪問(wèn)權(quán)限...2006-10-10
linux .bash_profile和.bashrc的什么區(qū)別
詳細(xì)分析了.bash_profile和.bashrc的區(qū)別2008-09-09
Linux CentOS MySQL 5.7.18 5.7.X安裝教程
這篇文章主要介紹了Linux CentOS MySQL 5.7.18 5.7.X安裝教程,需要的朋友可以參考下2017-04-04

