在Unix中,如何使用JSCH设置目录权限?我想做drwxrwxrwx。 Filezilla说这个整数是775但是JSCH没有正确设置权限。在JSCH设置权限后,Filezilla说它是407.
答案 0 :(得分:7)
这对我有用:
sftp.chmod(Integer.parseInt(permissionStringInDecimal,8), str_Directory+fileName);
答案 1 :(得分:5)
Unix中的文件权限代码(例如777
)是八进制的,而不是十进制的。如:在执行chmod -R 777
之类的操作时,数字被解释为八进制输入而不是十进制输入。
该系统来自于有3个权限组:
并且每个组都有一个“开/关位”:
因此,八进制基数足以表示组的所有可能的权限配置。 3个八进制数字分别对应一个权限组。
(如需进一步阅读:http://www.december.com/unix/ref/chmod.html)
回到你的JSCH问题:十进制整数775
的八进制表示是0o1407
,我的怀疑是小数775实际上是发送而不是八进制775,FileZilla可能很好将0o1407
的第3个最低有效数字左侧的内容截断(因为假设没有超过第3个最低位的数据并不合理)
现在,509
是八进制775
的十进制表示,请尝试将其与JSCH一起使用。
答案 2 :(得分:0)
答案 3 :(得分:-2)
这是一个简短的完整示例,说明如何轻松使用Jsch来更改chmod 使用通常的方式来描述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);
}
}