web-dev-qa-db-ja.com

/ binディレクトリにシンボリックリンクを配置しても安全ですか?

頻繁に使用するコマンドラインツールは多数あります。私は通常の方法を使用して、ターミナルを介してそのコマンドの完全なパスまで移動し、./ command-nameしかし、これは面倒で時間です-消費タスク。

「ターミナルを介してどこからでもコマンドを実行する方法」のトピックを調査した結果、環境変数にパスを含めるソリューションになりました(./bashrcを編集して)。

これは正常に機能します。

グローバルに機能するすべてのコマンド(mkdir、ifconfig、cpなど)が「/ bin」ディレクトリに配置されていることもわかりました。

「/ bin」ディレクトリにコマンドの「シンボリックリンク」を含めると、すべてが正常に機能し、端末のどこからでもコマンドを実行できます。

私の質問

  1. / binディレクトリに直接シンボリックリンクを配置しても安全ですか?これは、シンボリックリンクを配置するときに管理者パスワードを要求されたためです。

  2. / usr/binディレクトリと比較して/ binにコマンドのシンボリックリンクを配置すると、違いが生じますか?

環境(重要な場合):

Ubuntu 13.10、32ビット。

7
v1h5

/bin/usr/binを台無しにすることは推奨されません。また、そこにシンボリックリンクを配置するためにneedをしません。

あなたが言ったのと同じ問題がありました。スクリプトに移動し、毎回./myscriptのように呼び出すのは面倒です。これが私がしたことです。

独自のbinディレクトリを定義する

独自のbinディレクトリを作成して、そこにスクリプトを配置できます。で作成する

mkdir ~/bin

ここで、PATH環境変数を変更する必要があります。これはデリケートな領域です。 PATH変数を台無しにすると、相対パスでコマンドを実行できなくなります。その場合、lsは機能しなくなる可能性があります/bin/lsは引き続き機能します。

ここで表示する内容は、現在実行中のターミナルセッションにのみ影響します。何か問題が発生した場合は、単にログアウトしてください Ctrl+D すべてが以前と同じようになっています。

echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games
export PATH=$PATH:~/bin
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/games:/usr/games:/home/madmike/bin

echo-コマンドは、$ PATHの前後の内容を表示します。 exportを使用すると、環境変数を変更できます。追加のbin-directoryが変数の最後に追加されます。これは、同じ名前のコマンドが複数ある場合、コマンドの優先順位がleastであることを意味します。重要なシステムコマンドをオーバーライドしたくないので、これは良いことです。

変更を永続的にするには、〜/ .bashrcファイルを編集します。

nano ~/.bashrc

export PATH=$PATH:~/binをそのファイルの最後に追加します。

これで、すべての新しい端末セッションには、ディレクトリで$ PATH変数が展開されます。

13
MadMike

あなたの質問に答える前に、「それがどのように機能するか」を少し説明させてください。

システムには Environment Variables があります。それらの1つはPATH変数で、実行可能プログラムとスクリプトが置かれているディレクトリのセットを格納します。 Linuxでは、デフォルトでPATHがいくつかのディレクトリを保存します。それらの1つは/binです。それが、/binにある任意のプログラムを実行できる理由です。これを実行するPATH変数を確認できます:

echo $PATH

PATH変数のディレクトリの順序はimportantです。最も優先度の高いパス名が最初に指定されます。

今、あなたの質問に答えます:

  1. はい。/binでシンボリックリンクを作成しても安全です。もちろん他の実行可能ファイルを書き換えない場合。ただし、/usr/local/binを使用することをお勧めします。 PATHにも含まれている必要があります。

  2. はい、そうです。 PATHの順序に応じて。たとえば、/bin/usr/binの両方に同じ名前の異なるファイルのシンボリックリンクを配置し、/usr/binより前のPATHに含まれる/binを使用すると、/usr/binからのシンボリックリンクが使用されます。

ファイルシステム階層について読むことができます こちら

Ubuntu環境変数について こちら

3
c0rp
  1. / binディレクトリに直接シンボリックリンクを配置しても安全ですか?これは、シンボリックリンクを配置するときに管理者パスワードを要求されたためです。

    セキュリティ上のリスクがあります。コマンドがグローバルになるだけでなく、シンボリックリンクも簡単に破損する可能性があるため、/ binディレクトリに独自のシンボリックリンクを配置するのは賢明ではないと思います。 bash PATH環境変数は、より堅牢なソリューションです。

  2. / usr/binディレクトリと比較して/ binにコマンドのシンボリックリンクを配置すると、違いが生じますか?

    いいえ。 Filesystem Hierarchy Standard(FHS) に従っていますが、/ binと/ usr/binには違いがあります。

    /binシングルユーザーモードで使用できる必要がある必須のコマンドバイナリ。すべてのユーザー(cat、ls、cpなど).
    /usr/bin必須ではないコマンドバイナリ(シングルユーザーモードでは不要)。すべてのユーザー向け。

    しかし、今日の違いはそれほど重要ではありません。実際、一部のディストリビューション(特にFedora)では、/ binディレクトリがフェードアウトする傾向があります。

2
sgx1

NO !!!システムディレクトリに触れないでください。作成したすべてのスクリプトまたはプログラムは、通常/usr/local/binおよび/usr/local/sbinディレクトリに配置する必要があります。また、PATHにディレクトリを追加することは、セキュリティ上のリスクがあるため、お勧めできません。

また、superuserプログラムの「s」ディレクトリの違い。

1
Danatela