一、基本知识
在Linux中,创建一个文件(以及目录,下同)时,该文件的拥有者都是创建该文件的用户。root用户可以修改任何文件的拥有者及用户组。在Linux中,对于文件的权限(rwx),分为三部分,一部分是该文件的拥有者所拥有的权限,一部分是该文件所在用户组的用户所拥有的权限,另一部分是其他用户所拥有的权限。
在 shell 中,可以使用chown命令来改变文件所有者及用户组,chgrp命令来改变文件所属用户组。
二、chown命令
在 shell 中,可以使用chown命令来改变文件所有者。chown命令是change owner(改变拥有者)的缩写。需要注意的是,用户必须是已经存在系统中的,也就是只能改变为在 /etc/passwd这个文件中有记录的用户名称才可以。
使用权限:
只有 root 用户拥有该命令的权限。一般用户不可以将自己文件的拥有者改为其他用户,更不可以将其他用户文件的拥有者改变。
基本语法:
1 2 |
chown [OPTION]... [OWNER][:GROUP] FILE... |
参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
-c, --changes 作用与-v相似,但只返回修改的部分 -f, --quiet, -–silent 不显示错误信息 -v, --verbose 显示详细执行过程 --dereference 作用于符号链接的指向,而不是链接文件本身(默认) -h, -–no-dereference 只作用于符号链接文件本身,而不更改其指向的文件 (只在允许修改符号链接的所有者和属组属性的系统中可用) --from=CURRENT_OWNER:CURRENT_GROUP 只对当前的所有者及所属组与指定值相匹配的文件做修改 CURRENT_OWNER 和 CURRENT_GROUP 可以缺省一个 --no-preserve-root 不特殊对待文件系统根目录 '/' (默认) --preserve-root 不允许在文件系统根目录'/' 上递归操作 --reference=RFILE 使用指定文件或目录(RFILE)的所有者与所属组 忽略参数中声明的[OWNER][:GROUP] -R, --recursive 递归处理,将目录下的所有文件及子目录一并处理 当使用了参数 -R 时,可以使用以下三个参数中的一个来声明如何处理符号链接指向的目录。如果使用了多个参数,则以最后一个为准。 -H 如果命令参数(chown后面的FILE部分)是指向目录的符号链接,则遍历指向的目录 -L 遍历每一个遇到的指向目录的符号链接所指目录 -P 不遍历任何符号链接指向的目录(默认值) --help 显示帮助信息 --version 显示版本信息 如果没有指定 OWNER 参数,将不会改变文件的所有者。如果没有指定 GROUP 参数,所属组信息将不会改变,但若使用了“OWNER:”这样的参数时,所属组会改为OWNER的主要组。 OWNER 和 GROUP 这两个参数既可以是字符形式的名称,也可以是数字形式的id。 |
例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ ls -l #testfile的拥有者和所属组为wzh -rw-r--r-- 1 wzh wzh 0 9月 6 18:28 testfiel $ sudo chown root testfiel $ ls -l #testfile的拥有者改为root -rw-r--r-- 1 root wzh 0 9月 6 18:28 testfiel $ sudo chown :root testfiel $ ls -l #testfile的所属组改为root -rw-r--r-- 1 root root 0 9月 6 18:28 testfiel $ sudo chown wzh:wzh testfiel $ ls -l #testfile的拥有者和所属组改为wzh -rw-r--r-- 1 wzh wzh 0 9月 6 18:28 testfiel $ sudo chown root: testfiel $ ls -l #testfile的拥有者改为root,所属组改为root用户的主要组 -rw-r--r-- 1 root root 0 9月 6 18:28 testfiel |
三、chgrp命令
在shell中,可以使用chgrp命令来改变文件所属用户组,该命令就是change group(改变用户组)的缩写。需要注意的是要改变成为的用户组名称,必须在 /etc/group里存在,否则会报错。
使用权限:
同 chown 命令,只有root用户才拥有该命令执行权限。
基本语法:
1 2 3 4 |
chgrp [OPTION]... GROUP FILE... 或: chgrp [OPTION]... --reference=RFILE FILE... |
参数:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
-c, --changes 作用与-v相似,但只返回修改的部分 -f, --silent, --quiet 不显示错误信息 -v, --verbose 显示详细执行过程 --dereference 作用于符号链接的指向,而不是链接文件本身(默认) -h, --no-dereferen 只作用于符号链接文件本身,而不更改其指向的文件 (只在允许修改符号链接的所属组属性的系统中可用) --no-preserve-root 不特殊对待文件系统根目录 '/' (默认) --preserve-root 不允许在文件系统根目录'/' 上递归操作 --reference=RFILE 使用指定文件或目录(RFILE)的所属组,无需指定 GROUP 值 -R, --recursive 递归处理,将目录下的所有文件及子目录一并处理 当使用了参数 -R 时,可以使用以下三个参数中的一个来声明如何处理符号链接指向的目录。如果使用了多个参数,则以最后一个为准。 -H 如果命令参数(chown后面的FILE部分)是指向目录的符号链接,则遍历指向的目录 -L 遍历每一个遇到的指向目录的符号链接所指目录 -P 不遍历任何符号链接指向的目录(默认值) --help 显示帮助信息 --version 显示版本信息 |
例
1 2 3 4 5 6 7 8 9 10 11 12 |
$ ls -l -rw-rw-r--. 1 wzh wzh 0 9月 6 21:24 file1 -rw-rw-r--. 1 wzh wzh 0 9月 6 21:24 file2 $ sudo chgrp root file1 #将 file1 的所属组改为 root $ ls -l -rw-rw-r--. 1 wzh root 0 9月 6 21:24 file1 -rw-rw-r--. 1 wzh wzh 0 9月 6 21:24 file2 $ sudo chgrp --reference=file1 file2 #将 file2 的说数组改为与 file1 相同 $ ls -l -rw-rw-r--. 1 wzh root 0 9月 6 21:24 file1 -rw-rw-r--. 1 wzh root 0 9月 6 21:24 file2 |
四、总结
其实在实际使用中,chown 完全可以替代 chgrp ,而且最有用的参数只有一个,就是用于递归处理的 -R 。所以,其余的参数仅作了解即可,实在需要时在查看下文档就是了。