5

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

4

4 回答 4

8

这对我有用:

sftp.chmod(Integer.parseInt(permissionStringInDecimal,8), str_Directory+fileName);
于 2014-07-16T11:22:31.773 回答
6

Unix 中的文件权限代码(777例如 )是八进制的,而不是十进制的。如:当你做类似chmod -R 777的事情时,数字被解释为八进制输入而不是十进制输入。

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

  • 所有者
  • 团体
  • 世界

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

  • 执行

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

(进一步阅读: http: //www.december.com/unix/ref/chmod.html

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

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

于 2012-10-31T04:42:59.620 回答
0

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

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

于 2018-10-09T10:11:38.790 回答
-2

这是一个简短而完整的示例,说明如何使用通常的方式来描述 CHMOD 权限,从而轻松地使用 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);
    }
}
于 2013-10-13T21:43:31.957 回答