プログラムを実行するときに「./」を使用するのはなぜですか? [コピー]

プログラムを実行するときに「./」を使用するのはなぜですか? [コピー]

fooというプログラムがある場合、fooの代わりに./fooと言わなければならないのはなぜですか? ./は単に現在のディレクトリを意味しませんか?

ベストアンサー1

コマンドを入力した場合 - 例:foo- シェルはbash(通常)/bin、/usr/bin、/usr/X11R6/binなどの特定のディレクトリでのみそれを検索します。それは一般的にいいえセキュリティ上の理由から、「現在のディレクトリ」(例:「.」)を確認してください(特にあなたならどうでしょうか?)。 「.」が追加された場合は、次の項目に追加する必要があります。終わり検索パス。

実行ファイルを実行したい場合いいえこの検索パスでは、コマンドの絶対パスまたは相対パス全体を指定する必要があります。たとえば、

/home/bok/foo   # Absolute in my homedir

~/src/bar  # Shorthand for my homedir and a subdir in it

../Download/foobar  # Relative path – up one step, then down in Download

または - コマンドが現在のディレクトリにある場合 - 以下を追加します./

./foo

検索パスは次のbash場所に保存されます。環境変数なので、次のように入力して表示できます。

echo $PATH

「.」を追加する – あなたは本当にしてはいけないすべきこと – 入力:

export PATH="$PATH:."

PATHは順次検索されるため、異なるディレクトリに同じ名前の複数の実行可能ファイルがある場合、シェルはPATHの最初のディレクトリにある実行可能ファイルを実行します。

リストされているすべてのディレクトリを最初に見た後、「コマンドが見つかりません」エラーが発生しますか?

+++

現在のディレクトリをPATHに追加する際の問題は、.「非標準」ディレクトリにある実行可能ファイルを実行する必要があるかどうかを実際にはわからないことです。

私が邪悪なので、できるだけ多くのファイルを削除し、それを私のホームディレクトリ(またはより悪くは/ tmp)に残す破壊的なプログラムを作成するとしましょう。このプログラムをsl一般的なタイプの間違いlsと呼んで待ちます。

一部のランダムユーザーが/ tmpにあり、lsスペルが間違っていますsl。通常のPATHを使用すると、何も起こりません。 「コマンドが見つかりません」エラーが発生する以外は何も起こりません。 PATHの末尾に「.」がある場合、コマンドを入力してもエラーは発生しません。代わりに、私のslコマンドが実行され、彼が持っているすべてのファイルを削除します。もしその人がそうであれば、このコマンドはほとんどのシステムを削除できます。 (だから 本当にそうしなければならないルールを作成するいつも使用フルパスPATHを信頼する代わりにコマンドを使用してください。 )

彼が自分のパスに「.」を最初に入力し、私が(正しいスペル)というプログラムを作成してディレクトリに入れた場合、ls次のようになります。私のもの通常のプログラムではないプログラムは、彼がそのディレクトリに入力するとls実行されます。現在のディレクトリ(.)から検索されているlsからです。bash最初- 正規バージョンのシステムカタログを見る前にls

おすすめ記事