Java 使用JSCH设置目录权限CHMOD

Java 使用JSCH设置目录权限CHMOD,java,jsch,Java,Jsch,在Unix中,如何使用JSCH设置目录权限?我想做drwxrwx。Filezilla说这个整数是775,但是JSCH没有正确设置权限。JSCH设置权限后,Filezilla说是407 Unix中的文件权限代码(777)是八进制,而不是十进制。如:当您执行类似于chmod-R 777的操作时,数字被解释为八进制输入,而不是十进制输入 此系统源于有3个权限组: 所有者 团体 世界 每组都有一个“开/关位”,用于: 阅读 写 执行 所以八进制足以表示组的所有可能权限配置。3个八进制数字分别对应

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

Unix中的文件权限代码(
777
)是八进制,而不是十进制。如:当您执行类似于
chmod-R 777
的操作时,数字被解释为八进制输入,而不是十进制输入

此系统源于有3个权限组:

  • 所有者
  • 团体
  • 世界
每组都有一个“开/关位”,用于:

  • 阅读
  • 执行
所以八进制足以表示组的所有可能权限配置。3个八进制数字分别对应一个权限组

(欲进一步了解:

回到JSCH的问题:十进制整数
775
的八进制表示法是
0o1407
,我怀疑实际上发送的是十进制775而不是八进制775,FileZilla很可能会截断
0o1407
第三个最低有效位左边的内容(因为假设没有超过第三个最低有效位是合理的)


现在,
509
是八进制的十进制表示法
775
,请尝试将其与JSCH一起使用。

下面是一个简短完整的示例,说明如何使用JSCH通过 使用常规方法取消CHMOD权限

========================================================= 简短答复: int chmodInt=Integer.parseInt(chmod,8); 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);
    }
}
这对我很有用:

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

这都是关于服务器配置的


只需取消勾选“覆盖时自动重命名现有文件”

就可以了。要清楚,像“755”和“644”这样的权限是八进制数,而不是十进制数。将它们存储在名为
permissionStringInDecimal
的变量中可能会令人困惑。这只是Jsch糟糕的API的一个例子。