linux檔案系統的操作

2022-03-05 19:16:35 字數 4066 閱讀 4672

1、對於linux系統,檔案系統指的是某個格式化後用於儲存檔案的裝置(如硬碟、軟盤,或cd-rom),檔案系統可以再很多允許隨機訪問的儲存介質上建立(磁帶只允許順序訪問,所以不能包含乙個檔案系統)。

linux中的檔案系統型別有:二級擴充套件檔案系統,或extsfs,用於儲存linux檔案;ms-dos檔案系統,允許linux訪問ms-dos分割槽和軟盤上的檔案;其他檔案系統,包括cd-rom使用的iso9660檔案系統。

2、檔案系統是在磁碟上儲存資料所採用的部分機制,每個磁碟劃分為多個分割槽,每個分割槽的大小由系統管理員根據需要決定,檔案系統存在於分割槽中,每個檔案系統裡又包含目錄,每個目錄裡又包含子目錄和檔案等。

3、檔案系統的結構也就是檔案的組織方式。

inode結構包含了有關檔案的資訊,有些系統的inode最多包含40多條資訊,大部分供核心使用,與使用者相關的資訊有:mode(檔案的許可權和型別)、link count(包含本inode項的目錄個數)、user id(檔案所有者的使用者id)、group id(檔案所有者所在組的id)、size(檔案的大小位元組數)、access time(上次檔案被訪問的時間)、mod time(上次檔案被修改的時間)、block list(包含檔案第一段的磁碟塊號的列表)、indirect list(包含檔案除第一段外的磁碟塊號的列表)。

注意其中並不包括檔名和節點號,檔名資訊存放在目錄檔案中。

超級塊中記錄了inode表、空閒塊表等重要資訊在磁碟上的存放位置,超級塊很重要,回覆嚴重癱瘓的檔案系統可能要對超級塊進行操作。超級塊中儲存的資訊主要有:一是檔案系統的大小以及所有未被使用塊的大小;二是庫用資料庫的數量和部分可以及時分配的空閒資料塊列表;三是最近一次更新時間與檔案系統的狀態;四是空閒inode結點的個數和部分可以及時 使用的inode結點列表。

4、檔案的分類:檔案型別記錄在stat結構的st_mode域中。

(2)目錄檔案:只有核心才能寫目錄檔案,inode和磁碟塊是一一對應的,但多個目錄項可以對應乙個inode。

(3)硬鏈結檔案:指向乙個inode,系統吧硬鏈結檔案看成另外乙個檔案,乙個檔案有幾個硬鏈結就備份幾次,硬鏈結檔案共享inode,不能跨檔案系統存在,ln命令產生硬鏈結檔案,ls-il命令列出檔案硬鏈結以及inode資訊。為目錄建立硬鏈結時可能使整個檔案系統癱瘓,硬鏈結中,inode不能只想乙個目錄。

(6)有名管道檔案:用於程序間通訊,mkmod可以建立,檔案許可權之前的字母為p

(7)字元裝置檔案:存放在/dev目錄中,提供一種與裝置驅動程式通訊的方法,通訊量為乙個字元,檔案許可權之前的字母為c

(8)塊設別檔案:存放在/dev目錄中,用於同驅動程式進行通訊,一次傳遞乙個資料,檔案許可權之前的字母為b。硬碟是塊裝置,而終端是字元裝置。

5、順序檔案操作,普通檔案即為順序檔案

(1)開啟檔案

#include

#include

#include

int open( const char * pathname, int flags);

int open( const char * pathname,int flags, mode_t mode);

第三個引數(...)僅當建立新檔案時才使用,用於指定檔案的訪問許可權。pathname 是待開啟/建立檔案的路徑名;oflag 用於指定檔案的開啟/建立模式。

成功則返回檔案描述符,是乙個非常小的非負整數,實際是乙個指向開啟檔案描述的指標陣列的乙個索引,否則返回 -1。由open 返回的檔案描述符一定是該程序尚未使用的最小描述符。只要有乙個許可權被禁止則返回-1。

flags引數必須使用以下三個中的乙個,它們三個是互斥的:

o_rdonly       唯讀模式 

o_wronly      只寫模式 

o_rdwr          讀寫模式

以下常量是選用的:

mode引數常用的三個有用組合為:

