第6章:文件权限

一、文件权限概述

Linux为了保证系统中每个文件的安全,引入了文件权限机制。针对于系统中的每一个文件Linux都可以提供精确的权限控制。它可以做到不同的用户同一个文件具有不同的操作权利。而通常这个权利包括以下3个:

  • 读的权利(Read,简称r)

  • 写的权利(Write,简称w)

  • 执行的权利(eXecute,简称x)

具体的权限值:rwx(读、写、执行)。这个我们已经知道了。但是上面还提到了"不同的用户 对同一个文件可以有不同的权限"中"不同的用户"指的是哪些用户呢?所以这个文件的用户也是包括3类用户:

  • 文件拥有者(User,简称U):该文件的创建人

  • 同组用户(Group,简称G):和创建人在同一组的用户

  • 其他组用户(Other,简称O):和创建人不在同一组的用户

这就是非常著名的UGO模型。也就是说一个文件的权限包括三组:

  • 第一组U:我们可以给文件的创建者设置rwx权限。

  • 第二组G:我们可以给文件创建者的同组人员设置rwx权限。

  • 第三组O:我们可以给和文件创建者不在同一组的人员设置rwx权限。


linux操作系统当中,可执行文件的扩展名一般叫做:xxx.sh

windows操作系统当中,可执行文件的扩展名一般叫做:xxx.exe


二、查看文件权限

采用"ls -l"命令可以查看文件的具体权限,如下:

权限信息在哪里呢?看下图:

每一个文件或目录采用ls -l查看之后,第一个字段描述了文件类型+文件的权限。第一个字段共10个字符:

  • 第1个字符:代表文件的类型,- 代表文件,d代表目录

    • 其实Linux中文件的类型有7种:

        • 代表普通文件
      • d 代表目录

      • l 代表链接(软链接:快捷方式)

      • b 块设备(硬盘,软盘等存储设备)

      • c 字符设备(通常以字节流的方式访问)

      • p 管道文件(主要用于进程间通讯)

      • s 套接字文件(主要用于网络通讯)

  • 第2,3,4个字符:代表文件创建者对该文件的权限。

  • 第5,6,7个字符:代表与文件创建者在同一组的用户对该文件的权限。

  • 第8,9,10 个字符:代表其他组人员对该文件的权限。

关于文件权限的9个字符中包含四种字符,分别是:r、w、x、-,他们代表什么含义:

  • r:读权限

  • w:写权限

  • x:执行权限

  • -:无权限

三、基于UGO设置文件权限

修改权限的命令是chmod,如果采用UGO方式修改权限的话,大致语法是这样的:

给同组人员添加写权限

复制代码
chmod g+w Hello.java

给同组人员和其他人员添加写权限

复制代码
chmod g+w, o+w Hello.java

删除同组人员和其他人员写的权限

复制代码
chmod g-w, o-w Hello.java

四、基于421设置文件权限

421采用数字来表示不同的权限。

  • 4代表读

  • 2代表写

  • 1代表执行

例如:如果让一个用户读、写、执行权限都有的话,就是4 + 2 + 1 = 7,那么7这个数字就代表rwx的权限都具备。如果是5就表示4+1的组合,表示有r和x的权限。如果是6就表示4+2的组合,表示有r和w的权限。如果是0就表示无任何权限。 通过421这几个数字的不同组合来表示不同的权限,那么它有多少种不同的组合呢:

  • 0:无权限

  • 1:x

  • 4:r

  • 5:r + x

  • 6:r + w

  • 7:r + w + x

也就是说一共6个数字:0 1 4 5 6 7 那么采用421方式设置权限应该怎么做呢,比如:如何给文件拥有者设置权限,如何给同组人员设置权限,如何给其他组人员设置权限?语法是这样的:

复制代码
chmod 三个数字 文件名

五、chown修改文件拥有者

在 Linux 中,可以使用 `chown` 命令来修改指定文件或目录的拥有者和所属组。`chown` 命令的基本语法如下:

复制代码
chown [选项]... [所有者][:[所属组]] 文件...

其中,所有者所属组 可以是用户名或用户 ID、组名或组 ID,如果省略 :所属组,则默认为修改文件的所有者。

下面是一些常用选项:

  • -R:递归修改,包括子目录和文件。

例如,将 /home/user/file.txt 文件的所有者修改为 root 用户,可以使用如下命令:

复制代码
sudo chown root /home/user/file.txt

/home/user/dir/ 目录及其子目录和文件的所有者都修改为 userA 用户,所属组修改为 groupA 组,可以使用如下命令:

复制代码
sudo chown -R userA:groupA /home/user/dir/

注意,在使用 chown 命令时,需要有足够的权限才能修改文件或目录的拥有者和所属组。一般需要使用 sudo 命令或使用具有相应权限的用户来执行。

相关推荐
拾光Ծ4 分钟前
【Linux】“ 权限 “ 与相关指令
linux·运维·服务器
歪歪1005 分钟前
React Native开发有哪些优势和劣势?
服务器·前端·javascript·react native·react.js·前端框架
硬核子牙7 分钟前
调试器是怎么让代码停下来的
linux
To_再飞行8 分钟前
Linux Bash(一)
linux·运维·服务器·bash
我狸才不是赔钱货10 分钟前
DevOps:打破开发与运维之间的高墙
运维·vscode·docker·devops
LCG元21 分钟前
保姆级教程:CentOS 7/8 部署Nginx + MySQL + PHP(LEMP)环境,从零开始到上线项目
linux
疯癫的老码农32 分钟前
【Linux环境下安装】SpringBoot应用环境安装(五)-milvus安装
linux·spring boot·milvus
孤廖43 分钟前
C++ 模板再升级:非类型参数、特化技巧(含全特化与偏特化)、分离编译破解
linux·服务器·开发语言·c++·人工智能·后端·深度学习
油条不卖1 小时前
本地window10同步ubuntu上conda指定环境,并在C#项目中通过Python.NET调用自定义python接口
linux·ubuntu·conda
文火冰糖的硅基工坊1 小时前
[人工智能-大模型-9]:大模型十大应用场景和对应的代表性的产品?
服务器·人工智能·大模型