複製鏈接
請複製以下鏈接發送給好友

chmod

鎖定
chmod是一個計算機函數,功能是改變文件的讀寫許可設置,如果改變成功返回0,否則返回-1,函數原型是int chmod( const char *filename, int pmode)
外文名
chmod
函數原型
int chmod
所屬庫
io.h
函數功能
改變文件的讀寫許可設置,

chmod簡介

chmod函數原型

函數名稱:chmod
函數原型:int chmod( const char *filename, int pmode );
所屬庫:io.h
函數功能:改變文件的讀寫許可設置,如果改變成功返回0,否則返回-1

chmod示例

這個例子中實現了把文件sample.txt設置為只讀文件
#include<conio.h>
#include<io.h>
#include<sys/stat.h>
intmain(void)
{
if(chmod("D:\\sample.txt",S_IREAD)==-1)
{
cprintf("文件sample.txt不存在\n");
}
else
{
cprintf("文件sample.txt變為只讀文件\n");
}
return0;
}

備註:S_IRUSR S_IWUSR S_IXUSR均定義在sys/stat.h頭文件
可以使用命令chmod來為文件或目錄賦予權限。Linux/Unix 的檔案存取權限分為三級 : 檔案擁有者、羣組、其他。利用 chmod 可以藉以控制檔案如何被他人所存取。
使用權限:所有使用者
格式:chmod [-cfvR] [--help] [--version] mode file...
參數説明:
mode : 權限設定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中u 表示該檔案的擁有者,g 表示與該檔案的擁有者屬於同一個羣體(group)者,o 表示其他以外的人,a 表示這三者皆是。
+ 表示增加權限、- 表示取消權限、= 表示唯一設定權限。
r 表示可讀取,w 表示可寫入,x 表示可執行,X 表示只有當該檔案是個子目錄或者該檔案已經被設定過為可執行。
-s :在文件執行時把進程的屬主或組ID置為該文件的文件屬主。
-c : 若該檔案權限確實已經更改,才顯示其更改動作
-f : 若該檔案權限無法被更改也不要顯示錯誤訊息
-v : 顯示權限變更的詳細資料
-R : 對目錄下的所有檔案與子目錄進行相同的權限變更(即以遞迴的方式逐個變更)
--help : 顯示輔助説明
--version : 顯示版本
頭文件:#include <sys/types.h> #include <sys/stat.h>
定義函數:int chmod(const char * path, mode_t mode);
函數説明:chmod()會依參數mode 權限來更改參數path 指定文件的權限。
參數 mode 有下列數種組合:
1、S_ISUID 04000 文件的 (set user-id on execution)位
2、S_ISGID 02000 文件的 (set group-id on execution)位
3、S_ISVTX 01000 文件的sticky 位
4、S_IRUSR (S_IREAD) 00400 文件所有者具可讀取權限
5、S_IWUSR (S_IWRITE)00200 文件所有者具可寫入權限
6、S_IXUSR (S_IEXEC) 00100 文件所有者具可執行權限
7、S_IRGRP 00040 用户組具可讀取權限
8、S_IWGRP 00020 用户組具可寫入權限
9、S_IXGRP 00010 用户組具可執行權限
10、S_IROTH 00004 其他用户具可讀取權限
11、S_IWOTH 00002 其他用户具可寫入權限
12、S_IXOTH 00001 其他用户具可執行權限
注:只有該文件的所有者或有效用户識別碼為0,才可以修改該文件權限。
基於系統安全,如果欲將數據寫入一執行文件,而該執行文件具有S_ISUID 或S_ISGID 權限,則這兩個位會被清除。如果一目錄具有S_ISUID 位權限,表示在此目錄下只有該文件的所有者或root 可以刪除該文件。
返回值:權限改變成功返回0, 失敗返回-1, 錯誤原因存於errno.
1、EPERM 進程的有效用户識別碼與欲修改權限的文件擁有者不同, 而且也不具root 權限.
2、EACCESS 參數path 所指定的文件無法存取.
3、EROFS 欲寫入權限的文件存在於只讀文件系統內.
4、EFAULT 參數path 指針超出可存取內存空間.
5、EINVAL 參數mode 不正確
6、ENAMETOOLONG 參數path 太長
7、ENOENT 指定的文件不存在
8、ENOTDIR 參數path 路徑並非一目錄
9、ENOMEM 核心內存不足
10、ELOOP 參數path 有過多符號連接問題.
11、EIO I/O 存取錯誤
範例
/* 將/etc/passwd 文件權限設成S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH */
#include<sys/types.h>
#include<sys/stat.h>
main()
{
chmod("/etc/passwd",S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH);
}

