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など) は、10 進数ではなく 8 進数です。のように: のようなことをするchmod -R 777と、数字は 10 進入力ではなく 8 進入力として解釈されます。

このシステムは、3 つの権限グループがあるという事実から来ています。

  • オーナー
  • グループ
  • 世界

各グループには、次の「オン/オフ ビット」があります。

  • 読んだ
  • 書きます
  • 実行する

そのため、8 進数は、グループの可能なすべての許可構成を表すのに十分です。8 進数の 3 桁は、それぞれ許可グループに対応します。

(これについてさらに読むには: http://www.december.com/unix/ref/chmod.html )

JSCH の問題に戻ります: 10 進整数775の 8 進表現は です0o1407。私の疑いでは、実際には 8 進 775 ではなく 10 進 775 が送信され、FileZilla は 3 番目の最下位桁の左側にあるものを切り捨てている可能性があります。 of 0o1407(3 番目の最下位ビットを超えて何もないと仮定するのは不合理ではないため)

現在、509は octal の 10 進数表現です775。代わりに JSCH でそれを使用してみてください。

于 2012-10-31T04:42:59.620 に答える
0

それはすべてサーバー構成に関するものです。ここに画像の説明を入力

上書き時に既存のファイルの名前を自動的に変更するのチェックを外すだけです

于 2018-10-09T10:11:38.790 に答える
-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);
    }
}
于 2013-10-13T21:43:31.957 に答える