深入理解Linux文件系统权限:从基础到高级应用全解析

1. 什么是文件系统权限?它是如何工作的?
文件权限的本质

想象你的电脑是一个大房子,每个文件和目录都是房间里的物品。文件系统权限就像是一把钥匙,决定谁能进房间、能看什么、能修改什么。

  • 权限三要素

    • 读(r):能查看文件内容(比如看文档)。

    • 写(w):能修改文件(比如编辑文档)。

    • 执行(x):能运行程序(比如执行脚本)。

权限的工作方式

每个文件或目录都有三组权限,分别对应三类人:

  1. 所有者(Owner):文件的“房主”,权限最大。

  2. 所属组(Group):属于同一组的用户,共享权限。

  3. 其他人(Others):既不是所有者,也不在组的用户。

示例

-rw-r--r-- 1 alice developers 1024 Aug 10 10:00 report.txt  
  • alice 是所有者,developers 是所属组。

  • 权限 rw-r--r-- 表示:

    • 所有者:可读可写(rw-

    • 组:仅可读(r--

    • 其他人:仅可读(r--

权限的优先级
  • 用户身份优先:系统会按以下顺序检查权限:

    1. 所有者 → 2. 所属组 → 3. 其他人

  • 只要匹配到任意一级权限,就不再继续检查。比如,如果用户是所有者,直接应用所有者权限,不再看组和其他人的权限。


2. Linux 文件权限的工作方式
权限对文件和目录的影响
  • 对文件

    • 读(r):能查看文件内容(如 cat file.txt)。

    • 写(w):能修改文件内容(如 echo "hello" >> file.txt)。

    • 执行(x):能运行可执行文件(如 ./script.sh)。

  • 对目录

    • 读(r):能列出目录内容(如 ls /home)。

    • 写(w):能在目录中创建或删除文件(需同时有执行权限)。

    • 执行(x):能进入目录(如 cd /home)。

通俗总结

  • 目录的 x 权限是“开门钥匙”,没有它,读和写权限都无效。

  • 如果目录没有 x 权限,即使有 r 权限,也无法看到目录内的文件列表!


3. 修改权限的命令:chmod
两种修改方式
  1. 符号模式(直观)

    chmod [角色][操作][权限] 文件名  
    • 角色u(所有者)、g(组)、o(其他人)、a(所有人)。

    • 操作+(添加)、-(移除)、=(直接设置)。

    • 权限rwx

    示例

    chmod u+x script.sh    # 给所有者添加执行权限  
    chmod go-w file.txt    # 移除组和其他人的写权限  
    chmod a=rw file.txt    # 所有人可读可写  
  2. 数字模式(快捷)

    • 用 3 位数字表示权限,每位是 r(4) + w(2) + x(1) 的和。

    • 示例

      chmod 755 script.sh  # 所有者:7(rwx),组和其他人:5(r-x)  
      chmod 644 file.txt   # 所有者:6(rw-),组和其他人:4(r--)  

4. 修改文件所有者和所属组:chown 和 chgrp
  • chown 修改所有者

    chown alice file.txt      # 将文件所有者改为 alice  
    chown alice:developers file.txt  # 同时修改所有者和组  
  • chgrp 修改所属组

    chgrp developers file.txt  # 将文件所属组改为 developers  

注意:普通用户只能修改自己拥有的文件的组(且必须是该组的成员)。


5. 文件类型标识

在 ls -l 输出的第一个字符表示文件类型:

  • -:普通文件(如文本、图片)。

  • d:目录。

  • l:符号链接(快捷方式)。

  • c:字符设备文件(如键盘)。

  • b:块设备文件(如硬盘)。

  • s:套接字文件(进程间通信)。

  • p:管道文件。

示例

drwxr-xr-x 2 alice developers 4096 Aug 10 10:00 my_folder  
lrwxrwxrwx 1 root root        7 Aug 10 10:00 link -> target  

6. 特殊权限:SUID、SGID、Sticky Bit
SUID(Set User ID)
  • 作用对象:可执行文件。

  • 效果:执行文件时,临时拥有文件所有者的权限(而不是执行者的权限)。

  • 典型用途/usr/bin/passwd(普通用户修改密码时需临时拥有 root 权限)。

  • 设置方法

    chmod u+s file      # 符号模式  
    chmod 4755 file     # 数字模式(4表示SUID)  
SGID(Set Group ID)
  • 作用对象:目录或可执行文件。

    • 对目录:在该目录下创建的新文件,所属组自动继承目录的组。

    • 对文件:执行时临时拥有文件所属组的权限。

  • 典型用途:共享目录(团队成员共同管理文件)。

  • 设置方法

    chmod g+s dir       # 符号模式  
    chmod 2770 dir      # 数字模式(2表示SGID)  
Sticky Bit(粘滞位)
  • 作用对象:目录。

  • 效果:只有文件所有者或 root 能删除目录内的文件(防手残!)。

  • 典型用途:临时共享目录(如 /tmp)。

  • 设置方法

    chmod +t dir        # 符号模式  
    chmod 1777 dir      # 数字模式(1表示Sticky Bit)  

特殊权限标识

  • SUID:s 出现在所有者执行位(如 -rwsr-xr-x)。

  • SGID:s 出现在组执行位(如 drwxrwsr-x)。

  • Sticky Bit:t 出现在其他人执行位(如 drwxrwxrwt)。


7. 文件和目录的初始权限
  • 文件:默认权限是 666(即 rw-rw-rw-),但受 umask 影响。

  • 目录:默认权限是 777(即 rwxrwxrwx),同样受 umask 影响。

示例

  • 若 umask 是 022,则:

    • 文件权限:666 - 022 = 644rw-r--r--)。

    • 目录权限:777 - 022 = 755rwxr-xr-x)。


8. umask:权限的“过滤器”
什么是 umask
  • 作用:控制新建文件或目录的默认权限。

  • 规则umask 的值是“要屏蔽的权限”。

    • 文件默认权限 = 666 - umask

    • 目录默认权限 = 777 - umask

查看和设置 umask
  • 查看当前值

    umask  # 输出可能是 0022 或 0002  
  • 临时设置

    umask 027  # 新文件权限:640(rw-r-----),目录:750(rwxr-x---)  
  • 永久设置
    将 umask 027 添加到 ~/.bashrc 或 /etc/profile

示例计算

  • umask=027(实际计算用 0027 的后三位):

    • 文件权限:666 - 027 = 640rw-r-----)。

    • 目录权限:777 - 027 = 750rwxr-x---)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/71909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言:6.22练习题数组解答

#include <stdio.h> #include <string.h> // 用于 strlen() int main() {char a[100];int j 0;// 从用户输入读取字符串printf("请输入一个字符串: ");fgets(a, sizeof(a), stdin);// 遍历字符串中的每个字符for (int i 0; i < strlen(a); i) {if (…

一、docker的安装

一、docker桌面 二、docker的配置文件 1、docker配置文件位置/etc/docker/daemon.json 使用json格式&#xff0c;graphdata-root {"graph":"/deploy/docker","registry-mirrors": ["https://8auvmfwy.mirror.aliyuncs.com"],"…

Matlab 多项式拟合点法线(二维)

文章目录 一、简介二、实现代码三、实现效果一、简介 这个思路其实很简单,假设我们有一组曲线点,我们可以对其拟合曲线并计算其导数来获取每个点的法向量,当然这一思路也可以扩展至三维。具体过程如下所示: 二、实现代码 %% *********

DeepSeek-R1 论文阅读总结

1. QA问答&#xff08;我的笔记&#xff09; Q1: DeepSeek如何处理可读性问题&#xff1f; 通过构建冷启动数据&#xff08;数千条长CoT数据&#xff09;微调基础模型&#xff0c;结合多阶段训练流程&#xff08;RL训练、拒绝采样生成SFT数据&#xff09;&#xff0c;并优化输…

Manus AI:多语言手写识别的技术革命与未来图景

摘要&#xff1a;在全球化浪潮下&#xff0c;跨语言沟通的需求日益迫切&#xff0c;但手写文字的多样性却成为技术突破的难点。Manus AI凭借其多语言手写识别技术&#xff0c;将潦草笔迹转化为精准数字文本&#xff0c;覆盖全球超百种语言。本文从技术原理、应用场景、行业价值…

Flutter——最详细原生交互(MethodChannel、EventChannel、BasicMessageChannel)使用教程

MethodChannel&#xff08;方法通道&#xff09; 用途&#xff1a;实现 双向通信&#xff0c;用于调用原生平台提供的 API 并获取返回结果。 场景&#xff1a;适合一次性操作&#xff0c;如调用相机、获取设备信息等。 使用步骤&#xff1a; Flutter 端&#xff1a;通过 Meth…

Python控制语句-循环语句-while

1.若k为整形,下述while循环执行的次数为()。 k=1000 while k>1: print(k) k=k/2 A、9 B、10 C、11 D、100 答案:A。k=k/2意味着每循环一次,k的值就会变为原来的一半,直到k的值不大于1。 2.下面的代码,哪些会输出1,2,3三个数字( )。 A、 for i in range(3): print(i) …

十二天-双指针技术:链表问题的高效解法

一、双指针技术分类 1. 同速双指针&#xff08;同向移动&#xff09; 特点&#xff1a;两个指针以相同速度移动适用场景&#xff1a; 链表逆序查找倒数第 k 个元素删除倒数第 n 个节点 2. 快慢双指针&#xff08;异速移动&#xff09; 特点&#xff1a;一个指针每次移动 1 步…

【vllm】Qwen2.5-VL-72B-AWQ 部署记录

