当前位置:首页>Linux>为什么 Linux 总提示 Permission denied?一篇彻底讲透 chmod、chown 和文件权限

为什么 Linux 总提示 Permission denied?一篇彻底讲透 chmod、chown 和文件权限

  • 2026-10-11 05:36:45
为什么 Linux 总提示 Permission denied?一篇彻底讲透 chmod、chown 和文件权限

文章目录

  • 概要&序論
    • 1.1文件的属性与三大权限指向对象
      • 1.1.1文件的属性——角色
      • 1.1.2文件的属性——权限
      • 1.1.3补充内容:file指令查看文件真实类型
    • 1.2修改文件的属性其之一——权限
      • 1.2.1文件的权限的修改者
      • 1.2.2文件权限修改命令chomd
      • 1.2.3符号模式
      • 1.2.4数字模式
    • 1.3修改文件的属性其之二——角色
      • 1.3.1文件角色修改命令chown与chgrp
      • 1.3.2案例参考
    • 1.4 文件权限的匹配逻辑
      • 1.4.1 匹配规则:由近及远
      • 1.4.2 核心原则:一次匹配,即刻锁定
      • 1.4.3**案例分析**
    • 1.5 重谈目录权限
      • 1.5.1执行权限:进入目录
      • 1.5.2读取权限:查看
      • 1.5.3写入权限 : 修改目录结构

概要&序論

这里是此方, 本文将系统介绍Linux中的权限相关内容,从文件为什么打不开,到目录的读/写/执行到底意味着什么,再到粘滞位的场景——力求全面且易于理解。好的,我们开始吧。(关注CSDN获取最新内容)

https://blog.csdn.net/Z2314246476?type=blog


谈谈权限的意义权限是什么? 权限是“能干什么和不能干什么的限制规定。”它是用来控制用户的行为同时防止错误发生。其首先控制的应当是人,其次是物。而物,在Linux中又被指向一种特定的统一的事物——文件。

——————接续上文,我们谈谈,对文件的限制。—————— 

1.1文件的属性与三大权限指向对象

   当我们ls-l展开文件详细信息的时候,是否有想过,文件前面的那一堆英文字母是什么意思?

drwxr-xr-x  2 root root   22 Jun 19  2025 .pip

我们将之分为两类:角色与权限。

1.1.1文件的属性——角色

  • 拥有者 (Owner)
    :该文件(或目录)的创建者,默认拥有最高控制权。
  • 所属组 (Group)
    :一组特定的用户集合,通过共享权限方便团队协作。
  • 其他 (Other)
    :除了拥有者和所属组成员以外,系统里的所有人。

强调一下:角色与人是两码事儿。张三是市长,张三是他这个人,而市长是他扮演的角色,可以理解吗?    为什么没有other?other不需要记录,这里的记录方法是排除法。

为什么要有所属组?我们举例解释:在腾讯,为了保持竞争力,内部往往会有不同的工作室(比如天美、光子)同时开发同类产品。(假设在同一台机器上)

  • 如果是个人权限
    :光子工作室的张三写了一份《王者荣耀》的策划案,只有他能看。那他的组员李四、王五要协作怎么办?张三只能把权限开放给“所有人(Other)”。
  • 后果
    :一旦开放给 Other,隔壁天美工作室的人也能直接过来把策划案拷走,这比赛还怎么打?

   “所属组”就是你的“工作室” 所属组 的出现,完美解决了内部高度协作、外部严格隔离的需求。

天美工作室组:

  • 组员
    :姚晓光、程序员 A、策划 B。
  • 权限
    :他们对天美的项目代码有 rwx(能看能写能跑)。

光子工作室组:

  • 组员
    :陈宇、程序员 C、策划 D。
  • 权限
    :他们对光子的项目代码有 rwx。

1.1.2文件的属性——权限

