实际项目中,遇到了使用rsync拉取别的服务器文件,用到了ssh命令;其中rsync的使用有一个密码的设置,根据rsync的命令,是读取一个权限600文件的方式获取密码:
rsync -avz --password-file=rsyncd.passwd `user`@`ip`::`目标rsync配置名` `目的文件夹`
所以此篇也顺便记录了以了解的nodejs模块fs的chmod方法。
一、nodejs引入子进程child_process,调用命令
var exec = require('child_process').exec;
let cmdPro1 = await new Promise((resolve, reject) => {
exec('chmod 600 rsyncd.passwd', function (err, stdout, stderr) {
console.log('chmod err, stdout, stderr ---> ', err, stdout, stderr);
if(err){
reject({ retcode: -1, retmsg: err})
}else{
resolve({ retcode: 0})
}
});
});
此处还有一个 child_process.execFile(file[, args][, options][, callback]) 读取文件的方法,但是我实践中,并不能很好实现我此处的目的,设置600之后拉取文件,因此放弃了。
execFile出现问题: throw errnoException(err, ‘spawn’); execFile执行sh文件抛出错误
解决办法: 看起来您没有权限运行某些文件,尝试在项目的根路径中输入next命令: chmod -R u + x。
如果现在已修复,您必须找到哪些文件具有不正确的权限。如果您想撤销更改以查找那些有问题的文件,请输入next命令:git checkout - 。
二、fs.chmod修改文件权限
先复习一下文件权限:
-rwxrwxrwx,r:4、w:2、x:1,三个一组(所有者、群组、其他人)叠加,因此600就是rw-------。
查看文件权限 ls -l file
fs.chmod的使用方法如下:
fs.chmod(path, mode, callback)
fs.chmodSync(path, mode)