Loading [MathJax]/jax/input/TeX/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【Linux系统编程】——探索Shell:工作原理与运行机制以及Linux的权限管理

【Linux系统编程】——探索Shell:工作原理与运行机制以及Linux的权限管理

作者头像
用户11286421
发布于 2025-05-19 00:30:44
发布于 2025-05-19 00:30:44
620
举报
文章被收录于专栏:学习学习

1. 什么是 Shell?

Shell 是一种命令行解释器,用于解析和执行用户输入的命令。它既是用户与操作系统内核之间的接口,也是强大的脚本编程语言。Shell 可以帮助用户快速完成系统管理、文件操作等任务,大大提高效率。

常见的 Shell 类型包括:

Bash (Bourne Again Shell):最广泛使用的 Shell,功能丰富,支持命令补全和历史记录。 Zsh (Z Shell):支持语法高亮、自动补全,受到开发者喜爱。 Ksh (Korn Shell):功能强大,兼具交互和编程功能。 Fish (Friendly Interactive Shell):用户友好,适合初学者。 每种 Shell 都有其独特的特性,用户可以根据需求选择适合的 Shell。

2. Shell 的工作原理

Shell 的工作流程如下:

读取输入:等待用户输入命令。 解析命令:解析输入,检查命令的语法。 查找命令:判断命令是内置还是外部命令。内置命令直接执行,外部命令则在 PATH 环境变量中查找。 执行命令:将命令传递给内核执行。 返回输出:返回执行结果或错误信息。

这种流程使 Shell 高效地处理单个命令或复杂的命令组合,便于用户控制系统。

3. Shell 的运行机制

Shell 的运行机制支持多种操作和功能:

环境变量:Shell 使用环境变量(如 PATH 和 HOME)来存储系统配置和用户信息,这些变量在命令执行和脚本编写中起着重要作用。

重定向和管道:Shell 通过重定向 (> 和 <) 和管道 (|) 实现数据流管理。重定向用于将命令的输入或输出保存到文件,管道则可以将一个命令的输出作为下一个命令的输入,例如 ls | grep “.txt” 查找以 .txt 结尾的文件。

任务控制:Shell 支持多任务处理,用户可以通过 & 将任务放到后台执行,使用 jobs 查看任务状态,fg 和 bg 切换任务的前后台状态。

内置和外部命令:Shell 的一些基本命令是内置命令(如 cd、echo),不需要外部程序。外部命令则需要在系统路径中查找并执行。

脚本执行:Shell 脚本是包含一系列命令的文本文件,可以自动化执行多个操作。用户可以通过脚本实现批量任务,避免手动重复执行。

4. Shell 的应用场景

Shell 是一种高效的工具,主要应用于以下场景:

系统管理:管理员可以使用 Shell 脚本执行日常系统维护任务,如清理日志、备份数据和用户管理等。Shell 提供了自动化操作和批量处理的能力,使得系统管理更加便捷。

自动化任务:Shell 脚本能够自动化重复性任务,例如文件处理、数据备份、定时执行等。将多条命令组合在一起形成脚本,可按计划执行,大幅节省时间。

数据处理:Shell 支持 grep、sed、awk 等强大的文本处理工具,适合快速处理大规模文本数据。

软件开发:开发者可以编写 Shell 脚本来自动化项目构建、测试和部署流程。例如,编写一个 Shell 脚本来拉取代码、编译、运行测试并部署到服务器上。

5. Shell 脚本的优缺点

优点:

易学易用,适合快速任务自动化。 内置丰富的工具,支持管道操作。 无需编译,直接解释执行,适合轻量级任务。

缺点:

性能较低,不适合复杂的计算任务。 语法较宽松,容易引入错误,调试较为复杂。 缺少强类型检查,处理复杂数据结构较困难。

Linux权限的概念

Linux下有两种用户:超级用户(root)、普通用户。

  • 超级用户:可以再linux系统下做任何事情,不受限制
  • 普通用户:在linux下做有限的事情。
  • 超级用户的命令提示符是“#”,普通用户的命令提示符是“$

命令:su [用户名] 功能:切换用户。 例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令。

