文件
Linux幾乎將所有的資源當(dāng)做文件來處理。除了常見的可以寫入字節(jié)流的普通文件,還包括設(shè)備文件(在/dev目錄下),內(nèi)存映像文件(在/proc目錄下)等等。
現(xiàn)代操作系統(tǒng)依靠特殊的硬件特性來禁止用戶進(jìn)程直接訪問底層硬件部分。通常CPU有至少有兩種執(zhí)行模式: 用戶程序的非特權(quán)模式和內(nèi)核的特權(quán)模式。Linux將他們分別稱為用戶態(tài)(user mode)和內(nèi)核態(tài)(kernel mode)。所以對(duì)于大多數(shù)文件操作都需要通過系統(tǒng)調(diào)用來實(shí)現(xiàn)。
Linux文件分類
- 目錄(directory)
- 普通文件(regular file)
- 軟鏈接(soft link,也叫symbolic link)
- 面向塊的設(shè)備文件(block-oriented device file)
- 面向字符的設(shè)備文件(character-oriented device file)
- 套接字(socket)
硬鏈接和軟鏈接
- 創(chuàng)建硬鏈接的命令如下:
// 創(chuàng)建一個(gè)由p1標(biāo)識(shí)的文件的硬鏈接p2
// 索引節(jié)點(diǎn)相同
ln p1 p2
硬鏈接相當(dāng)于一個(gè)直接指向文件實(shí)體的指針。
限制:
- 不能給目錄創(chuàng)建硬鏈接。
- p1和p2所在分區(qū)的文件系統(tǒng)必須相同。
- 創(chuàng)建軟鏈接的命令如下:
// 創(chuàng)建一個(gè)由p1標(biāo)識(shí)的文件的軟鏈接p2
// p2索引節(jié)點(diǎn)指向p1
ln -s p1 p2
軟連接相當(dāng)于一個(gè)指向硬鏈接的指針。軟鏈接不存在硬鏈接的限制。
當(dāng)前工作目錄
每一個(gè)linux進(jìn)程都有一個(gè)當(dāng)前工作目錄,它屬于進(jìn)程執(zhí)行上下文(excution context)的一部分。當(dāng)程序?qū)ξ募M(jìn)行操作時(shí),如果使用的是相對(duì)路徑,則會(huì)在當(dāng)前工作目錄下查找該文件。
文件的元數(shù)據(jù)---索引節(jié)點(diǎn)
在Linux中,除了設(shè)備文件和特殊的文件系統(tǒng)外,文件由字節(jié)序列組成,不包含控制字符,比如文件長度,文件結(jié)束字符(end-of-file,EOF)等。
文件系統(tǒng)處理文件所需要的信息包含在一個(gè)稱為索引節(jié)點(diǎn)(inode)的結(jié)構(gòu)中,每個(gè)文件都有對(duì)應(yīng)一個(gè)索引節(jié)點(diǎn)(inode),文件系統(tǒng)使用索引節(jié)點(diǎn)(inode)來標(biāo)識(shí)文件。
Posix標(biāo)準(zhǔn)規(guī)定索引節(jié)點(diǎn)(inode)至少包括以下內(nèi)容:
文件類型
以字節(jié)為單位文件大小
文件所屬設(shè)備標(biāo)識(shí)符
與文件相關(guān)的硬鏈接個(gè)數(shù)(Linux中,當(dāng)文件的硬鏈接個(gè)數(shù)為0時(shí),文件將被刪除)
在文件系統(tǒng)中標(biāo)識(shí)文件的索引節(jié)點(diǎn)號(hào)
文件所屬用戶的uid
文件所屬組的gid
幾個(gè)時(shí)間戳,索引節(jié)點(diǎn)狀態(tài)改變時(shí)間,文件最后訪問時(shí)間,文件最后修改時(shí)間
訪問權(quán)限和文件模式
訪問權(quán)限和文件模式
- r:讀取權(quán)限
- w:寫入權(quán)限
- x:執(zhí)行權(quán)限
- suid
- sgid
- sticky