我花了很多时间下载我将要执行的东西,毫无疑问,在下载它们之后。现在,在我的下载文件夹中的 900 个文件中,大约有三分之一是我下载然后执行的文件,因为这是我下载它们的首要原因。
但每次,我都必须执行 chmod +x'ing 的小累动作,这完全是浪费时间,因为我下载它们并不是为了好玩。现在我有十几个小脚本,我将在接下来的半小时内下载,一想到必须将它们全部进行 chmod,我就感到不寒而栗。
我能做些什么来让 Linux 变得:
- 完全忽略 x 权限,只做我告诉它做的事情,没有问题,也没有事后猜测我,作为我自己的个人计算机的所有者、管理员、永恒的神等等?
- 如果下载的文件与 ELF、shell、python 等匹配,则自动将其标记为可执行文件
file
?
答案1
对于安全性来说,这可能不是一个好主意,未来的读者应该仔细考虑这是否适合他们。不过,您已经描述了一个非常具体的用例,所以我将提供一个选项。
您可以做的最简单的事情可能是设置一个后台脚本来监视您的 ~/Downloads 目录inotify-wait
(Ubuntu inotify-tools 包)并立即更改该文件的文件权限,因为该文件已被写入该文件的任何程序关闭(IE 下载后):
#!/bin/bash
inotify-wait -m ~/Downloads -e close_write --format %f | while IFS= read -r line ; do
chmod u+x ~/Downloads/"$file"
done
当然,这会更改添加到~/Downloads
目录中的每个文件,而不仅仅是 ELF、shell、python 脚本。为此,您需要添加额外的规则来确定文件名并进行选择。例如,您可以使用file
识别您感兴趣的文件。
答案2
我同意与菲利普·库林更进一步:下载文件然后执行它们而不进行任何检查、验证或验证从安全角度来看有点鲁莽。但是,如果您毫无保留地信任来源,并且您只是在自己的个人计算机上工作,那么这是您的决定。
你问你能做些什么来让 Linux
x
完全忽略权限并只做你告诉它做的事情。好吧,如果该文件是 shell 脚本,您可以输入嘘 文件名 精氨酸1 精氨酸2 精氨酸3……
或者巴什文件名 精氨酸1 精氨酸2 精氨酸3……
如果是Python脚本,你可以输入Python 文件名 精氨酸1 精氨酸2 精氨酸3……
或者蟒蛇2文件名 精氨酸1 精氨酸2 精氨酸3……
或者蟒蛇3文件名 精氨酸1 精氨酸2 精氨酸3……
作为适当的。笔记:- 如果脚本尝试以正常方式递归调用自身(即假设该
x
位已设置),这些操作将会失败。 - 我不知道二进制可执行文件(如 ELF 文件)有任何等效命令。
我真的建议不要下载文件然后在不知道它们是什么类型的情况下执行它们。
- 如果脚本尝试以正常方式递归调用自身(即假设该
一想到必须 chmod 十几个脚本,你就会感到不寒而栗。我不明白。打九个字
c
h
m
o
d
+
x
你了解别名吗?在 Bash 中(即在你的
~/.bashrc
)中,你可以说alias '+x'='chmod +x'
然后你可以使用
+x文件名
chmod 你的文件(减少打字)。并作为 罗艾玛表示,您可以在命令中使用通配符(glob)chmod
,这样就+x *.sh
可以了。要多保存一个字符,请使用
x
代替 用作别名+x
。结合以上思路:创建一个shell函数
run() { chmod +x "$1" && "$@" }
然后你可以输入
跑步文件名 精氨酸1 精氨酸2 精氨酸3……
chmod 您的文件并用一个命令执行它。 (您可能需要type run
检查您的计算机上是否有调用的命令run
,如果有,请使用不同的名称。)
答案3
我认为最好的办法就是让事情变得简单。如果您下载脚本只是为了测试它们一两次,那么为什么要让它们可执行呢?
就这样做,shell cmd。只需调用脚本使用的 shell 即可。在本例中是 bash 脚本。
bash DownloadedScript.sh
在下载中留下大量不常用的可执行脚本并不是一个好主意。将它们保留为不可执行更有利于系统安全。
答案4
对于您的特定用例,您从同一 URL 循环下载并运行实际上不同的版本,可能是这样的:
while
printf 'Press enter to download and run:'
read -r
do
curl "$URL" >| tmpexec &&
chmod +x tmpexec &&
./tmpexec
done
(我希望这也能避免许多人对从随机公共站点下载时产生的安全担忧,这与这里无关。)