news 2026/10/11 10:55:43

【Linux】Shell 命令以及运行原理+权限管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Linux】Shell 命令以及运行原理+权限管理

本文面向 Linux 初学者,系统讲解 Shell 命令执行原理与 Linux 权限体系两大核心主题。全文目录如下:Shell 基础、命令分类、运行原理、PATH 环境变量、权限管理、chmod/chown/chgrp 修改权限、umask 文件掩码、粘滞位。建议按顺序阅读,并结合终端实操加深理解。

一、什么是 Shell

Shell 是一个命令行解释器,是用户和 Linux 内核之间的桥梁。

  • 用户输入命令 → Shell 接收、解析 → 调用 Linux 内核完成任务 → 把结果返回给用户
  • 现在终端里这个环境,就是bash(Bourne Again Shell),Ubuntu 默认的 shell。

内核(kernel)不能直接接收文字命令;Shell 负责翻译。类比:内核 = 工厂,Shell = 前台接待员;你(用户)跟接待员说需求,接待员转告工厂干活。

二、Shell 命令分类(两大类)

1. 内置命令(shell builtin)

命令集成在 bash 程序内部,不需要单独外部程序文件。

  • 特点:执行快,不创建新进程
  • 例子:cd、pwd、echo、exit、type

原理:bash 自己代码里就实现了功能,直接调用,不用去磁盘找程序。

2. 外部命令(可执行程序)

独立的可执行文件,存放在系统 PATH 路径下(/bin/usr/bin)

  • 你刚才用的:ls、tar、apt、sudo全部都是外部命令
  • 查看命令位置:type tar或者which tar

比如tar:本质就是/usr/bin/tar这个二进制程序。


三、外部命令完整运行原理

以你执行tar -cvf dirb.tar dirb举例

  1. 读取命令:bash 读取你敲的整行字符串tar -cvf dirb.tar dirb
  2. 命令解析、分词:按空格分割成tar、-cvf、dirb.tar、dirb;识别命令名是tar
  3. 查找程序:去环境变量PATH里面的目录依次搜索,找到/usr/bin/tar
  4. fork 创建子进程
    • bash(父进程)调用系统函数fork(),复制出一个子进程
    • 子进程几乎和父 bash 一模一样,是独立新进程
  5. exec 程序替换
    • 子进程调用exec系统调用,把自己的内存替换成/usr/bin/tar程序,不再是 bash
    • 传入参数-cvf dirb.tar dirb,tar 程序开始执行打包逻辑
  6. 等待子进程结束:父 bash 调用wait(),卡住等待 tar 子进程运行完毕
  7. 子进程退出:tar 执行完,子进程销毁;bash 重新弹出命令提示符$,等待你输入下一条命令

✅ 核心一句话:外部命令会 fork+exec 创建子进程执行;内置命令直接在当前 bash 进程运行,不创建子进程。

为什么cd是内置命令?

如果 cd 是外部命令,fork 出来子进程修改目录,只会修改子进程的工作目录,父 bash 目录完全不变,就达不到切换目录效果。所以 cd 必须内置。

四、PATH 环境变量

PATH是冒号分隔的目录列表,外部命令就在这里查找。查看 PATH:

echo $PATH

当你输入ls,shell 依次去 PATH 里的目录找有没有ls这个可执行文件。

如果命令不在 PATH 里,必须写绝对路径执行,例如/usr/bin/tar

五、简单区分内置 / 外部命令

type cd type tar
  • cd is a shell builtin→ 内置
  • tar is /usr/bin/tar→ 外部程序

六、补充:命令执行小细节

  1. 命令行先做通配符展开:*.txt会在传给程序前,替换成所有 txt 文件名
  2. 引号:双引号" "保留变量;单引号' '原样输出,不解析变量
  3. ;分隔多条命令:ls;pwd顺序执行,不管前面成功失败
  4. &&:前面成功才执行后面:mkdir test && cd test

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. ⽂件类型和访问权限(事物属性)

• ⽂件类型:

d:⽂件夹

-:普通⽂件

l:软链接(类似Windows的快捷⽅式)

b:块设备⽂件(例如硬盘、光驱等)

p:管道⽂件

c:字符设备⽂件(例如屏幕等串⼝设备)

s:套接⼝⽂件

• 基本权限:

读(r/4):Read对⽂件⽽⾔,具有读取⽂件内容的权限;对⽬录来说,具有浏览该⽬录信息 的权限

写(w/2):Write对⽂件⽽⾔,具有修改⽂件内容的权限;对⽬录来说具有删除移动⽬录内 ⽂件的权限

执⾏(x/1):execute对⽂件⽽⾔,具有执⾏⽂件的权限;对⽬录来说,具有进⼊⽬录的权 限 ◦ “—”表⽰不具有该项权限

字符含义作用(文件)作用(目录)
rread 读查看文件内容列出目录里的文件名(ls)
wwrite 写修改 / 覆盖文件内容在目录里新建、删除、重命名文件
xexecute 执行运行可执行程序 / 脚本进入目录(cd)

二、字符表示方法(长列表 ls -l)

执行ls -l,会看到类似:

-rw-r--r-- 1 cl cl 123 xxx.txt

权限串:- rw- r-- r--

  1. 第 1 位:文件类型(不属于权限!)
    <pre>

    <ul>

  2. -普通文件
  3. d目录
  4. l软链接
  5. 第 2~4 位:u 属主权限
  6. 第 5~7 位:g 用户组权限
  7. 第 8~10 位:o 其他用户权限

示例拆解:-rw-r--r--

  • -:普通文件
  • rw-:属主:可读、可写、不可执行
  • r--:组用户:仅可读
  • r--:其他人:仅可读

字符方式修改权限 chmod

# 给属主增加执行权限 chmod u+x test.txt # 去掉组的写权限 chmod g-w test.txt # 给所有用户加上读权限 chmod a+r test.txt # 组合写法:u加x,o去掉w chmod u+x,o-w test.txt

三、八进制数值表示方法

规则:r=4,w=2,x=1每一类用户的权限,把对应数字相加,得到一个 0~7 的数字:

表格

权限数值
r--4
-w-2
--x1
rw-4+2=6
r-x4+1=5
rwx4+2+1=7
---0

三组数字依次对应u g o,组合成 3 位八进制数。

例子

  1. rw-r--r--u: rw- = 4+2=6 g: r-- =4 o: r-- =4 👉 权限:644(普通文件默认推荐)
  2. rwxr-xr-xu: rwx=7 g: r-x=5 o: r-x=5 👉755(目录 / 可执行程序常用)
  3. rwx------u:7,g:0,o:0 👉700(只有所有者能读写执行)

八进制 chmod 修改权限

# 设置为644 chmod 644 test.txt # 设置目录755 chmod 755 dirb

高频背诵总结

  1. 字符:r w x,分 u (属主) g (组) o (其他);ls -l查看。
  2. 八进制:r=4,w=2,x=1,三组数字,u g o。
  3. 文件类型位不属于权限位!第一位- / d / l不是 rwx 权限。
  4. 目录 x 权限:控制能否 cd 进入目录。

练习

ls -l dirb.tar # 看dirb.tar的权限字符,换算成八进制

比如输出-rw-r--r--→ 644

一、chown:修改文件拥有者(属主 user)

格式:chown [参数] 用户名 文件名

  • 实例
chown user1 f1 # 将f1的属主改为user1 chown -R user1 filegroup1 # -R 递归:把目录及其内部所有文件的属主全部改成user1

-Rrecursive 递归,目录权限修改必备,对子文件子目录生效

二、chgrp:修改文件 / 目录所属组 (group)

格式:chgrp [参数] 用户组名 文件名

  • 常用选项:-R递归修改所属组
chgrp users /abc/f2 # 将/abc/f2 的所属组改为 users

💡补充:chown 可以一次性同时改属主 + 属组,写法:chown user1:group1 test.txt

三、umask 文件掩码

作用:控制新建文件、目录的默认权限

原始预设最大权限:

  • 新建普通文件初始上限:0666(rw-rw-rw-)
  • 新建目录初始上限:0777(rwxrwxrwx)

实际权限公式:实际权限 = 预设权限 & ~umask通俗理解:减去 umask 里有的权限

  • 系统默认:
    • root 超级用户:umask 0022
    • 普通用户:umask 0002
umask # 查看当前掩码 umask 044 # 设置掩码为044

示例:普通用户 umask=0002 新建文件:666 - 002 = 664 →-rw-rw-r--新建目录:777 - 002 =775 →drwxrwxr-x