s_irwxu(s_irusr | s_iwusr | s_ixusr)檔案所有者讀寫執行許可權

s_irwxg(s_irgrp | s_iwgrp |s_ixgrp)檔案使用者組讀寫執行許可權

s_irwxo(s_iroth | s_iwoth | s_ixoth)檔案其他使用者讀寫執行許可權

(2)建立新檔案

#include

#include

#include

int create(const char* pathname,mode_t mode);呼叫正確返回檔案描述符

和下列函式等價

open(pathname, o_wronly | o_create | o_trunc,mode);

(3)讀檔案

#indlude

ssize_t read(int fd,void *buf,size_t nbytes);正確返回0或位元組數;

(4)寫檔案

#indlude

ssize_t write(int fd,const void *buf,size_t nbytes);正確返回0或位元組數;

(5)關閉檔案

#indlude

int close(int fd);

(6)使用者緩衝區

使用緩衝技術的檔案i/o軟體包(fopen(),fclose()等)

6、隨機檔案操作

順序訪問,所有的讀寫都從檔案的當前偏移位置開始。

#include

#include

off_t lseek(int fd,off_t offset,int whence);

引數offset是乙個相對值,引數whence取下列值之一:

seek_set:從檔案開始處計算偏移

seek_cur:從檔案當前位置計算偏移

seek_end:從檔案借書處計算偏移

7、檔案共享

核心使用三種資料結構,它們之間的關係決定了乙個程序對另乙個和它共享檔案的程序的執行效果。

檔案描述符僅用於單個程序的單個描述符,而檔案狀態標誌用於指向給定檔案開啟表項的任何程序的所有描述符。

乙個存在的檔案描述符可以利用以下的函式來複製:

#include

int dup(int fd);返回可用的檔案描述符中最小的乙個數字

int dup2(int fd,int fd2);用fd2定義新的檔案描述符,若fd2已存在,則它首先被關閉。

8、索引節點

linux中所有的檔案和設別都有乙個索引節點(inode即index node)與之相連,通過索引節點來訪問它們。索引節點包含的關於檔案的資訊,這些資訊為了可供程序使用都被拷貝到stat結構中(sys/stat.h標頭檔案),stat結構體主要域有:

9、檔案層次結構

(1)linux程序可以利用mkdir()系統呼叫建立乙個目錄

#include

#include

int mkdir(const char *pathname ,mode_t mode);

建立的新目錄將為呼叫程序的有效使用者識別號所擁有,並且它將自動被初始化成包含點和點點專案。每個目錄下,都有乙個名稱為「.」的檔案來代表目錄本身,有乙個名稱為「..」的檔案代表本目錄的父目錄。

(2)程序還可以刪除空的目錄,訪問目錄以及對目錄進行讀和關閉。

10、改變檔案屬性

(1)改變檔名稱

int rename(const char * oldname,const char* newname);

(2)改變檔案讀取許可權

int chmod(char *pathname,mode_t mode);

int fchmod(int fd,mode_t mode);

(3)改變檔案的所有者(只有root賬號可以使用)

int fchown(int fd,uid_t owner,gid_t group);

int chown(const char *pathname,uid_t owner,gid_t group);

linux檔案系統操作

檔案操作 ls 顯示當前目錄下所有檔案和資料夾 ll 顯示所有檔案資料夾的詳細資訊 cd 切換目錄 上級目錄 pwd 顯示當前目錄路徑檔案的增刪查改 mkdir 檔名 建立資料夾 touch 檔名 建立檔案 cp text.txt text2.txt 複製 cp text.txt opt test ...

linux檔案系統 檔案訪問操作

找到檔案 var log msg.txt的內容 找到檔案,將目錄中條目項刪除 檔案的inode的inode bitmap標為0 檔案占用的資料塊的block bitmap對應的標為0 注 不用刪除所在是資料塊。所以剛刪除的內容,也是能恢復的,只要知道其資料塊的位置 複製,複製資料到新的資料塊 ls ...

linux檔案系統和檔案操作

write和open函式的練習 open函式可以開啟已經存在的檔案,也可以建立檔案返回檔案描述符 int fd open 路徑 o rdwr o creat,許可權 0777 建立檔案的時候需要加許可權0777,開啟檔案不需要加 int bytes write fd,字串指標,寫入bytes大小 i...