繁体   English   中英

使用JSCH设置目录权限CHMOD

[英]Set Directory Permissions CHMOD with JSCH

在Unix中,如何使用JSCH设置目录权限? 我想做drwxrwxrwx。 Filezilla说这个整数是775但是JSCH没有正确设置权限。 在JSCH设置权限之后,Filezilla说它是407。

这对我有用:

sftp.chmod(Integer.parseInt(permissionStringInDecimal,8), str_Directory+fileName);

Unix中的文件权限代码(例如777 )是八进制的,而不是十进制的。 如:在执行chmod -R 777 ,数字被解释为八进制输入而不是十进制输入。

该系统来自于有3个权限组:

  • 所有者
  • 世界

每个组都有一个“开/关位”:

  • 执行

因此,八进制基数足以表示组的所有可能的权限配置。 3个八进制数字分别对应一个权限组。

(有关此内容的进一步阅读: http//www.december.com/unix/ref/chmod.html

回到你的问题与JSCH:十进制整数775的八进制表示是0o1407 ,我怀疑小数775实际上是发送而不是八进制775,FileZilla可能很好地截断到第三个左边的东西0o1407有效数字(因为它假设没有超过第3个最低位的数据并不是不合理的)

现在, 509是八进制775的十进制表示,尝试使用JSCH代替。

这都是关于服务器配置的。 在此输入图像描述

只是取消注意在覆盖时自动重命名现有文件

这里有一个简短的完整示例,说明如何通过使用通常的方式来描述CHMOD权限,轻松使用Jsch来更改chmod

================================================== =======简答:int chmodInt = Integer.parseInt(chmod,8); channel.chmod(chmodInt,fileLinux);

================================================== =======完整示例:

package example;

import java.io.IOException;
import java.util.Date;

import main.services.ServiceSSH;

import org.junit.Test;

import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

public class ExampleChmod {

    @Test
    public void testchmod() throws JSchException, SftpException, IOException {
        Session session = ServiceSSH.getSession(); // Use your own session Factory
        Date dateStart = new Date();
        chmod("/home/user/launcher.sh", "777", session);
        Date dateEnd = new Date();
        session.disconnect();
        System.out.println(dateEnd.getTime() - dateStart.getTime() + "ms");
    }

    public static void chmod(String fileLinux, String chmod, Session session) throws JSchException, SftpException {
        ChannelSftp channel = (ChannelSftp) session.openChannel("sftp");
        channel.connect();
        chmod(fileLinux, chmod, channel);
        channel.disconnect();

    }

    private static void chmod(String fileLinux, String chmod, ChannelSftp channel) throws SftpException {
        int chmodInt = Integer.parseInt(chmod, 8);
        channel.chmod(chmodInt, fileLinux);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM