在Linux操作系统的学习与实践中,Shell作为用户与内核交互的桥梁、用户权限管理作为系统安全的基石、文件权限配置作为资源访问的规则,共同构成了Linux使用的核心基础。以下将从Shell命令原理、用户划分、权限管理等关键维度,为你系统梳理Linux基础核心内容。
一、shell命令以及运行原理
1、shell是什么
严格来说,Linux的核心是内核(kernel),但普通用户无法直接与内核交互。Shell则是内核的 “外壳” 程序,作为命令行解释器(command Interpreter),主要承担将用户输入的命令翻译给内核处理,并且把内核的处理结果再翻译回给用户的职责。
类比 Windows 系统,我们操作 Windows 并非直接与内核交互,而是通过图形界面(如双击 D 盘盘符进入磁盘)。在 Linux 中,Shell 有着相同的作用,它解析我们的指令并传递给内核,再将内核运行的结果解析后反馈给用户。
为了更形象理解,我们可以把 Shell 比作 “媒婆”。假设你(用户张三)对操作系统内核(村头的小花)有操作需求,却不方便直接 “表白”(交互),就可以通过 Shell(媒婆王婆,比如我们常用的 bash)来传达你的意思,由 Shell 把你的指令转给内核,再把内核的回应带回来。
shell 与 bash/sh的关系:
- 概念范畴:shell 是对“命令行解释器”的统称,不特指某一款工具,相当于“水果”这类大类概念。
- 具体实现:sh(Bourne Shell)和 bash(Bourne-Again Shell)都是 shell 的具体类型,属于“大类下的具体成员”。
- 核心关联:sh 是最早的经典 shell 标准,奠定了基础功能;bash 是 sh 的增强版,完全兼容 sh 的语法,同时新增了更多实用功能(如命令补全、历史记录管理等),是目前最主流的 shell。
- 日常称呼:无论实际使用的是 bash、sh 还是其他 shell(如 zsh),日常交流中都可以统称为“shell”,比如“用 shell 执行命令”。
2、Shell命令的本质
指令的本质,是编译好的程序或脚本,它们会存放在系统的特定路径下。输入指令的过程,本质就是输入字符串。比如在 bash 命令行中,我们输入 ls 这样的命令,其实就是输入了一串字符,而这串字符对应着系统中特定的程序或脚本。
Shell 存在的意义主要是为了进行命令行的解释,其次是保护OS,对于用户的非法请求,直接拦截。
二、Linux用户划分
Linux下有两种用户:超级用户(root)、普通用户。
1、超级用户:可以在linux系统下做任何事情,不受权限约束
2、普通用户:在linux下做有限的事情,受权限约束
3、命令提示符:其中超级用户的命令行提示符是“#”,普通用户的命令行提示符是“$”
三、Linux用户切换和指令提权
1、su命令
语法:su [用户名]
功能:切换用户身份(获取目标用户的权限),但保留原用户核心环境变量(仅工作目录切换到目标用户家目录)
事项:
- root 用户切换普通用户:su [普通用户] 无需密码,切换后获得目标普通用户的权限(受该用户权限限制),工作目录到其家目录,但核心环境变量保留 root 配置;
- 普通用户切换 root 用户:su 或 su root 需输入 root 密码,切换后获得 root 的最高权限(不受常规权限限制),工作目录到/root,但核心环境变量保留原普通用户配置;
- 普通用户切换普通用户:su [普通用户] 需输入目标用户密码,切换后获得该普通用户的权限(受其权限限制),工作目录到其家目录,核心环境变量保留原用户配置。
2、su -命令
语法:su – [用户名]
功能:切换用户身份(获取目标用户的权限),并加载其完整环境(环境变量、工作目录等,完全模拟目标用户登录)
事项:
- root 用户切换普通用户:su – [普通用户]无需密码,切换后获得目标普通用户的权限,进入其家目录,加载其完整环境变量(权限和环境完全匹配目标用户)。
- 普通用户切换 root 用户:su – 或 su – root需输入 root 密码,切换后获得 root 的最高权限,进入/root目录,加载 root 的完整环境变量(权限和环境完全匹配 root)。
- 普通用户切换普通用户:su – [普通用户]需输入目标用户密码,切换后获得该普通用户的权限,进入其家目录,加载其完整环境变量(权限和环境完全匹配目标用户)。
上述指令本质上都属于 su 命令的范畴,其中 – 是 su 命令的一个功能性选项,我这样拆分呈现,能更清晰地体现不同用法的差异。
在 Linux 环境中,exit 命令或者按下 Ctrl + D 组合键,主要作用是退出当前的用户会话,可以理解为 “返回” 到上一级操作环境或者退出登录状态。
比如,当你通过 su 或 su – 切换到其他用户后,执行 exit 或者按 Ctrl + D,就会退出当前切换后的用户,回到之前的用户环境;如果是从远程登录(如 ssh 登录)的会话中,执行它们则会退出远程连接,回到本地终端环境。
3、sudo指令
功能:普通用户临时获取高权限执行特权操作,无需切换到 root 账号
语法:sudo [需高权限的命令]
事项:
密码验证:输入当前普通用户的密码(而非 root 密码),验证通过后临时提权执行命令
安全与效率:减少切换 root 的操作成本,同时通过授权机制提升安全性
使用前提:默认仅 root 能直接用 sudo;普通用户需由超级管理员在/etc/sudoers文件中配置授权(列入可使用 sudo 的白名单)
上面说的是我没在sudo的白名单内。
四、文件访问者
文件和文件目录的所有者:u(User),相当于文件 / 目录的 “创建者、拥有者”,对其有最直接的权限管理能力(类比物品的主人,能决定物品的使用规则)。
文件和文件目录的所有者所在组的用户(所属组):g(Group),指与所有者同属一个用户组的成员,可共享部分针对该文件 / 目录的权限(类似一个团队里的成员,能按团队规则使用团队内的资源)。
其它用户(其他人):o(Others),既不是所有者,也不属于所有者所在组的用户,对该文件 / 目录的权限受严格限制(类比外部人员,对非自身及非所属群体的资源,权限由所有者或系统统一规定)。
root 用户和普通用户,都能当上面说的所有者、所属组用户或者其他用户里的任意一种。说白了root 和普通用户跟这三种文件访问身份之间就是用户角色和文件访问身份的关系,也就是不同类型的用户(root 或者普通用户),会以这三种身份里的一种,去和文件的权限规则打交道。
五、文件类型
1、目录文件(d):即文件夹,用于存放文件和子目录的特殊文件。
2、普通文件(-):文本、可执行程序、库等基本都属于普通文件。
3、软链接文件(l):类似 Windows 的快捷方式。
4、块设备文件(b):例如硬盘、光驱等设备文件。
5、管道文件(p):用来进行进程间通信的文件。
6、字符设备文件(c):例如屏幕等串口设备文件。
7、套接口文件(s):主要用于网络通信,也可用于同一台主机上不同进程间的通信。
目前我们主要学习目录文件和普通文件,别的只做了解。
文件属性:
注意:连接数先不管,后面会学到
文件名后缀:
在Linux系统下,文件名后缀没有直接意义,当然,不代表不用,有可能Linux下的别的软件需要用到文件名后缀,就比如gcc这个编译器:
Linux 里文件名后缀本身不是系统强制用来区分文件类型的关键,但像gcc这样的特定软件,会通过后缀来判断文件是否是它能处理的类型(比如gcc认.c为 C 源文件)。所以虽然系统不强制,但为了让这些软件能正常工作,实际使用中还是会用符合软件预期的后缀(比如写 C 代码用.c后缀)。
六、Linux文件权限管理
权限是指是否允许主体(如用户)对对象(如文件)执行特定操作的规则,和主体身份、对象属性都有关。当然权限并不能限制root用户,root用户拥有最高权限
1、基本权限
- 读权限(r):对文件而言,可读取文件内容;对目录来说,能浏览该目录下的文件和子目录信息(比如用 ls 命令列出目录内容)。
- 写权限(w):对文件而言,可修改文件内容;对目录来说,可在目录内创建、删除或移动文件(及子目录)。
- 执行权限(x):对文件而言,可将文件作为程序运行;对目录来说,可使用 cd 命令进入该目录。
- 无权限表示:“-” 表示不具有对应的读、写或执行权限。
2、文件权限值的表示方法
字符表示:
二进制中三位分别对应读、写、执行权限,1 代表有对应权限(真)、0 代表无对应权限(假);八进制中每一位分别对应所有者、所属组、其他用户这三个身份。
3、权限的修改
(1)chmod命令
功能:设置文件的访问权限。
语法:chmod [参数] 权限 文件名。
常用选项:
R:递归修改目录文件的权限(目前没用过,后面用过了来补充)
说明:只有文件的拥有者和 root 才可以改变文件的权限。
chmod 命令权限值的格式:
- +:向权限范围增加权限代号所表示的权限。
- -:向权限范围取消权限代号所表示的权限。
- =:向权限范围赋予权限代号所表示的权限。
用户符号:
- u:拥有者。
- g:拥有者同组用户。
- o:其它用户。
- a:所有用户。
示例:
执行 chmod u+x test.c:给 test.c 文件的所有者添加执行权限。
执行chmod a=rwx test.c:将 c 文件的所有者、所属组、其他用户权限都设为可读、可写、可执行。
执行chmod 777 test.txt:把 txt 文件的所有者、所属组、其他用户权限都设为可读、可写、可执行。
(2)chown指令
功能:修改文件的拥有者
语法:chown [参数] 用户名 文件名
常用选项:
-R:递归修改目录及其下所有文件的拥有者(目前没用过,后面用过了再来补充)
说明:普通用户不能将文件随便给别人,一般通过sudo提权强制给别人文件。
示例:
因为你想给别人还不一定想要那,root可以强制给:
(3)chgrp指令
功能:修改文件或目录的所属组。
语法:chgrp [参数] 用户组名 文件名。
常用选项:
-R:递归修改目录及其下所有文件、子目录的所属组(后面用到再补充)
说明:只有文件的所有者、root 才可以改变文件的所属组(普通用户需通过 sudo 提权后操作)。
示例:
root将div文件的所属组给了zyj
相关推荐:
-
广告合作
-
QQ群号:4114653














