ls
を実行すると、いくつかのファイルが緑色で表示されます。私はこれらが実行可能ファイルであることを理解し、chmod
を使用してファイルを実行可能にできることを理解しています。しかし、それらは.csv
および.pdf
ファイル。カンマ区切りのテキストファイルやPDFを「実行」する方法がわかりません。そう:
これは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
これは、シェルがファイルをシェルスクリプトとして実行しようとしていて、その中に有効なシェルコマンドがないために失敗するためです。
ls
表示の緑色は、ファイルに実行permissionsがあることを意味しますが、必ずしも実行であるとは限りません。
誤って実行権限を設定した場合、または基本的なLinux権限モデルをサポートしていないファイルシステムからのインポートが原因で設定された場合は、次のコマンドで実行ビットを削除できます。
chmod a-x -- "$filename"
そのファイルは「実行可能」として表示されなくなります。
ファイルリストの他の色mayはファイル拡張子に基づいて設定されることに注意してください。しかし、この場合はおそらく許可ビットにすぎません。
受け入れられた回答は神話を永続させ、ファイルがUnixでどのように「実行」されるかについての理解が不十分です。
./cmd
シェルでは、単に実行しようとするだけではありません./cmd
:実行する場合./cmd
はENOEXEC
で失敗します(有効な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]