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