【发布时间】:2020-01-04 03:13:54
【问题描述】:
我看到? 是stat.filemode() 结果的第一个字母。但是我不记得在普通的linux系统中我见过?作为第一个字母。
https://en.wikipedia.org/wiki/Chmod
? 代表什么?如何将- 作为第一个字母?谢谢。
#!/usr/bin/env bash
printMode() {
local mode; mode=$1; shift
printf '%s\t' "$@"
python3 -c 'import stat, sys; print(stat.filemode(int(sys.argv[1])))' "$mode"
}
printMode 0 0
for ((i=1;i<16;++i)); do
printMode "$((2**(i-1)))" "$i"
done
for ((i=0;i<=2;++i)); do
printMode "$((2**(i*3) + 2**(9+i)))" "$((i*3+1))" "$((10+i))"
done
0 ?---------
1 ?--------x
2 ?-------w-
3 ?------r--
4 ?-----x---
5 ?----w----
6 ?---r-----
7 ?--x------
8 ?-w-------
9 ?r--------
10 ?--------T
11 ?-----S---
12 ?--S------
13 p---------
14 c---------
15 d---------
1 10 ?--------t
4 11 ?-----s---
7 12 ?--s------
【问题讨论】:
-
stat.mode()旨在处理os.stat()返回的模式。给它与实际模式不对应的随机数会产生奇怪的行为。 -
2**15返回d的位置是哪个操作系统?stat位的含义是每个操作系统供应商,因此没有全局规范规则。 (这就是为什么人们总是应该使用宏而不是尝试自己硬编码位掩码值,因此 Python 为这些 C 宏提供包装器)。