⚠注意:umask只影响新建文件,已经存在的文件权限不会改变!

四、file 指令:辨识文件类型

语法:file [选项] 文件/目录

  • -c:显示执行过程,排错
  • -z:尝试解析压缩包内部文件类型
file dirb.tar

不看后缀,直接读取文件头部识别真实类型(Linux 不依赖扩展名)

五、sudo 权限分配

(1)修改/etc/sudoers授权

注意:/etc/sudoers权限必须是 740,不能随便改!

chmod 740 /etc/sudoers vi /etc/sudoers

配置格式:

接受权限的用户 登陆主机=(以哪个用户执行) 允许执行的命令列表

(2)sudo 调用授权命令

sudo -u 用户名 命令 # 示例:以root身份执行useradd添加u2用户 sudo -u root /usr/sbin/useradd u2

六、目录权限【重中之重,极易踩坑】

目录的 r/w/x 和文件的 r/w/x含义完全不一样!

  1. x 执行权限:能否cd进入这个目录
    <pre>

    <blockquote>

    目录没有 x 权限,就算有 r,也无法进入、访问里面文件

  • r 读权限:ls列出目录内文件名;前提:必须有 x 权限

    有 x 无 r:可以 cd 进目录,但是 ls 看不到文件名;但如果你知道文件名,可以直接访问这个文件

  • w 写权限:在目录内新建、删除、重命名文件

核心考点:只要你拥有目录的 w 权限,你就可以删除目录里面的文件,不管这个文件本身有没有写权限,也不管文件是谁创建的!

案例验证

chmod 0777 /home/ # /home目录全部用户rwx touch /home/root.c # root创建文件root.c su - litao # 切换普通用户litao rm /home/root.c # litao可以直接删掉root创建的文件!

原因:litao 对/home目录拥有 w+x 权限,删除文件是修改目录内容,不是修改文件本身。

七、粘滞位(Sticky Bit,SBIT)【考试重点】

✅一句话:粘滞位是目录的特殊权限,专门解决:目录 777 开放写权限时,用户可以删除别人文件的问题。

⚠粘滞位只对目录生效,对普通文件基本无效。

1. 核心作用

给目录设置粘滞位之后: 哪怕所有人对这个目录拥有w写权限,目录内的文件,只能被下面 3 类人删除 / 重命名:

  1. 文件的所有者
  2. 目录的所有者
  3. root 超级用户

普通用户只能删除自己创建的文件,不能删除别人的文件。

对应你笔记里的案例:/home权限 777,没粘滞位 → litao 可以删掉 root 创建的root.c如果给/home加上粘滞位,就算目录是 777,litao 就删不掉 root 的文件。

2. 字符表示(ls -ld 查看)

粘滞位占用其他用户 o 的 x 权限位置:

  • 目录本身有 x 权限 → 显示小写t例:drwxrwxrwt(经典/tmp权限)
  • 目录本身没有 x 权限→ 显示大写T
ls -ld /tmp # 输出 drwxrwxrwt ,末尾的t就是粘滞位

3. 八进制表示

特殊权限在最高位:

  • SUID=4,SGID=2,粘滞位 = 1

完整 4 位权限:1 777→17771代表开启粘滞位;后面 3 位是 ugo 普通权限。

示例:chmod 1777 shared_dir含义:目录权限 rwxrwxrwx + 开启粘滞位。

4. 设置 / 删除粘滞位命令

# 符号方式(推荐) chmod +t shared_dir # 添加粘滞位 chmod -t shared_dir # 移除粘滞位 八进制方式 chmod 1777 shared_dir

5. 典型应用:/tmp 目录

系统临时目录/tmp默认带粘滞位,权限1777

  • 所有用户都可以在 /tmp 里新建文件
  • 但是只能删除自己的临时文件,不能删除别人的

6. 背诵考点

  1. 粘滞位作用对象:仅目录。
  2. 作用:共享目录开放写权限时,限制用户只能删除自己的文件,不能删除他人文件。
  3. 字符标记:权限串最后一位t(有 x) /T(无 x)。
  4. 八进制:1xxx,最高位 1 代表粘滞位。
  5. 可删除文件的三类用户:文件属主、目录属主、root。

7. 关联回顾

