
♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥
♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥
♥♥♥我们一起努力成为更好的自己~♥♥♥
♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥
♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥
✨✨✨✨✨✨ 个人主页✨✨✨✨✨✨
前面的一篇博客,我们已经学习了Linux的一些基础指令,并且理解了什么是操作系统,这一篇博客我们将开启新的篇章------Linux权限,准备好了吗~我们发车去探索Linux的奥秘啦~🚗🚗🚗🚗🚗🚗
目录
Linux文件类型😉
在正式谈Linux权限之前,我们首先来看看Linux文件类型的话题~首先想一想在Windows操作系统中,我们是使用什么来区分文件类型的~
答案是Windows操作系统使用文件名后缀来区分文件类型~
Windows操作系统中文件名后缀(扩展名)用于标识文件的类型和用途。下面是一些常用的文件名后缀及其说明:
-
.exe - 可执行文件:这些文件包含计算机可执行的程序代码。双击此类文件会运行相应的程序。
-
.msi - Microsoft安装程序包:用于安装、更新或删除程序的安装包。
-
.dll - 动态链接库:包含可由多个程序共享的代码和数据的库文件。
-
.sys - 系统文件:通常是设备驱动程序或Windows操作系统核心文件。
-
.bat - 批处理文件:包含一系列命令的文本文件,可通过命令行界面执行。
-
.cmd - 命令脚本文件:类似于批处理文件,用于执行命令序列,主要用于Windows NT系列。
-
.txt - 文本文件:纯文本格式的文件,可以用记事本等文本编辑器查看和编辑。
-
.doc/.docx - Microsoft Word文档:由Microsoft Word创建的文档文件,.docx是较新的格式。
-
.xls/.xlsx - Microsoft Excel电子表格:由Microsoft Excel创建的电子表格文件。
-
.ppt/.pptx - Microsoft PowerPoint演示文稿:由Microsoft PowerPoint创建的演示文稿文件。
-
.pdf - 便携式文档格式:由Adobe开发的跨平台文档格式,用于交换和查看文档。
-
.jpg/.jpeg - 图像文件:常用的图像压缩格式,适用于照片和复杂图像。
-
.png - 可移植网络图形:支持无损压缩和透明度的图像格式。
-
.gif - 图形交换格式:用于简单动画和网页图像的格式。
-
.mp3 - 音频文件:广泛使用的音频压缩格式。
-
.mp4 - 视频文件:常用的视频压缩和播放格式。
-
.zip - 压缩文件:包含一个或多个文件或文件夹的压缩存档,用于节省空间和方便传输。
-
.rar - 压缩文件:另一种压缩格式,由WinRAR软件创建和读取。
-
.ini - 初始化文件:用于存储程序配置信息的文本文件。
-
.log - 日志文件:记录程序或系统活动信息的文件,通常用于故障排查。
Windows操作系统我们经常使用,相信大家也就并不陌生了~
那么Linux是使用什么区分文件类型呢?
Linux区分文件类型,不是使用文件名后缀,而是用文件的属性列区分的!
说明:Linux系统在文件类型的区分上,与Windows系统有着本质的不同。Windows系统主要通过文件名后缀来识别文件类型,而Linux系统则更多地依赖于文件的属性列,通过【ls -l
】/【ll】命令列出的文件信息中的第一个字符来表示(普通文件以"-"表示,是常见的文件类型;目录以"d"开头,代表文件夹;链接文件以"l"开头,指向其他文件或目录;字符设备文件"c"(比如显示器和键盘,不支持随机读取,按照字符为单位)和块设备文件"b"(比如硬盘)分别用于访问字符设备和块设备;"p"表示管道文件用于进程间通信;"s"表示套接口文件用于网络通信。)。尽管Linux不以文件后缀作为区分文件类型的主要依据,但用户仍然可以根据习惯或需要为文件添加后缀,以便更容易地识别文件的内容或用途。然而,在某些特定情况下,如使用某些工具或程序处理文件时,可能需要明确文件的类型(比如gcc编译)。这时,这些工具或程序可能会参考文件的后缀或实际内容来判断。因此,虽然Linux系统本身不依赖文件后缀来区分文件类型,但文件后缀在Linux中仍然具有一定的辅助作用,可以帮助用户更好地管理和识别文件。

