自舉塊:引導程序。node
超級塊: 記錄整個文件系統相關的信息的地方,它記錄的信息主要有:block與inode的總量、使用量、剩餘量,文件系統的掛載時間,最近一次寫入數據的時間等。網絡
i節點圖:標記那些inode 是否爲已使用socket
塊位圖:標記那些block 是否爲已使用測試
i節點(表):i節點存放文件有關的全部信息:文件類型、文件訪問權限位、文件長度和指向文件數據塊的指針、文件名、i節點編號.ui
數據塊:存放文件內容。操作系統
特色 :unix
unix系統以inode號來操做系統。inode號對應的數據存了文件名、權限、增改查時etc指針
文件名只是方便人類操做,整數操做比字符快rest
操做code
訪問 /etc/passwd 文件:
先經過 / 的inode號獲取 / 信息。經過權限驗證後,從對應的block中訪問 文件名列表,找到 /etc
先經過 /etc 的inode號獲取 /etc 信息。經過權限驗證後,從對應的block中訪問 文件名列表,找到 /etc/passwd
先經過 /etc/passwd 的inode號獲取 /etc/passwd 信息。經過權限驗證後,從對應的block中獲得文件信息
修改文件名:直接替換inode中的文件名信息
同一個文件系統中移動文件。建立一個新的inode節點,將舊的inode節點刪除。
方法名 | 做用 | 成功 | 失敗 |
---|---|---|---|
stat | 返回文件信息 | 0 | -1 |
access和faccessat | 返回文件訪問權限 | 0 | -1 |
umask | 屏蔽進程的文件模式的權限 | 返回以前的文件模式建立的屏蔽字 | |
chmode、fchmode、fchmodat | 變動文件的權限 | 0 | -1 |
link、linkat | 建立鏈接 | 0 | -1 |
unlink、unlinkat | 刪除一個文件鏈接。若是鏈接爲0,則文件刪除 | 0 | -1 |
remove | 刪除一個文件鏈接。若是鏈接爲0,則文件刪除 | 0 | -1 |
rename、renameat | 重命名 | 0 | -1 |
symlink、symlinkat | 建立符號連接 | 0 | -1 |
readlink、readlinkat | 讀取符號連接 | 0 | -1 |
futimens、utimensat 和 utimes | 修改文件時間 | 0 | -1 |
mkdir、mkdirat | 建立目錄 | 0 | -1 |
rmdir | 刪除目錄 | 0 | -1 |
chdir、fchdir | 打開工做目錄 | 0 | -1 |
getcwd | 打開工做目錄 | 0 | NULL |
#include <sys/stat.h> inct stat(const char *restrict pathname,struct stat *restrict buf); int fstat(int fd,struct stat *buf); int lstat(const char *restrict pathname, struct stat *restrict buf); int fstat(int fd, const char *restrict pathname, struct stat restrict buf, int flag); --'成功:0;出錯:-1'
參數:
struct stat { mode_t st_mode; '文件類型' ino_t st_ino; 'i-node 數數量' dev_t st_dev; 'device 數量' dev_t st_rdev; '特殊文件的 device 數量' nlink_t st_nlink; 'link文件的數量' uid_t st_uid; 'user ID' gid_t st_gid; 'group ID' off_t st_size; '普通文件的字節大小' struct timespec st_atime; '最近被訪問時間' struct timespec st_mtime; '最近被修改時間' struct timespec st_ctime; '被建立時間' blksize_t st_blksize; 'I/O 的塊大小' blkcnt_t st_blocks; '磁盤分配的塊大小' }
文件類型
st_mode 的類型 # include<sys/stat.h>
宏 | 說明 |
---|---|
文件類 | |
S_ISREG() | 不一樣文件 |
S_ISDIR() | 目錄文件 |
S_ISCHR() | 字符特殊文件 |
S_ISBLK() | 塊特殊文件 |
S_ISFIFO() | 管道或FIFO |
S_ISLNK() | 符號連接 |
S_ISSOCK() | 套接字 |
IPC類 | |
S_TYPEISMQ() | 消息隊列 |
S_TYPEISSEM() | 信號量 |
S_TYPEISSHM() | 共享存儲對象 |
#include <unistd.h> int access(const char *pathname, int mode); '絕對路徑' int faccessat(int fd, const char *pathname, int mode ,int flag); '相對fd的路徑' -- '成功:0;出錯:-1'
參數
mode | 說明 |
---|---|
R_OK | 測試讀權限 |
W_OK | 測試寫權限 |
X_OK | 測試執行權限 |
#incLude <sys/stat.h> mode_t umask(mode_t cmask); --- '返回以前的文件模式建立的屏蔽字'
#include <sys/stat.h> int chmod(const char *pathname ,mode_t mode ); int fchmod(int fd, mode_t mode); int fchmodat(int fd, const char *pathname, mode_t mode, int flag); --- '成功:0;失敗-1'
參數
mode | 說明 |
---|---|
S_ISUID | 執行時設置用戶ID |
S_ISGID | 執行時設置組ID |
S_ISXID | 保存正文(粘着位) |
S_IRWXU | 用戶(全部者)讀、寫和執行 |
S_IRUSR | 用戶(全部者)讀 |
S_IWUSR | 用戶(全部者)寫 |
S_IXUSR | 用戶(全部者)執行 |
S_IRWXG | 組讀、寫和執行 |
S_IRGRP | 組讀 |
S_IWGRP | 組寫 |
S_IXGRP | 組執行 |
S_IRWXO | 其它讀、寫和執行 |
S_IROTH | 其它讀 |
S_IWOTH | 其它寫 |
S_IXOTH | 其它執行 |
#incldue <unistd.h> ' 建立鏈接' int link(const char *existingpath , const char *newpath) ; int linkat(int efd, const char *existingpath, int nfd, const char *newpath , int flag ); -- '成功:0;出錯:-1' '刪除一個鏈接' int unlink(const char *pathname); int unlinkat(int fd , const char *pathname ,int flag); -- '成功:0;失敗:-1' '刪除' #include <stdio.h> int remove(const char *pathname); '成功:0;失敗:-1'
#incldue <unistd.h> int rename(const char *oldname , const char *newname) ; int renameat(int oldfd , const char *oldname, int newfd, const char *newname); -- '成功:0;出錯:-1'
#incldue <unistd.h> int symlink(const char *oldname , const char *newname) ; int symlinkat(int oldfd , const char *oldname, int newfd, const char *newname); -- '成功:0;出錯:-1'
#incldue <unistd.h> ssize_t readlink(const char *restrict pathname , char *restrict buf , size_t bufsize ) ; ssize_t readlinkat(int fd , const char *restrict pathname , char *restrcit buf newfd, size_t bufsize ); -- '成功:返回讀取的字節數;出錯:-1'
#incldue <sys/stat.h> ssize_t futimens(int fd , const struct timespec time[2] ) ; ssize_t utimensat(int fd ,const char *path , const struct timespec time[2] ,int flag ) ; -- '成功:0;出錯:-1' #include <sys/time.h> int utimes(const char *pathname, const struct timeval time[2]); -- '成功:0;出錯:-1'
#incldue <sys/stat.h> int mkdir(const char *pathname,mode_t mode); int mkdirat(int fd , const char *pathname,mode_t mode); -- '成功:0;出錯:-1'
#incldue <sys/stat.h> int rmdir(const char *pathname,mode_t mode); -- '成功:0;出錯:-1'
#incldue <dirent.h> DIR *opendir(const char *pahtname); DIR *fopendir(int fd); -- '成功:返回指針;出錯:NULL' struct dirent *readdir(DIR *dp); -- '成功:返回指針;若在目錄尾或出錯:NULL' void rewinddir(DIR *dp); void closedir(DIR *dp); -- '成功:0;出錯:-1' long telldir(DIR *dp); -- '返回:與dp關聯的目錄中的當前位置' void seekdir(DIR *dp , long ioc); -- '成功:0;出錯:-1'
#incldue <unistd.h> int *chdir(const char *pahtname); int fchdir(int fd); -- '成功:0;出錯:-1' char *getcwd(char *buf, size_t size); -- '成功:返回buf;出錯:NULL'