Linux 中的 chown 命令详解及C/C++代码实现
操作系统中的不同用户拥有所有权和权限,以确保文件的安全并限制谁可以修改文件的内容。在 Linux 中,chown 命令用于更改系统中另一个用户对文件或目录的所有权。
什么是 chown 命令?
chown(更改所有者的缩写)命令用于更改基于 Linux 的操作系统中文件和目录组的所有权。 它有助于使文件更安全,并对未经授权的用户施加限制。
在本文中,我们将学习在 Linux 中使用 chown 命令,但让我们首先讨论它的语法:
chown [options] user [:group] file…
chown 命令接受一个选项、一个用户和一个组名以及文件/目录的名称。 chown 会将文件/目录的所有权/组更改为指定的用户和组。
下面给出了与 chown 命令一起使用的一些最常用的选项:
如何在 Linux 中检查文件的所有权
首先,在使用 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);} elsea_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)
Linux 中的 chown 命令详解及C/C++代码实现相关推荐
- Linux 中的 nl 命令详解及C/C++代码实现(文件行数)
在Linux 操作系统中,如果想编辑文本文件时,希望显示在其前面附加行号的行,这时 Linux 中 nl 命令就派上用场,nl 命令对文件中的行进行编号. Linux nl命令 nl 命令是一个 Un ...
- Linux 中的 renice 命令详解及C/C++代码实现
Linux 中的 nice 命令有助于执行具有修改的调度优先级的程序/进程. 它启动具有用户定义的调度优先级的进程. 如果我们给一个进程更高的优先级,那么内核会为这个进程分配更多的 CPU 时间. 而 ...
- Linux 中的 head 命令详解及C/C++代码实现
head 命令允许您在标准输出中查看文件的初始行,而无需打开文件. 在本文中,学习了如何使用此实用程序及其选项. Linux head命令 head 命令用于打印文件或标准输出的前几行(默认为 10 ...
- linux cut命令学习,Linux中的cut 命令详解
今天小编要跟大家分享的文章是关于Linux中的cut 命令详解.cut 命令在Linux和Unix中的作用是从文件中的每一行中截取出一些部分,并输出到标准输出中.我们可以使用 cut 命令从一行字符串 ...
- linux中的tar命令详解,【Linux】tar命令详解
tar命令详解 -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令连用但只能用 ...
- linux的chmod,chown命令 详解
指令名称 : chmod 使用权限 : 所有使用者 使用方式 : chmod [-cfvR] [--help] [--version] mode file... 说明 : Linux/Unix ...
- linux中ln -s 命令详解
ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在 ...
- linux中free -m命令详解,Linux中free命令起什么作用呢?
摘要: 下文讲述Linux中free的功能说明,如下所示: free命令功能: 用于返回linux系统的物理内存和物理空闲内存 还有交换内存 及被内核使用的缓冲和缓存 free命令的原理: 通过查询/ ...
- linux中的du 命令详解
Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...
最新文章
- Windows下安装Python扩展模块提示“Unable to find vcvarsall.bat”的问题(转载)
- 富士通服务器 css灯亮,富士通空调指示灯故障含义-富士通空调指示灯代码
- Linux学习之服务器搭建——基础网络配置
- MySql中4种批量更新的方法
- 振作起来– Spring Framework 4.0即将来临!
- Kafka中的配置项参数unclean.leader.election.enable
- Windows Server 2012 R2 安装补丁KB2999226提示此更新不适合用于计算机
- 站内SEO第三篇:降低网站跳出率的7种有效方法
- Holding Two
- 爬虫就是python吗_python就是爬虫吗
- vue打包时报错 Error: No PostCSS Config found in 的解决方法
- Argo CD系列视频图文版之安装 argocd 并运行示例
- 机器人正运动学DH参数表示法
- 【GIS数据处理】 利用空间关系建立线CAD数据和属性表关联
- 根据在同一时间使用计算机用户的多少,2016年职称计算机WindowsXP考前冲刺试题1...
- UBUNTU 12.04 3D 特效设置(一)
- 小六六读Effective记录
- 【网络文摘】一个大神程序员的使命感究竟应该是什么
- 复试21天 day two
- 日志2021年11月
热门文章
- web前端开发技术实验与实践(第三版)储久良编著 项目9 设计饭店菜单价目表
- Java集合知识点,看这篇就够了,还有月薪3万简历模板+BAT面试题,帮你进大厂!
- tf.split()函数(非常清晰简单的解释)
- ORACLE用户、授权与同义词的应用示例
- 怎么查看本地服务器信息,查看本地服务器url地址
- before的用法java_Java LocalTime isBefore()用法及代码示例
- opencv滤镜-去色滤镜
- playbook变量
- System.Runtime.InteropServices.COMException (0x800A03EC):无法访问文件。
- ASPxGridView 用法整理