Linux 权限详解
一、Shell 命令以及运行原理
1. Shell 是什么
严格来说,Linux 的核心是内核(kernel),但普通用户无法直接与内核交互。Shell 是内核的'外壳'程序,作为命令行解释器(command Interpreter),主要承担两大任务:
- 将用户输入的命令翻译给内核处理;
- 把内核的处理结果再翻译回给用户。
类比 Windows 系统,我们操作 Windows 并非直接与内核交互,而是通过图形界面。在 Linux 中,Shell 有着相同的作用,它解析我们的指令并传递给内核,再将内核运行的结果解析后反馈给用户。
Shell 与 Bash/Sh 的关系:
- 概念范畴:Shell 是对'命令行解释器'的统称,不特指某一款工具。
- 具体实现:sh(Bourne Shell)和 bash(Bourne-Again Shell)都是 Shell 的具体类型。
- 核心关联:sh 是最早的经典 Shell 标准;bash 是 sh 的增强版,完全兼容 sh 的语法,同时新增了更多实用功能(如命令补全、历史记录管理等),是目前最主流的 Shell。
- 日常称呼:无论实际使用的是 bash、sh 还是其他 Shell(如 zsh),日常交流中都可以统称为'Shell'。
2. Shell 命令的本质
指令的本质,是编译好的程序或脚本,它们会存放在系统的特定路径下。输入指令的过程,本质就是输入字符串。比如在 bash 命令行中输入 ls 这样的命令,其实就是输入了一串字符,而这串字符对应着系统中特定的程序或脚本。
3. Shell 存在的意义
- 进行命令行的解释。
- 保护 OS,对于用户的非法请求,直接拦截。
二、Linux 用户划分
Linux 下有两种用户:超级用户(root)、普通用户。
- 超级用户:可以在 Linux 系统下做任何事情,不受权限约束。
- 普通用户:在 Linux 下做有限的事情,受权限约束。
- 命令提示符:其中超级用户的命令行提示符是'#',普通用户的命令行提示符是'$'。
三、Linux 用户切换和指令提权
1. su 命令
语法: su [用户名]
功能: 切换用户身份(获取目标用户的权限),但保留原用户核心环境变量(仅工作目录切换到目标用户家目录)。
事项:
- root 用户切换普通用户:
su [普通用户]无需密码,切换后获得目标普通用户的权限,工作目录到其家目录,但核心环境变量保留 root 配置。 - 普通用户切换 root 用户:
su或su root需输入 root 密码,切换后获得 root 的最高权限,工作目录到/root,但核心环境变量保留原普通用户配置。 - 普通用户切换普通用户:
su [普通用户]需输入目标用户密码,切换后获得该普通用户的权限,工作目录到其家目录,核心环境变量保留原用户配置。
2. su - 命令
语法: su - [用户名]
功能: 切换用户身份(获取目标用户的权限),并加载其完整环境(环境变量、工作目录等,完全模拟目标用户登录)。
事项:
- root 用户切换普通用户: 无需密码,切换后获得目标普通用户的权限,进入其家目录,加载其完整环境变量。


