Linux下的权限与文件

系列文章目录

1.Linux系列的第一篇文章:Linux下的常见命令和你所需要知道的小知识


Linux下的权限与文件


前言

为了更好的学习Linux系统,我们必须要讲清楚Linux文件操作的权限。这是我们理解Linux的基石。我将认识我们所使用的软件xshell和文件的权限


一、shell是什么?

1. 1 基本概念:

  1. 翻译:Shell = "壳",内核 = "核"
  2. 作用:接收用户输入的命令,翻译给操作系统内核执行
  3. 位置:用户 ↔ Shell ↔ 内核 ↔ 硬件

在这里我们可以看到shell类似与一个翻译官,来完成我们与Linux系统的对话。当然shell的作用远远不止这么点。

我用的shell软件如下:

1.2 作用:

  1. 什么是bash:
    Bash(Bourne Again SHell)是 Unix/Linux 系统中最流行的命令行解释器(Shell)之一。简单来说,它是一个让你通过输入文本命令与操作系统进行交互的程序
  2. 没有 Xshell:就无法从 Windows 电脑上方便地使用远程 Linux 服务器里的 Bash Shell
  3. 没有 Shell:Xshell 就只是一个空壳,连接后没有任何东西可以执行您的命令

总结:

Shell 是用户与计算机操作系统之间的"翻译官"和"控制台"​------它接收您用键盘输入的命令(比如 ls、cd、vim),将这些人类可读的指令翻译成计算机内核能理解的二进制代码来执行各种操作(如管理文件、运行程序、配置系统等),然后将执行结果以文字形式反馈给您,让您能够通过简单的命令行来完全控制复杂的计算机系统。xhell也是我们控制系统的得力助手。

二、文件的权限

2.1.用户区别:

在Linux下我们有两种用户,一种是root(超级用户),另一种则是普通用户例如我这里的wwh。两种用户的权限大有不同,我们来详细讲一下:

详细对比

方面 普通用户 超级用户 (root)​
权限范围 只能操作自己的文件和有限系统功能 拥有系统完全控制权
命令提示符 $ #
家目录 /home/用户名/ /root/
系统文件 只读,无法修改 可读写修改任何文件
安装软件 无法安装系统级软件 可以安装任何软件
用户管理 只能修改自己密码 可创建/删除所有用户

简单来说:

​普通用户就像小区的普通住户,拥有自己家的钥匙(操作个人文件的权限),可以使用公共设施但无法改动;超级用户(root)则是小区的超级管理员,拥有万能钥匙和所有权限,能修改任何住户的门锁、调整水电系统、甚至拆除重建整个小区。

在我们连接Linux时,我们一般使用普通用户来登录,那么如何切换用户呢?

su 命令:

我们一开始使用的是wwh这个用户,我们尝试改变用户:尝试使用su命令:

bash 复制代码
wwh@iZbp1d5rltw6ubizz031qiZ:~$ su -
Password: 
root@iZbp1d5rltw6ubizz031qiZ:~# 

注意这里的密码是不回显的,我们来看图片:

我们切换到root就可以做一些需要权限大的事情。我们再次切换回去:

使用exit命令:

bash 复制代码
root@iZbp1d5rltw6ubizz031qiZ:~# exit
logout
wwh@iZbp1d5rltw6ubizz031qiZ:~$ whoami
wwh

我们在尝试使用su root,这是注意环境的变化:

我们可以看到root所处的环境是相同的,地址并没有发生变化。

这是下面几个的详细对比:

命令 目标用户 环境变量 工作目录 密码要求 核心特点
susu root root 保持当前用户的环境 保持当前目录 root 用户密码 仅切换用户身份,环境不变
su -su - root root 加载 root 用户的完整环境 切换到 /root root 用户密码 完全登录到 root 用户环境
sudo su - root 加载 root 用户的完整环境 切换到 /root 当前用户密码 通过 sudo 权限切换,无需知道 root 密码
su -c "command" root 取决于是否加 - 保持不变 root 用户密码 临时执行单条命令后自动返回原用户
sudo -i root 加载 root 用户的完整环境 切换到 /root 当前用户密码 功能类似 sudo su -,更直接的 root 登录方式

