命令介绍

chown 命令,可以认为是 “change owner” 的缩写,主要用于修改文件(或目录)的所属主,除此之外,这个命令也可以修改文件(或目录)的所属组。

命令格式

当只需要修改所属主时,可使用如下 chown 命令的基本格式:chown [-R] 所属主 文件或目录

该命令常用的选项及各自的含义说明:

选项 含义 备注
-R 表示连同子目录中的所有文件,都更改所有者。 -

如果需要同时更改所属主和所属组,chown 命令的基本格式为:chown [-R] 所属主:所属组 文件或目录

注意:

  • 在 chown 命令中,所属主和所属组中间也可以使用点(.),但会产生一个问题,如果用户在设定账号时加入了小数点(例如 zhangsan.temp),就会造成系统误判。因此,建议大家使用冒号连接所属主和所属组。

  • 当然,chown 命令也支持单纯的修改文件或目录的所属组,例如 chown :group install.log 就表示修改 install.log 文件的所属组,但修改所属组通常使用 chgrp 命令,因此并不推荐大家使用 chown 命令。

  • 另外需要注意的一点是,使用 chown 命令修改文件或目录的所属主(或所属者)时,要保证使用者用户(或用户组)存在,否则该命令无法正确执行,会提示 “invalid user” 或者 “invaild group”。

命令实例

实例一:修改文件的所属主

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
<!-- [root@ubuntu2204-101 ~ 07:05:02]# mkdir -p permission/a/b/c/d
[root@ubuntu2204-101 ~ 07:06:18]# cp /etc/shadow permission/
[root@ubuntu2204-101 ~ 07:06:26]# cp /etc/passwd permission/a/b/
[root@ubuntu2204-101 ~ 07:06:35]# cp /etc/group permission/a/b/c/ -->

# 先看下文件目录结构:
[root@ubuntu2204-101 ~ 07:06:54]# tree permission/
permission/
├── a
│   └── b
│   ├── c
│   │   ├── d
│   │   └── group
│   └── passwd
└── shadow

# 查看下指定文件的所属主和组:
[root@ubuntu2204-101 ~ 07:07:00]# ll permission/a/b/passwd
-rw-r--r-- 1 root root 1961 Sep 8 07:06 permission/a/b/passwd

# 将文件 permission/a/b/passwd 的所属主修改为 veazhi
[root@ubuntu2204-101 ~ 07:07:55]# chown veazhi permission/a/b/passwd

# 再次查看所属主:
[root@ubuntu2204-101 ~ 07:09:16]# ll permission/a/b/passwd
-rw-r--r-- 1 veazhi root 1961 Sep 8 07:06 permission/a/b/passwd

可以看到,通过修改 permission/a/b/passwd 文件的所属主,veazhi 用户从其他人身份(只对此文件有读取权限)转变成了所属主身份,对此文件拥有读和写权限。

实例二:普通用户修改文件的权限

Linux 系统中,用户等级权限的划分是非常清楚的,root 用户拥有最高权限,可以修改任何文件的权限,而普通用户只能修改自己文件的权限(所属主是自己的文件),例如:

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
# 在 root 用户下复制一个系统日志文件到 lamp 用户的家目录下:
[root@ubuntu2204-101 ~ 07:14:59]# cp /var/log/syslog /home/lamp/

# 切换到普通用户 lamp 下:
[root@ubuntu2204-101 ~ 07:15:17]# su - lamp

# 查看复制过来的 syslog 文件的所属主和组:
[lamp@ubuntu2204-101 ~ 07:15:37]$ ll syslog
-rw-r----- 1 root root 89649 Sep 8 07:15 syslog

# 尝试修改该文件的权限:
[lamp@ubuntu2204-101 ~ 07:15:30]$ chmod 777 syslog
chmod: changing permissions of 'syslog': Operation not permitted #lamp 用户不能修改test文件的权限

# 那么如何操作才能使 lamp 用户能修改 syslog 的权限呢?如下:
# 退出普通用户环境,回到 root 用户下:
[lamp@ubuntu2204-101 ~ 07:16:06]$ exit
logout

# 修改该文件的所属主为 lamp:
[root@ubuntu2204-101 ~ 07:18:10]# chown lamp /home/lamp/syslog

# 再次切换到普通用户 lamp 下:
[root@ubuntu2204-101 ~ 07:18:18]# su - lamp

# 再次执行文件权限修改:
[lamp@ubuntu2204-101 ~ 07:18:25]$ chmod 777 syslog

# 最后,看下文件的所属主和权限
[lamp@ubuntu2204-101 ~ 07:18:32]$ ll syslog
-rwxrwxrwx 1 lamp root 89649 Sep 8 07:15 syslog*

可以看到,lamp 用户无权更改所属主为 root 用户文件的权限,只有普通用户是这个文件的所属主,才可以修改文件的权限。

实例三:递归修改文件的所有者(包括属主和属组)

参数:-R,递归修改 permission 目录及目录下所有文件的所属主和组为 veazhi:

1
[root@ubuntu2204-101 ~ 07:29:10]# chown -R veazhi:veazhi permission/

这样修改完成后, permission 及该目录下的所有文件都属于 veazhi 这个所有者了,即除了 root 用户外, veazhi 用户也可以对其进行管理