那么前面的权限呢?我们把权限分成rwx三大权限,

  • r (Read / 读):读取内容的权限。
  • w (Write / 写):修改、编辑内容的权限。
  • x (Execute / 执行):运行程序或进入目录的权限。
权限
对文件 (File) 的含义
对目录 (Directory) 的含义
r
可以查看文件内容(如 cat、vim)
可以列出目录下的文件名(如 ls)
w
可以修改文件内容
可以在目录内创建、删除、重命名文件
x
可以把文件当做程序运行
最关键!
 可以进入该目录(cd),并访问其下的子文件

补充:如何理解可执行——机会不等于能力:比如一个test.c文件,默认是不可执行的,如果我们给他加上可执行,他一样也不可执行,因为它是test.c没有编译也没有链接,没有执行的能力。

   每一个权限位都是两态。要么有该权限,要么没有。 同时不能颠倒顺序。

   于是我们就可以以九位二进制序列的形式来简单表述一个文件的权限,比如如下文件的权限就是111 101 101

drwxr-xr-x  2 root root   22 Jun 19  2025 .pip

   抑或是严谨的说,描述一个文件的权限应当由角色与目标属性共同构成:

该文件的权限信息是:拥有者可读可写可修改,所属组可读可执行但不可修改,其他人可读可执行但不可修改。

1.1.3补充内容:file指令查看文件真实类型

  • 指令名称
    :file
  • 指令重要性
    :★★★★☆
  • 说明:
    • file 是 Linux 中辨别文件真实类型的命令,是处理未知文件时的首选侦探工具。
    • 基本用法
      :file 文件名(查看文件格式、编码及架构信息)。
    • 核心价值
      :Linux 系统不依赖扩展名,file 通过读取文件头部的“幻数”(Magic Number)来识别文件的本质,防止被虚假的后缀名(如将 .sh 改为 .jpg)误导。
    • 常见输出
      :能精准区分 ASCII 文本、ELF 二进制可执行文件、目录(directory)、甚至是图片的具体分辨率和色彩深度。
[root@VM-0-9-opencloudos ~]# file testtest: empty[root@VM-0-9-opencloudos ~]# file .bashrc.bashrc: ASCII text[root@VM-0-9-opencloudos ~]# 

1.2修改文件的属性其之一——权限

1.2.1文件的权限的修改者

   文件权限不能被随意修改,root在zbc用户的家目录下创建一个文件,zbc不能修改它的权限。

[zbc@VM-0-9-opencloudos ~] 

   然而这一切规则对于root而言都形同虚设。,root可以修改任何用户创建的任何文件。

1.2.2文件权限修改命令chomd

  • 指令名称
    :chmod
  • 指令重要性
    :★★★★★
  • 说明:
    • chmod 是Linux中修改文件/目录权限的核心命令,权限管理的基础工具。
    • 支持两种权限表示方式:符号模式(如 u+x、go-w)和数字模式(如 755、644)。
    • 只有文件所有者或root用户才能修改文件权限。

1.2.3符号模式

格式:chomd [修改角色] [修改权限] [文件名称]

  • 角色采用小写首字母表示
    :a(拥有者),g(所属组),o(other)
  • 权限如上
    ,r(读),w(写),x(执行)
-rw-r--r-- 1 root root 0 Apr 26 06:27 TEST.c[root@VM-0-9-opencloudos zbc]# chmod a+x TEST.c[root@VM-0-9-opencloudos zbc]# ls -l TEST.c-rwxr-xr-x 1 root root 0 Apr 26 06:27 TEST.c[root@VM-0-9-opencloudos zbc]# chmod g-x TEST.c[root@VM-0-9-opencloudos zbc]# ls -l TEST.c-rwxr--r-x 1 root root 0 Apr 26 06:27 TEST.c[root@VM-0-9-opencloudos zbc]# chmod o+w TEST.c[root@VM-0-9-opencloudos zbc]# ls -l TEST.c-rwxr--rwx 1 root root 0 Apr 26 06:27 TEST.c

