Linux基础知识之文件和目录的权限机制
Linux中的用户
Linux中的用户有三类,分别是:
- 所有者(u)
- 同组用户(g)
- 其他人(o)
如下图所示,假设存在两个组:groupA和groupB,rachel和ross属于组groupA,monica属于GroupB。

如果存在一个文件friends.c,其所有者是rachel,那么,该文件的同组用户(g)是ross,其他用户(o)是monica。需要注意的是在Linux中,存在一个至高无上的用户:root,他默认属于root组。
一个用户可以属于多个组 |
为了后续试验方便,我们按照上图创建groupA和groupB以及属于这两个组的用户:

|
Linux中的权限
Linux中的权限分为3种,分别是读(read)、写(write)和执行(execute),在系统中分别记作:r、w和x,或者用数字表示为4、2和1。
下面我们把用户切换为rachel,在rachel的家目录/home/rachel下用vi命令创建文件纯文本文件friends.c,内容如下:
include<stdio.h> int main() { printf("hello world\n"); }
也可以在桌面环境下使用文本编辑器(ubuntu中默认的是gedit)创建文件,但是很多人都喜欢用vi这个工具,笔者不是很熟,也无法体会vi有多么方便,不过想想拔了鼠标一顿敲键盘确实是XX不二利器啊。另外,如果Linux系统被当做服务器使用,那就没有必要使用desktop版本了,在纯字符环境下难免也要编辑一些文本,所有,vi是必须要了解的,最起码了解一些基本功能,否则会气疯掉的........下面说说vi的基本功能:
更多vi使用方法可以去google搜索,或使用命令man vi 进行查看,以上三步骤仅仅能让编辑者不至于疯掉,还有很多功能呢......
|
创建完毕后使用ls -l 查看着文件的相关权限,如下图所示:

|
请注意上图中被荧光笔标注的“rw-r--r--”。前面说过Linux中的用户分为三类,分别是所有者、同组用户和其他用户。从左往右:“rw-”表示所有者具有读和写的权限;“r--”表示同组用户具有读的权限;第二个"r--"表示 其他用户也具有读的权限。可见“rw-r--r--”可三个三个分为三组,每组的第一个字符表示是否可读(是用“r”表示,否用“-”表示),第二个字符表示是否可写(是用“w”表示,否用“-”表示),第三个字符表示是否可执行(是用“x”表示,否用“-”表示)。第一组表示所有者的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。例如: 一个文件的属性是”rwxrwxrwx“则表示任何人对此文件都有读写执行的权限。
friends.c文件的权限默认属性是:”rw-r--r--“,含义为:rachel(所有者)可以读写这个文件,ross(同组用户)只可以读这个文件、monica(其他用户)也是可以读这个文件,如果将用户切换到ross或者是monica,然后再编辑并保存friends.c文件就会报权限错误的,因为他们没有写的权限。
权限对于文件的意义
- 读:可查看文件的内容
- 写:可修改文件的内容
- 执行:可执行文件
|
现在使用gcc命令编译friends.c文件:gcc friends.c -o friends.out
当前目录下会生成一个friends.out的文件,我们来看看这个文件的属性:

"rwxr-xr-x"表示 rachel可以读、写和执行这个文件;ross可以读、执行这个文件;monic可以读、执行这个文件,用rachel的身份打入如下命令:./friends.out
./ 表示当前目录,其实friends.out本来就在当前目录,但是如果不加./,Linux会去$PATH中找friends.out,结果当然是找不到,这点和windows不一样 |
结果是我们熟悉的hello wolrd

下面我们把执行权限给去掉:chmod u-x friends.out

啊啊啊啊啊,执行不了。
4:r2:w1:x3 = 2 + 1:wx5 = 4 + 1:rx6 = 4 + 2:rw7 = 4 + 2 + 1:rwx
|
权限对于目录的意义
权限对于文件的意义很好理解,但是目录的读、写和执行是怎么回事呢?先来看下/home/rachel这个目录的权限:

同组用户ross对这个目录是没有写权限的,这个意味着什么呢,现在将用户切换到ross,试图在/home/rachel底下用vi创建一个文本文件,果断报错如下:

切换回rachel,执行命令:chmod g+w /home/rachel ,在切换到ross,再试图创建文件。哇塞,成功了。这个例子说明对于目录的写权限,就是指可以对这个目录里面的内容进行删除或创建的操作(或者说更改了目录里的内容)。用类似的方法做实验:
切换回rachel,把ross的读(chmod g-r /home/rachel)权限干掉,再切换到ross,cd到/home/rachel,执行ls,报错:

可见,如果对于一个目录没有读权限,则不能看到这个目录里有什么东西
切换回rachel,把ross的读权限还原,把执行权限干掉(chmod g+r-x),在切换到ross,cd 到/home/rachel........等等,我去,cd命令无法执行了:

可见,如果对一个目录没有执行权限,那么这个目录就不能cd进去,不能作为当前工作目录,如果试图打开、执行里面的文件的话毅然报权限错误(但是能够执行ls /home/rachel命令,因为ross对这个目录具有读权限)
对于目录,总结如下:
- 读:可以查看目录下的内容
- 写:可修改目录下的内容(新增或删除)
- 执行:可将目录作为当前工作目录,可对目录中的文件执行相应的操作(当然,如果对某文件没有读、写或执行的权限,即使对其父目录有执行权限也啥都干不了)
对于目录,要想某用户使用其中的文件,必须要赋予某用户读和执行的权限,但是写权限不能轻易给予,因为对一个目录具有了写的权限意味着可以删除目录中的文件 |
后记
最近开始学习Linux。为了强迫自己使用Linux,把家里的电脑上了Ubuntu。我觉得Windows太好用了,会把人用懒,想必熟练了Linux后对操作系统应该会有一个更加深入的认识,此外,万一哪天想起什么创业点子,也可以使用php、java等免费方案在费用较低的Linxu主机上部署网站之类的,是个省钱的好办法。
本文适合初学者阅读,也希望高手给予点评,不甚感激。
欢迎转载,转载请注明出处
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)