【看表情包学Linux】shell 命令及运行原理 | Linux 权限 | 文件权限的修改和转让 | 目录的权限 | Sticky bit 粘滞位(一)

简介: 本章我们将重点讲解 Linux 权限,这是 Linux 基础部分中非常重要的一部分。内容比较干,我会稍稍正经些去讲解。话不多说,我们直接切入正题。

💭 写在前面


本章我们将重点讲解 Linux 权限,这是 Linux 基础部分中非常重要的一部分。内容比较干,我会稍稍正经些去讲解。话不多说,我们直接切入正题。

Ⅰ. shell 命令及运行原理


0x00 什么是 shell

严格意义上说的是一个操作系统,我们称之为 ——  (核心),


但我们一般用户,是不能直接使用  的,而是通过  的 "外壳" 程序,


也就是所谓的  ,来与  进行 "沟通 " 。


中, 就是命令行解释器(command Interpreter),其主要包含:


① 将使用者的命令翻译给  处理。  ② 同时将  的处理结果翻译给使用者。


 中, 就是    (图形化界面),


我们操作  也不是直接操作  内核的,


而是通过图形接口,点击从而完成我们的操作,所以其实也是一个外壳程序。


对于 ,有相同的作用,主要是对我们的指令进行解析,


解析指令给  内核。反馈结果在通过内核运行出结果,通过  解析给用户。


0x01 shell 的意义

❓ 思考:为什么不能直接使用 ,而是要通过 ?


① 降低操作 OS 的成本:用户不善于和内核沟通,需要通过外壳来做解释。


②  保护操作系统:外壳的存在让内核不会暴露给用户,用户所有的非法、不合理操作会直接被外壳拦住,某种意义上来说是对操作系统的一种保护。


我们通常采用的命令行解释器,命令并不是 而是 bash,


它是存在于 /usr/bin 目录下的一个可执行文件:

4b79270e5888d46114cf5cb4ffa80e02_f8452a21691f4a0389dff2a371d51963.png


我们的  常用的命令行解释器(shell),叫做 bash。


他们两个之间有什么关系呢?  是所有解释器的统称,bash 是具体的一款解释器。


bash 属于  中的一种,常见的  工具:sh、bash、csh、tcsh、ash 等。


它们的关系就像是 Linux 和 Centos7.6 的关系,一个是统称的,一个是具体的。


Ⅱ. Linux 权限


0x00 Linux 具体用户的分类

Linux 的用户分为 root 和普通用户,root 为超级用户,就像 Windows 系统中的管理员。


超级用户:可以在 Linux 系统下做任何事情,不受限制。

普通用户:在 Linux下做有限的事情。

超级用户的命令提示符是 # ,普通用户的命令提示符是 $ 。

💭 确认当前你是哪个用户,可以输入 whoami 指令:


whoami

6931d0a56879ebff939b14363d7f92cf_0983aae35a0246208cc1b5fd4b07957e.png


💭 我们当前是普通用户,如果想切换至 root 用户,我们可以输入 su -


su -

affdd2e079460f6837a6146f0a66a765_7ffb356716b04053bfb7956f4960c689.png


root 和 Linux 下任何一个用户,都要设置密码。


建议不要把 root 密码和普通用户的密码设置成一样的! 这不仅是出于安全角度,


设置成一样的话现阶段容易搞混,你不知道什么时候要输的是什么密码。


这里我们要切到 root,所以输入的是 root 的密码:

fe63b0f31ac5b734ee252c3d988c0cba_d73291d16e764acf9f906da07153d393.png

(输入密码时是不回显的,并不是没输进去)


💭 实操:当我们 su - 并输入正确的密码后,就可以完成用户的切换操作:

$ su -
Password:

30f6c8fbdf5395f6c254381e3d6f40ee_c6462178f78a4e5ba185e1738fe426dd.png

在 root 用户下,想要切到普通用户甚至连密码都不需要输:


# su [用户名]

6cb933859652677e3a794eb7699d0d93_1489d09674e842c69fe687b50dc5964a.png

当然,如果你是普通用户想切换到另一个普通用户,当然还是需要输入密码的。


$ su [用户名]
Password:

root 什么身份都可以切,切到你账户删库跑路记录的还是你账户自己删的。


即便是不切,通过 root 拿你数据库的 "私♂密♂数♂据", 多危险!由此可见 root 账号非常重要!


