回答:
Linux、UNIX、および関連するオペレーティングシステムで.
は、現在のディレクトリを示します。現在のディレクトリでファイルを実行したいが、そのディレクトリがにないため、実行可能ファイルの場所をシェルに伝えるビット$PATH
が必要./
です。したがって、このディレクトリにある./foo
と呼ばれる実行可能ファイルを実行することを意味しますfoo
。
alias
だけでなく、邪魔になるes もあります$PATH
。
.
最初に検索した場合、セキュリティの問題になります。ls
たとえば、あなたや他の人が置き換えることができます(単純なウイルス/トロイエン:ls
誰かが検索しているときに、 、彼らはこの実行可能ファイルを実行します…)。.
最後に検索した場合、プログラムがなぜ機能していないのかわからずに長い時間を費やすことができます(たとえば、プログラムを実行する代わりにtestというプログラムを作成すると、システムテストプログラムが実行されます。出力は生成されません)。
export PATH="$PATH:."
PATHのどこにも見つからない場合は、現在のディレクトリでコマンドを実行するために実行できます。これを.bashrcファイルに追加できます
他の人が与えたとしてリテラルの答えは次のとおりです。現在のディレクトリは、あなたの中ではないので$PATH
。
しかし、なぜですか?要するに、それはセキュリティのためです。他の人のホームディレクトリ(または/ tmp)を探しているときにjust gcc
またはを入力した場合ls
、いたずら友達が書いた悪意のあるバージョンではなく、実際のファイルを実行していることを知りたい場合は、すべてのファイルを消去します。別の例として、test
または[
があります。シェルにこれらのコマンドが組み込まれていない場合、シェルスクリプト内のこれらのコマンドをオーバーライドできます。
パスの最後のエントリ.
として持つ方が少し安全ですが、それを利用する他の攻撃があります。簡単なものは、一般的なタイプミスを悪用するようにすることですか。または、このシステムにインストールされていない一般的なコマンドを見つけます— たとえば、システム管理者はそれを平均して入力する可能性が高いためです。sl
ls-l
vim
PATH
環境変数に絶対パスがあるだけです。
つまり、最初に./が必要なのはなぜですか-これは(Windowsとは異なり)既定では現在のディレクトリがパスの一部ではないためです。実行する場合:
$ ls
シェルはls
PATH環境変数内のディレクトリを探して(echo $PATH
それを確認するため)、ls
見つかった最初の実行可能ファイルを実行します。入力した場合:
$ a.out
シェルも同様に行います-しかし、おそらくa.outという実行可能ファイルは見つかりません。シェルにa.outの場所を伝える必要があります。現在のディレクトリ(。)にある場合、パスは./a.out
です。
「a.out」と呼ばれる理由を尋ねる場合、それはgccのデフォルトの出力ファイル名です。-oコマンドライン引数で変更できます。例えば:
$ gcc test.c -o test
$ ./test
touch .a.out; ls -lA
これを見てみてください。)
<dir>/<file>
ので、あなたは、基本的に示されている現在のディレクトリにファイルを実行すると言っている./test
:.
$ PATH変数に追加してみてください。
Alt / F2を試して、次のgksudo gedit /etc/environment
ように入力します。Linux/ GTKを実行している場合(これはUbuntuを使用している場合の設定です)。
ただし、そうしないことを強くお勧めします。それは悪い悪い悪い悪いです。
1970年以降、そのようなことはこのように機能します。現在のディレクトリが$ PATHに含まれていないのには理由があります。
.
現在のディレクトリです
.something
隠しファイルになります(「ALT +」と入力してNautilusに表示するか、「ls -la
」を試してください。
./someProgram.sh
現在のディレクトリで実行可能プログラムsomeProgram.shを実行するために入力するものです。
.somethingElse
現在のディレクトリに非表示の実行可能ファイルがあることを意味しますが、これは悪い考えです。
./command_name
を実行するために使用するのですか?」