Linux读写执行权限(-r、-w、-x)的真正含义
通过前面的学习,我们知道了给文件设定权限的重要性,也知道了如何给文件设定权限。那么,读(r)、写(w)、执行(x)权限到底指的是什么呢?
首先要告诉大家的是,这些权限的含义并没有表面上那么简单,甚至同一权限对文件和目录的含义也不相同。
对于文件来说,执行权限是最高权限。给用户或群组设定权限时,是否赋予执行权限需要慎重考虑,否则会对系统安装造成严重影响。
对目录来说,如果只赋予 r 权限,则此目录是无法使用的。很简单,只有 r 权限的目录,用户只能查看目录结构,根本无法进入目录(需要用 x 权限),更不用说使用了。
因此,对于目录来说,常用来设定目录的权限其实只有 0(---)、5(r-x)、7(rwx)这 3 种。
【例 1】
某目录的权限如下所示:
【例 2】
假设有个账号名称为dmtsai,他的家目录在/home/dmtsai/,dmtsai对此目录具有[rwx]的权限。若在此目录下有个名为 the_root.data 的文件,该文件的权限如下:
首先要告诉大家的是,这些权限的含义并没有表面上那么简单,甚至同一权限对文件和目录的含义也不相同。
rwx 权限对文件的作用
文件,是系统中用来存储数据的,包括普通的文本文件、数据库文件、二进制可执行文件,等等。不同的权限对文件的含义如表 1 所示。rwx 权限 | 对文件的作用 |
---|---|
读权限(r) | 表示可读取此文件中的实际内容,例如,可以对文件执行 cat、more、less、head、tail 等文件查看命令。 |
写权限(w) | 表示可以编辑、新增或者修改文件中的内容,例如,可以对文件执行 vim、echo 等修改文件数据的命令。注意,无权限不赋予用户删除文件的权利,除非用户对文件的上级目录拥有写权限才可以。 |
执行权限(x) | 表示该文件具有被系统执行的权限。Window系统中查看一个文件是否为可执行文件,是通过扩展名(.exe、.bat 等),但在 Linux 系统中,文件是否能被执行,是通过看此文件是否具有 x 权限来决定的。也就是说,只要文件拥有 x 权限,则此文件就是可执行文件。但是,文件到底能够正确运行,还要看文件中的代码是否正确。 |
对于文件来说,执行权限是最高权限。给用户或群组设定权限时,是否赋予执行权限需要慎重考虑,否则会对系统安装造成严重影响。
rwx 权限对目录的作用
目录,主要用来记录文件名列表,不同的权限对目录的作用如表 2 所示。rwx 权限 | 对目录的作用 |
---|---|
读权限(r) | 表示具有读取目录结构列表的权限,也就是说,可以看到目录中有哪些文件和子目录。一旦对目录拥有 r 权限,就可以在此目录下执行 ls 命令,查看目录中的内容。 |
写权限(w) |
对于目录来说,w 权限是最高权限。对目录拥有 w 权限,表示可以对目录做以下操作:
|
执行权限(x) | 目录是不能直接运行的,对目录赋予 x 权限,代表用户可以进入目录,也就是说,赋予 x 权限的用户或群组可以使用 cd 命令。 |
对目录来说,如果只赋予 r 权限,则此目录是无法使用的。很简单,只有 r 权限的目录,用户只能查看目录结构,根本无法进入目录(需要用 x 权限),更不用说使用了。
因此,对于目录来说,常用来设定目录的权限其实只有 0(---)、5(r-x)、7(rwx)这 3 种。
【例 1】
某目录的权限如下所示:
drwxr--r--. 3 root root 4096 Jun 25 08:35 .ssh
系统有个账号名称为 vbird,此账户并不包含在 root 群组中,请问 vbird 对这个目录有何权限?是否可切换到此目录中?答案:vbird 对此目录仅具有 r 的权限,因此 vbird 可以查询此目录下的文件名列表。因为 vbird 不具有 x 的权限,因此 vbird 并不能切换到此目录内。
【例 2】
假设有个账号名称为dmtsai,他的家目录在/home/dmtsai/,dmtsai对此目录具有[rwx]的权限。若在此目录下有个名为 the_root.data 的文件,该文件的权限如下:
-rwx------. 1 root root 4365 Sep 19 23:20 the_root.data
请问 dmtsai 对此文件的权限为何?可否删除此文件?答案:由于 dmtsai 对此文件来说是其他人的身份,因此这个文件他无法读、无法编辑也无法执行,也就是说,他无法变动这个文件的内容就是了。但是由于这个文件在他的家目录下,他在此目录下具有 rwx 的完整权限,因此对于 the_root.data 这个文件来说,是能够删除的。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算