补充:在 Linux 系统中,普通文件(Regular File)是指不具有特殊文件类型属性的文件,通常包含 文本、二进制数据、图像、音频、视频、可执行程序、库文件、源代码等各种用户数据。
Linux用户😎
用户类型
前面我们提到了Linux用户包括root用户和普通用户~
在 Linux 系统中,用户是访问和管理系统资源的基本实体。Linux 是一个多用户、多任务的操作系统,意味着它可以同时支持多个用户,并且每个用户可以同时执行多个任务。
简单介绍两个用户类型:
- 超级用户(Superuser)------root :
- 定义:系统管理员账号,拥有最高权限,只有一个
- 权限:可以访问和修改系统中的所有文件和资源,执行任何命令。
- 用途:用于系统管理任务,如用户管理、软件安装、系统配置等。
- 注意:由于权限极高,使用时需格外小心,避免误操作导致系统问题。
- 普通用户(Regular User) :
- 定义:日常使用系统的普通账号。
- 权限:对系统资源和文件的访问受限,只能访问和修改自己拥有的文件和目录,不能直接影响系统核心组件。
- 用途:用于日常任务,如文档处理、编程、上网等。
接下来我们来细细讲解Linux操作系统的用户知识:
用户登录与切换
这一个话题在前面的博客中提到过,我们重新复盘一下:
创建用户
- 使用adduser命令创建新用户(注意:使用root【管理员】账号进行)
- 例如,
adduser xiaodu
会创建一个新用户,但不会自动创建用户的主目录。 - 若要同时创建用户主目录,可以使用
adduser -m username
。

设置密码
- 使用
passwd
命令为用户设置密码。例如,passwd xiaodu
会提示你输入并确认新密码。


修改用户信息
- 使用
usermod
命令修改用户信息。例如,usermod -l newname oldname
可以修改用户名。 usermod -aG groupname username
可以将用户添加到附加组。
删除用户
- 使用
userdel
命令删除用户。例如,userdel username
会删除用户,但不会删除其主目录。 - 若要同时删除用户主目录,可以使用【
userdel -r username
】,我们更加建议使用这一个,避免出现问题~

用户切换
小编这里已经创建了一个xiaodu/username这两个普通用户
接下来就是用户切换问题:
1、普通用户------>超级用户
操作:命令行输入【su root】,输入超级用户密码
效果如下:
回到普通用户:【Ctrl+d】
2、普通用户------>普通用户这里有两种情况
①如果已经知道想登陆的普通用户密码
操作:命令行输入【su 登录用户名】,输入想登陆的普通用户密码
效果如下:
回到原来普通用户:【Ctrl+d】
②不知道想登陆的普通用户密码,但是知道超级用户密码
操作:命令行输入【su root】,输入超级用户密码,再【su 登录用户名】,不需要输入普通用户密码直接登录~
效果如下:
回到原来普通用户:两次【Ctrl+d】
3、超级用户------>普通用户
操作:命令行输入【su 登录用户名】,不需要输入普通用户密码直接登录~
回到超级用户:【Ctrl+d】
事实上,普通用户登录超级用户还有一种方法是命令行输入【su - root】,输入超级用户密码~
接下来,我们进行简单操作对比:

画表对比:
特性 | su root |
su - root 或 su -l root |
---|---|---|
工作目录 | 保持原目录不变 | 切换到 root 的主目录(/root ) |
环境变量 | 继承原用户的环境变量 | 加载 root 的环境变量和配置文件 |
适用场景 | 临时执行命令,保留原环境 | 完全切换到 root 环境,执行系统级任务 |
有些知识比如环境变量后面会进行讲解~
普通用户权限提升
我们知道超级用户拥有最高权限,有些操作普通用户是无法进行的,比如下面尝试将当前目录中的 gol.tx
文件复制到 /usr/bin
目录,但是输出显示了一个错误信息:cp: cannot create regular file '/usr/bin/gol.tx': Permission denied,
这意味着当前用户(普通用户)没有足够的权限将文件复制到 /usr/bin
目录。【通常,/usr/bin
目录需要超级用户权限(root 权限)才能写入】

