実行してみると、緑色で表示されるファイルがたくさんありますls
。私はこれが実行可能ファイルであることを知っていて動作することを知っています。しかし、ファイルchmod
です。カンマ区切りのテキストファイルやPDFを「実行」する方法は理解できません。だから:.csv
.pdf
- どうやって実際に「実行可能」ですか?
- どのように実行しますか?
- これを行うとどうなりますか?
答え1
ただの質問です。特権。ファイルに実行権限がある場合、これはユーザーを意味します。許可するそれを実行するために。彼らが成功するかどうかは別の問題です。ファイルを実行するには、ファイルを実行しているユーザーにこのタスクを実行する権限が必要です。そしてファイルは有効な実行可能ファイルでなければなりません。表示される権限は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
x
ファイルには実行権限があります(権限文字列の3を参照-rwxr-xr-x
)。ただし、実行しようとすると、次のエラーが発生します。
$ ./file.csv
./file.csv: line 1: a,silly,file: command not found
これは、シェルがそのファイルをシェルスクリプトとして実行しようとしますが、有効なシェルコマンドが含まれていないため失敗するためです。
答え2
緑色はls
ファイルが実行されたことを意味します。特権、これは必ずしも彼らができることを意味するわけではありません。処刑された何らかの方法で。
誤って実行権限を設定した場合、またはデフォルトのLinux権限モデルをサポートしていないファイルシステムからインポートして設定した場合は、次のコマンドを使用して実行ビットを削除できます。
chmod a-x -- "$filename"
ファイルは「実行可能」と表示されなくなりました。
ファイルリストの他の色を参照してください。可能ファイル拡張子に従って設定しますが、この場合は許可ビットにすることができます。
答え3
受け入れられる答えは神話を永続させ、Unixでファイルが「実行」される方法を理解するのに欠けています。
./cmd
シェルの機能は、単に実行しようとする以上のことを行います./cmd
。実行が./cmd
失敗した場合ENOEXEC
(無効な実行ファイルなど)バイナリまたはシェルボーン、有効なシェルスクリプトを含む)、シェルはㅏ。ファイルを読み、それ自体をシェルスクリプトとして解釈するか、雨。/bin/sh
または、別のシェルを実行して./cmd
最初の引数として渡します。
Shebangメカニズム(#! /path/to/interpreter
)はほとんどのUnixシステムで実装されていますが、標準ではありません。さらに、多くのシステム(例えば、Linux)は、他の「魔法の」シーケンス(MSDOSなどのファイル拡張子ベースも含む)でファイル「実行」を開始できます。
たとえば、次のようにして、Linux上で「実行可能な」pdfファイルを持つことができます。binfmt_misc:
$ 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]