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

sar*_*ami 58 permissions command-line users chmod chown

在某些示例中,我看到有些使用chownchmod. 我不知道在哪里使用chmodchown。请向我解释它们之间的区别,何时以及为什么我应该使用它们。

Rav*_*ina 105

简单来说 chown用于更改文件的所有权,而chmod用于更改文件模式位。

  • chown 定义谁拥有文件。
  • chmod 定义谁可以做什么。

当您让某人成为文件的所有者时,他几乎可以在他想要对该文件进行的任何地方进行操作,例如他可以使用chmod更改其 mod(例如权限)来定义谁可以做什么。

$ ls -l file
-rwxrwxr-x  2  ravexina admins   26 May  9 12:49 file
Run Code Online (Sandbox Code Playgroud)

在上面的行中,我们可以看到它ravexina是文件的所有者并且admins是组。我可以使用:sudo chown dave:sudo file将文件的所有者更改为dave和组更改为sudo;现在该文件属于“dave”和“sudo”组中的每个人。

然而,chmod我们定义了谁可以做什么?谁有权读取文件、写入文件或执行文件。例如:

chmod 777 file
Run Code Online (Sandbox Code Playgroud)

将读取、写入和执行的权限授予所有人,包括所有者、组和其他所有人。

来自turnoff.us在此处输入图片说明

  • 所有者无法对文件执行任何他们想要的操作 - 删除或移动需要包含目录的写入权限。 (2认同)
  • @muru 那是真的;) 我的意思是读/写/执行,还有`chattr` 可以影响我猜的文件。 (2认同)
  • @KamilMaciorowski 我没有让你假装什么。您缺少的是,大多数人不认为删除或重命名文件是对目录的操作,而是对文件的操作。这就是为什么我们有这样的问题:https://superuser.com/q/373115/334516、https://unix.stackexchange.com/q/48579/70524、https://askubuntu.com/q/240424/ 158442 很明显,您知道这些是对目录的操作(恭喜!),但对此有一个常见的误解,所以我指出重命名或删除涉及目录的权限,而不是文件的权限。... (2认同)
  • 我也为漫画投了赞成票:-)但是,您可能想扩展“chmod”。它不被称为“chperm”的原因(除了早期的 UNIX 用户不喜欢长命令名之外)是因为它还用于其他用途(setuid、setgid、stick 位等)。因此名称为“更改模式”。 (2认同)

Zan*_*nna 71

让我们创建一个文件

touch rainbow
Run Code Online (Sandbox Code Playgroud)

我们来看看文件的元数据

$ ls -l rainbow
-rw-rw-r-- 1 zanna zanna 0 May 24 10:09 rainbow
Run Code Online (Sandbox Code Playgroud)

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

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

$ sudo chown pixie rainbow
$ ls -l rainbow
-rw-rw-r-- 1 pixie zanna 0 May 24 10:09 rainbow
Run Code Online (Sandbox Code Playgroud)

我们chmod用来改变权限位

$ sudo chmod 333 rainbow
$ ls -l rainbow
--wx-wx-wx 1 pixie zanna 0 May 24 10:09 rainbow
Run Code Online (Sandbox Code Playgroud)

由于对所有者、组和其他人分别设置了权限位,因此您可以通过组合chown和来控制不同用户的文件权限chmod。有关Linux 权限的速成课程,请参阅此简短指南

  • @WinEunuuchs2Unix 哈哈谢谢...我特意选择了一个特别无用的权限设置。如果我真的开始解释何时以及为什么使用 `chmod` 和 `chown` 的所有可能的排列(目前这个问题太宽泛),我的答案将永远持续下去。试图保持简单 (2认同)

mur*_*uru 21

在考虑文件(或目录,或其他)的权限时,有两个因素:

  • 拥有该文件 - 用户和组,以及
  • 什么,他们可以用它做-读,写,执行或它们的组合。

chown谁打交道chmod处理什么。你不能用一个代替另一个。

简单的 Unix 权限将尝试访问文件的用户分为三种类型:

  1. 文件的所有者
  2. 属于拥有文件的组成员的用户
  3. 其他人

chown用于改变前两个。chmod用于更改授予这些类型的权限。


小智 10

添加到以前的优秀答案的几点/提示:

  • 您必须对目录(及其上面的所有目录)具有执行权限才能访问它
  • 使用 -R 选项以递归方式将更改应用于包括和低于目标的所有内容,例如 chown -R www-data files/
  • 您可以使用语法同时更改用户和组 chown user:group myfile
  • 通常使用“+”和“-”选项比设置绝对权限更容易/更好,尤其是在处理文件和目录的组合时。例如,如果您想为一个目录及其下的所有内容授予组写权限,chmod -R 775 files/将使“files/”及其中和下的所有内容都可以执行并可供所有人读取,这可能不是每个文件都想要的结果。使用chmod -R g+w files/只会添加组写入权限,而不会触及任何其他内容。


Ada*_*dam 8

已经很好的答案,但我想在权限很容易理解的地方做出贡献

chmod u=r+w,o=r-w,g=-r-w test.php

u = user
o = other
g = group
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以轻松地将权限附加到文件。在上面的例子中

user = read + write
other = read but not write
group = not read not write
Run Code Online (Sandbox Code Playgroud)

并且不要忘记-R是否要递归更改权限。


Bru*_*ger 5

chown将更改拥有该文件以及该文件所属的组,同时chmod更改所有者和组访问该文件的方式(或者他们是否可以访问该文件)。