sudo命令:

sudo是短暂的提权,它可以解决我们很多需要root权限困难:sudo(Superuser Do)是 Linux 系统中一个非常重要的命令,它允许普通用户以超级用户(root)​​ 或其他指定用户的身份执行命令,而无需直接切换到该用户账户。这是一种既安全又灵活的系统权限管理方式。

简单来说:sudo就像一把"特权钥匙"。系统管理员通过配置,可以给普通用户这把钥匙,允许他们临时获得高级权限去执行特定的管理任务(比如安装软件、修改系统配置等)。任务完成后,权限自动收回,这比直接使用 root 用户更安全,因为它遵循了"最小权限原则。

我们来看下面两幅图片就可以看出sudo的主要作用了。


2.2Linux的权限:

在日常的生活中,我们看视频通常需要会员的权限 才能跳过广告,这是生活中的权限。在Linux中:理解 Linux 下的权限系统,是掌握系统安全和多用户管理的关键。它就像一套精细的"文件访问规则",明确规定了谁​(用户)对哪个文件或目录能做什么​(读、写、执行)。

这样我们可以将综上我们可以得出: 权限 = 角色 + 目标属性

在我们 Linux 中,我们一切皆文件。我们文件无非具备读、写、执行三个属性。

2.2.1.权限角色:

Linux 为每个文件或目录的权限定义了三个作用对象,常被称为"权限三元组":

  • 所有者 (Owner, u): 文件或目录的创建者,通常拥有最高的控制权。
  • 所属组 (Group, g): 文件或目录所属的用户组,组内成员共享此权限。
  • 其他用户 (Others, o): 既不是所有者,也不在所属组中的任何其他用户。

同时系统会按照 ​所有者 → 所属组 → 其他用户​ 的顺序匹配当前操作的用户身份,且一旦匹配成功,便不再继续向后验证。这意味着,一个用户即使同时属于多个组,他对一个文件的有效权限也仅由其最先匹配到的身份决定。这句话非常重要,对我们后面的理解有巨大的帮助。

其中红线标的就是所属组,组内成员共享:

其中蓝线标的就是所有者,我们可以看出这篇文章他的所属组和所有者都是wwh。上面没有出现 other,其实我们 other 不需要记录,不是拥有者和所属组,那就是 other 了。我们的 other 是非常多的,所以就没记录下来。

放开 other权限​:相当于把文件放在公司大堂的公告板上,谁都能看。

​使用 所属组​:相当于把文件锁进只有你们项目组成员有钥匙的保密柜,实现了精准、安全的团队协作。这就是所属组的作用。

2.2.2 文件的权限:

先看图片:

在所有者的前面就是就是文件的能做的事情了。这里可以文件可以被读(read)r,写(write)w,执行(Execution)x,我们来详细看看:

这里绿色圈出来的是文件类型,其中d是目录,-是普通文件。

这里圈出来的是所有者的权限,对应的位置是rwx,如果所有的权限都有就是rwx,比如所有者不具有读的权限就变成了-wx,即每个权限位置是固定的,如果有就写权限,没有则为-。

同理我们也可以做出以下划分,依次是所有者,所属组,其他组的各自的权限,其中wwh既是所有者,也是所属者,但是在这里我们用所有者的权限来看。这是上面讲过的(同时系统会按照 ​所有者 → 所属组 → 其他用户​ 的顺序匹配当前操作的用户身份,且一旦匹配成功,便不再继续向后验证)。

那么目录呢,其中我们来详细的对比以下吧:

权限维度 具体分类 核心含义
做什么 (rwx)​ 读 (r )​ 查看文件内容 (cat)、列出目录内容 (ls)
写 (w)​ 修改文件内容、在目录内创建/删除/重命名文件
执行 (x)​ 运行程序脚本、进入目录 (cd)
对谁做 (所有者)​ 所有者 (u)​ 文件/目录的创建者,拥有最高权限
所属组 (g)​ 与文件所有者属于同一组的用户,共享权限
其他用户 (o)​ 系统内除所有者和组员外的其他所有用户

