每行的第一个字符标识列出的条目类型。如果是破折号(-),则为文件。如果是字母d,那就是目录。
接下来的九个字符表示三组权限的设置。
前三个字符显示拥有文件的用户的权限(用户权限)。 中间三个字符显示文件组成员的权限(组权限)。 最后三个字符显示不在前两个类别中的任何人的权限(其他权限)。
每组权限中有三个字符。字符是其中一个权限存在或不存在的指示符。它们可以是破折号(-),也可以是字母。如果字符是破折号,则表示未授予权限。如果字符是r、w或x,则已授予该权限。
这些字母代表:
R:读取权限。可以打开文件并查看其内容。 W:写权限。可以编辑、修改和删除该文件。 X:执行权限。如果文件是脚本或程序,则可以运行(执行)。
例如:
*-表示根本没有授予任何权限。 nrwx表示已授予完全权限。读取、写入和执行指示器都存在。
在我们的截图中,第一行以d开头,该行指的是一个名为“archive”的目录,该目录的所有者是“Dave”,该目录所属的组名也叫“Dave”。
接下来的三个字符是此目录的用户权限。这些显示所有者拥有完全权限。r、w和x字符都存在。这意味着用户Dave对该目录具有读、写和执行权限。
第二组三个字符是组权限,它们是r-x。这表明Dave组的成员对此目录具有读取和执行权限。这意味着他们可以列出目录中的文件及其内容,并且可以CD(执行)到该目录中。他们没有写入权限,因此无法创建、编辑或删除文件。
最后一组三个字符也是r-x。这些权限适用于不受前两组权限管辖的人员。这些人(称为“其他人”)对此目录具有读取和执行权限。
因此,总而言之,组成员和其他人具有读取和执行权限。所有者是名为Dave的用户,也具有写入权限。
对于所有其他文件(除了mh.sh脚本文件),Dave和Dave组的成员对这些文件具有读写属性,而其他人只有读权限。
对于mh.sh脚本文件的特殊情况,所有者Dave和组成员拥有读取、写入和执行权限,其他人只有读取和执行权限。
了解权限语法
要使用chmod命令设置权限,我们需要告诉它:
用户:包括我们为其设置权限的用户。 事件:我们要做什么改变?我们是添加还是删除权限? 哪一个:我们设置的是哪种权限?
我们使用指示符来表示这些值,并形成简短的“权限语句”,如u+x,其中“u”表示“user”(谁),“+”表示add(什么),“x”表示Execute权限(哪个)。
我们可以使用的“Who”值是:
u:用户,表示文件的所有者。 G:组,表示文件所属的组的成员。 o:其他,指的是不受u和g权限管辖的人。 答:全部,意思是以上全部。
如果没有使用这些参数,则chmod的行为就像使用了“a”一样。
我们可以使用的“什么”值是:
-:减号。删除权限。 +:加号。授予权限。该权限将添加到现有权限中。如果要设置此权限且仅设置此权限,请使用=选项,如下所述。 =:等号。设置权限并删除其他权限。
我们可以使用的“哪些”值包括:
R:取消读取权限。 W:写权限。 x:执行权限。
设置和修改权限
假设我们有一个文件,其中每个人都具有完全权限。
ls -l new_ file.txt
我们希望用户Dave有读写权限,而组和其他用户只有读权限。我们可以使用以下命令来执行此操作:
chmod u=rw,og=r new_file.txt
使用“=”运算符意味着我们清除所有现有权限,然后设置指定的权限。
让我们检查一下该文件的新权限:
ls -l new_file.txt
如我们所料,现有权限已被删除,新权限已设置。
在不删除现有权限设置的情况下添加权限如何?我们也可以很容易地做到这一点。
假设我们有一个已完成编辑的脚本文件。我们需要使它对所有用户都可执行。其当前权限如下所示:
ls -l new_script.sh
我们可以使用以下命令为每个人添加执行权限:
chmod a+x new_script.sh
如果我们查看权限,我们将看到Execute权限现在授予了每个人,并且现有权限仍然存在。
ls -l new_script.sh
如果没有“a+x”语句中的“a”,我们也可以达到同样的效果。下面的命令也可以很好地工作。
chmod +x new_script.sh
设置多个文件的权限
我们可以一次将权限应用于多个文件。
以下是当前目录中的文件:
ls -l
假设我们想要从扩展名为“.page”的文件中删除“其他”用户的写权限。我们可以使用以下命令完成此操作:
chmod o-r *.page
让我们来看看这产生了什么效果:
ls -l
正如我们所看到的,“Other”类别的用户的“.page”文件中的读取权限已被删除。没有其他文件受到影响。
如果我们想包含子目录中的文件,我们可以使用-R(递归)选项。
chmod -R o-r *.page
数字速记
使用chmod的另一种方式是以三位数的数字形式提供您希望授予所有者、组和其他人的权限。最左边的数字表示所有者的权限。中间数字表示组成员的权限。最右边的数字表示其他用户的权限。
下面列出了您可以使用的数字及其表示的含义:
0:(000)没有权限。 1:(001)执行权限。 2:(010)写权限。 3:(011)写入和执行权限。 4:(100)读权限。 5:(101)读取和执行权限。 6:(110)读写权限。 7:(111)读、写和执行权限。
三种权限中的每一种都由十进制数的二进制等价物中的一位来表示,因此5在二进制中是101,表示读取和执行。2(以二进制表示为010)表示写入权限。
使用此方法,您可以设置您希望拥有的权限,而不是将这些权限添加到现有权限中。因此,如果读写权限已经到位,则必须使用7(111)来添加执行权限。使用1(001)将删除读取和写入权限,并添加执行权限。
让我们为Other类别的用户重新添加对“.page”文件的读取权限。我们还必须设置用户和组权限,因此需要将它们设置为已有的权限。这些用户已经拥有读写权限,即6(110)。我们希望“其他”具有读取和权限,因此需要将它们设置为4(100)。
以下命令将完成此操作:
chmod 664 *.page
这会将我们需要的用户、组成员和其他人的权限设置为我们需要的权限。用户和组成员的权限将重置为原来的权限,其他用户和组成员的权限将恢复为读取权限。
ls -l
高级选项
如果您阅读chmod的手册页,您会看到有一些高级选项与SETUID和SETGID位以及受限删除或“粘滞”位相关。
对于99%需要chmod的情况,这里描述的选项将为您提供服务。