可执行公用文件(*.pdf等)

jon*_*n16 6 executable pdf csv file-types

当我运行ls. 我知道这些是可执行文件,并且我知道可以使用chmod. 但它们是.csv.pdf文件。我不明白如何“执行”逗号分隔的文本文件或 PDF。所以:

  • 它们如何真正“可​​执行”?
  • 我将如何执行它们?
  • 当我这样做时会发生什么?

ter*_*don 8

这只是一个权限问题。如果文件具有执行权限,则仅意味着允许用户执行它。他们是否会成功是另一回事。为了执行一个文件,执行它的用户必须有权这样做,并且该文件需要是一个有效的可执行文件。显示的权限ls仅影响第一部分权限,与其余部分无关。

例如:

$ cat file.csv
a,silly,file
$ chmod a+x file.csv
$ ls -l file.csv
-rwxr-xr-x 1 terdon terdon 13 May 29 15:22 file.csv
Run Code Online (Sandbox Code Playgroud)

此文件现在具有执行权限(请参阅x权限字符串中的 3 -rwxr-xr-x)。但是如果我尝试执行它,我会得到一个错误:

$ ./file.csv 
./file.csv: line 1: a,silly,file: command not found
Run Code Online (Sandbox Code Playgroud)

那是因为 shell 试图将文件作为 shell 脚本执行,并且其中没有有效的 shell 命令,所以它失败了。

  • terdon,我认为@StéphaneChazelas 的观点是实际执行了 csv 文件。csv 文件在其执行期间导致错误的事实并不能否定 csv 已被执行。这似乎是一个语义问题,因为您也可以争辩说它只是 sh 解释器正在执行。可以这么说,您对文件权限的主要观点与能够执行的文件是正确的不同。当正在执行的定义如此模糊时,提出一个互联网上没有人会回应“实际上......”的例子是很困难的。 (3认同)
  • @StéphaneChazelas 是的,没错。我说的话会与此相矛盾吗?shell 正在尝试执行在“脚本”中找到的“命令”,因为它应该执行,但由于没有有效命令而失败。 (2认同)

use*_*274 7

ls显示中的绿色表示文件具有执行权限,这并不一定意味着它们可以以任何方式执行

如果您不小心设置了执行权限,或者是由于从不支持基本 linux 权限模型的文件系统导入而设置的,您可以删除执行位

chmod a-x -- "$filename"
Run Code Online (Sandbox Code Playgroud)

并且该文件将不再显示为“可执行文件”。


请注意,文件列表中的其他颜色可能会根据文件扩展名进行设置;但在这种情况下,它可能只是权限位。