chmod和chown之间的主要区别是什么?

在一些例子中,我看到有些人使用chown而不是chmod。我不知道何时应该使用chmodchown。请向我解释它们之间的区别,以及何时和为什么我应该使用其中之一。

23还没有人明确说明:一个改变模式,另一个改变所有者。另外,请阅读使用手册。 - OrangeDog
2虽然chown命令也可以更改文件的所属组,但是有专门用于此任务的chgrp命令。 - OrangeDog
6香蕉和椅子之间的主要区别是什么?不要坐在香蕉上。 - Shadur
6个回答

简单来说,chown 用于更改文件的所有权,而 chmod 用于更改文件的模式位。
  • chown 定义了谁拥有该文件。
  • chmod 定义了谁可以做什么。

当你将某人设为文件的所有者时,他几乎可以对该文件做任何操作,例如,他可以使用chmod命令来更改文件的权限,以确定谁可以做什么。
$ ls -l file
-rwxrwxr-x  2  ravexina admins   26 May  9 12:49 file

在上面的行中,我们可以看到ravexina是文件的所有者,admins是组。我可以使用sudo chown dave:sudo file将文件的所有者更改为dave,并将组更改为sudo;现在该文件属于"dave"和"sudo"组的所有人。
然而,使用chmod我们定义谁可以做什么?谁有权读取文件、写入文件或执行它。例如:
chmod 777 file

为所有人,包括所有者、组和其他人提供读取、写入和执行的权限。

来自turnoff.usenter image description here


2文件的所有者不能随心所欲地对其进行操作 - 删除或移动需要对包含目录具有写权限。 - muru
3@muru 是的,没错 ;) 我是说读/写/执行权限,还有 chattr 可以影响文件吧。 - Ravexina
3@KamilMaciorowski 我并没有要求你假装什么。你所忽略的是,大多数人认为删除或重命名文件不是对目录的操作,而是对文件的操作。这就是为什么我们会有这样的问题:https://superuser.com/q/373115/334516,https://unix.stackexchange.com/q/48579/70524,https://askubuntu.com/q/240424/158442 显然你知道这些是对目录的操作(恭喜!),但是关于这一点存在着普遍的误解,所以我指出重命名或删除涉及到的是目录的权限,而不是文件本身。... - muru
2我也为这个漫画点了赞 :-) 不过,你可能想要更详细地解释一下chmod。它之所以不叫chperm(除了早期UNIX开发者不喜欢长命令名字之外),是因为它还可以用于其他功能(如设置用户ID、设置组ID、粘滞位等)。因此,它被称为"change mode"(改变模式)。 - user9184
@paxdiablo 谢谢 :-) 我在回答中没有解释细节的原因是我想要展示足够多的差异来达到幽默的效果。我已经更新了 ;) - Ravexina
为什么不添加一个额外的权限,允许用户授予权限?在这种情况下,我们就不再需要chown。 - JobHunter69

让我们创建一个文件
touch rainbow

让我们来看一下文件的元数据。
$ ls -l rainbow
-rw-rw-r-- 1 zanna zanna 0 May 24 10:09 rainbow

信息的第一部分是文件类型(开头的-表示它是一个普通文件)和权限位。

之后我们看到所有者(zanna)和组(zanna)。我们可以使用chown命令来更改它们:

$ sudo chown pixie rainbow
$ ls -l rainbow
-rw-rw-r-- 1 pixie zanna 0 May 24 10:09 rainbow

我们使用chmod命令来改变权限位。
$ sudo chmod 333 rainbow
$ ls -l rainbow
--wx-wx-wx 1 pixie zanna 0 May 24 10:09 rainbow

由于权限位针对所有者、群组和其他用户分别设置,您可以通过组合使用chownchmod来控制不同用户的文件权限。请参阅这份简短指南以快速了解Linux中的权限。


1+1 对于图像..但没有八进制的定义吗?或者chmod a+w的示例?虽然这样做比较耗时,但我认为可以得到更多的票 :D - WinEunuuchs2Unix
2@WinEunuuchs2Unix 哈哈,谢谢...我故意选择了一个特别无用的权限设置。如果我真的开始解释何时以及为什么要使用每个可能的chmodchown的排列组合(这是一个非常广泛的问题),我的回答将会永远持续下去。尽量保持简单。 - Zanna
对于所有权和权限之间的区别感到困惑?区别在于只有所有者才能更新权限吗? - Muhammad Umer
@MuhammadUmer 所有权是指谁拥有文件,权限是指所有者和非所有者对文件可以进行的操作。 - Zanna
好像文章的链接有问题,这是修复后的链接:这个简短指南 - Pavel Sapehin

在考虑文件(或目录等)的权限时,有两个因素:
- 文件的所有者——用户和组, - 可以对文件进行哪些操作——读取、写入、执行或其组合。
`chown` 处理“谁”的问题。`chmod` 处理“做什么”的问题。你不能用其中一个代替另一个。
简单的Unix权限将试图访问文件的用户分类为三种类型:
1. 文件的所有者 2. 作为文件所有组成员的用户 3. 其他所有人
`chown` 用于更改前两者。`chmod` 用于更改授予这些类型的权限。

一些要补充到之前优秀回答中的要点/提示:
- 要访问一个目录(以及所有上层目录),你必须对其具有执行权限。 - 使用 -R 选项将更改递归应用于目标及其下方的所有内容,例如:chown -R www-data files/ - 你可以同时使用 chown user:group myfile 的语法来更改用户和组。 - 在处理文件和目录的组合时,通常使用“+”和“-”选项比设置绝对权限更容易/更好。例如,如果你想给一个目录及其下方的所有内容赋予组写权限,chmod -R 775 files/ 将使 "files/" 及其内部和下方的所有内容可执行和可读,这可能不是每个文件所期望的结果。而使用 chmod -R g+w files/ 只会添加组写权限,而不会触及其他任何内容。

非常好的回答,但我想做出一点贡献,以便权限更容易理解。
chmod u=r+w,o=r-w,g=-r-w test.php
u = user
o = other
g = group

这样你就可以轻松地向文件添加权限。在上面的示例中,
user = read + write
other = read but not write
group = not read not write

不要忘记加上-R,如果你想递归地改变权限。

`chown`会改变文件的所有者和所属组,而`chmod`则会改变所有者和组对文件的访问方式(或者是否能够访问文件)。