Linux权限管理

  1. 文件访问者的分类(人) 文件和文件目录的所有者:u—User(中国平民 法律问题) 文件和文件目录的所有者所在的组的用户:g—Group(不多说) 其它用户:o—Others (外国人)
  2. 文件类型和访问权限(事物属性)

基本权限

  • 读(r/4):Read对文件而言,具有读取文件内容的权限;对目录来说,具有浏览该目录信息的权限
  • 写(w/2):Write对文件而言,具有修改文件内容的权限;对目录来说具有删除移动目录内文件的权限
  • 执行(x/1):execute对文件而言,具有执行文件的权限;对目录来说,具有进入目录的权限
  • “—”表示不具有该项权限

文件权限值的表示方法

  • 字符表示方法

Linux表示

说明

Linux表示

说明

r–

仅读

-w-

仅写

–x

仅可执行

rw-

可读可写

-wx

可写可执行

r-x

可读可执行

rwx

可读可写可执行

无权限

  • 8进制数值表示方法

权限符号

八进制

二进制

r

4

100

w

2

010

x

1

001

rw

6

110

rx

5

101

wx

3

011

rwx

7

111

0

000

文件访问权限的相关设置方法

chmod 功能:设置文件的访问权限 格式:chmod [参数] 权限 文件名 常用选项:

  • R -> 递归修改目录文件的权限
  • 说明:只有文件的拥有者和root才可以改变文件的权限

chmod命令权限值的格式 用户表示符+/-=权限字符

  • +:向权限范围增加权限代号所表示的权限
  • -:向权限范围取消权限代号所表示的权限
  • =:向权限范围赋予权限代号所表示的权限
  • 用户符号:
  • u:拥有者
  • g:拥有者同组用
  • o:其它用户
  • a:所有用户

chmod a=x /home/abc.txt 三位8进制数字

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

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

umask 功能:

查看或修改文件掩码 新建文件夹默认权限=0666 新建目录默认权限=0777

但实际上你所创建的文件和目录,看到的权限往往不是上面这个值。原因就是创建文件或目录的时候还要受到 umask的影响。假设默认权限是mask,则实际创建的出来的文件权限是: mask & ~umask 格式:umask 权限值 说明:将现有的存取权限减去权限掩码后,即可产生建立文件时预设权限。超级用户默认掩码值为0022,普通用 户默认为0002。

#umask 775 #umask //查看 #umask 044//设置

file指令: 功能说明:辨识文件类型。 语法:file [选项] 文件或目录… 常用选项: -c 详细显示指令执行过程,便于排错或分析程序执行的情形。 -z 尝试去解读压缩文件的内容。

使用 sudo分配权限 (1)修改/etc/sudoers 文件分配文件

#chmod 740 /etc/sudoers #vi /etc/sudoer

格式:接受权限的用户登陆的主机 =(执行命令的用户) 命令 (2)使用 sudo 调用授权的命令

$ sudo –u 用户名 命令

目录的权限

  • 可执行权限: 如果目录没有可执行权限, 则无法cd到目录中.
  • 可读权限: 如果目录没有可读权限, 则无法用ls等命令查看目录中的文件内容.
  • 可写权限: 如果目录没有可写权限, 则无法在目录中创建文件, 也无法在目录中删除文件.

于是, 问题来了~~ 换句话来讲, 就是只要用户具有目录的写权限, 用户就可以删除目录中的文件, 而不论这个用户是否有这个文件的写 权限.

[root@localhost ~]# chmod 0777 /home/ [root@localhost ~]# ls /home/ -ld drwxrwxrwx. 3 root root 4096 9月 19 15:58 /home/ [root@localhost ~]# touch /home/root.c [root@localhost ~]# ls -l /home/ 总用量 4 -rw-r–r–. 1 root root 0 9月 19 15:58 abc.c drwxr-xr-x. 27 litao litao 4096 9月 19 15:53 litao -rw-r–r–. 1 root root 0 9月 19 15:59 root.c —————————————————————————————————— [root@localhost ~]# su - litao [litao@localhost ~]You can't use 'macro parameter character #' in math mode exit logout

为了解决这个不科学的问题, Linux引入了粘滞位的概念

粘滞位