chmodLinux命令

chmod命令描述

變更文件或目錄的權限。在UNIX系統家族裏,文件或目錄權限的控制分別以讀取,寫入,執行3種一般權限來區分,另有3種特殊權限可供運用,再搭配擁有者與所屬羣組管理權限範圍。您可以使用chmod指令去變更文件與目錄的權限,設置方式採用文字或數字代號皆可。符號連接的權限無法變更,如果您對符號連接修改權限,其改變會作用在被連接的原始文件。權限範圍的表示法如下:
u:User,即文件或目錄的擁有者。
g:Group,即文件或目錄的所屬羣組。
o:Other,除了文件或目錄擁有者或所屬羣組之外,其他用户皆屬於這個範圍。
a:All,即全部的用户,包含擁有者,所屬羣組以及其他用户。
有關權限代號的部分,列表於下:
r:讀取權限,數字代號為"4"。
w:寫入權限,數字代號為"2"。
x:執行或切換權限,數字代號為"1"。
-:不具任何權限,數字代號為"0"。
s:當文件被執行時,根據who參數指定的用户類型設置文件的setuid或者setgid權限。

chmod語法

chmod [-cfRv][--help][--version][<權限範圍>+/-/=<權限設置...>][文件或目錄...]
chmod [-cfRv][--help][--version][數字代號][文件或目錄...]
chmod [-cfRv][--help][--reference=<參考文件或目錄>][--version][文件或目錄...]

chmod選項説明

-c或--changes  效果類似"-v"參數,但僅回報更改的部分。
-f或--quiet或--silent  不顯示錯誤信息
-R或--recursive  遞歸處理,將指定目錄下的所有文件及子目錄一併處理。
-v或--verbose  顯示指令執行過程。
--help  在線幫助。
--reference=<參考文件或目錄>  把指定文件或目錄的權限全部設成和參考文件或目錄的權限相同
--version  顯示版本信息。
<權限範圍>+<權限設置>  開啓權限範圍的文件或目錄的該項權限設置。
<權限範圍>-<權限設置>  關閉權限範圍的文件或目錄的該項權限設置。
<權限範圍>=<權限設置>  指定權限範圍的文件或目錄的該項權限設置。

chmod範例

範例一 :將檔案 file1.txt 設為所有人皆可讀取 :
chmod ugo+r file1.txt
將檔案 file1.txt 設為所有人皆可讀取 :
chmod a+r file1.txt
將檔案 file1.txt 與 file2.txt 設為該檔案擁有者,與其所屬同一個羣體者可寫入,但其他以外的人則不可寫入 :
chmod ug+w,o-w file1.txt file2.txt
將 ex1.設定只為該檔案擁有者增加執行權限 :
chmod u+x ex1
將目錄下的所有檔案與子目錄皆設為任何人可讀取 :
chmod -R a+r *
當其他用户執行oracle的sqlplus這個程序時,他的身份因這個程序暫時變成oracle
chmod u+s sqlplus
此外,chmod也可以用數字來表示權限如 chmod 777 file
語法為:chmod abc file
其中a,b,c各為一個數字,分別表示User、Group、及Other的權限。
r=4,w=2,x=1
若要rwx屬性則4+2+1=7;
若要rw-屬性則4+2=6;
若要r-x屬性則4+1=5。
範例二
chmod a=rwx file
chmod 777 file
效果相同
chmod ug=rwx,o=x file
chmod 771 file
效果相同
若用chmod 4755 filename可使此程式具有root的權限
範例三
如果在cd /media/amasun/java/develop/array之後執行
chmod 777 ./
是將本目錄(即/media/amasun/java/develop/array)設為任何人可讀,寫,執行
如果是管理員也就是常説的ROOT用户的話,基本上有可以查看所有文件的權力.