点击访问 Linux 命令大全 >>
很难想象在 Linux 中没有权限会是什么样子,任何人都可以随便修改/删除他人的文件。
本章节将介绍 Linux 中文件的权限,以及怎样查看/修改文件的权限。
Linux 权限组要针对文件所属者(属主)、文件所属用户组和其他人。注意,root 用户可以查看、修改、删除所有人的文件,并不受权限限制 —— 不要忘了 root 拥有控制一台计算机的完整权限。
文件所有者:通常指文件的创建者,当然也可以通过 chown 修改(需要 root 权限);
文件所属用户组:指文件所有者所在的用户组,该用户组下面的所有人员均有访问该文件相同的权限(这就可以实现文件在组内共享);
其他人:指非文件所有者,也不在文件所有者所在的用户组中。通常其他人享有最低文件权限,谁也不想将自己的文件给不认识的人进行修改、删除等;
在 Linux 中文件和目录享有3中权限:读取(r:read)、写入(w:write)和执行(x:execute)
对于文件而言,拥有读取权限意味着可以打开并且查看文件的内容,写入权限控制着对文件的修改权限。而能否删除和重命名一个文件则是由父目录的权限设置所控制的。
要让一个文件可执行,必须设置其执行权限。可执行文件有两类:
(1)可以直接由 CPU 执行的二进制代码
(2)Shell 脚本程序
对于目录而言,所谓的执行权限实际控制着用户能否进入该目录;而读取权限则负责确定能否列出该目录的内容;写入权限控制着在目录中创建、删除和重命名文件的权限;
因此,目录的执行权限是最基本的权限。
你可以使用 ls -l 或者 ll 命令查看文件的详细信息,其中就包括了文件权限。如下:
[snow@localhost ~]$ ll 总用量 4 drwxrwxr-x. 2 snow snow 6 7月 29 16:37 data -rw-rw-r--. 1 snow snow 604 7月 29 16:37 test.txt ## 或 [snow@localhost ~]$ ls -l 总用量 4 drwxrwxr-x. 2 snow snow 6 7月 29 16:37 data -rw-rw-r--. 1 snow snow 604 7月 29 16:37 test.txt
上面实例列出了当前目录的文件详细信息。每行文件信息的每个字段含义如下图:
下面主要介绍“权限属性”字段,该字段中主要包含了文件类型、文件所有者的权限、文件所属组的权限、其他用户的权限。如下图:
如果你想查看某个目录的权限,则可以使用 ls -ld 命令。如下:
[snow@localhost ~]$ ls -ld ~/data/ drwxrwxr-x. 2 snow snow 6 7月 29 16:37 /home/snow/data/
chown 命令用于改变文件的所有权。chown 命令的基础语法如下:
chown [OPTION]... [OWNER][:[GROUP]] FILE...
其中:
OPTION:命令选项
OWNER:指定文件的所属用户
GROUP:指定文件的所属用户组
FILE:待修改权限的文件,可以指定多个文件。
上面命令将文件 FILE 的属主更改为 OWNER,属组更改为 GROUP。下面命令将 test.txt 文件所属用户更改为 hxstrive,把所属用户组更改为 learn。如下:
## 查看文件信息 [snow@localhost ~]$ ls -l 总用量 4 drwxrwxr-x. 2 snow snow 6 7月 29 16:37 data -rw-rw-r--. 1 snow snow 604 7月 29 16:37 test.txt ## 修改所属用户和组 [snow@localhost ~]$ sudo chown hxstrive:learn test.txt [sudo] snow 的密码: ## 查看修改后的文件信息 [snow@localhost ~]$ ls -l 总用量 4 drwxrwxr-x. 2 snow snow 6 7月 29 16:37 data -rw-rw-r--. 1 hxstrive learn 604 7月 29 16:37 test.txt
如果只需要更改文件的所属用户,那么可以省略“:GROUP”。下面命令将 test.txt 文件所属用户更改为 root。如下:
## 查看文件信息 [snow@localhost ~]$ ls -l 总用量 4 drwxrwxr-x. 2 snow snow 6 7月 29 16:37 data -rw-rw-r--. 1 hxstrive learn 604 7月 29 16:37 test.txt ## 修改文件所属用户 [snow@localhost ~]$ sudo chown root test.txt ## 查看修改后的文件信息 [snow@localhost ~]$ ll -l 总用量 4 drwxrwxr-x. 2 snow snow 6 7月 29 16:37 data -rw-rw-r--. 1 root learn 604 7月 29 16:37 test.txt
如果只需要更改所属用户组,那么不能省略冒号“:”。如下命令将 test.txt 文件所属用户组更改为 hxstrive.com。如下:
## 查看文件信息 [snow@localhost ~]$ ls -l 总用量 4 drwxrwxr-x. 2 snow snow 6 7月 29 16:37 data -rw-rw-r--. 1 root learn 604 7月 29 16:37 test.txt ## 修改文件所属用户组 [snow@localhost ~]$ sudo chown :hxstrive.com test.txt ## 查看修改后的文件信息 [snow@localhost ~]$ ls -l 总用量 4 drwxrwxr-x. 2 snow snow 6 7月 29 16:37 data -rw-rw-r--. 1 root hxstrive.com 604 7月 29 16:37 test.txt
如果你需要对某一个目录下面所有的文件进行所属用户和用户组进行修改,可以使用 -R 选项,该选项将递归修改每个文件或目录的属主和属组。例如:
[snow@localhost ~]$ sudo chown -R root:hxstrive.com data
chgrp 命令用于设置文件的所属组。下面这条命令将文件 test.txt 的所属用户组设置为 learn,如下:
[snow@localhost ~]$ ll 总用量 4 drwxrwxr-x. 2 root hxstrive.com 6 7月 29 16:37 data -rw-rw-r--. 1 root hxstrive.com 604 7月 29 16:37 test.txt [snow@localhost ~]$ sudo chgrp learn test.txt [sudo] snow 的密码: [snow@localhost ~]$ ll 总用量 4 drwxrwxr-x. 2 root hxstrive.com 6 7月 29 16:37 data -rw-rw-r--. 1 root learn 604 7月 29 16:37 test.txt
注意,chgrp 命令也支持 -R 选项,对目录进行递归修改所属用户组。
chmod 命令用于改变一个文件的权限,这个命令使用“用户组+/-权限”的表达方式来增加/删除相应的权限。具体来说:
用户组:文件属主(u)、文件属组(g)、其他人(o)、所有人(a)
权限:读取(r)、写入(w)、执行(x)
例如:下面命令将给 test.sh 文件添加所属用户的执行权限。
## 查看文件权限 [snow@localhost ~]$ ll test.sh -rw-rw-r--. 1 snow snow 0 7月 29 20:41 test.sh ## 添加执行权限 [snow@localhost ~]$ chmod u+x test.sh ## 查看文件权限 [snow@localhost ~]$ ll test.sh -rwxrw-r--. 1 snow snow 0 7月 29 20:41 test.sh
chmod 可以使用 a 同时指定文件所属用户、所属用户组和其他人的权限。例如:下面命令将删除所有人对 test.sh 文件的写入权限。
## 查看文件权限 [snow@localhost ~]$ ll test.sh -rwxrw-rw-. 1 snow snow 0 7月 29 20:41 test.sh ## 删除所有用户的写入权限 [snow@localhost ~]$ chmod a-w test.sh ## 查看文件权限 [snow@localhost ~]$ ll test.sh -r-xr--r--. 1 snow snow 0 7月 29 20:41 test.sh
我们还可以通过“用户组=权限”的方式设置多权限。例如:下面命令将给 test.sh 文件的所属用户和所属组添加读写权限,其他用户添加读权限。
## 查看文件权限 [snow@localhost ~]$ ll test.sh -r-xr--r--. 1 snow snow 0 7月 29 20:41 test.sh ## 添加权限 [snow@localhost ~]$ chmod ug=rw,o=r test.sh ## 查看文件权限 [snow@localhost ~]$ ll test.sh -rw-rw-r--. 1 snow snow 0 7月 29 20:41 test.sh
最后,还可以使用“用户组1=用户组2”格式将两个用户组的权限设置为相同。例如:下面命令将给 test.sh 文件的所属组和其他人设置为相同的权限。
## 查看文件权限 [snow@localhost ~]$ ll test.sh -rw-rw-r--. 1 snow snow 0 7月 29 20:41 test.sh ## 设置权限 [snow@localhost ~]$ chmod g=o test.sh ## 查看文件权限 [snow@localhost ~]$ ll test.sh -rw-r--r--. 1 snow snow 0 7月 29 20:41 test.sh
注意:只有文件的所属用户和root用户才有权修改文件的权限。
chmod 命令助记符(r-读取、w-写入、x-执行)尽管意义明确,但是有些太繁琐了,一般系统管理员更喜欢使用 chmod 八进制语法来修改文件权限。
Linux 的每一组权限 rwx 在计算机中实际占用了 3 位,每一位都有两种情况。例如:对于写入位,只有“设置(r)”和没有设置(-)两种情况。这样计算机就可以使用二进制0和1来表示每一个权限位,其中 0 表示没有设置,而 1 表示设置。例如:“rwx”被表示为 111(使用 8421 码,则 111 为 4+2+1=7),“-w-”表示为 010 。
八进制、二进制、文件权限对应关系表:
八进制 | 二进制 | 权 限 | 八进制 | 二进制 | 权 限 |
0 | 000 | --- | 5 | 101 | r-x |
1 | 001 | --x | 6 | 110 | rw- |
2 | 010 | -w- | 7 | 111 | rwx |
3 | 011 | -wx | |||
4 | 100 | r-- |
不需要记住上面表格的对应关系,你只需要记住 1=x、2=w、4=r,然后简单的做加法。例如:r-x = 4 + 1 = 5
下面命令将 text.sh 文件的所属用户权限设置为 rwx,所属组权限设置为r-x,其他用户设置为 r--。如下:
## 查看文件权限 [snow@localhost ~]$ ll test.sh -rw-r--r--. 1 snow snow 0 7月 29 20:41 test.sh ## 设置文件权限 [snow@localhost ~]$ chmod 754 test.sh ## 查看文件权限 [snow@localhost ~]$ ll test.sh -rwxr-xr--. 1 snow snow 0 7月 29 20:41 test.sh