四、Linux 文件权限+sudo权限委派+IO重定向+vim高级

记录个人的成长笔记,感谢各位大佬的支持、建议及纠正


第一部分:Linux权限管理

一、Linux系统权限概述

Linux权限分为:

  • 基本权限:r、w、x
  • 特殊权限:SUID、SGID、SBIT
  • ACL权限:访问控制列表
  • sudo提权:权限委派
  • umask:默认权限掩码

二、RWX基本权限

1. 权限含义

|----------------|---------------------|---------------------------|
| 权限 | 对文件的意义 | 对目录的意义 |
| r(read) | 可读取文件内容(如 cat、less) | 可列出目录内容(需配合 x,如 ls) |
| w(write) | 可编辑、修改文件内容 | 可在目录下创建、删除文件(即使文件属于 root) |
| x(execute) | 可执行文件(命令、脚本) | 可进入目录(cd) |

目录最小有意义权限:r-x(可进入并查看内容)

2. 权限匹配优先级

访问文件时,系统按以下顺序匹配:

  1. 是否文件的拥有人(user) → 使用 u 权限
  2. 是否在文件的拥有组中(group) → 使用 g 权限
  3. 其他人(other) → 使用 o 权限

一旦匹配成功,不再继续向下匹配。

3. 常见权限示例与报错分析

|----------------|-------------------|-------------------------|
| 操作 | 结果 | 原因 |
| cd /root/ | Permission denied | /root 默认 700,普通用户无 x 权限 |
| touch /opt/a | Permission denied | /opt 默认 755,普通用户无 w 权限 |
| ls -l /opt/ | 显示 ? 号 | 有 r 但无 x,无法读取文件属性 |

4. 文件 vs 目录的 w 权限风险
  • 目录有 w 权限时,即使文件属于 root,也可以被删除或重命名。
  • 建议:共享目录使用 SBIT 防止他人删除自己的文件。

三、chmod -- 修改权限

1. 字符方式

|----|-----|
| 对象 | 说明 |
| u | 拥有人 |
| g | 拥有组 |
| o | 其他人 |
| a | 所有人 |

|-----|------|
| 操作符 | 说明 |
| + | 增加权限 |
| - | 删除权限 |
| = | 覆盖权限 |

复制代码
chmod u+x file          # 拥有人加执行
chmod o-w file          # 其他人去掉写
chmod u=rwx,g=rx,o=r file
chmod a+x file          # 所有人加执行
2. 数字方式

|----|-----|
| 数字 | 权限 |
| 4 | r-- |
| 2 | -w- |
| 1 | --x |

复制代码
chmod 640 file   # 拥有人读写(4+2),组读(4),其他人无(0)
chmod 755 file   # rwxr-xr-x
chmod 777 file   # 所有人所有权限

拥有人即使没有 w 权限,仍可通过 :wq! 强制保存(仅限 root 或文件拥有人)。


四、chown -- 修改拥有人/组

复制代码
chown zhangsan file              # 改拥有人
chown :zhangsan file             # 改拥有组
chown zhangsan:zhangsan file     # 同时改
chgrp group file                 # 只改组

五、三大特殊权限

1. SUID(Set User ID)
  • 作用对象:二进制可执行文件

  • 效果 :任何人执行该文件时,以文件拥有人身份运行

  • 典型示例/bin/passwd(普通用户可改密码,写入 /etc/shadow)

    chmod u+s /bin/file
    chmod 4755 /bin/file

❌ 不适合脚本、目录。

2. SGID(Set Group ID)
  • 作用于文件 :以文件拥有组身份执行

  • 作用于目录:目录下新创建的文件继承目录的组

    chmod g+s dir
    chmod 2755 dir

3. SBIT(Sticky Bit)
  • 作用对象:目录

  • 效果:用户只能删除/重命名自己的文件

  • 典型示例/tmp

    chmod o+t dir
    chmod 1755 dir

查看特殊权限
复制代码
ls -l /bin/passwd   # rwsr-xr-x
stat /bin/passwd    # Access: (4755)4代表有SUID权限

|----|------------|
| 标识 | 含义 |
| s | 有 SUID + x |
| S | 有 SUID 无 x |
| t | 有 SBIT + x |
| T | 有 SBIT 无 x |


六、ACL权限(访问控制列表)

1. 为什么需要 ACL?

传统权限只能控制 u/g/o,无法为多个指定用户单独授权。

2. 设置ACL
复制代码
# 给用户 mengxin 设置读权限
setfacl -m u:mengxin:r-- /etc/shadow

# 给用户 zhangsan 设置写权限
setfacl -m u:zhangsan:-w- /etc/shadow

# 给用户 wangwu 设置读写权限
setfacl -m u:wangwu:rw- /etc/shadow

# 给组设置权限
setfacl -m g:zhangsan:rw- /etc/shadow
3.查看ACL
复制代码
ll /etc/shadow            # 权限位后会多一个 '+' 号
# ----------+ 1 root root ...

