chmod权限计算器

九个复选框对应 owner / group / other 各自的 rwx,另加 setuid、setgid、sticky 三个特殊位;勾选即得八进制,输入八进制也即时反推符号串,双向联动。

所有者 u
属组 g644 默认:属组只读
其他人 o
特殊位写在第四位,如 4755
八进制644
符号串rw-r--r--
符号模式u=rw,g=r,o=r
可复制命令chmod 644 file.txt
默认示例 644:所有者读写、属组只读、其他人只读,十进制值 420。

常用权限对照表

数字符号串典型用途
755rwxr-xr-x目录与可执行脚本:自己全权,别人能进能读能执行
644rw-r--r--普通网页文件、图片、配置:只有属主能改
700rwx------私有目录:SSH 的 ~/.ssh 就是它
600rw-------私钥、含密码的配置文件
640rw-r-----日志:属主可写,同组只读,其他人无权
444r--r--r--只读参照文件,属主也得先改权限才能改内容
666rw-rw-rw-全员可写,危险,见正文 777 一节
777rwxrwxrwx全开,生产环境禁用
4755rwsr-xr-xsetuid:以属主身份运行,如 passwd
2755rwxr-sr-xsetgid 目录:新文件继承目录属组
2644rw-r-Sr--setgid 但组无执行位,大写 S 是「空挂」提示
1777rwxrwxrwtsticky:/tmp 的惯例,各人只能删自己的文件
1755rwxr-xr-tsticky 但其他人不可写,t 只剩防删含义
0000---------全部收回,常用于临时封存

表里先显示 12 行,点「加载更多」展开全部 14 行;「复制对照表」复制制表符分隔文本,「导出 CSV」带 UTF-8 BOM,Excel 打开不乱码。

使用方法

  1. 页面打开时勾选状态就是 644:所有者 r、w 两格,属组和其他人各只有 r 格。上方的八进制、符号串与命令三张卡片给出的都是这个默认示例的结果,先看一眼就知道输出长什么样。
  2. 改权限最直接的方式是点复选框:比如给所有者补上「执行 x (1)」,八进制立刻从 644 变 744,符号串从 rw-r--r-- 变 rwxr--r--。这张 chmod权限计算器的矩阵是双向的,勾选与数字永远同步。
  3. 手头只有一个数字时,把它填进「八进制输入」框(示例 644)后按回车;只有一个符号串时填「符号模式输入」框(示例 u=rw,g=r,o=r),支持 u+x、go-w、a=rwx 这类写法,多段用逗号隔开。
  4. 需要第四位时勾「特殊位」那一行的 setuid / setgid / sticky,八进制会自动变成 4 位(示例 4755);命令卡片始终给出可直接粘贴的 chmod 命令,点「复制命令」拿走。
  5. 底部的对照表列出 14 个常用权限值。填完不确定合不合理时,对照表里找相近的行,再看「边界、特殊位与常见误读」一节核对特殊位的含义。

这个chmod权限计算器能解决什么问题

一是看懂 ls -l 输出。终端里看到 drwxr-xr-x 时,新手很难瞬间把它和 755 对上号:本页的矩阵把 9 个字符拆成 3 行 3 列,哪一位对应哪个数字一目了然,反向输入 755 也立刻还原成符号串。

二是拼出最小权限而不是抄 777。论坛老答案爱给一句 chmod -R 777,出了问题再后悔。在矩阵里逐格勾选,你会亲眼看到「其他人可写」那格亮起来时警告区的提示——按需求只勾真正需要的位,比如 Web 目录 755 加文件 644,就够绝大多数部署用。

三是核对特殊位。setuid、setgid、sticky 在 ls -l 里藏在 x 的位置上,显示成 s、S、t、T,多数人一年也遇不到几次。本页把三个特殊位单独列一行,勾上就进第四位八进制,符号串里大写 S 和小写 s 的区别也会如实反映(组无执行位时是 S)。

四是生成能直接粘贴的命令。算出 640 之后还要回忆 chmod 语法?本页命令卡片直接给出 chmod 640 file.txt,符号模式的等价写法也一并列出,两种习惯都能照抄。

本页不做这些事:不改真实文件的权限(终端里的 chmod 才是执行者,本页只负责算);不做 chown 属主属组的计算;不涉及 umask 的默认权限扣除(那是新建文件时的另一套规则,可参考页面底部的 Git 速查表等开发者工具排查仓库内文件权限问题)。

原理:rwx=421 与三位八进制

整个换算只依赖一个权重表:r=4、w=2、x=1,每类用户三位相加得到一个 0~7 的八进制数字。6 = 4+2 = rw,5 = 4+1 = rx,4 = r,7 = 4+2+1 = rwx。三位数字依次拼给所有者、属组、其他人,这就是 644 的全部含义:所有者 6(rw),属组 4(r),其他人 4(r)。四位写法时第四位是特殊位 4/2/1 的同样加法:setuid=4、setgid=2、sticky=1。

组合总数是个确定的数:每位 8 种取值,三位八进制一共 8³ = 512 种权限,加第四位就是 8⁴ = 4096 种。777 是其中最大的一种,十进制值 511,恰好等于 2⁹−1——9 个权限位全 1。644 的十进制是 420,755 是 493,脚本里偶尔用数字形式(如 PHP 的 fileperms())时会遇到。