root 密码一定不能设置的太简单!设置的太简单,就相当于是 "裸奔" !


0x01 Linux 中文件相关的权限概念

当我们输入 ls -l 显示详细信息时,你有没有注意过这些信息?

9d463f9db41855f02a76b7d55e1cd0fc_4d1ef431b7ab4960a37440fef96ca0f1.png

通过 ls -l 显示出来的是 文件的属性,而用过 cat 看到里面的是 文件的内容。

83cae6bef5687bf874b9e30a91cd183a_36c554ffa4d044bd8372eb799b6986e8.png


0x02 文件类型

我们既然要学习权限,我们重点要理解 ls -l 显示的若干的字母组合。


-rw-rw-r--
drwxrwxr-x

第一列的第一个字符,叫做 "文件类型" 。


Linux 中不是以文件名后缀区分文件类型的,而是通过 ls -l 显示的第一个字符区分文件类型的。


这有点颠覆我们的直觉,因为我们 Windows 是文件末尾 [ .类型 ] 的格式去区分文件类型:

bdece882eaf497c0d803bd3b67ab1ab1_1fedeccf68a24bc9bb6f5a494d16b716.png


而在 Linux 下你跟我说文件类型跟后缀没有关系?!我们验证一下看看:

37f0acd2703bb060510d677de43d3c65_2404d3bb2dcd4215a8656875b3e51694.png


在我们 Windows 下,这里的 a.txt 这就是一个文本,但是在 Linux 是完全不关心你后缀是什么的。


Linux 的文件后缀纯属摆设,我们写后缀只是是为了给自己看的。


📚 概念:Linux 是根据第一列第一个字符去区分文件的类型的。


- 普通文件,文本、源代码、可执行文件、第三方动态库等。

  目录文件

   链接文件(比如快捷方式)

  管道文件

  块设备文件,磁盘

   字符设备文件

📌 注意事项:


既然 Linux 文件后缀纯属摆设,那我们把 test.c 改成 test.txt,然后用 gcc 编译可以吗?

0b2fba6db8700ab6ff1ca767c18bde68_7f8fc7044679439bb64e82359f2a16cf.png

 ( 絕對不可以!)


虽然 Linux不以文件名后缀区分类型,但是 Linux 并不排斥以后缀做文件类型。


0x03 基本权限

❓ 思考:什么是权限?


① 约束人的(对人进行分类)


② 需要对应的事物具有特定的属性


Linux 上,对文件的权限:


这个文件谁能访问?这个文件谁不能访问?


对应的文件应该具备的某种属性:r,w,执行 x

bb54f6101a4a1234e5731de13e8c67cb_3be6ba9589274233ba53cd8718edae4d.png

所以权限的概念以及操作都是围绕人和概念的属性展开的。


在 Linux 系统中,人分三类:


① 文件的拥有者 owner     ② 文件的所属组 grouper       ③ 文件的其他用户 other


Linux 系统中文件的权限属性分为 r(读)、w(写)、x(可执行)。

b213c931740462d66d5b9b424ff0eaea_5a3f07e70dc8448b8085021ba7161cd7.png

root 和普通用户都可称为文件的拥有者、所属组、其他用户,他们并不冲突,反而是相互补充的。


每一组,对应的权限的为止含义是确定的。

e484e68eb8913fcdfbc8f0b7b2e05b06_ce2dc8be604e482d9b5455524bdf0ad4.png

那么文件的权限操作,应该涉及到几方面呢?  ① 修改文件的属性    ② 修改人


0x04 文件权限值的表示方法

📚 字符表示方法:

Linux 表示 说明 Linux 表示 说明
只读 仅可写
仅可执行 可读可写
可写可执行 可读可执行
可读可写可执行 无权限

只需要搞明白 r w x - 这四个字符分别代表说明意思,就能轻松理解。


📚 八进制数值表示方法:推荐使用 👍


权限符号(读写执行)
4 100
2 010
1 001
6 110
5 101
3 011
7 111
- - - 0 000

(利用八进制数值进行操作,用起来会非常的方便,等下面讲完文件的修改操作后再详细讲解)


0x05 file 指令

❓ 思考:如何区分一个文件?

ff92564453b924b925d9e424efa1546a_7b283d2374ee4ea68a20ce5641cc33c0.png

