この用語は、current directory
他のプロセスの実行と同様に、シェルの外部で何を意味しますか?フルパスまたは前に「./」を指定せずにバイナリ(current directory
実行可能ファイルが含まれていると仮定)を実行できますか?
答え1
はい、検索パスを適切に設定すると(明示的に作業ディレクトリを含めるか、「./」を含む)、これを実行できますが、プログラム名の前に「./」を追加することをお勧めします。その理由はセキュリティのためです。マルウェアはls
通常のプログラム名(例:)を使用して実行可能ファイルを作成し、次の呼び出しではなくls
ローカルコピーを実行します/bin/ls
。したがって、UNIXの標準PATH設定には「./」は含まれません。
答え2
「他のプロセス」とは何か、プログラムの起動に使用する方法をよりよく定義する必要があります。
それにもかかわらず、現在の作業ディレクトリは実行中のすべてのプロセスの属性なので、実行するプログラムを見つけるために使用できます。このように実装するのが安全かどうか疑問です。
答え3
クイック修正はエイリアスを作成することです。この生成を.bashrcに追加して、起動時に追加できます。
答え4
Unix/Linux/*BSD カーネルは常に作業ディレクトリを追跡します。システムコールはC言語が登場して以来chdir()
ありました。fchdir()
C言語プログラムを作成し、execve()
プログラムで指定されたfilename
パラメータを使用する場合execve()
。カーネルは現在の作業ディレクトリで実行可能ファイルを検索するか、「some_executable」や「subdir/some_executable」などのファイル名引数を指定すると、現在の作業ディレクトリに基づいて実行可能ファイルが存在し、実行可能な場合はカーネルで実行可能ファイルを検索します。 。
cd
現代のシェル(少なくともzsh)はシンボリックリンクに入り、シンボリックリンクを含むディレクトリにバックアップできるように現在の作業ディレクトリを少し難読化しますcd ..
が、現在の作業ディレクトリのカーネルベースのトレースはまだ存在することを知っています。 Linuxシステムでは、ls -l /proc/$$/cwd
カーネルがディレクトリが何であるかを正確に見ることができます。