getfacl /etc/shadow  #获取ACL详细信息

#输出示例
# file: etc/shadow   #文件路径
# owner: root  拥有人
# group: root  拥有组
user::---      拥有人权限,如果冒号之间没有用户就是拥有人权限
user:mengxin:r--   用户ACL权限,有名字是指定用户ACL权限
group::---   拥有组权限
mask::r--     ACL权限掩码决定文件的有效权限
other::---    其他人权限
4. 匹配优先级(有 ACL 时)
  1. 用户 ACL 权限
  2. 文件拥有人权限
  3. 用户组 ACL 权限
  4. 文件拥有组权限
  5. 其他人权限
5. ACL 的 mask 掩码(权限掩码)
  • mask 决定 ACL 用户的有效权限

  • 若 mask 为空,即使配置了 ACL 也无效

  • ls -l 显示的组权限位置,实际上显示的是 mask 值(当文件有 ACL 时)

  • 使用 chmod g+rwx 修改的是 mask,不是真正的拥有组权限

    修改 mask

    setfacl -m m::rwx /etc/shadow

    修改真正的拥有组权限

    setfacl -m g::rwx /etc/shadow
    #冒号中间写了就是修改组的ACL 权限

    setfacl -n -m m::rwx /etc/shadow
    #-n不要自动重新计算 mask

注意:chmod g+rwx 修改的是 mask,不是拥有组权限。

chmod g+rwx /etc/shadow --->修改的其实是mask值

等价于setfacl -m m::rwx /etc/shadow

修改拥有组的权限:setfacl -m g::rwx /etc/shadow === 相当于原来的chmod g=rwx /etc/shadow

修改其他人的权限:setfacl -m o::rwx /etc/shadow

修改拥有人的权限:setfacl -m u::rwx /etc/shadow

6.删除ACL
复制代码
setfacl -x u:mengxin /etc/shadow      # 删除指定用户的 ACL
setfacl -b /etc/shadow                # 删除所有 ACL
7. 默认 ACL(继承)

需求:让 /opt 目录下新创建 的文件/子目录自动继承 mengxin 的 rwx 权限。

复制代码
setfacl -m d:u:mengxin:rwx /opt/
  • 新文件/目录自动继承 ACL
  • 对已有文件无影响,对目录本身无效
  • 删除默认 ACL:setfacl -k /opt
7. ACL 管理命令总结

|------------------------------|----------|
| 命令 | 作用 |
| setfacl -m u:user:rwx file | 添加用户 ACL |
| setfacl -x u:user file | 删除用户 ACL |
| setfacl -b file | 清空所有 ACL |
| getfacl file | 查看 ACL |


其他系的自己装一个软件包

七、sudo 提权(权限委派)

1. 配置文件 /etc/sudoers
/etc/sudoers.d目录下也能配置,按照个人习惯
复制代码
root ALL=(ALL) ALL 
%wheel ALL=(ALL) ALL   #组

格式:

复制代码
用户 主机=(提权身份) 命令
2. 示例
复制代码
zhangsan ALL=(root) /usr/sbin/useradd
%lisi ALL=(ALL) NOPASSWD:ALL
3. 别名定义

大写字母

|-------------|--------|
| 别名类型 | 说明 |
| User_Alias | 用户别名 |
| Host_Alias | 主机别名 |
| Runas_Alias | 提权身份别名 |
| Cmnd_Alias | 命令别名 |

示例:

复制代码
User_Alias ADMINS = zhangsan, lisi
Host_Alias LABS = lab.example.com
Runas_Alias OP = root, wangwu
Cmnd_Alias TOOLS = /usr/bin/touch, /usr/sbin/useradd
ADMINS LABS=(OP) NOPASSWD:TOOLS
4. 常用 sudo 选项

|--------------------|--------------------|
| 选项 | 说明 |
| sudo -u root cmd | 以 root 执行 |
| sudo -k | 强制下次提权输入密码 |
| sudo -l | 查看当前用户可执行的 sudo 命令 |

5.sudo的弊端

cd命令不能执行


八、umask -- 默认权限掩码

1. 计算公式
  • 文件默认权限 = 666 - umask
  • 目录默认权限 = 777 - umask
2. 示例

|-------|-------------|------|
| umask | 文件权限 | 目录权限 |
| 022 | 644 | 755 |
| 223 | 444(自动去掉 x) | 554 |

普通文件永远不会有执行权限,若计算结果包含 x 则自动 +1。

3. 查看与设置
复制代码
umask          # 查看当前
umask 022      # 临时设置
4. 永久设置
  • 所有用户:/etc/bashrc/etc/profile
  • 指定用户:~/.bashrc~/.bash_profile

第二部分:IO重定向与管道

一、标准输入输出

