0

一部のソフトウェアのインストールガイドでは、ユーザーはこれを実行するように指示されています

sudo ln -s /opt/local/somesoft/somsoft* /opt/local/bin

このコマンドは危険ですか? /opt/local/bin がそれ自体以外のものを呼び出さないようにする必要がありますか?

4

1 に答える 1

1

このコマンドはいくつかのことを行います

  • sudo は、「ln」バイナリにルート権限を付与します
  • ln は、パターン /opt/local/somesoft/somsoft* に一致するすべてのファイルを調べるように指示されます。
  • そのようなファイルごとに、/opt/local/bin ディレクトリにシンボリック リンクを作成しようとします。
  • この作成されたシンボリック リンクは、処理中のファイルと同じ名前になります。

あなたの最初の質問は、それは危険ですか? おそらくそうではありません。うまくいかない可能性があるものはほとんどありません

  • あなたの $PATH 環境にはいくつかの奇妙なディレクトリが含まれているため、/usr/bin/ln を呼び出す代わりに (私が信じていた当初の意図と同じように)、だまされて別の実行可能ファイルを呼び出すことになります。たとえば、PATH=.:/tmp:/usr/bin の場合、'ln' は最初に現在のディレクトリで検索され、次に /tmp、次に /usr/bin で検索されます。そして、スーパーユーザー権限で呼び出されます...
  • /opt/local/somesoft/somsoft* のようなファイルはありません。そのような場合、ln はシンボリック リンク '/opt/local/bin/somsoft*' (名前に星を含む) を作成します。それはおそらくあなたが望んでいたものではありません
  • /opt/local/bin には、 /opt/local/somesoft/somsoft* と同じ名前のファイルが既に含まれています。そのような場合、ln はそこに新しいファイルを作成しません (それが良いか悪いか? それが問題です)。
  • /opt/local/bin がありません。このような場合、コマンドが失敗する方法がいくつかあります (/opt/local ディレクトリがあるかどうか、およびパターン /opt/local/somesoft/somsoft* に一致するファイルの数によって異なります)。

2 番目の質問はあまり意味がありません。/opt/local/bin はディレクトリであり、ディレクトリは何も「呼び出す」ことはできません。したがって、それを防ぐことはできません。そこにシンボリック リンクを作成する必要があるかどうかを尋ねられた場合、私はその理由を答えます。コマンドの背後にある全体的なアイデアは、

  • /usr/bin またはその他の共通ディレクトリを汚染しないように、somesoft を特別なディレクトリにインストールします。
  • 毎回フル パス /opt/local/somesoft/somsoft を指定する必要なくコマンドを実行できるようにするには、/opt/local/bin にシンボリック リンクを作成することをお勧めします。/opt/local/bin がディレクトリにあることを確認してください。
于 2013-07-02T22:17:06.507 に答える