如何在Linux中递归使用chmod?


您可能遇到过这种情况:您使用Linux作为主要操作系统,然后尝试创建或编辑文件,Linux终端会返回类似“权限被拒绝”的错误。通常情况下,此类错误与当前用户权限不足有关,可以通过设置正确的文件权限或更改所有者来解决。

在Linux中,文件通过文件权限、所有权和属性进行控制,这确保只有授权用户和进程才能访问文件和目录。

在了解如何使**chmod**命令递归地运行于所有目录和子目录之前,让我们首先了解**chmod**命令的实际含义。

**Chmod**是一个Linux命令,主要用于更改文件系统对象的访问权限。它根据模式更改每个文件的权限,其中模式简单地描述了要修改的权限。

语法

chmod [Options]... Mode [,Mode]... file...
chmod [Options]... Numeric_Mode file...
chmod [Options]... --reference=RFile file...

在上文语法中,[OPTIONS]占位符可以用不同的标志替换,这些标志可与之一起使用,一些最常用的标志是……(此处应补充具体的常用标志及说明)

-f, --silent, --quiet suppress most error messages
-v, --verbose output a diagnostic for every file processed
-c, --changes like verbose but report only when a change is made
-c, --reference=RFile use RFile's mode instead of MODE values
-R, --recursive change files and directories recursively
--help display help and exit
--version output version information and exit

现在我们知道了**chmod**的实际作用,让我们考虑几个示例,在这些示例中,我们将为同一个文件提供不同的权限。

示例1

chmod 777 sample.txt

上述命令使用模式**777**,这意味着任何人都可以读取、写入和执行该文件。

示例2

chmod 020 sample.txt

上述命令使用模式**020**,这意味着只有组可以读取、写入和执行该文件。

现在,让我们学习如何递归运行**chmod**。

语法

chmod -R MODE directory

假设我们有一个目录,我想在其所有文件上递归运行chmod。在运行命令之前,目录结构如下所示……(此处应补充目录结构示例)

immukul@192 linux-questions-code % ls -tlr
total 960
-rw-r--r-- 1 immukul staff 446966 Sep 23 1998 wget-1.5.3.tar.gz
drwxr-xr-x 3 immukul staff     96 Jul  7 17:42 d1
-rwxrwxrwx 1 root    staff    106 Jul  8 13:10 sample2.sh
drwxr-xr-x 4 immukul staff    128 Jul  8 19:05 d2
-rwxrwxrwx 1 root    staff    946 Jul 12 18:45 sample.sh
-rwxrwxrwx 1 root    staff    718 Jul 12 18:48 sample1.sh

考虑以下命令

chmod -R 777 .

输出

total 960
-rwxrwxrwx 1 immukul staff 446966 Sep 23 1998 wget-1.5.3.tar.gz
drwxrwxrwx 3 immukul staff     96 Jul  7 17:42 d1
-rwxrwxrwx 1 root    staff    106 Jul  8 13:10 sample2.sh
drwxrwxrwx 4 immukul staff    128 Jul  8 19:05 d2
-rwxrwxrwx 1 root    staff    946 Jul 12 18:45 sample.sh
-rwxrwxrwx 1 root    staff    718 Jul 12 18:48 sample1.sh

更新于:2021年8月2日

336 次浏览

开启您的职业生涯

完成课程获得认证

开始学习
广告