如何在Linux上使用chown命令
Linux系统中的文件和目录都属于某人。我们可以使用chown
命令更改其所有权。我们向我们展示如何。
每个文件都属于一个用户和一个组
Linux是一个多用户系统。操作系统允许定义多个用户帐户,并且任何有效用户都可以登录到计算机。此外,多个用户可以同时使用一台计算机。
为了维护哪些文件属于哪个用户并增强安全性,Linux使用所有权的概念。每个文件都属于一个所有者用户和一个组。
创建文件后,文件的所有者就是创建文件的用户。文件所属的组是用户的当前组。用户和组具有名称,它们也具有数字身份,分别称为用户(或者唯一)标识符(UID)和组标识符(GID)。
创建文件时,该文件归我们所有,并且属于我们当前的组。通常,这是我们已登录的组。默认情况下,这是一个与用户名同名的组,是在系统上以用户身份创建时创建的。
我们可以使用" chown"命令将所有权值更改为其他值。我们可以同时设置新所有者,新组或者新所有者和新组。文件的所有者可以更改组的所有权,但是只有root可以更改用户的所有权,因为这涉及另一个用户。没有root特权,我们将无法使系统上的其他用户无意中采用文件。
我们为什么要更改所有权?
以下是一些我们可能需要执行此操作的示例:
如果在不同的Linux或者类似Unix的操作系统之间传输文件,则需要将用户和组所有者更改为希望在新Linux计算机上使用这些文件的帐户的新用户和组所有者。
用户可以离开组织,他的所有文件将由另一位员工负责。我们需要将所有者和组所有者更改为现在负责这些文件的工作人员。
我们可以编写将由特定用户使用的脚本。
我们可以创建以root用户身份登录的文件或者目录,但希望特定用户可以访问它。
查看组,UID和GID
要列出我们所在的组,可以使用" groups"命令。
groups
要获取组列表,其数字ID以及UID和GID,请使用id
命令:
id
我们可以使用一些带有ID的选项来优化输出。
-u:列出UID。
-g:列出有效(当前)GID。
-nu:列出用户名。
-ng:列出我们当前的组名。
id -u
id -g
id -nu
id -ng
查看文件的用户和组所有权
要查看文件或者目录的所有者,请在ls
中使用-l
(长列表)选项。
ls -l
我们可以看到名称" dave"在列表中出现了两次。最左边的外观告诉我们文件所有者是名为`dave'的用户。最右边的" dave"告诉我们文件属于一个组,也称为" dave"。
默认情况下,创建Linux用户时,会将他们添加到以其用户名命名的私有组中。他们是该组的唯一成员。
该可执行文件由用户mary拥有,并且该文件所属的组是mary的私有组。
ls -l
该文件由用户oscar
拥有,但文件所属的组称为researchlab
。这意味着researchlab
组的其他成员可以根据已为该组成员设置的文件许可权访问该文件。
更改用户所有权
让我们来看一些例子。该命令会将while.c文件的用户所有权更改为用户mary
。
sudo chown mary while.c
我们可以使用ls
来查看文件属性的更改。
ls -l while.c
我们可以使用" chown"一次更改多个文件的所有权。
sudo chown mary getval.c global.c goto.c
这将更改所有三个文件的用户所有权。
ls -l getval.c global.c goto.c
我们可以使用通配符选择文件组。此命令将更改所有以字母c开头的文件的用户所有权。
sudo chown mary c*.*
现在所有文件都将以mary作为其所有者。请注意,所有组的所有权都没有更改。
ls -l mary c*.*
让我们更改目录的所有权。我们只需将目录名传递给chown
而不是文件名即可。
sudo chown mary ./archive/
要检查目录的所有权属性,我们使用ls
,但也使用-d
(目录)选项。这列出了目录的属性,而不是其中的文件。
ls -l -d ./archive/
要更改目录中所有文件的所有权,可以使用-R(递归)选项。该选项将更改" archive"文件夹中所有文件的用户所有权。
sudo chown -R mary ./archive/
现在,让我们看一下存档目录中的文件。
ls -l ./archive/
不出所料,现在所有文件都属于mary
。
更改组所有权
有多种更改组所有权的方法。
要在更改用户所有权的同时更改组所有权,请使用冒号:分隔新的所有者名称和新的组名称。该组必须已经存在。
sudo chown mary:researchlab charm.c
用户所有者和文件所属的组均已更改。
ls -l charm.c
将组所有权更改为新所有者的当前组的简便方法,只需提供冒号并省略组名即可。
sudo chown mary: caps.c
ls -l caps.c
用户所有权和组所有权都已更改为" mary"。
要仅更改组所有权,请在其前面加上冒号并忽略用户名。用户所有者将不会更改。
sudo chown :researchlab at.c
ls -l at.c
组所有权已更改,但用户所有权保持不变。
使用具有UID和GID值的Chown
我们可以在chown
命令中使用数字UID和GID值。此命令会将用户和组所有权设置为" mary"。
sudo chown 1001:1001 at.c
ls -l at.c