linux下的stat命令及對stat結構體的剖析
-f 顯示檔案所在檔案系統的資訊
-L 顯示符號連結
-t 簡潔模式,只顯示摘要資訊
在看之前,我們先ll一下,在裡面找個檔案,我選擇了之前建好的tet.c檔案
我們可以看到-L顯示了很多資訊,包括size,Block,以及檔案的三個時間(atime,ctime,mtime關於這三個時間在我的另一篇部落格中有講到點選開啟連結),而-f命令出現了一個id及其他資訊,-t就顯得簡潔很多,但是通過觀察我們可以看到他包含了-f,-L中的一些資訊。
結構體stat
Linux檔案系統以塊為單位儲存資訊,為了找到某一個檔案所在的儲存空間的位置用一個數據結構來對每個檔案進行索引,而stat顯示的就是該結構體資訊,下面我們可以來看下這個結構體。
struct stat {
mode_t st_mode; //檔案對應的模式,檔案,目錄等
ino_t st_ino; //inode節點號
dev_t st_dev; //裝置號碼
dev_t st_rdev; //特殊裝置號碼
nlink_t st_nlink; //檔案的連線數
uid_t st_uid; //檔案所有者
gid_t st_gid; //檔案所有者對應的組
off_t st_size; //普通檔案,對應的檔案位元組數
time_t st_atime; //檔案最後被訪問的時間
time_t st_mtime; //檔案內容最後被修改的時間
time_t st_ctime; //檔案狀態改變時間
blksize_t st_blksize; //檔案內容對應的塊大小
blkcnt_t st_blocks; //偉建內容對應的塊數量
};
stat結構體中的st_mode 則定義了下列數種情況:
S_IFLNK 0120000 符號連線
S_IFREG 0100000 一般檔案
S_IFBLK 0060000 區塊裝置
S_IFDIR 0040000 目錄
S_IFIFO 0010000 先進先出
S_ISUID 04000 檔案的擁有者在執行中的id位
S_ISGID 02000 檔案的所屬組在執行中的id位
S_ISVTX 01000 檔案的sticky位
S_IRUSR(S_IREAD) 00400 檔案所有者具可讀取許可權
S_IWUSR(S_IWRITE)00200 檔案所有者具可寫入許可權
S_IXUSR(S_IEXEC) 00100 檔案所有者具可執行許可權
S_IRGRP 00040 使用者組具可讀取許可權
S_IWGRP 00020 使用者組具可寫入許可權
S_IXGRP 00010 使用者組具可執行許可權
S_IROTH 00004 其他使用者具可讀取許可權
S_IWOTH 00002 其他使用者具可寫入許可權
S_IXOTH 00001 其他使用者具可執行許可權
為了方便理解,我們在說一下Linux中的三類人:擁有者(u),所屬組(g),其他人(o).
Linux檔案的三種許可權:只讀(r),只寫(w),可執行(x),無許可權(-)