我们可以测试目录是否可由当前进程的uid写入:
if [ -w $directory ] ; then echo 'Eureka!' ; fi
Run Code Online (Sandbox Code Playgroud)
但是,有人可以建议一种方法来测试目录是否可由其他 uid 写入?
我的方案是我正在管理MySQL Server实例,我想暂时更改慢查询日志文件的位置.我可以通过执行MySQL命令SET GLOBAL slow_query_log_file='$new_log_filename',然后禁用和启用查询日志记录来mysqld启动使用该文件.
但我希望我的脚本检查mysqld进程的uid 是否有权创建新的日志文件.所以我想做一些像(伪代码)的东西:
$ if [ -w-as-mysql-uid `basename $new_log_filename` ] ; then echo 'Eureka!' ; fi
Run Code Online (Sandbox Code Playgroud)
但当然这是一个想象的测试谓词.
澄清: 我想要一个不依赖的解决方案,su因为我无法假设我的脚本用户具有su特权.
在Node中,该fs.stat方法返回一个fs.Stats对象,我可以通过该fs.Stats.mode属性获取文件权限.
以下是来自节点和shell的相同目录的实际输出:
node shell
17407 d rwx rwx rwt
16877 d rwx r-x r-x
16749 d r-x r-x r-x
16832 d rwx --- ---
Run Code Online (Sandbox Code Playgroud)
我需要知道如何解析fs.Stats.mode数字以获得权限.
数字是八进制数字系统,转换为十进制后如下所示:
17407 41777 d rwx rwx rwt
16877 40755 d rwx r-x r-x
16749 40555 d r-x r-x r-x
16832 40777 d rwx --- ---
Run Code Online (Sandbox Code Playgroud)
从八进制到十进制的转换是这样的:
parseInt(stat.mode.toString(8), 10)
Run Code Online (Sandbox Code Playgroud)
关于linux中文件权限的精彩教程 - https://www.linux.com/learn/understanding-linux-file-permissions