问题描述
在某些示例中,我看到一些人使用chown
而不是chmod
。我不知道在哪里使用chmod
和chown
。请向我解释它们之间的区别,何时以及为什么要使用两者之一。
最佳回答
让我们创建一个文件
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
由于分别为所有者,组和其他人设置了权限位,因此可以通过组合chown
和chmod
来控制不同用户的文件权限。有关Linux中权限的速成课程,请参阅this short guide。
次佳回答
简单来说,chown
用于更改文件的所有权,而chmod
用于更改文件模式的位。
-
chown
定义谁拥有文件。 -
chmod
定义谁可以做什么。
当您使某人成为文件的所有者时,他几乎可以在该文件的任何位置进行操作,例如,他可以使用chmod
更改其mod(例如权限)以定义谁可以执行操作。
$ 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
向所有人(包括所有者,小组和其他所有人)授予读取,写入和执行的权利。
第三种回答
考虑文件(或目录,或其他内容)的权限时,有两个因素:
-
谁拥有文件-用户和组,以及
-
他们可以做什么-读,写,执行或其组合。
chown
处理谁。 chmod
处理什么。您不能使用一个代替另一个。
简单的Unix权限将尝试访问文件的用户分为三种类型:
-
文件的所有者
-
拥有该文件的组成员的用户
-
其他人
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
。