在Unix系統中,所有文件類型都有訪問權限。文件類型分為:普通文件(regular file),目錄文件(directory file),塊特殊文件(block special file),字符特殊文件(character special file),FIFO,套接字(socket),符號鏈接(symbolic link)。下面分別對它們進行簡單的介紹:
這種文件包含了某種形式的數據,至於是文本還是二進制,Unix內核並不關心。對普通文件內容的解釋由處理該文件的應用程序進行。
該文件包含了其他文件的名字以及指向其他文件的指針。對一個目錄文件具有讀權限的任意進程意味著可以讀該目錄的內容,但是只有內核可以直接寫目錄文件。
這種文件提供對設備(如磁盤)帶緩沖的訪問,每次訪問以固定長度為單位進行。
這種類型文件提供對設備不帶緩沖的訪問,每次訪問長度可變。系統中的所有設備要麼是字符特殊文件,要麼是塊特殊文件。
用於進程間通信,有時也稱為命名管道。
用於進程間網絡通信,也可以用於在一台宿主機上進程之間的非網絡通信。
這種文件指向另一個文件。
宏 文件類型 S_ISREG() 普通文件 S_ISDIR() 目錄文件 S_ISCHR() 字符特殊文件 S_ISBLK() 塊特殊文件 S_ISFIFO() 管道或FIFO S_ISLNK() 符號鏈接 S_ISSOCK() 套接字
stat函數通常用於查看文件的信息結構,stat結構體一共有13個成員,如下面代碼所示:
zzw@zzw-ThinkPad-Edge-E430c:~$ stat wifi.sh 文件:"wifi.sh" 大小:70 塊:8 IO 塊:4096 普通文件 設備:80ah/2058d Inode:922048 硬鏈接:1 權限:(0755/-rwxr-xr-x) Uid:( 1000/ zzw) Gid:( 1000/ zzw) 最近訪問:2015-08-01 13:32:55.585847606 +0800 最近更改:2015-07-30 21:33:20.000000000 +0800 最近改動:2015-08-01 13:32:33.017846764 +0800
每個文件有9個訪問權限位,可將它們分為3類:
S_IRUSR 用戶讀
S_IWUSR 用戶寫
S_IXUSR 用戶執行
S_IRGRP 組讀
S_WGRP 組寫
S_XGRP 組執行
S_IROTH 其他讀
S_IWOTH 其他寫
S_IXOTH 其他執行
umask函數為每一個進程設置文件模式創建屏蔽字,並返回之前的值。
#include<sys/stat.h>
mode_t umask(mode_t cmask);
Unix系統的多數用戶從不處理umask值。通常在登陸時,由shell的啟動文件設置一次,然後,再不改變。盡管如此,如果我們在創建文件時,要保證制定權限位已經激活,那麼必須顯示修改umask。
可以通過設置umask值來控制我們所創建文件的默認權限。該值為八進制數,一位代表要屏蔽的權限,如下所示:
0400 用戶讀
0200 用戶寫
0100 用戶執行
0040 組讀
0020 組寫
0010 組執行
0004 其他讀
0002 其他寫
0001 其他執行
默認情況下,shell進程的umask值為002,即其他沒有執行的權限。
可以使用umask -S來打印權限。也可以通過例如umask 027來設置其值為027。