回答:
データファイルの場合、違いはありません。両方のステートメントが現在のディレクトリのデータファイルを参照します。(例えば、cat filename
そしてcat ./filename
意味的に同一です。)
問題のファイル名が実行可能ファイルを参照している場合、つまり、コマンドラインで最初に(または唯一)入力するのは、別の話です。./filename
現在のディレクトリで実行可能ファイルを検索します。filename
一方、は環境変数を評価し、そこに格納されているすべてのディレクトリ(現在のディレクトリを含む場合と含まない場合があります)PATH
を探しfilename
ます。
./filename
/path/to/filename
したがって、PATHで最初に見つかったものではなく、特定の実行可能ファイルを実行したい場合は(またはその他の)が推奨されます。
プログラムを実行している場合はfilename
、最初に見つかったプログラムを実行するように指示$PATH
し、2番目のプログラムは現在のディレクトリで実行するように指示します。
あなたはのようにプログラムへの引数としてそのファイル名を使用している場合do_something filename
やdo_something ./filename
、彼らは同じことを意味します。
あなたはコマンド実行について言及している、そうですか?
PATH
セミコロンで区切られたいくつかのシステムディレクトリを含む環境変数があります。入力するとcommand
、システムはこれらのディレクトリを指定された順序で検索して、<command>という名前の実行可能ファイルを見つけます。見つかった場合は、実行を試みます。あなたはあなたのPATHをecho $PATH
bashで見ることができます。例えば:
$ echo $ PATH
/ sbin:/ bin:/ usr / sbin:/ usr / bin:/ usr / games:/ usr / local / sbin:/ usr / local / bin:/ home / ivanatora / bin:/ usr / local / kde4 / bin:/ usr / local / kde4 / bin
入力するとき./filename
は、正確なパス、つまり現在のディレクトリを指定します。現在のディレクトリが$ PATHにめったにないことがわかります(セキュリティ上の理由から)。したがって、現在のディレクトリからファイルを実行する場合は、を使用します./filename
。
パスでファイルを実行するには(特に$ PATHにない場合)<path>/file
、次のように入力することもできます。
/ sbin / ifconfig
実行可能セキュリティがこの違いの主な理由です。
あなたがしたくない 。(現在の作業ディレクトリまたはPWD)パス内にあります。誰かがhttp://en.wikipedia.org/wiki/Trojan_horse_%28computing%29 psやlsなどの重要な実行可能ファイルをPWDでトロイの木馬 にして、不正なデータを提示することであなたをだますためです。