以下两者有何区别:
sudo chown $USER:$USER
和
sudo chown $USER
为什么是 2 次?一个用户错了吗?当我使用 查看权限时namei -l
,我经常会看到类似root root
或 的内容proxy proxy
。
为什么必须定义并列出所有者 2 次?
答案1
chown 命令用于更改文件或目录的所有者和组所有者。使用此命令需要超级用户权限。chown 的语法如下:
chown [owner][:[group]] file...
chown 可以根据命令的第一个参数更改文件所有者和/或文件组所有者。以下是一些示例:
chown owner file
例子:
chown bob file --> Changes the ownership of the file from its current owner to user bob.
chown owner:group file
例子:
chown bob:users file --> Changes the ownership of the file from its current owner to user bob and changes the file group owner to group users.
chown :group file
例子:
chown :admins file --> Changes the group owner to the group admins. The file owner is unchanged.
chown owner: file
例子:
chown bob: file --> Change the file owner from the current owner to user bob and changes the group owner to the login group of user bob.
请阅读这个精彩的教程https://www.linode.com/docs/tools-reference/linux-users-and-groups。这显示有关用户、群组、权限等的一些信息...
答案2
事实并非如此user:user
,但是user:group
。
这是命令格式
chown [OPTION]... [OWNER][:[GROUP]] FILE...
用户组可能包含许多用户。以下是有关组的一些信息:
Linux 使用组来组织用户。组组织帐户集合,主要作为一种安全措施。组成员资格的控制通过 /etc/group 文件进行管理,该文件显示了组及其成员的列表。每个用户都有一个默认或主要组。当用户登录时,组成员资格将设置为其主要组。这意味着当用户启动程序或创建文件时,文件和正在运行的程序都将与用户当前的组成员资格相关联。用户可以访问其他组中的其他文件,只要他们也是该组的成员并且设置了访问权限。要运行程序或在不同的组中创建文件,用户必须运行 newgrp 命令来切换其当前组。
一个文件归一个用户和一个组所有。默认情况下,它归创建文件的用户及其默认组所有,除非进行更改。
在您的情况下,用户root
是组的成员root
。
答案3
man chown
提供有关命令的描述和用法以及其他有用信息chown
。
NAME
chown - change file owner and group
SYNOPSIS
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chown [OPTION]... --reference=RFILE FILE...
从man page给出的信息中我们可以知道 将chown $USER:$USER
目标文件的所有者和组更改为$USER
,而chown $USER
仅将目标文件的所有者更改为$USER
,而目标文件的组保持不变。
详细信息(来自手册页)如下:
Owner is unchanged if missing. Group is unchanged if missing, but changed to
login group if implied by a ':' following a symbolic OWNER. OWNER and GROUP may
be numeric as well as symbolic.
因此chown $USER:$USER
可以缩写为chown $USER:
。
root root
类似from命令的输出namei -l
意味着该文件的所有者和组都设置为root
。这不是所有者定义或列出两次。所有者和组是两个相关但不同的概念。并且文件始终具有所有者和组。
至于使用chown
命令,很有可能需要超级用户权限,因为使用chown
命令时可能会转移文件的所有权。然而,事实并非总是如此。
假设我们有一个名为“test”的用户,他属于几个组。id
命令给出以下输出:
uid=1000(test) gid=1000(test) groups=1000(test),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),110(sambashare)
用户“test”拥有以下文件:
-rw-r--r-- 1 test test 0 May 27 23:34 test_file
然后我们可以在没有超级用户权限的情况下将组更改为test_file
,sambashare
因为用户“test”同时属于“test”组和“sambashare”组,用户“test”已经拥有足够的权限来更改文件的组。