• ベストアンサー

rootで.を指定しない場合のカレントは?

ときどきrootユーザでログイン後、シェルにて「./」を付けずにカレントディレクトリ のファイルを実行しようとすると存在しませんとエラーが出る場合があります。 どういった場合に「./」をつけないといけないか? その場合、どこのディレクトリのファイルが参照されているのか? こちらの疑問が解決できずに困っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.3

Linuxだとbashでしょうから、コマンドの場所を調べるのは、type コマンドが良いです。コマンドには、bashの組み込みコマンドと、独立したファイルの(外部)コマンドがありますが、typeだと内部コマンドの場合はそう表示してくれます。内部コマンドと同名の外部コマンドがある場合に、typeとwhichの結果が違ってきます。 例:type pwd と which pwd コマンドの先頭の語が / を含む場合は、ファイル名とみなしてそのファイルを実行します。 / を含まない場合は、(1) bashの関数 (2) bashのalias (3) bashの組み込みコマンド に該当しないかを順に調べて該当すればそれを実行。該当しなければ、環境変数PATHを : で区切ってその部分のディレクトリに該当ファイルがあって実行可能ならそれを実行します。 >PATHに「./」を追加すれば、カレントディレクトリの実行ファイルを実行してくれます。 自分以外が絶対に触らない環境ならともかく、PATHに . を含めるのはセキュリティホールなので、他人がアクセス可能な環境では絶対にしてはいけません。例えば、とあるディレクトリに、ls という名前で、 #!/bin/sh /bin/rm -rf $HOME という実行シェルファイルがあったケースを想像してみてください。こういういたずらに引っかからないしても、思わぬファイルを実行してしまうかもしれません。

その他の回答 (2)

  • noppi_99
  • ベストアンサー率34% (10/29)
回答No.2

./は No.1の方の説明で問題ないので割愛 pwdコマンドで現在のカレントがわかりますよ で、これもNo.1の方と同じなのですが カレント->環境変数 PATH に含まれているパスを順次未定きます。 で、実行できた場合 whichコマンドでコマンドの場所がわかります

回答No.1

> どういった場合に「./」をつけないといけないか? カレントディレクトリの実行ファイルを実行するときは、「./」を付けなければなりません。 > その場合、どこのディレクトリのファイルが参照されているのか? 環境変数「PATH」に指定されている順にファイルを探しに行きます。 PATHに「./」を追加すれば、カレントディレクトリの実行ファイルを実行してくれます。