显然这一串信息是无法满足我们了,我们还有一个专门用来辨识文件类型的指令 —— file 指令。


file [选项] 文件或目录

🔨  功能:辨识文件类型


📜  常用选项:


-c  详细显示指令执行过程,便于排错或分析程序执行的情形。

-z  尝试去解读压缩文件的内容。

💭 操作演示:file

f5630895dcfaebf11e955a2be02aad0d_70eb62b0e3fd41ac9699eeb1a704a1ae.png


Ⅲ. 文件权限的修改


0x00 chmod 指令

chmod [参数] 权限 文件名

🔨  功能:设置文件的访问权限


📜  常用选项:


R -> 递归修改目录文件的权限。

说明:只有文件的拥有者和root才可以改变文件的权限。

chmod 命令权限值的格式:


① 用户表示符+/-=权限字符


+  向权限范围增加权限代号所表示的权限

-   向权限范围取消权限代号所表示的权限

=  向权限范围赋予权限代号所表示的权限

用户符号:  


u:拥有者

g:拥有者同组用

o:其它用户

a:所有用户

比如:

# chmod u+w /home/abc.txt
# chmod o-x /home/abc.txt

看蒙了也没关系,我们直接看操作演示,会轻松很多:


💭 操作演示:去掉某身份的权限

e7f579ec9133317c3e51d9bafaa28f15_a055c3cf87c3462d8be098af735c4e90.png


如果我想去掉某身份的读权限,我们可以:


chmod [分类]-[权限] {文件名]     # 去除权限

9c2ed70aa82633d82e7df9ea9d7d7512_2334402d46eb430a8839844e62d2174a.png

好,现在拥有者、所属组和 other 都没有读的权限了。


我们可以给让它们把读权限加回去吗?当然可以:


chmod [分类]+[权限] {文件名]     # 添加权限

237695eece261e94785b2dd2f6139102_d0e8c087b496425bb01e0983c4458146.png


0x01 指令的复合使用

当然,还允许复合使用:

c40596894134b6f0e8a902e64e293664_fca34194d98b4eb29a970e0b14c7d991.png


0x02 root 用户不受权限约束

当你什么权限都没有时,会受到种种限制:

6eb6a60f1f7bc8c80b9c0e4ac688e312_5323662ce1e64435ab474d8961080063.png


然而这些限制对至高无上的 root 来说,并没有什么卵用:

d58ce8f0d8e9cd349cdd2b3390af52b5_26ca8a8dd62b47e1b454787c9dd3bac7.png


0x03 八进制数值表示方法

讲完权限的修改了,我们再回到 Ⅱ.0x04  继续探讨 "八进制数值表示方法"。


权限符号(读写执行)
4 100
2 010
1 001
6 110
5 101
3 011
7 111
- - - 0 000

任何一个八进制数(0~7)都可以被写成三个比特位,这三个比特位壹壹和每一类人对应。


我们有三类人,则需要3个八进制数与之对应,所以就有了 777、000、333 等更改权限的方案。


譬如  的 - - - 分别对应   ,有或者无(两态),111 → 八进制 → 7。


→ 5 → 101 → ,原理是将八进制看作成二进制,对应上我们的权限。


💭 用法演示:八进制数值表示方法

a40d76bc3b18893767d0a48c597bf40c_872528454a604f5ebc148b3877b7a412.png

相关文章
|
网络协议 Shell 网络安全
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
“说说看,如果一个Pod的容器没有Shell,如何测试它能否访问外网?”
面试官想听的不仅是命令——如何结构化回答“容器无Shell时如何测试外网”?
|
11月前
|
存储 Unix Shell
Shell 输出命令完全指南:echo 与 printf 的深度剖析
本文深入解析了 Shell 编程中 `echo` 和 `printf` 两个核心输出命令的用法与区别。`echo` 简单易用,适合基础输出;`printf` 功能强大,支持复杂格式化。文章从语法、转义序列、高级技巧到实际应用场景(如日志记录、进度显示)逐一讲解,并对比两者的性能与适用场景,帮助开发者根据需求灵活选择。最后通过进阶技巧和常见问题解答,进一步提升对两者的掌握程度。
651 1
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
438 20
|
6月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
591 9
|
6月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
596 2
|
9月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
344 60
|
12月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
6月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
8月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
1030 1
|
10月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
403 17