本文整理自:

一、基本知识
  在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户。该文件用户可以修改该文件的拥有者及用户组,当然root用户可以修改任何文件的拥有者及用户组。在Linux中,对于文件的权限(rwx),分为三部分,一部分是该文件的拥有者所拥有的权限,一部分是该文件所在用户组的用户所拥有的权限,另一部分是其他用户所拥有的权限。对于文件的权限请参考《Linux的chmod命令
   文件(含文件夹,下同)的权限,在shell中可以通过chmod命令来完成,关于此请参考《Linux的chmod命令》。在 shell 中,可以使用chown命令来改变文件所有者及用户组,chgrp命令来改变文件所在用户组。在
Linux的C程序中,可以使用chown函数来改变文件所有者,及所在用户组。
  另外,在shell中,要修改文件当前的用户必须具有管理员root的权限。可以通过su命令切换到root用户,也可以通过sudo获得root的权限。
二、使用chown命令更改文件拥有者
在 shell 中,可以使用chown命令来改变文件所有者。chown命令是change owner(改变拥有者)的缩写。需要要注意的是,用户必须是已经存在系统中的,也就是只能改变为在
/etc/passwd这个文件中有记录的用户名称才可以。
chown命令的用途很多,还可以顺便直接修改用户组的名称。此外,如果要连目录下的所有子目录或文件同时更改文件拥有者的话,直接加上 -R的参数即可。
基本语法:
chown [-R] 账号名称 文件或目录
chown [-R] 账号名称:用户组名称 文件或目录
参数
-R : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录
都更新成为这个用户组。常常用在更改某一目录的情况。
示例1
[root@localhost home]# touch testfile //由 root 用户创建文件 
[root@localhost home]# ls testfile –l 
-rw--w--w- 1 root root 0 Jun 7 19:35 testfile //文件的拥有者及拥有者级均为 root 
[root@localhost home]# chown yangzongde testfile //修改文件拥有者为 yangzongde 
[root@localhost home]# ls testfile -l 
-rw--w--w- 1 yangzongde root 0 Jun 7 19:35 testfile //查看文件拥有者为 yangzongde,但组仍为 root 
示例2
chown bin install.log
ls -l
-rw-r--r--  1 bin  users 68495 Jun 25 08:53 install.log
chown root:root install.log
ls -l
-rw-r--r--  1 root root 68495 Jun 25 08:53 install.log
三、使用chgrp命令更改文件所属用户组
在shell中,可以使用chgrp命令来改变文件所属用户组,该命令就是change group(改变用户组)的缩写。需要注意的是要改变成为的用户组名称,必须在 /etc/group里存在,否则就会显示错误。
基本语法:
chgrp [-R] 用户组名称 dirname/filename ...
参数:
-R : 进行递归( recursive )的持续更改,即连同子目录下的所有文件、目录
都更新成为这个用户组。常常用在更改某一目录的情况。
示例3
[root@localhost home]# ls testfile -l 
-rw--w--w- 1 yangzongde root 0 Jun 7 19:35 testfile //查看文件拥有者为 yangzongde,但组为 root 
[root@localhost home]# chgrp yangzongde testfile //修改拥有者组为
yangzongde 
[root@localhost home]# ls testfile -l 
-rw--w--w- 1 yangzongde yangzongde 0 Jun 7 19:35 testfile 
[root@localhost home]# chown root:root testfile //
使用 chown 一次性修改拥有者及组 
[root@localhost home]# ls testfile -l 
-rw--w--w- 1 root root 0 Jun 7 19:35 testfile 
示例4
[root@linux ~]# chgrp users install.log
[root@linux ~]# ls -l
-rw-r--r--  1 root users 68495 Jun 25 08:53 install.log
示例5
更改为一个 /etc/group里不存在的用户组
[root@linux ~]# chgrp testing install.log
chgrp: invalid group name `testing' <== 出现错误信息~找不到这个用户组名~
四、chown 函数的使用
在Linux 的C 应用编程中,可以使用 chown 函数来修改文件的拥有者及拥有者组。此函数声明如下: 
/usr/include/unistd.h文件中
<p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"></p><div><span class="com" style="color: rgb(136, 0, 0);">/* Change the owner and group of FILE. */</span><span class="pln"> </span></div><div><span class="kwd" style="color: rgb(0, 0, 136);">extern</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">int</span><span class="pln"> chown </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln">__const </span><span class="kwd" style="color: rgb(0, 0, 136);">char</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln">__file</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">__uid_t</span><span class="pln"> __owner</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">__gid_t</span><span class="pln"> __group</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln">__THROW __nonnull </span><span class="pun" style="color: rgb(102, 102, 0);">((</span><span class="lit" style="color: rgb(0, 102, 102);">1</span><span class="pun" style="color: rgb(102, 102, 0);">))</span><span class="pln"> __wur</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> </span></div><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"></p>
此函数的第一个参数为欲修改用户的文件,第二个参数为修改后的文件拥有者,第三个参数为修改后该文件拥有者所在的组。

对于已打开的文件,使用 fchown 函数来修改。其第一个参数为已打开文件的文件描述符,其他同 chown
函数。该函数声明如下: 
<p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"></p><div><span class="com" style="color: rgb(136, 0, 0);">/* Change the owner and group of the file that FD is open on. */</span><span class="pln"> </span></div><div><span class="kwd" style="color: rgb(0, 0, 136);">extern</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">int</span><span class="pln"> fchown </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="kwd" style="color: rgb(0, 0, 136);">int</span><span class="pln"> __fd</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">__uid_t</span><span class="pln"> __owner</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">__gid_t</span><span class="pln"> __group</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln"> __THROW __wur</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> </span></div><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"></p>
对于连接文件,则可以使用 lchown 函数。其参数同于 chown 函数。 
<p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"></p><div><span class="com" style="color: rgb(136, 0, 0);">/* Change owner and group of FILE, if it is a symbolic link the ownership of the symbolic </span></div><div><span class="com" style="color: rgb(136, 0, 0);">link is changed. */</span><span class="pln"> </span></div><div><span class="kwd" style="color: rgb(0, 0, 136);">extern</span><span class="pln"> </span><span class="kwd" style="color: rgb(0, 0, 136);">int</span><span class="pln"> lchown </span><span class="pun" style="color: rgb(102, 102, 0);">(</span><span class="pln">__const </span><span class="kwd" style="color: rgb(0, 0, 136);">char</span><span class="pln"> </span><span class="pun" style="color: rgb(102, 102, 0);">*</span><span class="pln">__file</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">__uid_t</span><span class="pln"> __owner</span><span class="pun" style="color: rgb(102, 102, 0);">,</span><span class="pln"> </span><span class="typ" style="color: rgb(102, 0, 102);">__gid_t</span><span class="pln"> __group</span><span class="pun" style="color: rgb(102, 102, 0);">)</span><span class="pln"> __THROW __nonnull </span><span class="pun" style="color: rgb(102, 102, 0);">((</span><span class="lit" style="color: rgb(0, 102, 102);">1</span><span class="pun" style="color: rgb(102, 102, 0);">))</span><span class="pln"> __wur</span><span class="pun" style="color: rgb(102, 102, 0);">;</span><span class="pln"> </span></div><p style="margin-top: 0px; margin-bottom: 10px; padding-top: 0px; padding-bottom: 0px;"></p>
以上这 3 个函数如果执行成功,将返回 0,否则返回-1。

【Linux开发】如何更改linux文件的拥有者及用户组(chown和chgrp)的更多相关文章

  1. 如何更改linux文件的拥有者及用户组(chown和chgrp)

    http://blog.csdn.net/hudashi/article/details/7797393 一.基本知识   在Linux中,创建一个文件时,该文件的拥有者都是创建该文件的用户.该文件用 ...

  2. 更改linux文件的拥有者及用户组(chown和chgrp)

    .使用chown命令更改文件拥有者 在 shell 中,能够使用chown命令来改变文件全部者.chown命令是change owner(改变拥有者)的缩写.须要要注意的是,用户必须是已经存在系统中的 ...

  3. 嵌入式Linux开发教程:Linux常见命令(上篇)

    摘要:这是对周立功编著的<嵌入式Linux开发教程>的第7期连载.本期刊载内容有关LinuxLinux常见命令中的导航命令.目录命令和文件命令.下一期将连载网络操作命令.安装卸载文件系统等 ...

  4. Linux 拷贝有更改的文件

    cp -Ruv /home/username/trunk_new/app/* /data/httpdocs/wwwroot/app/

  5. 【菜鸟玩Linux开发】在Linux中使用VS Code编译调试C++项目

    最近项目需求,需要在Linux下开发C++相关项目,经过一番摸索,简单总结了一下如何通过VS Code进行编译调试的一些注意事项. 关于VS Code在Linux下的安装这里就不提了,不管是CentO ...

  6. 小白自制Linux开发板 三. Linux内核与文件系统移植

    上一篇完成了uboot的移植,但是想要愉快的在开发板上玩耍还需要移植Linux内核和文件系统. 1.Linux内核 事实上对于F1C100S/F1C200S,Linux官方源码已经对licheepi ...

  7. 小白自制Linux开发板 八. Linux音频驱动配置

    不知不觉小白自制开发板系列已经到第八篇了,本篇要配置的是音频驱动,也算是硬件部分的最后一片了,积攒的文章也差不多全放完了,后续更新可能会放缓,还请见谅. 对于F1C200s是自带了多媒体处理功能的,所 ...

  8. Linux中文乱码 - - 更改Linux字符集

     查看当前系统默认采用的字符集: # locale 在RedHat/CentOS系统下,记录系统默认使用语言的文件是/etc/sysconfig/i18n,如果默认安装的是中文的系统,i18n的内容如 ...

  9. 如何更改linux文件的拥有者及用户…

    本文整理自: http://blog.163.com/yanenshun@126/blog/static/128388169201203011157308/ http://ydlmlh.iteye.c ...

随机推荐

  1. Spring、SpringMVC注解方式整合

    1 原理 Web容器在启动的时候,会扫描每个jar包下的META-INF/services/javax.servlet.ServletContainerInitializer文件. 加载META-IN ...

  2. C++中的取地址符(&)

    这个符号特别容易混淆, 因为在C++中, &有两种不同用法: 获得变量地址 引用传递 第一个例子, int main() { std::string s = "Hello" ...

  3. MyEclipse更改项目名web发布名字不改问题

    步骤: 右键项目-->选择propertis-->MyEclipse-->Project Facets-->Web-->右侧更改Web Context-root 如下图:

  4. js 获取select的值

    var t = document.getElementById("provid"); console.log(t.value); console.log(t.text); //未定 ...

  5. wed.xml 中 filter、servlet 配置格式

    1.wed.xml 中 filter 配置格式 <filter> <filter-name>filterName</filter-name> <filter- ...

  6. POJ 1573 Robot Motion(模拟)

    题目代号:POJ 1573 题目链接:http://poj.org/problem?id=1573 Language: Default Robot Motion Time Limit: 1000MS ...

  7. pyinstaller打包的exe太大?你需要嵌入式python玄学

    pyinstaller打包一个exe动辄几十M几百M (特别是import pandas以后) 知乎上居然没有人po这方面的”知识“(手动狗头) 查了很多关于reduce pyinstaller打包出 ...

  8. nginx报错 nginx: [alert] kill(25903, 1) failed (3: No such process)

    当nginx 中报错 时 nginx报错 nginx: [alert] kill(25903, 1) failed (3: No such process) 通过在nginx/sbin,目录下 运行命 ...

  9. Spring Boot教程(十一) springboot程序构建一个docker镜像

    准备工作 环境: linux环境或mac,不要用windows jdk 8 maven 3.0 docker 对docker一无所知的看docker教程. 创建一个springboot工程 引入web ...

  10. Spring Cloud Stream教程(一)介绍Spring Cloud Stream

    Spring Cloud Stream是构建消息驱动的微服务应用程序的框架.Spring Cloud Stream基于Spring Boot建立独立的生产级Spring应用程序,并使用Spring I ...