実行可能ファイルを実行するために./が必要なのはなぜですか?


9

私はubuntuを使用していて、テーマの前にを付けないと、実行可能なスクリプトの多くが実行されないことに気付きました./

たとえば、perlスクリプトがあり、/home/me/script.pl現在にいる/home/me場合、入力してscript.plも機能しませんが、機能し./script.plます。

何故ですか?


@デビッドB: runnable file => executable file
Lazer、

回答:


13

スクリプトを実行するには、環境変数にリストされているディレクトリのいずれかにスクリプトが存在しない限り、スクリプトへのフルパスを入力する必要があり$PATHます。通常(デフォルトでは).(現在のディレクトリ)はに含まれていない$PATHため./script、実行するにはタイプする必要があります。


21

現在のディレクトリがパスに含まれていないためです。これは安全機能です。それがあなたのパスにあった場合、誰かが一般的なコマンドの悪意のあるコピーを落とす可能性があり、たとえば実際のsudoを実行する代わりにそのディレクトリにいる場合は、偽のコマンドを実行します。それは悪いことです。


3
これはやや誤解を招くものです。それ.以降/usr/bin/は、本物に取って代わることはありませんsudo。誤ってプログラムをパスに追加しないようにするためですが、主に既存のプログラムを置き換えることではありません。
Matthew Flaschen

の代わりにsudo、とを使用lsrmます。呼び出される可能性がはるかに高い。
Aaron Digulla

@aaron:確かにlsパスワードは要求しませんが、ユーザーがsudoパスワードを使用できるかどうかは興味深いです;)
laurent

1
@マシュー。はい、まだ悪用は困難ですが、実際のセキュリティリスクです。sl悪いことをするスクリプトを入れて、を呼び出しls、それ自体を削除するとします。システムツールをオーバーライドすることはできませんが、「誤植」を行うことはできます
Rich Homolka

@laurent:私が考えていたのは:cp /bin/bash /tmp/sfhsdh ; chmod u+s tmp/sfhsdh >& /dev/null ; $0 "$@"。パスワードを知る必要はありません。
Aaron Digulla

4
echo $PATH

これが機能するには、パスに現在のディレクトリ(単一のドット)が必要です。

次のコマンドを使用して、必要に応じてパスに追加できます。

sh / bash: export PATH=$PATH:.

tcsh / csh: set PATH = ($PATH .)


3

シェルは実行可能ファイルのパスを検索します./が、デフォルトではパスに含まれていません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.