2012-10-31 92 views

回答

5

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

该系统源于一个事实,即有3个权限组:

  • 所有者
  • 世界

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

  • 阅读
  • 执行

所以八进制基是足以表示为一组所有可能的许可配置。这三个八进制数字分别对应一个许可组。

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

回到你的问题JSCH:十进制整数775的八进制表示是0o1407,我怀疑是十进制775实际发送八进制775,而不是和FileZilla中很可能被截断东西的0o1407第三至少显著位的左边(因为它不是不合理它假定没有什么过去的3最显著位)现在

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

+1

使用509拿到八进制775的工作完美 – dumazy

-2

这里是一个短,如何能easyly使用Jsch使用通常的方式通过 改变chmod来decrib在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); 
    } 
} 
6

这工作对我说:

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

需要明确的是,类似的权限“ 755“和”644“是_octal_数字,不是小数。将它们存储在名为'permissionStringInDecimal'的变量中可能会令人困惑。 – Kenster

+0

这只是Jsch可怕的apis的一个例子。 – zczhuohuo

相关问题