unix中chmod命令
2012-05-12 16:18:57 阿炯

本站赞助商链接,请多关照。 chmod(change mode)

功能说明:变更文件或目录的权限。在unix以及linux之中,chmod命令用来改变文件以及目录的权限。这是unix和linux用户所必须熟知众多基本的命令之一。在这个unix命令的教程之中,我们将会学习到如何使用chmod命令来改变文件的权限,在unix之中文件权限指的什么。我们还将会了解unix中怎么使用chmod命令来改变文件目录以及其子目录的权限,最后将会学习如何在 unix中使用chmod命令改变可执行文件的权限。在直接进入这些例子之前,让我们先花上几分钟的时间来了解一下权限在unix之中指的是什么以及为什么我们需要改变文件的权限。

语法:chmod [-cfRv][--help][--version][<权限范围>+/-/=<权限设置...>][文件或目录...] 或 chmod [-cfRv][--help][--version][数字代号][文件或目录...] 或 chmod [-cfRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]

补充说明:在UNIX系统家族里,文件或目录权限的控制分别以读取,写入,执行3种一般权限来区分,另有3种特殊权限可供运用,再搭配拥有者与所属群组管理权限范围。您可以使用chmod指令去变更文件与目录的权限,设置方式采用文字或数字代号皆可。符号连接的权限无法变更,如果您对符号连接修改权限,其改变会作用在被连接的原始文件。权限范围的表示法如下:
 u:User,即文件或目录的拥有者。
 g:Group,即文件或目录的所属群组。
 o:Other,除了文件或目录拥有者或所属群组之外,其他用户皆属于这个范围。
 a:All,即全部的用户,包含拥有者,所属群组以及其他用户。

有关权限代号的部分,列表于下:
 r:读取权限,数字代号为"4"。
 w:写入权限,数字代号为"2"。
 x:执行或切换权限,数字代号为"1"。
 -:不具任何权限,数字代号为"0"。
 s:特殊?b>功能说明:变更文件或目录的权限。

参数:
 -c或--changes  效果类似"-v"参数,但仅回报更改的部分。
 -f或--quiet或--silent  不显示错误信息。
 -R或--recursive  递归处理,将指定目录下的所有文件及子目录一并处理。
 -v或--verbose  显示指令执行过程。
 --help  在线帮助。
 --reference=<参考文件或目录>把指定文件或目录的权限全部设成和参考文件或目录的权限相同。
 --version  显示版本信息。
 <权限范围>+<权限设置>  开启权限范围的文件或目录的该项权限设置。
 <权限范围>-<权限设置>  关闭权限范围的文件或目录的该项权限设置。
 <权限范围>=<权限设置>  指定权限范围的文件或目录的该项权限设置。

用法:chmod [选项]... 模式[,模式]... 文件...
  或:chmod [选项]... 八进制模式 文件...
  或:chmod [选项]... --reference=参考文件 文件...
将每个<文件>的权限模式更改为指定的<模式>。

  -c, --changes    类似 --verbose,但只在有更改时才显示结果
      --no-preserve-root 不会对根目录给予特别对待 (默认)
      --preserve-root 对根目录进行递归操作时会失败
  -f, --silent, --quiet   去除大部份的错误信息
  -v, --verbose       处理任何文件都会显示详细信息
      --reference=参考文件  使用<参考文件>的模式,而非自行指定权限模式
  -R, --recursive      以递归方式更改所有的文件及子目录
      --help     显示此帮助信息并离开
      --version  显示版本信息并离开

每种模式都属于这一类样式“[ugoa]*([-+=]([rwxXst]*|[ugo]))+”。

-------------------------
该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

1. 文字设定法
chmod [who] [+ | - | =] [mode] 文件名?

命令中各选项的含义为:
操作对象who可是下述字母中的任一个或者它们的组合:
u 表示“用户(user)”,即文件或目录的所有者。
g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。
o 表示“其他(others)用户”。
a 表示“所有(all)用户”。它是系统默认值。

操作符号可以是:
+ 添加某个权限。
- 取消某个权限。
= 赋予给定权限并取消其他所有权限(如果有的话)。

设置mode所表示的权限可用下述字母的任意组合:
r 可读。
w 可写。
x 可执行。
X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。
s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。
t 保存程序的文本到交换设备上。
u 与文件属主拥有一样的权限。
g 与和文件属主同组的用户拥有一样的权限。
o 与其他用户拥有一样的权限。
文件名:以空格分开的要改变权限的文件列表,支持通配符。
在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:chmod g+r,o+r hto
使同组和其他用户对文件hto 有读权限。

2. 数字设定法
我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。

例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。

数字设定法的一般形式为:
chmod [mode] 文件名?

例子:

(1)文字设定法:
例1:$ chmod a+x sort
即设定文件sort的属性为:
文件属主(u) 增加执行权限
与文件属主同组用户(g) 增加执行权限
其他用户(o) 增加执行权限

例2:$ chmod ug+w,o-x text
即设定文件text的属性为:
文件属主(u) 增加写权限
与文件属主同组用户(g) 增加写权限
其他用户(o) 删除执行权限

例3:$ chmod u+s a.out
假设执行chmod后a.out的权限为(可以用ls – l a.out命令来看):
–rws--x--x 1 inin users 7192 Nov 4 14:22 a.out

并且这个执行文件要用到一个文本文件shiyan1.c,其文件存取权限为“–rw-------”,即该文件只有其属主具有读写权限。

当其他用户执行a.out这个程序时,他的身份因这个程序暂时变成inin(由于chmod命令中使用了s选项),所以他就能够读取shiyan1.c这个文件(虽然这个文件被设定为其他人不具备任何权限),这就是s的功能。

因此,在整个系统中特别是root本身,最好不要过多的设置这种类型的文件(除非必要)这样可以保障系统的安全,避免因为某些程序的bug而使系统遭到入侵。

例4:$ chmod a–x mm.txt
$ chmod –x mm.txt
$ chmod ugo–x mm.txt

以上这三个命令都是将文件mm.txt的执行权限删除,它设定的对象为所有使用者。

(2)数字设定法:
例1: $ chmod 644 mm.txt
$ ls –l

即设定文件mm.txt的属性为:
-rw-r--r-- 1 inin users 1155 Nov 5 11:22 mm.txt
文件属主(u)inin 拥有读、写权限
与文件属主同组人用户(g) 拥有读权限
其他人(o) 拥有读权限

例2: $ chmod 750 wch.txt
$ ls –l
-rwxr-x--- 1 hto users 44137 Nov 12 9:22 wchtxt

即设定wchtxt这个文件的属性为:
文件主本人(u)inin 可读/可写/可执行权
与文件主同组人(g) 可读/可执行权
其他人(o) 没有任何权限
-------------------------

使用权限 : 所有使用者

说明 : Linux/Unix 的档案存取权限分为三级 : 档案拥有者、群组、其他。利用 chmod 可以藉以控制档案如何被他人所存取。

mode : 权限设定字串,格式如下 : [ugoa...][[+-=][rwxX]...][,...],其中u 表示该档案的拥有者,g 表示与该档案的拥有者属于同一个群体(group)者,o 表示其他以外的人,a 表示这三者皆是。
+ 表示增加权限、- 表示取消权限、= 表示唯一设定权限。
r 表示可读取,w 表示可写入,x 表示可执行,X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
-c : 若该档案权限确实已经更改,才显示其更改动作
-f : 若该档案权限无法被更改也不要显示错误讯息
-v : 显示权限变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的权限变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本

若用chmod 4755 filename可使此程式具有root的权限

使用方式 : chmod [-cfhvR] [--help] [--version] user[:group] file...
一般来说,这个指令只有是由系统管理者(root)所使用,一般使用者没有权限可以改变别人的档案拥有者,也没有权限可以自己的档案拥有者改设为别人。只有系统管理者(root)才有这样的权限。

user : 新的档案拥有者的使用者 ID
group : 新的档案拥有者的使用者群体(group)
-c : 若该档案拥有者确实已经更改,才显示其更改动作
-f : 若该档案拥有者无法被更改也不要显示错误讯息
-h : 只对于连结(link)进行变更,而非该 link 真正指向的档案
-v : 显示拥有者变更的详细资料
-R : 对目前目录下的所有档案与子目录进行相同的拥有者变更(即以递回的方式逐个变更)
--help : 显示辅助说明
--version : 显示版本

范例 :
将档案 file1.txt 的拥有者设为 users 群体的使用者 hto :
chown hto:users file1.txt

将目前目录下的所有档案与子目录的拥有者皆设为 users 群体的使用者 hto :
chmod -R hto:users *
-rw------- (600) -- 只有属主有读写权限。
-rw-r--r-- (644) -- 只有属主有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700) -- 只有属主有读、写、执行权限。
-rwxr-xr-x (755) -- 属主有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711) -- 属主有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666) -- 所有用户都有文件读、写权限。这种做法不可取。
-rwxrwxrwx (777) -- 所有用户都有读、写、执行权限。更不可取的做法。

以下是对目录的两个普通设定:
drwx------ (700) - 只有属主可在目录中读、写。

drwxr-xr-x (755) - 所有用户可读该目录,但只有属主才能改变目录中的内容
suid的代表数字是4,比如4755的结果是-rwsr-xr-x
sgid的代表数字是2,比如6755的结果是-rwsr-sr-x
sticky位代表数字是1,比如7755的结果是-rwsr-sr-t