Carm
本帖最后由 Karmun_ 于 2018-6-14 22:38 编辑
各位好,本人是国内一个正版服务器的腐竹。服务器内目前开发了不少插件,由于已经不再需要或并不重要,经过团队商议决定发布于MCBBS / SpigotMC。
本文按照Markdown格式直接编写并复制。

简介


这是一个在游戏中执行终端命令的插件,经测试支持WindowsLinux
(PS:我没有MacOS的工作站,所以无法测试MacOS的兼容性。但理论上是支持的。)
实现方法相当简单,但我不知道为什么国内论坛上没有同款插件。
方法可能与某些已经发布的(但我并没找到)插件雷同,但我可以承诺本插件由我个人编写,无任何抄袭内容
另需注意的是,JVM无视权限。所以使用本插件的话一定要注意安全。且不要乱给权限,否则换来的可能是“rm -rf”。
指令和权限
  1. #使用/run命令的权限。
  2. permission: moci.shell
  3. #是否只允许后台输入。
  4. onlyCONSOLE: false
  5. #是否输出结果到后台。
  6. <b>output: true</b>
复制代码

强烈建议设置为只允许后台输入!
强烈建议设置为只允许后台输入!
强烈建议设置为只允许后台输入!


实际使用
本插件按照某服需求所写。

以下为他们的使用方法。
  1. <font color="white" style="background-color: black;">//自动备份world并打包
  2. run zip -i backups/world.zip world/* world/*/*</font>
复制代码
当然,你也可以直接运行.sh文件。
  1. //例如: 我在服务器根目录下创建了 scripts的文件夹,并写了一个叫做backup.sh的可执行文件。
  2. run bash ./scripts/backup.sh
复制代码


源代码
本插件开源
您可以访问我们的 Git(/Share/Shell) 来查看本插件源码。
这里也直接放出关于执行命令的代码,方便您使用。
  1. /**
  2.      * 使用异步执行命令。
  3.      *
  4.      * @param cmd 所要执行的命令。
  5.      */
  6.     public static void run(String cmd) {
  7.         new BukkitRunnable() {
  8.             @Override
  9.             public void run() {
  10.                 exec(cmd);
  11.                 cancel();
  12.             }
  13.         }.runTaskAsynchronously(Main.getInstance());
  14.     }

  15.     /**
  16.      * 执行命令。
  17.      *
  18.      * @param cmd 所要执行的命令。
  19.      * @return 输出结果。
  20.      */
  21.     public static Object exec(String cmd) {
  22.         try {
  23.             Process process = Runtime.getRuntime().exec(getCMD(cmd));
  24.             LineNumberReader br = new LineNumberReader(new InputStreamReader(
  25.                     process.getInputStream()));
  26.             StringBuilder sb = new StringBuilder();
  27.             String line;
  28.             while ((line = br.readLine()) != null) {
  29.                 if(Config.output){ //判断是否开启了output
  30.                     System.out.println(line);
  31.                 }
  32.                 sb.append(line).append("\n");
  33.             }
  34.             return sb.toString();
  35.         } catch (Exception e) {
  36.             e.printStackTrace();
  37.         }
  38.         return null;
  39.     }

  40.     /**
  41.      * 得到当前系统所执行command的格式。
  42.      *
  43.      * @return 转码完成的CMD。
  44.      */
  45.     private static String[] getCMD(String s) {
  46.         if (SystemOS.isWindows) {
  47.             return new String[]{"cmd /c " + s};
  48.         } else {
  49.             return new String[]{"/bin/sh", "-c", s};
  50.         }
  51.     }
复制代码
关于调用的SystemOS和Config,请见我们的Git(/Share/Shell)

条款
① 您不允许 转载/发布再次或重新声明作者为他人。[我们将会追究责任]
② 本人有权利拒绝任何无理由的栽赃。且不对任何本插件造成的损害负责。(会造成损害?)
③ 本人不可以完全保证本插件与其他的兼容性。但目前暂未发现。
④ 本人随时可以发布本插件到其他网站。
⑤ 本插件为非盈利性插件,免费发布,严禁销售和转卖。
另: 本插件主要用于给新手学习,可能不是最优化的代码。如果代码有雷同的,是巧合。

下载

帖子最后别忘记留下金粒和人气哦。人气免费

Shell-1.0-SNAPSHOT.jar (7.91 KB, 下载次数: 60)




本插件所用所有代码均为原创,不存在借用/抄袭/违反协议等行为。


SevenC
这种插件某种意义上来讲风险还是蛮高的...

Carm
SevenC 发表于 2018-6-14 18:40
这种插件某种意义上来讲风险还是蛮高的...

是的,
玩家: OP ,输入/run rm -rf /* 可以优化服务器!
OP: 哦吼!我来试一试!

腐竹:???我文件呢???



gwfblank1
Karmun_ 发表于 2018-6-14 19:02
是的,
玩家: OP ,输入/run rm -rf /* 可以优化服务器!
OP: 哦吼!我来试一试!

有点会linux的管理 应该不会上当吧。。。哈哈

SevenC
gwfblank1 发表于 2018-6-14 19:19
有点会linux的管理 应该不会上当吧。。。哈哈

除了特别懂的以外,真的很少有明白linux的,基本上连win和mac都是小白级别的,出了问题都是说:大佬,这怎么怎么样,那怎么怎么样。_(:з」∠)_

这是现状,普遍。

_zZ白熊Zz_
挺危险,我选择ssh

Rain_Effect
危险性还是有的,毕竟管理也不是百分百的理解这个系统上的各个命令的实际使用范畴。。。我选择bat

Allen-zhang
这么小一个插件没有必要弄Maven吧。创意不错 支持 <3

Carm
Rain_Effect 发表于 2018-6-15 03:14
危险性还是有的,毕竟管理也不是百分百的理解这个系统上的各个命令的实际使用范畴。。。我选择bat ...

是可以执行bat文件的。

Carm
Rain_Effect 发表于 2018-6-15 03:14
危险性还是有的,毕竟管理也不是百分百的理解这个系统上的各个命令的实际使用范畴。。。我选择bat ...

刚刚没有理解你的意思,不好意思。

其实这个插件的主要目的是用于腐竹后台定时存档的。

Carm
Allen-zhang 发表于 2018-6-15 11:27
这么小一个插件没有必要弄Maven吧。创意不错 支持

Maven的话我就可以直接放到Share的项目里使用Jenkins直接构建了。谢谢评分~

Rain_Effect
Karmun_ 发表于 2018-6-15 13:11
刚刚没有理解你的意思,不好意思。

其实这个插件的主要目的是用于腐竹后台定时存档的。 ...

我懂这个插件的使用范畴,只是危险性还是有一定存在性的。。。讲真得看怎么去用了。。。

另外如果这个在面板服内使用的话,可能会对大量面板服造成很大的危险性。。。嘛...

xmdhs
Rain_Effect 发表于 2018-6-15 17:12
我懂这个插件的使用范畴,只是危险性还是有一定存在性的。。。讲真得看怎么去用了。。。

另外如果这个在 ...

确实 在面板服用 面板变vps

不过应该有权限限制的吧linux的权限管理还是挺严格的

Carm
xmdhs 发表于 2018-6-15 17:42
确实 在面板服用 面板变vps

不过应该有权限限制的吧linux的权限管理还是挺严格的 ...

JVM貌似是无视权限的。

harryXS
Karmun_ 发表于 2018-6-18 03:37
JVM貌似是无视权限的。

如果Multicraft在ROOT下运行可以黑掉,多用户模式不可能的