1.2.4数字模式

   如2.1.2所言,文件的权限可以被认为是一段九位二进制序列。于是倘若我们将其33一组,转成十进制。于是基于: ,例如假设你要算 rwxr-xr–:

  • 拥有者 (rwx)
    :4 + 2 + 1 = 7
  • 所属组 (r-x)
    :  4 + 0 + 1 = 5
  • 其他人 (r–)
      :  4 + 0 + 0 =  4

因此,在修改权限时可以以如下形式书写,效果一致。    chmod [十进制权限表示数][文件名称] 这种修改方式做不到“指定某一个具体的人”。

数字
权限位 (Binary)
字符 (rwx)
实际权力描述
常见场景
0000---毫无权限
少见,通常用于完全封死某个身份。
1001--x仅执行
极少见,仅允许运行,甚至不能读取代码。
2010-w-仅写入
极罕见,类似“盲写”,不能看文件只能改。
3011-wx写和执行
目录中常见,允许进入并增删文件但不能列出。
4100r--只读
常见的配置文件保护状态。
5101r-x读与执行目录标配
,能进目录、能看列表,但不能改。
6110rw-读与写普通文件标配
,能看能改,但不能当作程序跑。
7111rwx全能最高权限
,拥有者对目录/文件的完全控制。
[zbc@VM-0-9-opencloudos ~] ls -l TEST.c-rwxrwxrwx 1 root root 0 Apr 26 06:27 TEST.c[zbc@VM-0-9-opencloudos ~] chown root testchown: changing ownership of 'test': Operation not permitted[zbc@VM-0-9-opencloudos ~] ls -l test-rwxr-xr-x 1 root zbc 48112 Apr 25 14:05 test[zbc@VM-0-9-opencloudos ~] ls -l test-rwxr-xr-x 1 root root 48112 Apr 25 14:05 test

   我们发现,系统是不允许你随便把文件给别人的,因为谁都不知道你的这个文件是什么,所以出于安全考量做出这样的设计。

技巧用法,chown own:grp [文件名]

[zbc@VM-0-9-opencloudos ~] sudo chown root:root test[sudo] password for zbc: [zbc@VM-0-9-opencloudos ~] ls -l test----rwxrwx 1 zbc zbc 48112 Apr 25 14:05 test[zbc@VM-0-9-opencloudos ~] 

当用户 zbc 尝试访问该文件时:

  1. 身份识别:
     系统检测到当前用户是 zbc,而该文件的 拥有者 (Owner) 也是 zbc。身份匹配成功!
  2. 权限锁定:
     系统立即锁定“拥有者”身份,发现对应的权限位是 ---(即:无读、无写、无执行权限)。
  3. 逻辑短路:
     虽然 zbc 同样属于 所属组 (Group)(该组拥有 rwx 权限),但由于第一阶段已经匹配成功,系统不再向后查看组权限。
  4. 最终结果:
     ```bash [zbc@VM-0-9-opencloudos ~] ls -ld /home/otheruserdrwx------ 3 otheruser otheruser 4096 Apr 26 20:26 /home/otheruser#尝试进入该目录[zbc@VM-0-9-opencloudos ~] chmod 444 my_dir[zbc@VM-0-9-opencloudos ~] ls -ld test_dirdrwxrwxrwx 2 zbc zbc 4096 Apr 26 20:26 test_dir[zbc@VM-0-9-opencloudos ~] rm test_dir/root_filerm: remove write-protected regular empty file 'test_dir/root_file'? y# 结果:删除成功!# 逻辑:删除文件本质上是修改“目录表”的内容(删掉那一行映射),# 只要对目录有 w 权限,就能动这张表,而不需要对文件本身有权限。

当然root还是什么都可以干,除了正在运行从程序受保护不能改。


好了,本期内容到此结束,我是此方,我们下期再见。バイバイ! 

最新文章

随机文章