您的位置:首页 > 百科 > 正文

chmod

chmod是一个计算机函数,功能是改变文件的读写许可设置,如果改变成功返回0,否则返回-1,函数原型是int chmod( const char *filename, int pmode)

  • 外文名称 chmod
  • 函数原型 int chmod
  • 所属库: io.h
  • 函数功能 改变文件的读写许可设置,

简介

  C语言函来自

函数原型

  函数名称:chmod

  函数原型:int chmod( const char *filename, int pmode );

  所属库:io.h

  函数360百科功能:改变文件的读写许可何英盟达制煤频架议突控设置,如果改变成功返回0,否则返回-1

示例

  这个例子中实现了策越他应且敌办等赶阿斗把文件sample.txt设娘方但图挥补练置为只读文件:

  备注: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 : 显示版本

  相关函数:fchmod, stat, open, chown

  头文件:#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 o据重点真n executi呢场长川值负on)位

  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 */

Linux命令

命令描述

  变更文件或目录的权限。在UNIX系统家族里,文件或目录权限的控制分别以读取,写入,执行3种一般权限来区分,另有3种特殊权限可供运用,再搭配拥有者与所属群组管理权限范围。您可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果您对符号连接修改权限,其改变会作用在被连接的原始文件。权限范围的表示法如下:

  u:User,即文件或目录的拥有者。

  g:Group,即文件或目录的所属群组。

  o:Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围。

  a:All,即全部的用户,包含拥有者,所属群组以及其他用户。

  有关权限代号的部分,列表于下:

  r:读取权限,数字代号为"4"。

  w:写入权限,数字代号为"2"。

  x:执行或切换权限,数字代号为"1"。

  -:不具任何权限,数字代号为"0"。

  s:当文件被执行时,根据who参数指定的用户类型设置文件的setuid或者setgid权限。

语法

  chmod [-cfRv][--help][--version][<权限范围>+/-/=<权限设置...>][文件或目录...]

  chmod [-cfRv][--help][--version][数字代号][文件或目录...]

  chmod [-cfRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]

选项说明

  -c或--changes 效果类似"-v"参数,但仅回报更改的部分。

  -f或--quiet或--silent 不显示错误信息。

  -R或--recursive 递归处理,将指定目录下的所有文件及子目录一并处理。

  -v或--verbose 显示指令执行过程。

  --help 在线帮助。

  --reference=<参考文件或目录> 把指定文件或目录的权限全部设成和参考文件或目录的权限相同

  --version 显示版本信息。

  <权限范围>+<权限设置> 开启权限范围的文件或目录的该项权限设置。

  <权限范围>-<权限设置> 关闭权限范围的文件或目录的该项权限设置。

  <权限范围>=<权限设置> 指定权限范围的文件或目录的该项权限设置。

范例

  范例一 :将档案 file1.txt 设为所有人皆可读取 :

  将档案 file1.txt 设为所有人皆可读取 :

  将档案 file1.txt 与 file2.txt 设为该档案拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入 :

  将 ex1.设定只为该档案拥有者增加执行权限 :

  将目前目录下的所有档案与子目录皆设为任何人可读取 :

  当其他用户执行oracle的sqlplus这个程序时,他的身份因这个程序暂时变成oracle

  此外,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 4755 filename可使此程式具有root的权限

  范例三:

  如果在cd /media/amasun/java/develop/array之后执行

  是将本目录(即/media/amasun/java/develop/array)设为任何人可读,写,执行

  如果是管理员也就是常说的ROOT用户的话,基本上有可以查看所有文件的权力.

发表评论

评论列表