
chmod 是Linux系统中用于改变文件或目录存取模式(mode)的重要命令。只有文件的拥有者或具有特权的用户才能使用此功能来修改文件的存取模式。mode 可以用数字形式表示,也可以用who, opcode, permission 的形式表示。who 是可选的,默认为所有用户(a)。只能选择一个opcode(操作码)。可以指定多个mode,它们之间以逗号分隔。
options 包含:-c,--changes,只输出被改变文件的信息;-f,--silent,--quiet,当chmod不能改变文件模式时,不通知文件的用户;--help,输出帮助信息;-R,--recursive,递归地遍历子目录,将权限应用到目录下的所有文件和子目录;--reference=filename,参照filename的权限来设置权限;-v,--verbose,无论修改是否成功,输出每个文件的信息。
who 参数包括:u 用户,g 组,o 其它用户,a 所有用户(默认)。opcode 参数包括:+ 增加权限,- 删除权限,= 重新分配权限。permission 参数包括:r 读,w 写,x 执行。
通常我们使用三位八进制数字的形式来表示权限。第一位指定用户权限,第二位指定组权限,第三位指定其他用户的权限。每位通过4(读)、2(写)、1(执行)三种数值的和来确定权限。例如,6(4+2)表示用户具有读写权限,7(4+2+1)表示用户具有读、写和执行权限。
还可以设置第四位权限,位于三位权限序列的前面。第四位数字取值为4、2、1,分别代表:4,执行时设置用户ID,用于授权给基于文件属主的进程,而不是给创建此进程的用户;2,执行时设置用户组ID,用于授权给基于文件所在组的进程,而不是基于创建此进程的用户;1,设置粘着位。
实例:$ chmod u+x file,给file的属主增加执行权限;$ chmod 751 file,给file的属主分配读、写、执行(7)的权限,给file的所在组分配读、执行(5)的权限,给其他用户分配执行(1)的权限;$ chmod u=rwx,g=rx,o=x file,等同于上例;$ chmod =r file,为所有用户分配读权限;$ chmod 444 file,同上例;$ chmod a-wx,a+r file,同上例;$ chmod -R u+r directory,递归地给directory目录下所有文件和子目录的属主分配读的权限;$ chmod 4755,设置用ID,给属主分配读、写和执行权限,给组和其他用户分配读、执行的权限。