如果我以非特权用户身份创建文件,然后将权限模式更改为400
,则该用户将其正确地视为只读:
$ touch somefile
$ chmod 400 somefile
$ [ -w somefile ] && echo rw || echo ro
ro
一切都很好。
但是随后出现了root:
# [ -w somefile ] && echo rw || echo ro
rw
有没有搞错?当然,root可以写入只读文件,但不应养成它的习惯:最佳实践将倾向于指示我应该能够测试写入许可位,如果没有,则设置它这种方式是有原因的。
我想我既想了解为什么会发生这种情况,又要了解在测试未设置写位的文件时如何得到错误的返回码?
test -w
aka[ -w
不检查文件模式。它检查它是否可写。对于root,它是。
$ help test | grep '\-w'
-w FILE True if the file is writable by you.
我测试的方法是对输出stat(1)
(“%a
八进制访问权限”)进行逐位比较。
(( 0$(stat -c %a somefile) & 0200 )) && echo rw || echo ro
注意,子外壳$(...)
需要一个0
前缀,以便的输出stat
被解释为八进制(( ... ))
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句