开源 Windows nginx linux命令 微软 shell centos Ubuntu google apache Firefox mysql Python 程序员 wordpress linux java HTML5 php Android

改变文件或目录存取权限命令: chown,chmod,umask

使用文件命令对文件进行操作的前提是拥有相应的权限,下面将介绍如何控制这些权限。

用户和权限

(1)文件主:Linux为每个文件都分配了一个文件所有者,称为文件主,并赋予文件主唯一的注册名。对文件的控制取决于文件主或超级用户(root)。文件或目录的创建者对创建的文件或目录拥有特别使用权。

文件的所有关系是可以改变的,可以将文件或目录的所有权转让给其他用户,但只有文件主或root才有权改变文件的所有关系。文件的所有权的标志是用户ID(UID)。

利用chown命令可以更改某个文件或目录的所有权。例如,超级用户把自己的一个文件复制给用户tom,为了让用户tom能够存取这个文件,超级用户(root)应该把这个文件的属主设为tom,否则,用户tom无法存取这个文件。

如果改变了文件或目录的所有权,原文件主将不再拥有该文件或目录的权限。

系统管理员经常使用chown命令,在将文件复制到另一个用户的目录下以后,让用户拥有使用该文件的权限。

(2)用户组:当系统管理员为你建立账户之后,会分配一个组ID和一个特定的用户组名。通常,这些组名包含了有相同需求的用户,如一个开发部门的所有成员。采用组方式也有助于增强系统使用的安全性。

虽然已经分配了一个标记注册组的组ID,但是,该组也可以是其他组的成员。如果目前从事的项目涉及多个用户组,那么它可能要属于不只一个组,从而可以与那些组中的用户共享信息。

在Linux系统中,每个文件要隶属于一个用户组。当创建一个文件或目录时,系统会赋予它一个用户组关系,用户组的所有成员都可以使用此文件或目录。

文件用户组关系的标志是GID。文件的GID只能由文件主或超级用户(root)来修改。利用chgrp命令可以改变文件的GID。

(3)存取权限:Linux系统中的每个文件和目录都有存取许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。

Linux系统中规定了4种不同类型的用户:

  1. 文件主(owner);
  2. 同组用户(group);
  3. 可以访问系统的其他用户(others);
  4. 超级用户(root),具有管理系统的特权。

存取权限规定3种访问文件或目录的方式:

  1. 读(r);
  2. 写(w);
  3. 可执行或查找(x)

当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的存取权限。其中各位的含义如图所示。

改变文件或目录存取权限命令: chown,chmod,umask

(4)文件存取权限:

  • 读权限(r)表示只允许指定用户读取相应文件的内容,而禁止对它做任何的更改操作。将所访问的文件的内容作为输入的命令都需要有读的权限,如catmore等。
  • 写权限(w)表示允许指定用户打开并修改文件,如命令vicp等。
  • 执行权限(x)表示允许指定用户将该文件作为一个程序执行。

(5)目录存取权限:在ls命令后加上-d选项,可以了解目录文件的使用权限。

  • 读权限(r)表示可以列出存储在该目录下的文件,即读目录内容列表。这一权限允许Shell使用文件扩展名字符列出相匹配的文件名。
  • 写权限(w)表示允许从目录中删除或添加新的文件,通常只有目录主才有写权限。
  • 执行权限(x)表示允许在目录中进行查找,并能用ed命令将工作目录改为该目录。

chmod命令

chmod命令用于改变或设置文件或目录的存取权限。只有文件主或超级用户root才有权用chmod命令改变文件或目录的存取权限。根据表示权限的方式不同,该命令有两种用法:以符号模式改变权限和以绝对方式改变权限。

(1)以符号模式改变权限。

  • 一般格式:chmod key 文件名
  • 说明:key由以下各项组成:[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 与其他用户拥有一样的权限。
  • 这三部分必须按顺序输入。可以用多个key,但必须以逗号间隔。

示例:

将文件ex1的权限改为所有用户都有执行权限:

# chmod a+x ex1

将文件ex1的权限重新设置为文件主可以读和执行,组用户可以执行,其他用户无权访问:

# chmod u=r, ug=x ex1

(2)以绝对方式改变权限。

一般格式: chmod mode 文件名

说明:用绝对方式设置或改变文件的存取权限,就是用数字1和0表示图中的9个权限位,置为1表示有相应权限,置为0表示没有相应权限。例如,某个文件的存取权限是,文件主有读、写和执行的权限,组用户有读和执行的权限,其他用户仅有读的权限,用符号模式表示是、rwxr-xr--,用二进制数字表示是111 101 100。

为了记忆和表示方便,通常将这9位二进制数用等价的3个0~7的八进制数表示,即从右到左,3个二进制数换成一个八进制数。这样,上述二进制数就等价于八进制数754。

就是说,mode是以3位八进制数字出现的,第一位表示文件主权限,第二位表示组用户权限,第三位表示其他用户权限。

示例:使文件exl的文件主和同组用户具有读、写权限,而其他用户只可读。

# chmod 664 ex1

umask命令

umask命令用来设置限制新建文件权限的掩码。当新文件被创建时,其最初的权限由文件创建掩码决定。用户每次注册进入系统时,umask命令都被执行,并自动设置掩码mode来限制新文件的权限。用户可以通过再次执行umask命令来改变默认值,新的权限将会把旧的覆盖掉。

利用umask命令可以指定哪些权限将在新文件的默认权限中被删除。例如,可以使用下面的命令创建掩码,使得组用户的写权限,其他用户的读、写和执行权限都被取消:

# umask u=, g=w, o=rwx

执行该命令以后,对于下面创建的新文件,其文件主的权限未做任何改变,而组用户没有写权限,其他用户的所有权限都被取消。

应注意:操作符“=”在umask命令和chmod命令中的作用恰恰相反。在chmod命令中,利用它来设置指定的权限,而其余权限则被删除;但是在umask命令中,它将在原有权限的基础上删除指定的权限。

不能直接利用umask命令创建一个可执行的文件,用户只能在其后利用chmod命令使它具有执行权限。假设执行了命令:umask u=, g=w, o=rwx,虽然在命令行中,没有删去文件主和组用户的执行权限,但默认的文件权限还是640(即 rw-r-----),而不是750(rwxr-x---)。但是,如果创建的是目录或者通过编译程序创建的一个可执行文件,将不受此限制。在这种情况下,会设置文件的执行权限。

也可以使用八进制数值来设置mode。由于在umask中所指定的权限是要从文件中删除的,所以,如果该文件原来的初始化权限是777,那么执行命令umask 022以后,该文件的权限将变为755:如果该文件原来的初始化权限是666,那么该文件的权限将变为644。

可以使用下面的命令检查新创建文件的默认权限:

# umask -s

一般格式:umask mode

选项-s表示以字符形式显示当前的掩码。如果直接输入umask命令,不带任何参数,那么将以八进制形式显示当前的掩码。系统默认的掩码是0022。

延伸阅读

评论