web-dev-qa-db-ja.com

実行可能な共通ファイル(* .pdfなど)

lsを実行すると、いくつかのファイルが緑色で表示されます。私はこれらが実行可能ファイルであることを理解し、chmodを使用してファイルを実行可能にできることを理解しています。しかし、それらは.csvおよび.pdfファイル。カンマ区切りのテキストファイルやPDFを「実行」する方法がわかりません。そう:

  • どうすれば実際に「実行可能」にすることができますか?
  • そして、それらをどのように実行しますか?
  • そして、私がしたとき何が起こりますか?
6
jonnybolton16

これはpermissionsの問題です。ファイルに実行権限がある場合、それはユーザーが許可で実行できることを意味します。彼らが成功するかどうかは別の問題です。ファイルを実行するには、そのファイルを実行するユーザーにそうする権利が必要ですandファイルは有効な実行可能ファイルである必要があります。 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

このファイルは実行権限を持っています(権限文字列-rwxr-xr-xの3 xを参照)。しかし、それを実行しようとすると、エラーが発生します。

$ ./file.csv 
./file.csv: line 1: a,silly,file: command not found

これは、シェルがファイルをシェルスクリプトとして実行しようとしていて、その中に有効なシェルコマンドがないために失敗するためです。

8
terdon

ls表示の緑色は、ファイルに実行permissionsがあることを意味しますが、必ずしも実行であるとは限りません。

誤って実行権限を設定した場合、または基本的なLinux権限モデルをサポートしていないファイルシステムからのインポートが原因で設定された場合は、次のコマンドで実行ビットを削除できます。

chmod a-x -- "$filename"

そのファイルは「実行可能」として表示されなくなります。


ファイルリストの他の色mayはファイル拡張子に基づいて設定されることに注意してください。しかし、この場合はおそらく許可ビットにすぎません。

7
user4556274

受け入れられた回答は神話を永続させ、ファイルがUnixでどのように「実行」されるかについての理解が不十分です。

./cmdシェルでは、単に実行しようとするだけではありません./cmd:実行する場合./cmdENOEXECで失敗します(有効なbinaryでない実行可能ファイルの場合と同様、または(Shebang、有効なシェルスクリプトを含む)、シェルは次のいずれかになりますa。ファイルを読み取り、シェルスクリプトとして解釈するか、b。実行/bin/shまたは別のシェルに渡して./cmdを最初の引数として。

シバンメカニズム(#! /path/to/interpreter)は、ほとんどのUnixシステムで実装されていますが、標準ではありません。また、Linuxのような多くのシステムは、他の「マジック」シーケンスで始まるファイルを「実行」することもできます(またはファイル拡張子に基づいてMSDOSのように)。

たとえば、Linuxで binfmt_misc を使用して「実行可能な」pdfファイルを作成できます。

$ chmod +x 2503.pdf
$ ./2503.pdf
./2503.pdf: line 1: fg: no job control
./2503.pdf: line 1051: warning: here-document at line 2 delimited by end-of-file (wanted `/Linearized')
[... a lot of crazy errors in the same vein ...]

$ su -c 'echo :pdf-zathura:M::%PDF-1.::/usr/bin/zathura: > /proc/sys/fs/binfmt_misc/register'
$ ./2503.pdf
[start zathura and display the pdf file]
2
pink slime