这张表格也可以看出对于目录和文件是不一样的,比如x是进入目录里面,r则是列出目录的内容。w则比较好理解:在目录内创建/删除/重命名文件。

以下是两个的详细对比:

2.2.3 改变权限:

在我们理解了权限,我们便可以改变权限,来完成工作的要求。我们应该使用什么命令来完成权限的改变呢?

chmod 命令

  • 功能:设置文件的访问权限
  • 格式:chmod [参数] 权限 文件名
  • 说明:只有文件的拥有者或 root 才可以改变文件的权限。(root是老大当然可以改变)

原本code1.exe是不能执行的,这是因为我执行了下面的命令:

bash 复制代码
wwh@iZbp1d5rltw6ubizz031qiZ:~/classBox$ chmod u-x code1.exe # 改变
wwh@iZbp1d5rltw6ubizz031qiZ:~/classBox$ ll
total 40
drwxrwxr-x 3 wwh wwh  4096 Oct 15 19:12 ./
drwxr-x--- 7 wwh wwh  4096 Oct 15 19:12 ../
drwxrwxr-x 2 wwh wwh  4096 Oct 15 18:53 code/
-rw-rw-r-- 1 wwh wwh   232 Oct 15 19:12 code1.cpp
-rw-rw-r-- 1 wwh wwh 21304 Oct 15 19:12 code1.exe
-rw-rw-r-- 1 wwh wwh     0 Oct 15 18:53 code2.cpp
wwh@iZbp1d5rltw6ubizz031qiZ:~/classBox$ 

恢复则使用:

bash 复制代码
wwh@iZbp1d5rltw6ubizz031qiZ:~/classBox$ chmod u+x code1.exe # 改变权限
wwh@iZbp1d5rltw6ubizz031qiZ:~/classBox$ ll
total 40
drwxrwxr-x 3 wwh wwh  4096 Oct 15 19:12 ./
drwxr-x--- 7 wwh wwh  4096 Oct 15 19:12 ../
drwxrwxr-x 2 wwh wwh  4096 Oct 15 18:53 code/
-rw-rw-r-- 1 wwh wwh   232 Oct 15 19:12 code1.cpp
-rwxrw-r-- 1 wwh wwh 21304 Oct 15 19:12 code1.exe*
-rw-rw-r-- 1 wwh wwh     0 Oct 15 18:53 code2.cpp
wwh@iZbp1d5rltw6ubizz031qiZ:~/classBox$ 

当⼀个目录被设置为 " 粘滞位 "(用 chmod + t),则该目录下的文件只能由

  • 超级管理员删除
  • 该目录的所有者删除
  • 该文件的所有者删除
  • 我们粘滞位只能给需要共享的目录添加。

我们还可以使用另一种改变权限的方法:我们注意观察到:

如果1表示有这个权限,那么对于r--则是100,rw-则是110,rwx则是111,分别为:4,6,7,此时我们可以想到这样的改变权限:

我们通过设置也取消了code1.exe的权限。我们来重新完成恢复这个问题:

bash 复制代码
drwxrwxr-x 3 wwh wwh  4096 Oct 15 19:12 ./
drwxr-x--- 7 wwh wwh  4096 Oct 15 19:12 ../
drwxrwxr-x 2 wwh wwh  4096 Oct 15 18:53 code/
-rw-rw-r-- 1 wwh wwh   232 Oct 15 19:12 code1.cpp
-rw-rw-r-- 1 wwh wwh 21304 Oct 15 19:12 code1.exe
-rw-rw-r-- 1 wwh wwh     0 Oct 15 18:53 code2.cpp
wwh@iZbp1d5rltw6ubizz031qiZ:~/classBox$ chmod 764 code1.exe
wwh@iZbp1d5rltw6ubizz031qiZ:~/classBox$ ll
total 40
drwxrwxr-x 3 wwh wwh  4096 Oct 15 19:12 ./
drwxr-x--- 7 wwh wwh  4096 Oct 15 19:12 ../
drwxrwxr-x 2 wwh wwh  4096 Oct 15 18:53 code/
-rw-rw-r-- 1 wwh wwh   232 Oct 15 19:12 code1.cpp
-rwxrw-r-- 1 wwh wwh 21304 Oct 15 19:12 code1.exe*
-rw-rw-r-- 1 wwh wwh     0 Oct 15 18:53 code2.cpp
wwh@iZbp1d5rltw6ubizz031qiZ:~/classBox$ 

