私はlinuxで実行権限が必要なのでしょうか?なぜなら、構文を使ってそのスクリプトを実行すると、実行権限のない任意のスクリプトを実行できますか?「bashスクリプトファイル」を使用せずに任意のスクリプトを実行できますが、なぜ実行権限が必要なのですか?
bash SomeScriptFile
私はlinuxで実行権限が必要なのでしょうか?なぜなら、構文を使ってそのスクリプトを実行すると、実行権限のない任意のスクリプトを実行できますか?「bashスクリプトファイル」を使用せずに任意のスクリプトを実行できますが、なぜ実行権限が必要なのですか?
bash SomeScriptFile
たとえば、すべてのプログラムがスクリプトではない - bash
などはありません。実行可能プログラムの実行権限が必要です。
また、bash SomeScriptFile
と言うとき、スクリプトはカレントディレクトリになければなりません。スクリプトが実行可能で、PATH上のディレクトリにある場合(たとえば、$HOME/bin
)、不要な円周をbash $HOME/bin/SomeScriptFile
(またはbash ~/bin/SomeScriptFile
)にしないでスクリプトを実行できます。あなたは単にSomeScriptFile
を実行することができます。この経済は価値があります。
ディレクトリに対する実行権限は、やや異なりますが、重要です。これは、 'ユーザーのクラス'(所有者、グループ、その他)がディレクトリ内のファイルにアクセスできるようにします。
ディレクトリコンテキストで '+ x'の意味について議論する価値があります。私は間違いなくこの答えが正しいことに同意します。ブロックマップを調べてファイルの最初の数バイトを読み込んで何かがELFを持っているかどうかを調べるよりも、inodeの実行ビットをチェックするほうがはるかに高速ですスクリプトのヘッダーを決めることができます。しかし、*なぜオペレーティングシステムが* + xのような概念を持っているのかを質問すると、スクリプトがそれを設定する必要があるのとは対照的に、他の文脈では密接な関係がある。 –
直接実行してスクリプトを実行し、bash
でスクリプトを実行することは、2つの非常に異なることです。
bash ~/bin/SomeScriptFile
を実行すると、実際にはコマンドインタープリタであるbash
を実行しているだけです。 bash
が順番にスクリプトを読み込んで実行します。
~/bin/SomeSCriptFile
を直接実行すると、システムはこのファイルがスクリプトファイルであると判断し、それを実行するインタープリタを見つけます。最初の行に#!
を呼び出して、正しいインタープリタを探すという大きな魔法があります。
私たちがスクリプトを直接実行するのは、実行しているコマンドがスクリプトまたはコンパイルされた実行可能ファイルであることをユーザーやシステムが認識できなかったことです。
たとえば、fixAllIlls
という名前の気の利いたシェルスクリプトを作成した後、同じインターフェイスを使用している限り、私はC
に書き直すことにしました。ユーザは何もする必要はありません。
これは、実行するプログラムに過ぎません。
編集最初のいくつかの理由で
オペレーティングシステムのチェック権限:
これは、オペレーティングシステムが関連する魔法を調べる前に '+ x'の許可をチェックして、インタプリタを見つけ出すように設計されている理由がわかりません。コマンドを実行する。 (私は確か*価値があることに同意しますが、この回答が推論に対処しているかどうかはわかりません)。 –
@CharlesDuffy履歴を追加しました –
[Unix実行許可の複製は簡単にバイパスできます。それは余計なものなのか、それとも何の背後にあるのですか?](http://security.stackexchange.com/questions/66550/unix-execute-permission-can-be-easily-bypassed-is-it-superfluous-or-whats -the) –
...セキュリティーのために '+ x'ビットが強い意味を持つ場所は実際にはファイルではなく*ディレクトリ*です。ファイル上では、パフォーマンスと使いやすさが向上します。これは、それ自体では十分な価値があります。ディレクトリ上では、 '+ x'が' + r'を伴わないとディレクトリを辿ることができず、その内容を読むことはできません。これは非常に価値のある区別です。 –
ディスカッションに追加:許可だけからxビットを削除しても、(コンパイルされたプログラムであっても)プログラムを実行することが不可能になるわけではなく、これもxビットの目的ではありません。例えば、私が許可された0444のコンパイルされたプログラムを持っていても、自分のディレクトリに最初にコピーし、自分のコピーにx-permissionを設定してから、プログラムを実行することで簡単に実行できます。 – user1934428