菜鸟科技网

chown与chmod有何区别与联系?

  • chown改“主”,用来修改文件或目录的所有者所属组
  • chmod改“权”,用来修改文件或目录的访问权限(读、写、执行)。

chown (Change Owner) - 修改所有者和所属组

chown 命令的核心作用是改变文件、目录等文件系统对象的所有权,这在系统管理中非常常见,当你创建一个网站文件后,需要将其所有者从 root 更改为运行 Web 服务(如 Nginx 或 Apache)的用户,以确保服务可以正确地读写这些文件。

chown与chmod有何区别与联系?-图1
(图片来源网络,侵删)

语法

chown [选项] 所有者:所属组 文件或目录...

注意: 所有者:所属组 这部分中,冒号 是可选的,但强烈推荐使用,因为它可以同时修改所有者和所属组,如果只写 所有者,则只修改所有者,所属组保持不变。

常用选项

  • -R--recursive:递归地修改指定目录及其下所有文件和子目录的所有权,这是最常用的选项之一。
  • --reference=参考文件:将文件或目录的所有权设置为与“参考文件”相同。

示例

假设我们有以下文件:

$ ls -l
-rw-r--r-- 1 alice alice 1024 Oct 26 10:30 document.txt
drwxr-xr-x 2 bob   bob   4096 Oct 26 10:31 my_project/

只修改所有者

document.txt 的所有者从 alice 改为 bob

chown与chmod有何区别与联系?-图2
(图片来源网络,侵删)
$ sudo chown bob document.txt

验证:

$ ls -l document.txt
-rw-r--r-- 1 bob alice 1024 Oct 26 10:30 document.txt
# 所有者已变为 bob,但所属组仍然是 alice

同时修改所有者和所属组

document.txt 的所有者改为 charlie,所属组改为 developers

$ sudo chown charlie:developers document.txt

验证:

chown与chmod有何区别与联系?-图3
(图片来源网络,侵删)
$ ls -l document.txt
-rw-r--r-- 1 charlie developers 1024 Oct 26 10:30 document.txt

只修改所属组

my_project 目录的所属组改为 developers,所有者保持不变。

$ sudo chown :developers my_project/

验证:

$ ls -ld my_project/
drwxr-xr-x 2 bob developers 4096 Oct 26 10:31 my_project/
# 所属组已变为 developers,所有者仍然是 bob

递归修改

my_project 目录及其内部所有内容的所有者和所属组都改为 charlie:developers

$ sudo chown -R charlie:developers my_project/

chmod (Change Mode) - 修改访问权限

chmod 命令用于控制谁可以对文件或目录进行何种操作(读取、写入、执行),权限分为三类:

  • 用户:文件的所有者。
  • :文件所属组的成员。
  • 其他:系统上所有其他用户。

chmod 提供了两种设置权限的方式:符号法和数字法。

语法

chmod [选项] 权限模式 文件或目录...

常用选项

  • -R--recursive:递归地修改指定目录及其下所有文件和子目录的权限。

符号法

符号法更直观,易于理解,它由三部分组成:

[who][operator][permission]

  • who (对象):
    • u (user): 文件所有者
    • g (group): 文件所属组
    • o (others): 其他用户
    • a (all): 所有用户 (u+g+o 的简写)
  • operator (操作符):
    • (添加): 为指定对象添加权限
    • (移除): 为指定对象移除权限
    • (设置): 为指定对象设置精确的权限,覆盖原有权限
  • permission (权限):
    • r (read): 读取权限 (4)
    • w (write): 写入权限 (2)
    • x (execute): 执行权限 (1)

示例

假设 script.sh 的初始权限为 -rw-r--r-- (644)。

$ ls -l script.sh
-rw-r--r-- 1 charlie developers 0 Oct 26 10:45 script.sh

为所有者添加执行权限

$ chmod u+x script.sh

验证:

$ ls -l script.sh
-rwxr--r-- 1 charlie developers 0 Oct 26 10:45 script.sh
# 所有者权限从 rw- 变为 rwx

为所属组和其他用户移除读取权限

$ chmod go-r script.sh

验证:

$ ls -l script.sh
-rwx-w---- 1 charlie developers 0 Oct 26 10:45 script.sh
# 所属组和其他用户的 r 被移除

