rm file.txt 。
维度 | Windows GUI | Linux Shell | 本质共性 |
|---|---|---|---|
交互方式 | 图形界面(点击图标/菜单) | 命令行(输入文本指令) | 均为用户与内核的中间层 |
操作示例 | 双击D盘图标进入D盘 | 输入cd /mnt/d进入D盘 | GUI将点击翻译为系统调用,Shell将文本翻译为系统调用 |
优势 | 直观易用,适合普通用户 | 高效灵活,适合自动化与高级操作 | 均保护内核并简化操作 |
核心结论:二者本质均为 用户与操作系统的“代理” ,GUI是图形化代理,Shell是文本化代理 。
场景:餐厅点餐流程
举个通俗易懂的例子:
假设你去餐厅吃饭,内核就像是厨师,他负责准备食物(处理任务),而Shell就像是服务员,他接收你的点餐(命令),然后告诉厨师去做(调用内核功能),最后把食物(结果)端给你。你不需要直接和厨师交流,只需要和服务员交流就行。在Windows系统中,GUI就像是一个点餐机,你通过触摸屏幕选择食物,这也很方便,但相对而言没有服务员(Shell)那样灵活,可以处理更复杂的点餐需求。
流程对比
cook egg_tomato)。为何不能直接找厨师?
Linux通过严格的用户权限管理保障系统安全,其权限体系围绕 两种用户类型 和 三类切换命令 构建,下面从概念到实操全面解析。
用户类型 | 权限范围 | 命令提示符 | 创建方式 | 典型场景 |
|---|---|---|---|---|
超级用户 (root) | 无限制(可修改系统文件、安装全局软件等) | # | 系统默认存在 | 系统配置、软件安装、权限分配 |
普通用户 | 受限(仅操作个人目录,禁止修改系统) | $ | useradd 或 adduser | 日常开发、文件编辑 |
关键差异:
/etc/sudoers文件限制 1. su命令(全切换)
su - [用户名] # 加载目标用户环境变量(推荐)
su [用户名] # 不加载环境变量,保留原工作目录 切换root:
$ su - # 或 su - root → 输入root密码
# 成功提示符变为 #切换普通用户:
# su - alice # root切用户免密
$ su - bob # 普通用户互切换需输入目标用户密码 退出用户:
$ exit # 或 Ctrl+D 退回原用户 2. sudo命令(临时提权)
sudo [命令] # 以root权限执行单条命令前置条件:需在/etc/sudoers中授权
示例:
$ sudo apt install nginx # 普通用户安装软件3. sudo -i(切换root环境)
$ sudo -i # 直接进入root的HOME目录并加载环境变量 操作注意:
su -而非su避免环境变量污染 需求场景 | 推荐命令 | 优势 |
|---|---|---|
长期执行管理员任务 | su - → 执行任务 → exit | 环境隔离彻底 |
单次安装软件 | sudo apt install | 无需完全切换用户 |
调试其他用户环境 | su - bob | 完整加载目标用户配置 |
最小权限原则
sudoers精细授权
# 在/etc/sudoers添加:
alice ALL=(ALL) /usr/bin/apt, /usr/bin/systemctl # 仅允许执行apt和systemctl切换后验证身份
$ whoami # 显示当前用户
$ id # 查看用户UID/GID Linux权限体系通过用户隔离与精细切换实现安全与效率的平衡:
su - → 完全环境切换sudo → 临时特权执行sudo -i → 快速进入root环境示例:
# 1. 当前用户身份验证(root用户)
root@hcss-ecs-d90d:\~# whoami
root # 确认当前是root超级用户
# 2. 切换到普通用户ltx(保留环境变量)
root@hcss-ecs-d90d:\~# su ltx
# 3. 验证切换后用户身份
ltx@hcss-ecs-d90d:/root$ whoami
ltx # 当前已变为普通用户ltx
# 4. 尝试列出/root目录内容(失败)
ltx@hcss-ecs-d90d:/root$ ls -a
ls: cannot open directory '.': Permission denied
# 原因:普通用户无权访问root的家目录(默认权限700)
# 5. 返回当前用户(ltx)的家目录
ltx@hcss-ecs-d90d:/root$ cd \~
# 6. 列出ltx家目录内容(成功)
ltx@hcss-ecs-d90d:\~$ ls -a
. .. .bash_history .bash_logout .bashrc .profile
# 显示标准用户配置文件(用户对自己的家目录有完全权限)
# 7. 退出当前shell环境(返回root用户)
ltx@hcss-ecs-d90d:\~$ exit
root@hcss-ecs-d90d:\~# # 提示符变回root
# 8. 以root身份列出/root目录内容(成功)
root@hcss-ecs-d90d:\~# ls -a
. .. .bash_history .bashrc .cache config.yml file1.log file2.log file.txt .history .lesshst .local mydir mydir1 mydir2 private .profile snap .ssh team_shared test.txt .viminfo .Xauthority
# root可查看所有系统文件(含隐藏文件)
# 9. 再次切换到ltx用户
root@hcss-ecs-d90d:\~# su ltx
# 10. 确保位于ltx家目录
ltx@hcss-ecs-d90d:/root$ cd \~
# 11. 尝试复制mydir(失败:文件不存在)
ltx@hcss-ecs-d90d:\~$ cp mydir \~
cp: cannot stat 'mydir': No such file or directory
# 原因:当前目录(/home/ltx)没有mydir文件
# 12. 尝试绝对路径复制(失败:权限不足)
ltx@hcss-ecs-d90d:\~$ cp /root/mydir \~
cp: cannot stat '/root/mydir': Permission denied
# 原因:普通用户无权读取/root目录
# 13. 尝试递归复制(同样失败)
ltx@hcss-ecs-d90d:\~$ cp -r /root/mydir \~
cp: cannot stat '/root/mydir': Permission denied
# 原因:-r参数解决目录复制问题,但未解决权限问题
# 14. 使用sudo提权复制(成功!)
ltx@hcss-ecs-d90d:\~$ sudo cp -r /root/mydir \~
[sudo] password for ltx: # 输入ltx用户密码
# sudo临时赋予root权限,突破目录访问限制
# 15. 验证复制结果
ltx@hcss-ecs-d90d:\~$ ls -a
. .. .bash_history .bash_logout .bashrc mydir .profile
# 出现mydir目录,复制成功
# 16. 查看目录结构
ltx@hcss-ecs-d90d:\~$ tree mydir
mydir
├── a
│ └── b
│ └── c
├── file.txt
└── test.txt
3 directories, 2 files
# tree命令显示完整目录结构(需安装tree包)
# 18. 退出当前会话
ltx@hcss-ecs-d90d:\~$ exit r),普通用户仅能查看公共区(r--)。Linux将用户分为三类,通过角色+文件属性控制访问:
角色 | 身份定义 | 权限范围 | 存在意义 |
|---|---|---|---|
所有者 (u) | 文件创建者或指定用户 | 可独立设置文件的rwx权限 | 明确责任主体,避免多人争改文件 |
所属组 (g) | 与文件关联的用户组 | 组内成员共享相同权限(如团队协作目录) | 简化批量权限管理 |
其他用户 (o) | 既非所有者也非组员的用户 | 默认限制性权限(如仅读) | 保护文件不被无关用户访问 |
示例: 文件
report.txt权限为-rw-r-----(所有者可读写,组员仅读,其他人无权)。 若组员需编辑,命令:chmod g+w report.txt→ 权限变为-rw-rw----。
类型 | 标识 | 示例 | 说明 |
|---|---|---|---|
目录 | d | drwxr-xr-x | 存储文件的容器 |
普通文件 | - | -rw-r--r-- | 文本/二进制文件 |
软链接 | l | lrwxrwxrwx | 快捷方式 |
套接口 | s | srw-rw---- | 进程间通信文件 |
权限 | 文件功能 | 目录功能 |
|---|---|---|
r | 读取内容 | 列出目录内容(如ls) |
w | 修改内容 | 创建/删除目录内文件 |
x | 执行程序 | 进入目录(如cd) |
关键区别:
w权限不直接控制文件内容修改,而是控制文件增删。x权限才能操作其内部文件。x权限是进入前提(无x则ls失败)。w权限需配合x生效(否则无法创建文件)。示例: 目录
/projects权限为drwxr-x---:
rwxr-xr-- u(所有者)、g(组)、o(其他)rwxr-x--- 表示所有者可读/写/执行,组可读/执行,其他无权限。rwxr-x--- → u=4+2+1=7, g=4+1=5, o=0 → 权限值750。# 符号法(操作直观)
chmod u+x script.sh # 给所有者增加执行权
chmod g-w data.txt # 移除组员的写入权
chmod o=r-- log.txt # 设置其他用户仅可读
# 数字法(批量设置)
chmod 755 script.sh # rwxr-xr-x注:仅文件所有者或root可执行。
chown alice report.txt # 将所有者改为alice
chown alice:devteam project/ # 同时修改所有者和所属组chgrp developers app.py # 将文件所属组改为developers作用:决定新建文件/目录的初始权限(非减法!)。
计算规则: 默认权限 = 基础权限 & ~umask
rw-rw-rw-)rwxrwxrwx)umask 022 # 查看当前掩码:0022
新建文件权限 = 666 & \~022 = 644(rw-r--r--)
新建目录权限 = 777 & \~022 = 755(rwxr-xr-x)[[4, 15]]示例: 设
umask=027,新建文件权限:666 & \~027 = 640(rw-r-----)。
为共享目录(如/tmp)设置后:
chmod +t /shared_dir/ # 设置粘滞位
ls -ld /shared_dir/ # 查看目录权限末位显示't'(如 drwxrwxrwt)示例: 用户A在
/shared_dir创建fileA,用户B无法删除该文件,但可读/写自身文件。
Linux权限通过 角色分离(u/g/o) 和 精细权限控制(r/w/x) 实现多用户环境的安全管理。chmod、chown、chgrp提供灵活设置,umask保障默认安全,而粘滞位解决了共享目录的删除冲突问题。理解文件与目录权限的差异(如目录需x权限)是避免操作错误的关键。