我正在提供位于以下位置的 Go 二进制文件/var/www/bin/binary
:
location ~ (binary) {
root /var/www/bin;
}
但是,当我使用 下载它时wget http://example.com/binary
,我无法立即运行它,因为它不再是可执行文件。我需要chmod +x binary
先运行。
我该如何修复这个问题?谢谢。
编辑:发现了一个类似的问题,并且讨论得更广泛: https://unix.stackexchange.com/questions/82578/why-is-that-when-i-download-a-binary-from-the-web-it-doesnt-have-executable-per
答案1
在 HTTP 文件传输过程中,不会传达文件权限。它nginx
所做的只是打开二进制文件、读取数据并将其传输到客户端 ( )。在客户端计算机上设置权限由客户端上的 以及您的 Web 客户端浏览器可能对其执行的其他任何操作wget
决定。umask
如果您希望简化下载和执行二进制文件的步骤,可以采取以下几种方法。其中一种方法很简单:
wget -O binary http://example.com/binary && chmod +x ./binary && ./binary
或者,你可以将 shell 脚本放置在http://example.com/install.sh
:
#!/bin/sh
if wget -O "binary" "http://example.com/binary"; then
chmod +x "./binary"
echo "Successfully installed binary. To run, use: ./binary"
# Or just run it here:
# ./binary
else
echo "Failed to download binary." >&2
fi
然后,您的安装可以:
wget -O - http://example.com/install.sh | sh
或者:
curl -o - http://example.com/install.sh | sh
请注意,这些安装方法都不安全。您需要计算二进制文件(和 shell 脚本)的签名并在下载时验证它们,我建议使用 HTTPS。但是,我假设这是用于某种类型的内部使用(在这种情况下,安全性通常仍然很重要)!