那么怎么进行普通用户权限提升呢?
操作 :使用 sudo 命令来提升权限

我们发现sudo之后还是不能进行操作,这是因为用户 xiaodu
没有被添加到 sudoers
文件中,因此无法使用 sudo
命令来提升权限~
那么我们就需要把用户 xiaodu
没有被添加到**sudoers 文件(相当于Linux中的用户白名单)**中,怎么操作呢?
操作:找到管理员(超级用户root),将用户
xiaodu
添加到sudoers
文件中~
这个时候普通用户xiaodu就可以使用sudo命令了~


总结 : 默认新增的用户,无法直接执行sudo,新用户不受系统信任!如果想让新用户使用sudo,我们需要找到管理员(超级用户root),将新增的用户添加到 sudoers 文件中~使用sudo也就是对普通用户的权限提升(以root的身份执行命令)~
权限的理论解释😊
我们知道什么是权限?首先来看看权限的本质~
权限的本质
- 公式:权限 = 人(用户) + 事物属性(文件属性)
- 含义:权限取决于「谁要操作」(用户身份)和「操作对象有什么属性」(文件自身的权限设置)。例如,只有文件所有者才能修改文件,而其他用户可能只能读取。
Linux的核心理念
- 「一切皆文件」 :在Linux中,所有资源(如普通文件、目录、硬件设备等)都被抽象为文件。这意味着权限系统统一管理所有资源的访问,包括:
- 普通文件(如文本、图片)
- 目录(文件夹)
- 设备(如硬盘、USB驱动器)
- 网络接口等
文件权限的构成
- 公式:文件权限 = 用户/角色(User) + 文件权限属性(rwx)
- 用户/角色分类:
- 所有者(Owner):文件的创建者,拥有最高权限。
- 所属组(Group):与所有者同组的用户,权限通常次于所有者【有了所属组,可以给组内成员部分权限,而不给其他人(Others)权限】
- 其他用户(Others):既不是所有者也不在所属组中的用户,权限最受限(Others可以是任何人)
- 文件属性(权限类型):
- r(读,Read):允许查看文件内容或列出目录内容。
- w(写,Write):允许修改文件内容或在目录中创建/删除文件。
- x(执行,Execute):允许运行文件作为程序,或进入目录。
重点解释x权限:
一个文件并不是有了x权限就可以执行,可执行文件 = 有可执行权限 + 本身可以执行【两者缺一不可】~也就是说可执行权限和能够执行是两码事~
注意点:在进行角色/身份匹配的时候只会按拥有者,所属组,其他用户的顺序,匹配成功一次确定身份,也就确定了权限~
权限的符号表示
方法一(字母表示)
权限通过 rwx 字母组合表示(-表示没有该权限),例如:
rwxr-xr--
表示(三个为一组):
- 所有者:读、写、执行(rwx)
- 所属组:读、执行(r-x)
- 其他用户:只读(r--)
知道了这些,我们通过命令行输入【ll】显示的文件/目录的详细属性进行解析:

