如何在Linux上使用chmod命令

时间:2020-01-09 10:39:53  来源:igfitidea点击:

使用Linux的" chmod"命令控制谁可以访问文件,搜索目录以及运行脚本。该命令修改了Linux文件权限,乍一看看上去很复杂,但是一旦知道它们是如何工作的,它实际上非常简单。

chmod修改文件权限

在Linux中,谁可以对文件或者目录执行操作是通过权限集控制的,共有三组权限。一组用于文件所有者,另一组用于文件组的成员,最后一组用于其他所有人。

权限控制可以在文件或者目录上执行的操作。它们允许或者阻止文件的读取,修改或者执行(如果是脚本或者程序)。对于目录,权限决定着谁可以" cd"进入目录以及谁可以创建或者修改其中的文件目录。

我们可以使用chmod命令来设置每个权限。要查看文件或者目录上设置了哪些权限,我们可以使用ls。

查看和了解文件权限

我们可以使用-l(长格式)选项使ls列出文件和目录的文件许可权。

ls -l

在每行上,第一个字符标识所列出的条目的类型。如果是破折号(-),则为文件。如果是字母d,则为目录。

接下来的9个字符代表三组权限的设置。

  • 前三个字符显示拥有该文件的用户的权限(用户权限)。

  • 中间的三个字符显示文件组成员的权限(组权限)。

  • 最后三个字符显示不在前两个类别中的任何人的权限(其他权限)。

每组权限中都有三个字符。字符是存在许可或者不存在许可的指示符,它们可以是破折号(-)或者字母。如果字符是破折号,则表示未授予许可。如果字符是" r"," w"或者" x",则表示已授予该权限。

这些字母代表:

  • r:读取权限。可以打开文件,并查看其内容。

  • w:写权限。可以编辑,修改和删除文件。

  • x:执行权限。如果文件是脚本或者程序,则可以运行(执行)文件。

例如:

  • " ---"表示根本没有授予任何权限。

  • rwx表示已授予完全权限。读,写和执行指示符全部存在。

在我们的屏幕截图中,第一行以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表示用户(谁),+表示添加(what),而x表示执行权限(哪个)。

我们可以使用的值是:

  • u:用户,表示文件的所有者。

  • g:组,表示文件所属组的成员。

  • o:其他人,表示不受" u"和" g"权限控制的人。

  • a:全部,表示以上所有内容。

如果没有使用这些参数,则" 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

如果我们查看权限,我们将看到执行权限现在已授予所有人,并且现有权限仍然存在。

ls -l new_script.sh

如果没有a + x语句中的a,我们可以完成相同的操作。以下命令也可以正常工作。

chmod +x new_script.sh

设置多个文件的权限

我们可以一次将权限应用于多个文件。

这些是当前目录中的文件:

ls -l

假设我们要从具有.page扩展名的文件中删除其他用户的写许可权。我们可以使用以下命令执行此操作:

chmod o-r *.page

让我们检查一下产生了什么影响:

ls -l

如我们所见,其他类别用户的.read文件已从.page文件中删除。没有其他文件受到影响。

如果我们想在子目录中包含文件,则可以使用-R(递归)选项。

chmod -R o-r *.page

数字速记

使用chmod的另一种方法是提供我们希望给予所有者,组和其他人的权限(三位数)。最左边的数字代表所有者的权限。中间数字代表组成员的权限。最右边的数字代表其他权限。

此处列出了我们可以使用的数字及其代表的含义:

  • 0:(000)没有权限。

  • 1:(001)执行权限。

  • 2:(010)写入权限。

  • 3:(011)写入和执行权限。

  • 4:(100)读取权限。

  • 5:(101)读取和执行权限。

  • 6:(110)读写权限。

  • 7:(111)读,写和执行权限。

这三个权限中的每一个都用与十进制数等效的二进制位之一表示。因此,二进制数为101的5表示读取并执行。 2(二进制010)表示具有写许可权。

使用此方法,我们可以设置所需的权限。我们不将这些权限添加到现有权限。因此,如果已经具有读写权限,则必须使用7(111)添加执行权限。使用1(001)将删除读取和写入权限,并添加执行权限。

让我们在.page文件中为其他类别的用户添加读取权限。我们还必须设置用户和组权限,因此我们需要将它们设置为已经存在的权限。这些用户已经具有读写权限,为6(110)。我们希望其他用户具有读取和权限,因此需要将其设置为4(100)。

以下命令将完成此操作:

chmod 664 *.page

这会将我们对用户,组成员和其他人所需的权限设置为我们所需的权限。用户和组成员的权限已重置为原来的权限,其他用户和成员的读取权限已恢复。

ls -l