为所有用户设置精确的权限 (所有者可读写执行,组可读执行,其他用户无权限)

$ chmod u=rwx,g=rx,o= script.sh
# 或者简写为
$ chmod a=,u=rwx,g=rx script.sh

验证:

$ ls -l script.sh
-rwxr-x--- 1 charlie developers 0 Oct 26 10:45 script.sh

数字法

数字法更快捷,是系统管理员最常用的方法,每种权限都被赋予一个数值:

  • r (read) = 4
  • w (write) = 2
  • x (execute) = 1

将每个用户类型(用户、组、其他)的权限值相加,就构成了一个三位数的权限码。

  • 7 = 4 + 2 + 1 = rwx (读、写、执行)
  • 6 = 4 + 2 + -w- (读、写)
  • 5 = 4 + 1 + r-x (读、执行)
  • 4 = 4 + r-- (只读)
  • 3 = 2 + 1 = -wx (写、执行)
  • 2 = 2 + -w- (只写)
  • 1 = 1 + --x (只执行)
  • 0 = (无权限)

三位数的含义:

[用户权限][组权限][其他权限]

示例

我们想设置一个目录的权限为:所有者可读写执行 (rwx = 7),组可读执行 (r-x = 5),其他用户无权限 ( = 0)。

  • 用户: rwx -> 7
  • 组: r-x -> 5
  • 其他: -> 0

组合起来就是 750

给脚本文件设置可执行权限 (755)

这是最常见脚本文件的权限:所有者完全控制,其他人只能读和执行。

$ chmod 755 script.sh

验证:

$ ls -l script.sh
-rwxr-xr-x 1 charlie developers 0 Oct 26 10:45 script.sh

给配置文件设置安全权限 (600)

配置文件通常只允许所有者读写。

$ chmod 600 config.conf

验证:

$ ls -l config.conf
-rw------- 1 charlie developers 0 Oct 26 10:45 config.conf

给一个共享目录设置权限 (770)

一个目录,所有者和组内成员都可以完全控制,其他人无权访问。

$ chmod -R 770 shared_folder/

chown vs chmod 核心区别与联系

特性 chown (Change Owner) chmod (Change Mode)
全称 Change Owner Change Mode
核心功能 修改所有权 (Who owns it?) 修改访问权限 (Who can do what?)
修改对象 文件/目录的 所有者所属组 文件/目录的 读、写、执行 权限
常见场景 - 将网站文件所有权转移给 Web 服务用户
- 将开发目录所有权分配给开发团队
- 保护敏感文件 (600)
- 允许脚本执行 (755)
- 创建共享目录 (770)
修改依据 系统中的用户账户用户组 一组权限位 (r, w, x)

它们如何协同工作?

chownchmod 经常一起使用,共同决定了文件的最终访问控制策略。

一个经典的例子:部署一个 Web 应用

  1. 创建文件:你作为 root 用户创建了网站文件和目录。

    # root 用户创建
    touch /var/www/html/index.html
    mkdir /var/www/html/uploads

    这些文件的所有者是 root,权限可能是 644

  2. 修改所有权 (chown):你需要让 Web 服务器(如 Nginx,运行用户为 www-data)能够访问这些文件,你需要将所有权更改。

    sudo chown -R www-data:www-data /var/www/html/

    index.htmluploads 目录的所有者和所属组都变成了 www-data

  3. 修改权限 (chmod):你需要设置合适的权限。

    • index.html 应该可以被 Web 服务器读取,也可以被你(或其他开发者)写入。
    • uploads 目录需要允许 Web 服务器写入上传的文件。
    # 网页文件:所有者可读写,其他人只读
    sudo chmod 644 /var/www/html/index.html
    # 上传目录:所有者可读写执行,组内成员可读写执行 (如果团队协作)
    # 注意:目录的执行权限 (x) 意味着可以进入该目录
    sudo chmod 775 /var/www/html/uploads

通过这一系列 chownchmod 的操作,你成功地配置了安全的文件权限,既保证了 Web 服务器的正常运行,也防止了未授权的访问和篡改。

记住这个简单的区分:

  • 想改(所有者/组),用 chown
  • 想改(读/写/执行),用 chmod

掌握这两个命令是 Linux 系统管理和日常使用的基石。

分享:
扫描分享到社交APP
上一篇
下一篇