符号模式 ugoa+-=rwxst 的语义来自 POSIX:who 部分省略时等价于 a(全部),但有一个例外——只写 +x 时,部分实现会受 umask 影响,明确写 a+x 更稳。op 三种动作里 = 是「精确赋值」:未列出的位一律清零,所以 u=rw 会顺手抹掉所有者的 x 位,这点和 + 只叠加不同。s 和 t 写在权限字母里:s 出现在 u 段设 setuid、出现在 g 段设 setgid,t 出现在 o 段设 sticky。

为什么用八进制而不是十进制?因为 8 = 2³,一个八进制位恰好装下一个 3-bit 组,不存在跨位借位。写成十进制 420 就完全看不出各位是什么——这正是这份 chmod权限计算器坚持展示双向结果的原因:八进制给人抄命令,符号串给人读含义。

完整示例(数值仅作演示)

示例条件与页面打开时的默认状态完全一致:所有者勾 r+w(4+2=6),属组勾 r(4),其他人勾 r(4),特殊位全空。这套勾选的实测输出是:

换两组数字看联动过程。输入 755 反推:所有者 7 → r+w+x 全勾,属组与其他人 5 → 各勾 r 和 x,符号串 rwxr-xr-x,十进制 493。再试 4755:勾上 setuid 后八进制从 755 变 4755,符号串第一段从 rwx 变 rws——s 占用的正是执行位的位置,含义是「运行时以属主身份执行」。这两组数字与对照表里的行逐位一致。

输入范围与常用权限对照表

八进制输入框接受 3~4 位 0-7 数字(最长 4 字符),644、755、4755、1777 都合法;出现 8、9 或位数不对会按具体原因报错,不会静默归零。符号输入接受逗号分隔的多段 [ugoa][+-=][rwxst]。高频值直接查表:

表里的每一行都可以在本页矩阵里复现:把 2755 填进八进制输入框,矩阵会勾出 setgid 加 755 的九格,与表内符号串 rwxr-sr-x 一致。

边界、特殊位与常见误读

常见问题

777 到底有什么风险?

777 意味着任何能登录这台机器的账号都可以改这个文件、改完还能执行它。配合可写目录,攻击者可以替换脚本、植入后门。Web 场景下很多人用 777 「解决」上传问题,正确做法是把目录属主改成运行 PHP 的用户,再给 755。这个 chmod权限计算器在矩阵里把「其他人可写」一格做成显式警告,就是为了让你看见自己在开什么。

为什么输入 779 或 648 会报错?

八进制每一位只有 0~7 八种取值,8 和 9 根本不存在——779 不是「比 777 大一点的权限」,而是非法输入。648 同理,第三位的 8 无法映射回 rwx 三位。工具按具体数字报错并提示改写,而不是猜一个最近邻值,因为权限差一位就是安全事故。

目录和文件该用什么权限?

目录的 x 位是「进入权」,所以目录基准是 755(自己全权、他人可进可读);文件不需要进入,644 即可。常见误区是给目录 644:能 ls 出文件名,却读不了内容。反过来给文件 755 则会让它「可执行」,若目录允许被人写入,等于开放了任意代码执行的入口。

s 和 S、t 和 T 的区别是什么?

小写表示特殊位「连同执行位」一起生效:rws、rwt 都含 x。大写表示特殊位置位但执行位是空的:rwS、rwT 属于「空挂」状态,不产生效果。查 ls -l 看到大写时,先补 x 再谈特殊位。本页符号串严格按此规则渲染,对照表 2644 那行就是大写 S 的实例。

符号模式里不写 who(如 +x)和写 a+x 一样吗?

不完全一样。POSIX 规定 who 省略时等价于 a,但「仅 +x 且 umask 有限制」的场合,多数实现会让省略 who 的 +x 只作用于 umask 允许的部分;显式写 a+x 则无视 umask 全部加上。写脚本时建议永远把 who 写全,语义只依赖命令本身。

600 和 644 该给私钥还是网页文件?

私钥 600:只有属主能读,SSH 对权限过宽的私钥会直接拒绝使用。网页文件 644:Web 服务进程需要读,属主需要写,其他人只读没有风险。判断口径就一条——「谁必须读、谁必须写」,其余一律收掉。拿不准时把两种身份填进本页矩阵,看哪几格是真正需要的。

第四位 4、2、1 分别是什么?

4 是 setuid(运行时以文件属主身份生效)、2 是 setgid(运行时以属组身份;用在目录上则新文件继承目录属组)、1 是 sticky(用在目录上,只有属主能删自己的文件)。它们合进八进制第四位:4755 = setuid+755。对照表里 4755、2755、1777 三行是各自的代表场景。

算出来的结果怎么用在 git 仓库里?

git 只记录文件的「可执行位」这一个权限信息(100644 与 100755 两种模式),其余位由本地系统决定。所以仓库里对不对得上,先看文件是否该有 x 位;权限改动可以用 git update-index --chmod=+x 登记。整套分支与命令速查,见本页底部的 Git 速查表。

相关工具