【问题标题】:How to unmount a Linux folder from Java如何从 Java 中卸载 Linux 文件夹
【发布时间】:2012-04-18 03:29:13
【问题描述】:

我试过了:

final ProcessBuilder pb = new ProcessBuilder("umount", "foldername");
final Process p = pb.start();

投掷

umount: /home/user/foldername 不在 fstab 中(而你不在 根)

我试过了

final ProcessBuilder pb = new ProcessBuilder("sudo","umount", "foldername");
final Process p = pb.start();

投掷

sudo:对不起,你必须有一个 tty 才能运行 sudo

我获得了 root 密码,但无法将其提供给 ProcessBuilder。我也无法编辑fstab(或任何需要编辑的内容),因为它是从保存的操作系统映像在远程服务器上启动的远程虚拟机。

我只想以 root 身份运行命令。

【问题讨论】:

  • 直接从终端运行这些命令是否有效?
  • 如果我不是 root,第一个命令打印的内容完全相同(如果我是 root,它会成功卸载文件夹)。第二个命令提示输入密码。
  • 您可以允许运行您的 java 程序的用户在不输入密码的情况下卸载。查看文件 /etc/sudoers(可使用命令“visudo”编辑)以获取一些示例。
  • 这个答案可能有用stackoverflow.com/questions/9716609/…

标签: java linux shell


【解决方案1】:

你有几个选择:

  1. 使控制终端可用于sudo,以便用户可以在那里输入密码。

    pb = new ProcessBuilder("sh", "-c", "sudo umount foldername </dev/tty");
    Process p = pb.start();
    p.waitFor();
    
  2. 使用gksudo 而不是sudo 执行程序。使用 GTK+ 的系统通常附带 gksu 包作为 susudo 的图形界面。

    pb = new ProcessBuilder("gksudo","umount", "foldername");
    
  3. sudo打开一个终端模拟器窗口:

    pb = new ProcessBuilder("xterm","-e","sudo","umount","foldername");
    

【讨论】:

    猜你喜欢
    • 2017-12-15
    • 1970-01-01
    • 2016-12-25
    • 2018-07-26
    • 2021-11-27
    • 1970-01-01
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    相关资源
    最近更新 更多