【问题标题】:How to create a directory in Lua?如何在 Lua 中创建目录?
【发布时间】:2010-12-14 00:54:24
【问题描述】:

是否可以在 lua 中创建目录?如果有,怎么做?

【问题讨论】:

    标签: directory lua filesystems


    【解决方案1】:

    您可能会发现LuaFileSystem 库很有用。它有一个 mkdir 函数。

    require "lfs"
    lfs.mkdir("/path/to/dir")
    

    【讨论】:

    • 感谢您的链接!我暂时不能使用其他库,所以我会坚持使用 os.execute() 版本,但下次我会记住 LuaFileSystem !
    【解决方案2】:

    有一个“系统”调用(或类似的,来自内存),您应该能够使用它来运行任意程序,其中可能包括 mkdir 命令。

    编辑:我找到了我的Lua 编程一书。在第 203 页,它提到了如何使用

    os.execute("mkdir " .. dirname)
    

    “伪造”目录创建命令。

    编辑 2:请注意 Jonas Thiem 的警告,如果目录名称来自不受信任的来源,则此命令可能会被滥用!

    【讨论】:

    • Lua 的设计理念是纯 ISO C,以便使用 C 编译器移植到任何东西。 C 标准库中没有目录创建功能。这取决于特定于平台的扩展,例如 POSIX 系统上的 mkdir(2) 和 Windows 上的 CreateDirectory*()。
    • 谢谢 ;) !我知道我可以执行那种 execute(),但我想知道是否有 Lua 替代方案......我想没有;)!
    • 此响应非常危险。只要您的目录名包含 ;接下来是实际的 bash 命令,您为自己设置了一个不错的任意命令执行漏洞。要非常小心地正确转义目录名 - 或者只是跳过这个糟糕的建议并使用 LuaFileSystem 来正确地做事。
    • 感谢您指出(现在)有一个 LuaFileSystem 库可以做这种事情!我赞成建议使用它的答案。但是你是否也指责 Lua 的作者在他自己的书中推荐了这种技术? os.execute() 方法非常好,如果目录名称来自可信赖的来源,例如在程序中被硬编码,它的优点是不需要任何超出 Lua 标准的库。
    • 正确转义文件名并非易事,即使 Lua 作者推荐它,我也建议不要这样做。最好使用适当的扩展库。它可以工作,是的,但它并不安全,除非你非常熟悉可能的漏洞利用(并且文件名中有很多字符可能看起来很规则,但会在 bash 中执行某些操作并突然引入任意命令执行到您的简单目录创建中),或者如果文件名是硬编码的。如果作者自己没有添加这么强的安全建议,那么我会说应该修改书中的那部分。
    【解决方案3】:

    您可能还想查看 Lua/APR,即 Lua 的 Apache Portable Runtime 绑定。文档可以在here

    找到

    我使用 Lua 的原因之一是我可以编写跨多个操作系统运行的代码。我使用 LFS 有一段时间了,但发现使用 Lua/APR 提供了一个更加平台中立的库。 APR 中还有很多其他有用的例程。

    【讨论】:

      【解决方案4】:

      您可以改用paths 包。然后你可以简单地做:

      require 'paths'
      
      paths.mkdir('your/dir')
      

      【讨论】:

        猜你喜欢
        • 2010-10-20
        • 1970-01-01
        • 2019-03-13
        • 1970-01-01
        • 2012-02-14
        • 2011-04-07
        • 2014-08-27
        • 1970-01-01
        相关资源
        最近更新 更多