方法二(数字简写表示/八进制模式)
- 数字简写:用数字表示权限(如
755
对应rwxr-xr-x
)- 解释:核心原理是将读(r)、写(w)、执行(x) 三种权限分别映射为数字值,再通过三位八进制数字组合表示权限~
每个权限对应一个二进制位和八进制值:
- 读权限(r) :
4
(二进制100
) - 写权限(w) :
2
(二进制010
) - 执行权限(x) :
1
(二进制001
) - 无权限(-) :
0
(二进制000
)
通过将权限值相加,可组合出任意权限:
rwx
= 4 + 2 + 1 = 7rw-
= 4 + 2 + 0 = 6r-x
= 4 + 0 + 1 = 5r--
= 4 + 0 + 0 = 4- 其他组合同理~
同样三个角色,那么就使用三个数字就可以表示它们的权限了~
例如: 755
对应 rwxr-xr-x
755
对应权限 rwxr-xr-x
:首位 7
(拥有者权限=读+写+执行),中间 5
(所属组权限=读+执行),末位 5
(其他用户=读+执行)
使用数字简写表示就较为方便,用3个数字替代复杂的符号组合~
权限的核心作用
- 访问控制:权限决定了用户能否对文件执行操作(如读取、修改、执行)。
- 安全基础:通过合理分配权限,可以保护系统免受未经授权的访问或恶意操作。
权限的实践操作😍
前面已经提到了权限的一些基础概念,接下来我们来对权限属性进行实践操作~
权限修改
进行权限属性的修改,我们需要使用相关的命令~首先来看看chmod
chmod
语法 :chmod [参数] 权限 文件名
功能 :设置文件的访问权限
常用选项:
R
:递归修改目录文件的权限说明:只有文件的拥有者和root才可以改变文件的权限
修改权限格式:用户表示符 +/-= 权限字符(rwx) :
+
:向用户权限范围增加权限代号所表示的权限-
:向用户权限范围取消权限代号所表示的权限=
:向用户权限范围赋予权限代号所表示的权限用户表示符 :
u
:拥有者g
:拥有者同组用户o
:其它用户a
:所有用户
实际操作:
我们新创建一个testfile.txt来进行测试:

首先我们试一试给拥有者修改权限:

可以看到通过chmod可以给拥有者增加或者删除多个权限,那么再看看其他角色呢?

可以看到进行类似的操作,也可以修改所属组和其他用户的权限,同时如果需要同时修改多个角色权限,可以中间使用【,】进行隔开~
如果对所有的用户/角色进行一样的修改,可以使用用户表示符【a】,例:

除了使用rwx,我们还可以使用八进制模式进行权限修改~
八进制修改权限格式:
chmod 【八进制值】 文件名
例【需要注意的是八进制模式会直接覆盖原有权限,而非增减操作(与符号模式的 +/- 不同)】


chown和chgrp
chown
功能 :修改文件的拥有者
语法格式 :chown [参数] 用户名 文件名
常用选项:-R 递归修改文件或目录的拥有者
chgrp功能 :修改文件的所属组
语法格式 :chgrp [参数] 用户名 文件名
常用选项:-R 递归修改文件或目录的所属组
比如小编当前有username,xiaodu,root三个用户

如果我想把xiaodu账号的testfile.txt文件给username账号,也就相当于修改文件拥有者~
但是当我们操作的时候请求被拒绝~

这是因为就像平时我们给别人东西一样,也需要看对方是否接受,如果接受才可以给对方,还有一种解决办法就是进行权限提升,也就是以root权限强制给别人,我们也就可以使用前面的sudo进行普通用户权限提升~

同样可以进行权限提升修改文件所属组:

修改回去:

除了分别修改以外,还有一种方法可以同时修改拥有者和所属组:
命令行输入:chown 拥有者:所属组 文件名


目录的权限
前面我们都是对普通文件进行操作,那么对于目录这样比较特殊的文件应该怎么操作呢?
进入目录需要的权限
首先我们来看看,我们进入一个目录,需要什么权限呢?我们来实际操作一下:

1、进入一个目录,需要r权限吗?

所以进入一个目录不需要r权限,但是我们可以看到也无法查看目录里面的文件信息。这是因为【 r 权限决定是否允许用户查看执行目录下的文件信息!】
2、进入一个目录,需要w权限吗?

所以进入一个目录不需要w权限,但是我们可以看到不可以在当前目录下新建文件。这是因为【 w权限决定该用户是否可以修改(属性)或者删除/新建执行目录下的文件】
3、进入一个目录,需要x权限吗?
答案应该显而易见了,我们一样实际操作:

所以我们得到答案,进入目录需要x权限~
总结:
权限标识 | 权限名称 | 目录上的核心作用 | 典型场景说明 |
---|---|---|---|
x | 执行权限 | 进入目录的必选条件 (无x权限时,即使有r权限也无法使用cd 命令进入目录) |
必须同时拥有目录的x权限和文件的r权限才能执行文件 |
r | 读权限 | 允许查看目录内文件列表(通过ls 命令) 但无法进入目录或操作文件 |
可列出/etc 目录下的文件,但无法进入该目录修改配置 |
w | 写权限 | 允许在目录内执行以下操作: ✅ 新建文件 ✅ 删除文件 ✅ 重命名文件 ✅ 修改文件属性 | 可在/tmp 目录自由创建/删除临时文件(需配合x权限) |
默认权限
我们可以看到当我们新建一个文件/目录的时候都会有默认的权限,那么这个默认的权限是怎么得到的呢?

