如何在windows中为要在linux中执行的.sh文件分配执行权限
Posted
技术标签:
【中文标题】如何在windows中为要在linux中执行的.sh文件分配执行权限【英文标题】:How to assign execute permission to a .sh file in windows to be executed in linux 【发布时间】:2012-10-22 12:42:44 【问题描述】:这是我的问题,
在 Windows 中,我正在制作一个 zip 文件,其中有一个应该在 Linux 中执行的文本 .sh 文件。 另一端的用户在 Linux 中打开 zip 文件并尝试执行 .sh 文件,但执行权限已消失。所以用户必须手动完成(就像这里解释的那样:add execute permission.
如何在 Windows 中制作 .sh 可执行文件并将其添加到 zip 文件中,以便当 zip 文件在 linux 中打开时 .sh 文件仍保留其执行权限(这样用户就不必手动执行)
【问题讨论】:
我假设您不可能在 Linux 中创建 zip? 【参考方案1】:据我所知,Linux 中的权限系统是这样设置的,以防止您试图完成的事情。
我认为您能做的最好的事情就是为您的 Linux 用户提供一个自定义的解压缩单行程序以在提示符下运行:
unzip zip_name.zip && chmod +x script_name.sh
如果有多个脚本需要授予执行权限,请写一个grant_perms.sh
,如下所示:
#!/bin/bash
# file: grant_perms.sh
chmod +x script_1.sh
chmod +x script_2.sh
...
chmod +x script_n.sh
(对于 chmod,您可以将脚本全部放在一行中,但我发现单独的行更容易在 vim 和 shell 脚本命令中使用。)
现在你的解压单行变成:
unzip zip_name.zip && source grant_perms.sh
请注意,由于您使用source
运行grant_perms.sh
,因此不需要执行权限
【讨论】:
这是完全错误的;没有任何关于权限系统的设置来解决这个问题。您是如何得出这个结论的? @itsbruce 我期待看到你对这个问题的回答;我被告知 Linux 是基于故障安全默认/最低权限模型构建的:如果您的建议可行,我会学习一些新东西。 我认为您不了解文件权限的工作原理。正如我在其他地方所说,所有原生 Unix 归档工具都保留文件权限,并使用正确的参数恢复它们。查看 GNU tar 的手册页;具体来说,-p(或 --same-permissions 或 --preserve-permissions 选项。 顺便说一句,您认为这是一个安全漏洞吗?如果非 root 用户可以保留 所有权,那将是一个安全漏洞;如果设置了权限但所有权仅限于取消归档用户的所有权,则这不是安全漏洞。 我想你是想回复我的回答。你已经很好地陈述了你的情况。直到。【参考方案2】:ZIP 文件格式确实允许存储权限位,但 Windows 程序通常会忽略它。
然而,Cygwin 上的 zip
实用程序确实保留了 x 位,就像它在 Linux 上一样。
如果您不想使用 Cygwin,您可以获取源代码并对其进行调整,以便所有 *.sh 文件都设置可执行位。
或者写一个类似解释here的脚本
【讨论】:
【参考方案3】:这可以使用 Info-Zip 开源 Zip 实用程序来实现。如果unzip 使用-X 参数运行,它将尝试保留原始权限。如果源文件系统是 NTFS 而目标是 Unix 系统,它将尝试从一个文件系统转换到另一个文件系统。我现在没有可用的 Windows 系统来测试翻译,所以你必须试验哪个组需要被授予执行权限。类似于“用户”或“任何用户”
【讨论】:
如果你最终在某个时候为 Windows-to-Linux 测试这个,我真的想知道应用所描述的方法是否有任何困难(如果是,任何变通方法)【参考方案4】:使用我的 Windows 命令行实用程序zip_exec.zip 为 linux/unix 和 mac 设置可执行标志(在使用 Windows Explorer 和 7zip 创建的文件上进行了测试)。 cpp source 也可用。在制作自己的实用程序之前,我在互联网上搜索了很多。可以修改设置任何文件属性。
【讨论】:
【参考方案5】:这是不可能的。 Linux 权限和 windows 权限不转换。它们是特定于机器的。允许在文件到达目标系统之前对其设置权限将是一个安全漏洞。
【讨论】:
有可能,您对权限的看法非常错误。任何可用于 Unix 的各种归档/取消归档工具(tar、gzip、bzip2)都将保留所有权和权限,并将恢复任何用户的权限(使用正确的参数),如果由以下人员运行,将恢复原始组/所有者 ID根(带有适当的参数)。 @itsbruce 那么正确的答案是什么?怎么可能按照我在问题中的要求做呢? 我已经在我的回答中给了你几乎全部的答案。我已经告诉过你哪个工具可以做到这一点;您只需要尝试正确的 NTFS 组权限(如果您不在任何地方运行 Linux,请让 Linux 用户提供帮助)。或者询问 InfoZip 维护者或用户邮件列表。以上是关于如何在windows中为要在linux中执行的.sh文件分配执行权限的主要内容,如果未能解决你的问题,请参考以下文章
如何将 JsonArray 对象转换为要在 spinner java android 上使用的字符串数组?
如何交叉编译我的 Linux 应用程序以在 Linux 中获取 Windows 可执行文件?
在 C++ 中为 Windows CE 在 Linux 中开发
如何像处理语言一样轻松地在 c++ 中为 windows 和 linux 绘制原始像素? [关闭]