|--------|----|--------|------|
| 类型 | 编号 | 名称 | 默认设备 |
| stdin | 0 | 标准输入 | 键盘 |
| stdout | 1 | 标准正确输出 | 屏幕 |
| stderr | 2 | 标准错误输出 | 屏幕 |

二、输出重定向

|--------|--------------|
| 符号 | 说明 |
| > | 覆盖正确输出 |
| >> | 追加正确输出 |
| 2> | 覆盖错误输出 |
| 2>> | 追加错误输出 |
| &> | 全部输出 |
| 2>&1 | 错误输出重定向到正确输出 |

复制代码
ls /etc/passwd > ok.log
ls /etc/xxx 2> err.log
find / -name selinux &> all.log
ls /etc/xxx > /dev/null 2>&1

三、输入重定向

复制代码
mail -s "test" user < file.txt

四、管道符 |

  • 只能传递正确输出

  • 将前一个命令的输出作为后一个命令的输入

    ls -l | grep .conf
    echo 1 | passwd --stdin devops

五、三通管道 tee

  • 同时输出到屏幕和文件

    ls -l | tee list.txt | grep .txt

六、特殊设备文件

|-------------|-------------|
| 设备 | 说明 |
| /dev/null | 黑洞文件,丢弃所有输入 |
| /dev/zero | 无限输出 0 字符 |

复制代码
dd if=/dev/zero of=/opt/swap bs=1M count=1024

第三部分:vim 编辑器高级特性

一、三大基本模式

|------|------------------|---------------------------------------------------------|
| 模式 | 特征 | 切换方式 |
| 命令模式 | 默认模式,可移动光标、删除、复制 | 打开文件时 |
| 编辑模式 | 可编辑内容 | 按 i(光标处)、a(光标下一行)、o(光标后一个字符)、I(光标所在行首)、A(光标行尾)、O(光标上一行) |
| 末行模式 | 保存、退出、替换 | 按 : |

编辑模式 ↔ 末行模式 必须经过命令模式(按 ESC)

二、命令模式常用操作

|------------|---------------------------|
| 操作 | 快捷键 |
| 光标移动 | h/j/k/l 或方向键 |
| 翻页 | ctrl+f(下)、ctrl+b(上) |
| 跳转行 | 10G(指定行)、G(末尾)、gg(开头) |
| 行首/行尾 | ^ / $ |
| 复制行 | yy,5yy(复制5行) |
| 粘贴 | p(粘贴到下一行),P(粘贴到上一行) |
| 删除行 | dd,5dd(删除5行) |
| 删除光标所在行到末尾 | dG |
| 撤销 | u |
| 反撤销 | ctrl+r |
| 查找 | /关键字(n/N 下上),?关键字(n/N 上下) |
| 加序号 | set nu |

三、末行模式常用命令

|-----------------|----------|
| 命令 | 说明 |
| :wq | 保存退出 |
| :w | 保存 |
| :q! | 强制退出 |
| :w /path | 另存为 |
| :set number | 显示行号 |
| :set paste | 粘贴模式 |
| :s/old/new | 替换当前行第一个 |
| :%s/old/new/g | 全局替换 |

遇到特殊字符不能替换加反斜杠\

四、可视化模式(ctrl+v)

删除 X

  • 批量注释:
    1. ctrl+v 选择列
    2. I 进入编辑
    3. 输入 #
    4. ESC

五、多窗口模式

|---------------|------|
| 命令 | 说明 |
| :sp file | 水平分屏 |
| :vsp file | 垂直分屏 |
| ctrl+w + 方向 | 切换窗口 |

六、常见问题

|---------------|----------------------|--------------|
| 现象 | 原因 | 解决 |
| .swp 文件提示 | 文件被占用或异常退出(防止多人同时修改) | 删除 .swp 文件 |
| 按 q: 进入历史记录 | 错误操作 | 输入 :q 退出 |



相关推荐
WhoAmI1 小时前
Linux 服务器挂载 LVM 逻辑卷全流程记录与问题排查
linux·服务器
zincsweet1 小时前
进程同步与通信:System V 消息队列 + 信号量一站式解析
linux
是有头发的程序猿1 小时前
AI Agent电商自动化实战:淘宝商品详情API无人化采集与分析教程
运维·人工智能·自动化
取经蜗牛1 小时前
Docker 常用命令全面总结
运维·docker·容器
quan_泉1 小时前
DIDCTF 取证初学者
java·服务器·前端
RisunJan2 小时前
Linux命令-nohup(使进程忽略挂起(HUP)信号并在后台继续运行)
linux·运维·服务器
kebidaixu2 小时前
板级设备树驱动修改实战:从PWM到CAN,释放GPIO的完整指南
linux
爱喝水的鱼丶2 小时前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇)第三篇:SAP ALV 报表样式定制:字段布局与交互功能配置
服务器·开发语言·学习·交互·sap·abap
一码当前2 小时前
【全志】 OKT153(sun8iw22) 启动链全流程详解
linux