1. 程式人生 > >linux下的stat命令及對stat結構體的剖析

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),無許可權(-)