版本&#xff1a;0.7.2 注意事项&#xff1a; export LD_LIBRARY_PATH/home/xxxxx/anaconda3/envs/xxxxx/lib/python3.10/site-packages/nvidia/nvjitlink/lib:$LD_LIBRARY_PATH # 如果报错可能需要Also pip install --force-reinstall githttps://github.com/huggingface/tra…

深度学习与大模型-张量

大家好&#xff01;今天我们来聊聊张量&#xff08;Tensor&#xff09;。别被这个词吓到&#xff0c;其实它没那么复杂。 什么是张量&#xff1f; 简单来说&#xff0c;张量就是一个多维数组。你可以把它看作是一个装数据的容器&#xff0c;数据的维度可以是一维、二维&#…

【前端面试题】Vu3常见的面试题

1.Vue3与 Vue2的核心区别有哪些&#xff1f; ‌ 响应式系统 ‌&#xff1a; ‌ Vue2&#xff1a;通过Object.defineProperty 实现响应式。这种方式在处理对象属性的添加和删除时存在局限性&#xff0c;且无法直接监控数组的变化 ‌;‌Vue3&#xff1a;采用Proxy 实现响应式&…

Android 粘包与丢包处理工具类:支持多种粘包策略的 Helper 实现

在Android开发中&#xff0c;处理TCP/UDP通信时&#xff0c;粘包和丢包是常见的问题。粘包是指多个数据包被接收方一次性接收&#xff0c;导致数据包之间的界限不清晰&#xff1b;丢包则是指数据包在传输过程中丢失。为了处理这些问题&#xff0c;我们可以编写一个帮助类 Packe…

【C++11】移动语义

回顾 const int c的c是可以被取地址的&#xff0c;尽管是常量。所以以是否为常量来判断是否为右值是错误的。 左值与右值正确的区分方法是是否能够被取地址。&#xff08;能被取地址也就代表着是一个持久状态&#xff0c;即有持久的存储空间的值&#xff09; 常见的左值有我们…

LangChain教程 - Agent -之 ZERO_SHOT_REACT_DESCRIPTION

在构建智能 AI 助手时&#xff0c;我们希望模型能够智能地调用工具&#xff0c;以便提供准确的信息。LangChain 提供了 AgentType.ZERO_SHOT_REACT_DESCRIPTION&#xff0c;它结合了 ReAct&#xff08;Reasoning Acting&#xff09;策略&#xff0c;使得 LLM 可以基于工具的描…

移动Android和IOS自动化中常见问题

APP测试逻辑 在app编写自动化测试用例时&#xff0c;通常会出现只是简单的点点点过程&#xff0c;然而却忽略了在实际的自动化实现过程中&#xff0c;软件是对app元素的判断来执行测试脚本。所以会出现在后期已经写好自动化脚本之后还会对测试用例的更新。 App在测试时&#…

python高效试用17---两个字符串组成一个新的字符串和两个字符串组成元组作为key哪个更高效

在 Python 中&#xff0c;使用字符串连接 (str1 str2) 作为 key 和使用元组 ((str1, str2)) 作为 key 的效率差异&#xff0c;主要受以下因素影响&#xff1a; 哈希计算速度&#xff1a; 字符串连接 (str1 str2)&#xff1a;会创建一个新的字符串对象&#xff0c;并计算哈希…

深入浅出Java try-with-resources:告别资源泄漏的烦恼

一、为什么需要try-with-resources&#xff1f; 在Java开发中&#xff0c;我们经常需要处理各种资源&#xff1a;文件流、数据库连接、网络套接字等。这些资源都有一个共同特点——必须在使用后正确关闭。传统的资源管理方式存在三大痛点&#xff1a; 代码臃肿&#xff1a;每…

Python+DeepSeek:开启AI编程新次元——从自动化到智能创造的实战指南

文章核心价值 技术热点:结合全球最流行的编程语言与国产顶尖AI模型实用场景:覆盖代码开发/数据分析/办公自动化等高频需求流量密码:揭秘大模型在编程中的创造性应用目录结构 环境搭建:5分钟快速接入DeepSeek场景一:AI辅助代码开发(智能补全+调试)场景二:数据分析超级助…

Linux tcpdump -any抓的包转换成标准的pcap

在 Linux 中使用 tcpdump -any 抓包并转换为标准 pcap 文件时出现额外字段,通常与 链路层协议头部的差异 以及 pcap 文件格式的兼容性 有关。以下是详细原因和解决方案: 一、问题原因分析 -any 选项的局限性 tcpdump -any 会自动猜测链路层协议类型(如 Ethernet、IEEE 802…

【SpringMVC】深入解析使用 Postman 在请求中传递对象类型、数组类型、参数类型的参数方法和后端参数重命名、及非必传参数设置的方法

SpringMVC—请求传参 1. 传递对象 如果参数比较多时&#xff0c;方法声明就需要有很多形参&#xff1b;并且后续每次新增一个参数&#xff0c;也需要修改方法声明. 我们不妨把这些参数封装为一个对象&#xff1b; Spring MVC 也可以自动实现对象参数的赋值&#xff0c;比如 Us…