

os.Chmod 时到底用 777 还是 0777?
source link: https://www.cyhone.com/articles/0777-or-777/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

os.Chmod 时到底用 777 还是 0777?
问题是这样的:我在代码里面调用了 os.Chmod("test.txt", 777)
,希望把该文件的读写及执行权限对所有用户开放。
执行完代码,顺手 ls 看了下。如下:
$ ls -l test.txt
-r----x--x 1 cyhone 1085706827 0 Jun 20 13:27 test.txt
结果出乎意料,不仅文件权限没有按预期的变成 rwxrwxrwx
。反而执行完后,当前用户就只剩可读权限了,其他用户就只有可执行权限同时无读写权限。
因为这实在是一个简单又愚蠢的错误,所以先直接给出结论:
- 在 C 语言和 Go 语言中,如果想要将文件权限形式修改为
rwxrwxrwx
,需要写成0777
,而非777
。 - 0777 是八进制格式,777 是十进制格式。在用 Go 语言表示此类权限的时候,如果要对标
chmod
命令的表示形式,用八进制表示更方便和准确点。 - 如果不是在代码里,而是在命令行直接调 chmod 的话,那
0777
和777
都可以。
这个问题虽然非常简单,但尴尬的是我还踩了坑,所以把这个问题及原因分享出来。
为什么 rwxrwxrwx
对应的是八进制的 0777
,而不是 777
呢?。
原因是,底层在将数字翻译成对应权限时,实际上用的该数字对应的二进制位,并将后 9 位逐位翻译。
例如,对应八进制 0777
来说,其二进制的表示如下:
从上图来看,0777
就代表了 rwxrwxrwx
。
而对于十进制的 777
,其二进制的表示形式如下:
从其按位翻译来看,恰好 777
的后 9 位,就代表了 r----x--x
, 和我们的运行结果一致。
那么话说回来,根据这个理论,如果非要用十进制表示 rwxrwxrwx
,那么应该是 511
。
我们可以用代码实验下:
fileMode := os.FileMode(511)
fmt.Println(fileMode.String()) // -rwxrwxrwx
从结果看的确是符合预期的。
如果你在阅读过程中发现本文有错误或者存疑之处,请在下方评论区或者通过公众号进行留言,作者会尽快回复和解答。感谢您的支持与帮助。

Recommend
-
16
用硬纸板制作一台超仿真波音 777 客机园长简评:20 世纪世界最著名建筑师密斯.凡.德罗总结他成功经验:魔鬼...
-
23
DevWikiPermissions 0777 for xxx are too open在使用wsl 提交代码的时候, 控制台提示这个错误:$ git push --set-upstream origi...扫描右侧二维码阅读全文232020/05
-
11
My idea for recovering from runaway chmod/chown calls Web hosting support is an interesting business. You exist because the customers need help doing things on their machines. In my case, my job existed to help people get things...
-
6
origin url Permissions masking with umask, chmod, 777 octal permissions Ian! D. Allen – [email protected] –
-
6
Llinux文件目录权限及chmod命令简析Jager · 4月22日 · 2014年chmod ·
-
10
代币是其区块链原生的数字资产,为了提供交互性、可用性和统一性,引入了代币标准,创建代币的最广泛使用的标准ERC20、ERC-20 和 ERC-777中,它们都是以太坊区块链上存在的可替代代币的一些标准。智能合约开发有许多代币标准;然而,ERC 20是基本标准或默认标准...
-
3
Привки, Кодефорсес (ノ◕ヮ◕)ノ*:・゚✧(Hello, Codeforces on Russian)
-
6
Apple website glitch sets iPhone 14 price at $777,777/mo September 13, 2022 ...
-
10
chmod chmod 777意味着什么 您正在尝试修复Web服务器的权限问题,并在Internet上找到了答案,说您需要递归修改Web目录的权限 ...
-
3
golang openfile 权限 0777 2023-11-23 Golang ...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK