如果我使一个文件在一个系统上可执行,那么当我将其移动到另一个系统上时,它还会保持可执行状态吗?

如果我使一个文件在一个系统上可执行,那么当我将其移动到另一个系统上时,它还会保持可执行状态吗?

如果使用 使文件可执行chmod +x <file>,即使我将文件移动到另一个系统,更改是否仍会应用?

即使我通过 Sourceforge 等渠道将文件分发给大量用户,这是否适用?

答案1

太长不看

移动和复制都取决于用于移动/复制文件的工具,而复制还取决于用户的 umask。但是:

  • 如果文件被移动:通常是,对于一个用于移动文件的工具来说,任意改变被移动文件的权限是没有意义的;
  • 如果文件被复制:通常不会按照惯例,复制的文件具有的权限666减去用户的 umask,默认情况下为002;无论原始文件的权限如何,在 99% 的情况下,复制的文件都具有的权限664

复制文件=~读取文件并将其写入另一个位置=~使用原始文件的内容创建一个新文件

从/向同一文件系统复制/移动或从/向另一个文件系统复制/移动的文件的权限取决于:

  1. 在工具上复制/移动文件。
  2. 复制时,同样在用户的 umask 上,因为复制文件 =~ 读取文件并将其写入另一个位置 =~ 使用原始文件的内容创建新文件,因此适用于新创建文件的约束也适用于复制的文件。

因此,这完全取决于两者的结合。然而:

  • 习俗那是一个文件吗复制666从 / 到同一个文件系统或从 / 到另一个文件系统将具有由工具设置的权限;默认的 umask 是002,因此在 99% 的情况下该文件将具有权限664
  • 习俗那是一个文件吗已移动从/到同一个文件系统或从/到另一个文件系统的权限将被工具设置为原始文件的权限;

从互联网上下载文件与元数据无关,因为元数据是文件系统的事情;从互联网上下载的文件的权限设置遵循与从/到同一文件系统或从/到另一个文件系统复制的文件相同的“规则”,即取决于工具和用户的 umask。


因此,当您从互联网上下载文件时,下载文件的权限通常设置为664

% wget 'http://downloads.sourceforge.net/project/resolutionx/ResolutionX.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fresolutionx%2F&ts=1446571625&use_mirror=netassist'
--2015-11-03 18:28:07--  http://downloads.sourceforge.net/project/resolutionx/ResolutionX.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fresolutionx%2F&ts=1446571625&use_mirror=netassist
Resolving downloads.sourceforge.net (downloads.sourceforge.net)... 216.34.181.59
Connecting to downloads.sourceforge.net (downloads.sourceforge.net)|216.34.181.59|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://netassist.dl.sourceforge.net/project/resolutionx/ResolutionX.tar.gz [following]
--2015-11-03 18:28:08--  http://netassist.dl.sourceforge.net/project/resolutionx/ResolutionX.tar.gz
Resolving netassist.dl.sourceforge.net (netassist.dl.sourceforge.net)... 62.205.134.42, 2a01:d0:0:37::2
Connecting to netassist.dl.sourceforge.net (netassist.dl.sourceforge.net)|62.205.134.42|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 8280 (8,1K) [application/x-gzip]
Saving to: ‘ResolutionX.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fresolutionx%2F&ts=1446571625&use_mirror=netassist’

ResolutionX.tar.gz? 100%[=====================>]   8,09K  --.-KB/s   in 0,007s 

2015-11-03 18:28:22 (1,07 MB/s) - ‘ResolutionX.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fresolutionx%2F&ts=1446571625&use_mirror=netassist’ saved [8280/8280]

% ls -l
total 12
-rw-rw-r-- 1 user user 8280 set  1 11:55 ResolutionX.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fresolutionx%2F&ts=1446571625&use_mirror=netassist

然而从 tarball 中提取的文件将根据 Tar 的特定约束设置权限

如果解压 tarball 的用户是 root 或者调用 Tar 时传递了-p--preserve-permissions--same-permissions开关,则解压的文件的权限将被设置为原始文件的权限:

user@user-X550CL ~/tmp % touch foo
user@user-X550CL ~/tmp % chmod 777 foo
user@user-X550CL ~/tmp % tar cf foo.tar foo
user@user-X550CL ~/tmp % rm foo
user@user-X550CL ~/tmp % tar xf foo.tar -p
user@user-X550CL ~/tmp % ls -l
total 12
-rwxrwxrwx 1 user user     0 nov  4 07:45 foo
-rw-rw-r-- 1 user user 10240 nov  4 07:45 foo.tar

如果提取 tarball 的用户是不是焦油不是调用传递-p或开关--preserve-permissions--same-permissions提取的文件的权限将设置为原始文件的权限减去用户的 umask

user@user-X550CL ~/tmp % tar xf foo.tar   
user@user-X550CL ~/tmp % ls -l
total 12
-rwxrwxr-x 1 user user     0 nov  4 07:45 foo
-rw-rw-r-- 1 user user 10240 nov  4 07:45 foo.tar

相关内容