通过上面的对比我们也可以看出不同的点。但是也引出了一个问题为什么我们设置的普通文件时664,不是777,这里我们将引出掩码umask。我们来详细谈谈:

我们可以看到我们是这个时0002,这个该怎么计算呢?

计算规则​:​最终的默认权限 = 最大权限 & (~umask)​​ 。这里的 &是按位"与"运算,~是取反操作。这意味着 umask 值中为 1 的位,会在最终权限中被"屏蔽"或移除。比如002是:000,000,010,我们取反,变成111,111,101,这里再按位与则是110,110,100,变成了rw-rw-r-- 。

bash 复制代码
  110 110 110  (文件最大权限 666)
& 111 111 101  (~umask 002)
-------------------------
  110 110 100  (计算结果)

chown 命令:

  • 功能:修改文件的拥有者
  • 格式:chown [参数] 用户名 文件名


bash 复制代码
drwxrwxr-x 3 wwh  wwh  4096 Oct 15 19:12 ./
drwxr-x--- 7 wwh  wwh  4096 Oct 15 19:12 ../
drwxrwxr-x 2 wwh  wwh  4096 Oct 15 18:53 code/
-rw-rw-r-- 1 wwh  wwh   232 Oct 15 19:12 code1.cpp
-rwxrw-r-- 1 wwh  wwh 21304 Oct 15 19:12 code1.exe*
-rw-rw-r-- 1 root wwh     0 Oct 15 18:53 code2.cpp
wwh@iZbp1d5rltw6ubizz031qiZ:~/classBox$ sudo chown wwh code2.cpp
wwh@iZbp1d5rltw6ubizz031qiZ:~/classBox$ ll
total 40
drwxrwxr-x 3 wwh wwh  4096 Oct 15 19:12 ./
drwxr-x--- 7 wwh wwh  4096 Oct 15 19:12 ../
drwxrwxr-x 2 wwh wwh  4096 Oct 15 18:53 code/
-rw-rw-r-- 1 wwh wwh   232 Oct 15 19:12 code1.cpp
-rwxrw-r-- 1 wwh wwh 21304 Oct 15 19:12 code1.exe*
-rw-rw-r-- 1 wwh wwh     0 Oct 15 18:53 code2.cpp

我们就改变了所有者。

同理也就有了chgrp

  • 功能:修改文件或目录的所属组
  • 格式:chgrp [参数] 用户组名 文件名
  • 常用选项:-R 递归修改文件或目录的所属组

总结

这篇文章将讲清楚Linux的权限和角色,可以很大的帮助我们完成对系统的学习。

相关推荐
ggaofeng5 小时前
linux中mount的本质是什么?自己如何实现一个伪文件系统
linux·mount·自己实现伪文件系统
敲上瘾5 小时前
Linux系统C++开发环境搭建工具(二)—— etcd 使用指南
linux·c++·etcd
励志不掉头发的内向程序员5 小时前
【Linux系列】解码 Linux 内存地图:从虚拟到物理的寻宝之旅
linux·运维·服务器·开发语言·学习
Fuly10245 小时前
使用docker本地部署dify
运维·docker·容器
woshihonghonga6 小时前
停止Conda开机自动运行方法
linux·人工智能·conda
遇见火星9 小时前
Ubuntu Docker 容器化部署教程
linux·ubuntu·docker
ybb_ymm10 小时前
mysql8在linux下的默认规则修改
linux·运维·数据库·mysql
半梦半醒*10 小时前
zabbix安装
linux·运维·前端·网络·zabbix
Panda__Panda11 小时前
docker项目打包演示项目(数字排序服务)
运维·javascript·python·docker·容器·c#