Linux文件/目录默认权限生成机制
- 核心规则
- 普通文件 默认起始权限:
666
(rw-rw-rw-
) - 目录文件 默认起始权限:
777
(rwxrwxrwx
) - 最终权限 = 起始权限 & (~umask)
- 普通文件 默认起始权限:
- umask的作用
- 权限掩码:用于过滤掉不需要的默认权限
- 示例:
umask 0002
- 转换为二进制:
000 000 0010
- 过滤规则:移除文件/目录的
其他用户写权限
- 最终权限计算:
- 文件:
666 & ~002 = 664
(rw-rw-r--
) - 目录:
777 & ~002 = 775
(rwxrwxr-x
)
- 文件:
- 转换为二进制:
- 系统差异说明
- 不同Linux发行版默认
umask
值可能不同,小编的Centos的umask值为0002 - 用户可通过
umask
命令查看/修改当前权限掩码
- 不同Linux发行版默认
接下来我们尝试修改权限掩码:

那么如何恢复默认权限掩码呢?
方法一:重新设置为002

方法二:关掉Xshell重新登录
普通用户文件共享😝
普通用户如果需要进行协作,那么有时候我们就需要进行普通文件共享~
这里给出一种方法:使用公共目录实现普通用户文件共享~
首先root账号在根目录下创建一个共享目录:

该目录拥有者和所属组都是root,现在为其他用户增加rwx权限:

那么其他用户就可以在该目录下进行操作,普通用户之间就实现了数据共享:




username为xiaodu.txt
文件其他用户,具有r权限,可以读取文件内容,但是不可以写入~
接下来我们可以看一个神奇的现象:

username作为xiaodu.txt文件其他用户,只具有r权限,但是可以删除xiaodu.txt文件,这是因为
在shared-dir目录下,xiaodu和username都是其他用户,root都给了它们w权限,都可以在该目录下进行文件的新建或者删除~
这样虽然实现了普通用户文件共享,但是也就会存在互删的情况,如果把该目录其他用户权限修改为r-x,那么就没有办法新建文件了,所以为了解决这个问题,就有了粘滞位的概念~
粘滞位
- 作用对象 :仅对目录生效,对文件设置依然可以删除
- 权限逻辑 :
- 当目录设置粘滞位后,只有以下三类用户 可删除/重命名目录内文件:
- 文件所有者
- 目录所有者
- root 用户
- 即使其他用户对该目录拥有写权限(
w
),也无法删除非自身拥有的文件- 典型案例 :
- 系统临时目录
/tmp
默认权限为1777
- 公共共享目录(如多用户协作目录)
实际操作:
bash
//设置方法一(符号设置)
chmod +t directory_name # 启用粘滞位
chmod -t directory_name # 禁用粘滞位
//设置方法二(数字设置)
chmod 1777 directory_name # 设置粘滞位(1xxx)
# 权限解析:
# 第一个数字1表示粘滞位
# 后续777表示传统权限(rwxrwxrwx)

当目录对other有x权限时显示为t,否则显示为T


简单对比:
特性 | 传统权限(无粘滞位) | 粘滞位生效时 |
---|---|---|
目录写权限(w) | 允许删除所有文件 | 仅允许删除自身文件 |
文件删除控制 | 依赖文件所有权 | 强制所有权验证 |
典型应用场景 | 私有目录 | 公共共享目录 |
file指令
file
命令是可以用于检测文件类型 ,它通过分析文件的内容特征(而非仅依赖文件扩展名)来判断文件的实际类型~
使用:


♥♥♥本篇博客内容结束,期待与各位优秀程序员交流,有什么问题请私信♥♥♥
♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥
✨✨✨✨✨✨个人主页✨✨✨✨✨✨