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

语法
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。

$ 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
验证:

$ 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) = 4w(write) = 2x(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) |
它们如何协同工作?
chown 和 chmod 经常一起使用,共同决定了文件的最终访问控制策略。
一个经典的例子:部署一个 Web 应用
-
创建文件:你作为
root用户创建了网站文件和目录。# root 用户创建 touch /var/www/html/index.html mkdir /var/www/html/uploads
这些文件的所有者是
root,权限可能是644。 -
修改所有权 (
chown):你需要让 Web 服务器(如 Nginx,运行用户为www-data)能够访问这些文件,你需要将所有权更改。sudo chown -R www-data:www-data /var/www/html/
index.html和uploads目录的所有者和所属组都变成了www-data。 -
修改权限 (
chmod):你需要设置合适的权限。index.html应该可以被 Web 服务器读取,也可以被你(或其他开发者)写入。uploads目录需要允许 Web 服务器写入上传的文件。
# 网页文件:所有者可读写,其他人只读 sudo chmod 644 /var/www/html/index.html # 上传目录:所有者可读写执行,组内成员可读写执行 (如果团队协作) # 注意:目录的执行权限 (x) 意味着可以进入该目录 sudo chmod 775 /var/www/html/uploads
通过这一系列 chown 和 chmod 的操作,你成功地配置了安全的文件权限,既保证了 Web 服务器的正常运行,也防止了未授权的访问和篡改。
记住这个简单的区分:
- 想改人(所有者/组),用
chown。 - 想改权(读/写/执行),用
chmod。
掌握这两个命令是 Linux 系统管理和日常使用的基石。
