リンクしてコンパイルし、C++でプログラムを作成しました。
foobar.out
私はそれをbinディレクトリに入れて、システム全体のコマンドのように使用できるようにしたいです。
ssh, echo, bash, cd...
どうすればそれを達成できますか?
パスを指定せずにバイナリを実行できるようにするには、2つの方法があります(絶対パスで実行するエイリアスやシェル関数の作成は含まれません)。
$PATH
にあるディレクトリにコピーします。$PATH
に追加します。パス内のディレクトリ、たとえば/usr/local/bin
( ローカルで管理されているソフトウェアが移動する場所 )にファイルをコピーするには、通常Sudo
の使用を意味するスーパーユーザー権限が必要です:
$ Sudo cp -i mybinary /usr/local/bin
ターゲットディレクトリの既存のファイルを上書きしないように注意する必要があります(これが-i
を追加した理由です)。
$PATH
にディレクトリを追加するには、~/.bashrc
ファイルに行を追加します(bash
を使用している場合):
PATH="$HOME/bin:$PATH"
...バイナリが$HOME/bin
にある場合。
これには、スーパーユーザー特権を持っている必要も、マシンの基本システムで何かを変更/追加する必要もないという利点があります。バイナリをホームディレクトリのbin
ディレクトリに移動するだけです。
.bashrc
への変更は、次回ファイルが読み込まれたときに有効になります。これは、新しいターミナルを開いたり、ログアウトして再度ログインしたり、手動でsource ~/.bashrc
を実行した場合に発生します。
[〜#〜] path [〜#〜] 変数について詳しく読む必要があります。適切に使用(または変更)してください。
Binディレクトリに配置できるようにしたい
_/bin/
_または_/usr/bin/
_を意味していると思います。そこに独自のプログラムを追加するのが賢明かどうかはわかりません。おそらく、プログラムをそこに表示したい場合は、その中にシンボリックリンクを挿入することをお勧めします(たとえば、ln -sv $(realpath foobar.out) /usr/bin/
のようなものを使用します)。 パッケージマネージャ )。
おそらく、プログラムを_/usr/local/bin/
_にインストールする方が賢明です(_/bin/
_と_/usr/bin/
_の両方をそのままにしておくと、 Linuxディストリビューション によって提供および管理されます)。 [〜#〜] lsb [〜#〜] を参照し、 File Hierarchy Standard の詳細を確認してください。
...システム全体のコマンドのように...
cd
これはあなたの側の強い誤解です(質問の元のバリアントでは、後でcd
を正しく削除しました)。 cd
は 実行可能 ではなく、また使用できません。これは、シェルの組み込みコマンドです(そしてそうでなければなりません)。
自由にダウンロードできる Advanced Linux Programming を読んで、cd
が実行可能にならない理由を理解することをお勧めします(現在の 作業ディレクトリ は各プロセスの状態の一部であり、すべてのプロセスには独自のものがあり、 chdir(2) ...)を使用して変更できます。
install /path/to/oobar.out /usr/local/bin/
実行ファイルを/usr/bin/
にコピーすると、echo
または/usr/bin/
の他の実行可能ファイルのように実行できるようになります。
cp -a <filename> /usr/bin/
chmod a+x /usr/bin/filename
@Kusalanandaの承認済みの回答に追加します。自家製のスクリプトとプログラムを$ HOME/binに配置するもう1つの利点は、システムをアップグレードするときに失われないことです。これは、個人用ツールボックスを管理するための優れた方法であり、移植性を高めます。