Linux 递归更改文件权限
Linux 与所有其他操作系统一样,是一个多用户操作系统,可以由多个用户同时访问。因此,管理员应用适当的权限集以防止未经授权的访问和错误配置非常重要。权限定义谁可以访问和修改多用户系统中存储的文件。 Linux 为用户提供了对其文件系统访问权限的更大灵活性和精细控制。
通常,创建文件的用户有权访问和更改文件权限。此外,默认情况下,root 用户拥有访问系统上每个文件的所有权限。
在本文中,我们将解释如何使用两种不同的方法在 Linux 操作系统中递归地更改目录权限。首先,我们将快速概述如何查看和更改文件权限,然后我们将讨论如何递归地更改权限。
查看当前文件权限
要查看文件或目录的当前权限,请在终端中运行以下命令:
例如,如果我们运行ls-l,我们将收到类似的输出:
在上面的列表中,如果一行的第一个字符以“d”开头,则表明它是一个目录,如果它以“-”开头,则表明它是一个文件。此后,接下来的九个字符显示文件或目录的权限。这九个字符实际上分为三组,分别针对用户、组和所有者。另外,每组包括三种权限,r、w和x分别代表“读”、“写”和“执行”权限。
更改权限
在Linux中,要更改文件或目录的权限,可以使用chmod命令。但是,要更改权限,您必须是文件所有者或 root 用户。
语法是:
在哪里
参考:向谁分配权限,例如 u(用户)、g(组)、o(所有者)。
操作符:+(添加权限)、-(删除权限)、=(仅设置该权限)
mode:分配什么权限r(用于读取),w(用于写入),x(用于执行)
使用 -R 递归更改权限
您可能已经注意到,如果通过上述 chmod 命令应用权限,这些权限仅应用于命令中指定的文件或目录。它不会应用于目录中的子目录或文件。
Chmod 允许您使用 –R 选项更改目录中多个文件和子目录的权限,如下所示:
假设 downloads 目录下的子目录具有以下权限,如下面的屏幕截图所示。
如果我们查看名为 files 的子目录之一,它包含一些具有以下权限的文件。
现在让我们修改“files”父目录的权限,为其分配写入权限,如下所示。
其中 U 代表“用户”,+ 代表“添加”,w 代表“写入”。
分配写权限后,运行“ls –l”命令,可以看到新的权限已经分配给“files”目录。
但是,此命令仅将权限应用于目录而不是其下的文件。要验证这一点,请使用“cd”命令导航到文件目录。然后运行“ls –l”命令。您可以在下面的屏幕截图中看到权限没有变化。
让我们使用以下命令递归地应用权限:
它不仅会将权限应用于父“files”目录,还会应用于其下的文件。
现在,要验证权限是否已成功应用,请使用“cd”命令导航到“files”目录,然后运行“ls –l”命令。从以下输入可以看到权限已成功应用于父目录下的所有文件。
同样,您也可以以绝对形式递归分配权限。例如,要将读、写和执行权限仅分配给用户,可以使用以下命令:
使用 Find 命令递归更改权限
当使用带有 –R 的 chmod 在目录中应用权限时,它会为其下的所有文件和子目录分配相同的权限。然而有时,您可能希望为文件和目录授予单独的权限。例如,对目录应用执行权限,但不对文件应用执行权限,因为文件不需要执行权限。通常,为文件和目录分配以下权限。
For files: 644 or -rw-r--r--
如果是这种情况,要递归地向目录分配权限,请使用绝对或符号形式之一:
$ find /path/to/directory -type d -exec chmod u=rwx,go=rx {} \;
要递归地为文件分配权限,请使用绝对或符号形式之一:
$ find /path/to/directory -type f -exec chmod u=rw,go=r {} \;
确保将权限替换为您所需的权限集。
这是在 Linux 中递归更改目录权限的方法。要将相同的递归权限应用于所有文件和子目录,请使用 -R 选项;要将递归权限分别应用于文件和子目录,请使用 Find 命令。