[root@localhost ~]# chmod +t /home/ # 加上粘滞位 [root@localhost ~]# ls -ld /home/ drwxrwxrwt. 3 root root 4096 9月 19 16:00 /home/ [root@localhost ~]# su - litao [litao@localhost ~]$ rm /home/abc.c #litao不能删除别人的文件 rm:是否删除有写保护的普通空文件 “/home/abc.c”?y rm: 无法删除"/home/abc.c": 不允许的操作

当一个目录被设置为"粘滞位"(用chmod +t),则该目录下的文件只能由 1. 超级管理员删除 2. 该目录的所有者删除 3. 该文件的所有者删除

关于权限的总结

  • 目录的可执行权限是表示你可否在目录下执行命令。
  • 如果目录没有-x权限,则无法对目录执行任何命令,甚至无法cd 进入目, 即使目录仍然有-r 读权限(这 个地方很容易犯错,认为有读权限就可以进入目录读取目录下的文件)
  • 而如果目录具有-x权限,但没有-r权限,则用户可以执行命令,可以cd进入目录。但由于没有目录的读 权限
  • 所以在目录下,即使可以执行ls命令,但仍然没有权限读出目录下的文档。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Linux】Linux权限详解(权限管理-目录权限-粘滞位)
例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 suroot(root可以省略),此时系统会提示输入root用户的口令
用户10925563
2024/06/04
1.6K0
【Linux】Linux权限详解(权限管理-目录权限-粘滞位)
【Linux系统】第三节—权限
Linux 严格意义上说的是⼀个操作系统,我们称之为“核心(kernel)”,但我们⼀般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?
云边有个稻草人
2025/05/09
910
【Linux系统】第三节—权限
Linux权限解析
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。
啊QQQQQ
2024/11/19
920
Linux权限解析
【玩转Linux】如何简单快速理解权限?
Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel)“ ,但我们一般用户,不能直接使用kernel。而是通过kernel的“外壳”程序,也就是所谓的shell,来与kernel沟通。如何理解?为什么不能直接使用kernel?从技术角度,Shell的最简单定义:命令行解释器(command Interpreter)主要包含:
小文要打代码
2024/10/16
910
【玩转Linux】如何简单快速理解权限?
【Linux】Linux权限的认识
例如,要从 root 用户切换到普通用户 user ,则使用 su user 。 要从普通用户 user 切换到 root 用户则使用 su root( root 可以省略),此时系统会提示输入 root 用户的口令
用户11290673
2025/04/28
1330
【Linux】Linux权限的认识
linux权限
一般分为 所属用户(u---User),所属用户组(g---Group),其他(o---Others)。
薄荷冰
2024/01/22
7950
linux权限
Linux学习-权限的理解
Linux权限的理解 零、前言 一、Shell命令以及运行原理 二、Linux权限的概念 三、Linux权限管理 1、文件访问者的分类 2、文件类型和访问权限 3、文件权限值的表示方法 4、文件访问权限的相关设置方法 1)chmod 2)chown 3)chgrp 4)umask 5)file 5、目录的权限 6、粘滞位 7、总结 零、前言 本章主要讲解Linux权限的知识 一、Shell命令以及运行原理 概念: Linux严格意义上说的是一个操作系统,我们称之为“核心(kernel) “ ,但我们
用户9645905
2022/11/30
1.2K0
Linux学习-权限的理解
Linux权限的理解
功能: 切换用户。 当我们需要从root用户切换到普通用户user_name时,则使用su user_name 要从普通用户切换到root用户则使用su root(root可以省略)/su -,此时系统会提示输入root用户的密码。 演示:从普通用户切成root再从root切回普通用户
Yui_
2024/10/16
1260
Linux权限的理解
【Linux】掌握Linux系统编程中的权限与访问控制
✨Linux下有两种用户:超级用户(root)、普通用户。 超级用户:可以再linux系统下做任何事情,不受限制 普通用户:在linux下做有限的事情
大耳朵土土垚
2024/05/07
2410
【Linux】掌握Linux系统编程中的权限与访问控制
轻松掌握 Linux 权限(一文搞懂)
要从普通⽤户user切换到root⽤⼾则使⽤su root(root可以省略),此时系统会提⽰输⼊root⽤户的⼝令。
用户11375356
2025/05/09
2020
轻松掌握 Linux 权限(一文搞懂)
【Linux探索学习】第四弹——Linux权限管理详解:理解用户、组和权限之间的关系
在Linux下用户其实有两种类型:超级用户和普通用户——超级用户就是我们配置好环境后默认的用户类型,它也叫root用户,而普通用户则是我们在超级用户下自己创建的,因为为了平时学习和工作方便,我们可能需要多个用户身份,就好比VS下多个可执行程序文件一般,而普通用户跟超级用户比是有权限约束问题的,也就是说有些文件之类的可能在普通用户下无权访问,而超级用户则可以随意访问
GG Bond1
2024/10/13
3250
【Linux探索学习】第四弹——Linux权限管理详解:理解用户、组和权限之间的关系
【Linux】权限(shell运行原理、概念,Linux权限)
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm=1010.2135.3001.5343 🔥 系列专栏:https://blog.csdn.net/qinjh_/category_12625432.html
秦jh
2024/04/23
5890
【Linux】权限(shell运行原理、概念,Linux权限)
【Linux系统编程】Linux权限理解 及 权限管理
我现在是root用户登录,然后我们来创建一个普通用户 怎么创建呢——adduser 用户名(用户名是我们自己起的)
YIN_尹
2024/01/23
2370
【Linux系统编程】Linux权限理解 及 权限管理
权力与优雅:Linux 权限的隐秘诗篇
Linux 是一种开源的、基于 Unix 的操作系统,它因其灵活性、稳定性和高性能而广泛应用于服务器、嵌入式系统、超级计算机、桌面计算等领域。
HZzzzzLu
2024/12/26
1620
权力与优雅:Linux 权限的隐秘诗篇
Linux基础权限管理
权限是约束人的(某个人或某些人) 比如看某些电影需要VIP,或者是QQ空间设置只对好友开放。 其实就是某件事允许谁去做,谁不能去做。
有礼貌的灰绅士
2023/03/28
1.2K0
Linux基础权限管理
【linux】权限
命令:su [用户名] 功能:切换用户。 例如,要从root用户切换到普通用户user,则使用 su user。 要从普通用户user切换到root用户则使用 su root(root可以省略),此时系统会提示输入root用户的口令
用户11029103
2024/07/25
5500
【linux】权限
shell的介绍以及Linux权限的讲解
大家在以前的学习中可能会有一个固态的印象: 一台计算机的大概分层为下图 也就是说人可以直接调用计算机的操作系统,但真的是这样吗? 答案是否定的!
ahao
2024/03/24
1570
shell的介绍以及Linux权限的讲解
【Linux】权限 !
关于Linux的权限问题,可以理解为不同级别的工作者,分别拥有不同的能力来管理文件。
叫我龙翔
2024/01/30
6190
【Linux】权限 !
Linux系统 (三)- 权限介绍
用户不便于直接对Linux操作系统内核进行操作,因为操作系统向用户提供的是大量的系统接口,如果用户想要直接访问操作系统内核,需要调用这些接口,这十分不方便; shell外壳程序很好的帮助我们解决了用户直接访问操作系统所带来的繁琐操作与不便等问题; shell外壳程序为用户提供了简洁多样的命令,用户直接在shell外壳程序上输入相应的shell提供的命令,shell在对这些命令进行解释转换,然后调用相应的Linux操作系统提供的系统接口,然后Linux操作系统执行完相应操作之后返回结果,shell在对返回的结果进行解释转换,最后显示到命令行窗口中反馈给用户;
怠惰的未禾
2023/04/27
1.9K0
Linux系统 (三)- 权限介绍
【linux学习指南】权限管理与文件访问设置方法
uname 命令是 Linux/Unix 系统上的一个实用工具,用于打印当前系统的信息。当你运行 uname -r 时,它会显示操作系统内核的发行版本。
学习起来吧
2024/09/05
1680
【linux学习指南】权限管理与文件访问设置方法
相关推荐
【Linux】Linux权限详解(权限管理-目录权限-粘滞位)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档