删除文件看上级目录的 w 权限,不是文件本身权限。

  • 无粘滞位:目录 o 有 w → 任何人都可以删目录里任意文件。
  • 有粘滞位:目录 o 有 w,但是只能删自己的文件。

八、权限总结

进入目录(cd 目录名),必须要有目录的x(可执行)权限。

目录的 r/w/x 和文件含义完全不一样!

  • x:能不能cd进入目录(最关键)
  • r:进入目录后,能不能用ls列出里面的文件名
  • w:能不能在目录里新建、删除、重命名文件

分 4 种组合情况

  1. 目录有 x,无 r✅ 可以cd进入目录 ❌ls看不到文件列表 ✅ 如果你知道文件名,可以直接访问这个文件(比如cat test.txt)
  2. 目录有 r,无 x(你刚才 dirc 就是这个情况!d----w--w-,没有 x) ❌不能 cd 进入目录!哪怕有 r 读权限也不行 ❌ 无法访问目录里面任何文件
  3. 目录有 r+x✅ cd 进入 ✅ ls 列出所有文件
  4. 目录有 w,无 x❌ 不能 cd 进入 ❌ w 权限完全失效,无法新建 / 删除文件

一句话记忆口诀

cd 看 x;ls 看 r;删建看 w。没有 x,r 和 w 基本都废掉!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/11 10:55:43

Python卷积神经网络实现人脸表情识别:从数据集到实时摄像头

简介&#xff1a;这份资源面向计算机相关专业正在做毕业设计的学生&#xff0c;以及需要项目实战练习的学习者&#xff0c;提供了一套基于卷积神经网络的人脸表情识别系统完整方案。内容涵盖源代码、数据集、论文与训练好的模型&#xff0c;项目经导师指导并通过评审&#xff0…

作者头像 李华
网站建设 2026/10/11 10:55:40

Windows 变慢排查实战:识别软件后台小动作,清理启动项与右键菜单

地址 https://freedw.com/archives/7987 电脑装的软件一多&#xff0c;常见的不适感主要有三种&#xff1a;开机等待时间变长、右键菜单展开变慢、空闲时磁盘和 CPU 占用偏高。这三种现象往往对应不同的藏身位置&#xff0c;按位置逐项排查&#xff0c;比反复卸载重装更有效。…

作者头像 李华
网站建设 2026/10/11 10:54:59

山海鲸可视化 VS ChartCube:让复杂信息变得更加直观

随着企业数字化建设持续深入&#xff0c;可视化工具正在服务于越来越多的业务场景。园区、工厂、楼宇和城市管理需要通过三维空间呈现现场状态&#xff0c;经营分析、项目汇报和数据传播则需要借助清晰、美观的图表表达核心信息。山海鲸可视化与 ChartCube 都能够帮助用户提升信…

作者头像 李华
网站建设 2026/10/11 10:54:23

从能跑到无可挑剔:代码质量提升的六个维度与自检清单

1. 一个词引发的执念&#xff1a;为什么我要死磕“impeccable”第一次在代码评审里被人甩了一句“this is not impeccable”&#xff0c;我盯着屏幕愣了半分钟。不是生气&#xff0c;是突然意识到——我们天天把“能用”“跑通”“没报错”当终点&#xff0c;但真正拉开工程师差…

作者头像 李华
网站建设 2026/10/11 10:54:06

DeepSeek本地部署实战:基于Ollama的模型运行与WebUI集成指南

简介&#xff1a;这是一份围绕DeepSeek-R1本地部署的实战型技术文档&#xff0c;面向机器学习与AI应用开发者&#xff0c;适合已掌握基础命令行与容器概念的工程师、研究人员在Windows、macOS或Linux环境下快速搭建推理环境。资源包共1个文件&#xff0c;以docx格式呈现&#x…

作者头像 李华
网站建设 2026/10/11 10:53:41

DeepSeek Linux手动部署全攻略:从显存规划到vLLM服务托管

简介&#xff1a;DeepSeek 在 Linux 系统下的手动部署步骤与注意事项 PDF 是专门面向具备一定 Linux 基础、希望自行从源码部署 DeepSeek 的深度学习开发者的实用指南。文档覆盖 Ubuntu 20.04 LTS 及更高版本的系统准备、Python 3.8 环境安装、基于 venv 的虚拟环境创建、Git 克…

作者头像 李华