操作系统中的不同用户拥有所有权和权限,以确保文件的安全并限制谁可以修改文件的内容。在 Linux 中,chown 命令用于更改系统中另一个用户对文件或目录的所有权。
什么是 chown 命令?
chown(更改所有者的缩写)命令用于更改基于 Linux 的操作系统中文件和目录组的所有权。 它有助于使文件更安全,并对未经授权的用户施加限制。
在本文中,我们将学习在 Linux 中使用 chown 命令,但让我们首先讨论它的语法:
chown [options] user [:group] file…
chown 命令接受一个选项、一个用户和一个组名以及文件/目录的名称。 chown 会将文件/目录的所有权/组更改为指定的用户和组。
下面给出了与 chown 命令一起使用的一些最常用的选项:
首先,在使用 chown 命令进行所有权更改之前,您需要知道原始文件所有者或组。
要检查当前位置的 Linux 文件和目录的组或所有权,请运行以下命令:
ls -l
使用 chown 命令更改文件所有者
我们只需要将文件名和新所有者的用户名一起提供给 chown 命令,以更改 Linux 中文件的所有权:
chown
chown 命令的形成中,可以看到前半部分是用户名,后半部分是文件或文件夹路径。
显示 UID、GID 和组
Linux 系统中,每个用户的 ID 细分为 2 种,分别是用户 ID(User ID,简称 UID)和组 ID(Group ID,简称 GID)。
我们可以在终端 shell 上执行id、groups 命令来显示用户 ID 和组 ID。最后通过使用这些组 ID 或组名称或所有者名称通过 Linux 中的 chown 命令将当前所有权更改为您想要的所有者。
id [OPTION]… [USERNAME]
groups [OPTION]… [USERNAME]…
更改文件的所有者(使用 UID)
如果你已经知道文件的 UID 或文件的组 ID,还可以通过 UID 在 Linux 系统上应用 chown 命令来更改所有权。
更改文件组
要更改组或文件的所有权,可以在 Linux 上使用下面提到的 chown 命令来设置所有者。
更改用户名和组名
chown 命令还允许我们更改 Linux 文件系统上的用户和组名。
chown <用户名/UID>:<组名/GID> <文件名>
在进行更改之前检查所有者和组
chown 命令 --from 选项允许您验证当前所有者和组,然后应用更改。检查用户和组的 chown 语法如下所示:
chown --from=CurrentUser:CurrentGroup NewUser:NewGroup FILE
下面的示例显示我们首先验证了文件 test.txt 的所有权和组:
与上面类似,可以使用选项 --from 仅验证文件的组。
chown --from=:CurrentGroup :NewGroup FILE
这是一个示例,我们在更改当前组之前对其进行了验证:
如何递归更改文件所有权
chown 命令允许更改指定目录中所有文件和子目录的所有权。 将 -R 选项添加到命令中以执行此操作:
chown -R NewUser:NewGroup DirNameOrPath
chown 命令和符号链接
要将更改推送到链接,请运行带有 -h 标志的 chown 命令:
chown -h NewUser:NewGroup SymbolicLink
显示chown命令进程详细信息
默认情况下,终端不显示chown进程信息。 要查看幕后发生的事情,请使用两个命令行标志之一:
即使所有权保持不变,选项 -v 也会生成流程详细信息。
选项 –c 仅在目标文件的所有者或组更改时显示输出信息。
例如,如果我们将当前所有者指定为文件的新所有者:
抑制 chown 命令错误
为避免在运行 chown 命令时看到潜在的错误消息,请使用 -f 选项:
chown 命令C/C++代码实现
int main(int argc, char **argv)
{
Hflag = Lflag = Rflag = fflag = hflag = vflag = xflag = 0;
while ((ch = getopt(argc, argv, "HLPRfhvx")) != -1)
switch (ch)
{
case 'H':
Hflag = 1;
Lflag = 0;
break;
case 'L':
Lflag = 1;
Hflag = 0;
break;
case 'P':
Hflag = Lflag = 0;
break;
case 'R':
Rflag = 1;
break;
case 'f':
fflag = 1;
break;
case 'h':
hflag = 1;
break;
case 'v':
vflag++;
break;
case 'x':
xflag = 1;
break;
default:
usage();
}
argv += optind;
argc -= optind;
if (argc < 2)
usage();
if (Rflag)
{
if (hflag && (Hflag || Lflag))
errx(1, "the -R%c and -h options may not be "
"specified together", Hflag ? 'H' : 'L');
if (Lflag)
{
fts_options = FTS_LOGICAL;
}
else
{
fts_options = FTS_PHYSICAL;
if (Hflag)
{
fts_options |= FTS_COMFOLLOW;
}
}
}
else if (hflag)
{
fts_options = FTS_PHYSICAL;
}
else
{
fts_options = FTS_LOGICAL;
}
if (xflag)
fts_options |= FTS_XDEV;
uid = (uid_t)-1;
gid = (gid_t)-1;
if (ischown)
{
if ((cp = strchr(*argv, ':')) != NULL)
{
*cp++ = '\0';
a_gid(cp);
}
a_uid(*argv);
}
else
a_gid(*argv);
if ((ftsp = fts_open(++argv, fts_options, NULL)) == NULL)
err(1, NULL);
for (rval = 0; (p = fts_read(ftsp)) != NULL;)
{
...
}
...
}
...
运行结果:
总结
在每个 Linux 操作系统中,每个文件都与一个组的所有者相关联。 如果不是创建或修改文件的特定所有者,则不能从其他用户帐户更改或修改该文件。 但是在 chown 命令的帮助下,可以轻松访问要修改的目录或文件。
欢迎关注微信公众号【程序猿编码】,需要chown命令完整源码的添加本人微信号(c17865354792)