在线文件传输期间如何管理/保留文件权限?

在线文件传输期间如何管理/保留文件权限?

我在想是否可以编写一个脚本发送给朋友以修复他电脑上的一些问题。我想授予某个文件的可执行权限,这样我的朋友只需双击该文件即可,如下所示:

https://github.com/fletom/ACLr8

但是当我使用chmod a+x我的文件并将文件发送给我的朋友(在这种情况下我将它发送给我自己)时,他(我)无法执行,因为该文件已失去权限+x

有没有办法(有,链接的人可以做到)发送具有可执行权限的 bash 脚本,只需双击并执行它?

答案1

注意:当时的问题是关于电子邮件传输的(根据 OP 对问题的评论)。这个答案是为了解决该问题而写的,因为该电子邮件是此处提供的传输方法。

使用时电子邮件在系统之间传输文件时,您无法在发送文件时“保留”所有文件权限。这是因为它是一个“新下载”,是根据下载位置、下载系统等中“新文件创建权限”的系统策略的条款和要求创建的“新文件”。这也是因为电子邮件协议没有任何机制来从源系统外部保留权限。

您展示的 GitHub 示例将“保存”文件的权限状态作为版本控制系统的一部分。电子邮件没有这种机制。


由于我们已经确定电子邮件不允许您保留文件权限,因此您需要评估其他方法。

  1. 使用 tarball。您可以创建一个包含该文件的目录,并创建一个 tarball 来保存系统。在 Linux 系统上解压时,它会尝试“保留”这些权限,就像您压缩文件时一样。 tar -pczf name_of_your_archive.tar.gz /path/to/directory是要使用的一般命令结构。但是,如果它们在另一端无法运行tar xzf或类似,则这将不起作用。

  2. 使用版本控制系统来保存数据,例如 GitHub 存储库。 您可以创建一个 GitHub 存储库来保存 shell 脚本,然后让其他人将其克隆到他们的系统中。这应该保留可执行位,但不保证。

  3. 指导其他用户如何通过命令行设置可执行位。如果他们将文件下载到/home/USERNAME/Downloads,其中USERNAME是他们的用户名,您可以指示他们登录到终端并运行chmod a+x /home/USERNAME/Downloads/FileName.sh,然后他们可以通过双击或通过命令行来运行它。

  4. 如果电子邮件是唯一的传输选项, 然后使用你编写的 shell 语言运行脚本(我猜可能是 Bash)。这不需要对任何地方的权限或执行位进行任何更改。 假设这是一个 Bash 脚本然后,只需让下载脚本的远程用户执行以下操作(从命令行):(bash /path/to/script.sh并替换/path/to/script.sh为实际文件路径,可能/home/USERNAME/Downloads是默认电子邮件下载位置,或者如果通过 Web 浏览器中的网络邮件下载,其中 USERNAME 是用户的用户名)

除了我所知道的前三种方法之外,我认为您无法在将文件发送给其他用户时“保留”权限。这是电子邮件的一个限制 - 它无法以这种方式保留权限,因为没有办法将权限保存为该文件的一部分,以便在通过电子邮件传输时保留。第四种选项提供了一种方法,甚至不需要可执行位,并且完全不干扰权限。

相关内容