質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Q&A

解決済

5回答

2575閲覧

/usr/binと/usr/local/binの違いについて

raspypy

総合スコア247

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

0グッド

1クリップ

投稿2020/08/18 08:10

##今していること
次のコマンドを実行し、インストールしたrcloneを/usr/local/binディレクトリにコピーしました。

/usr/local/binディレクトリにコピーした理由は、
OS標準でインストールされているものは、/bin/または/usr/binに格納し、
後からインストールしたものドは、/usr/local/binに格納するように区別しているからです。

text

1pi@raspberrypi:~/dev $ which rclone 2/usr/bin/rclone 3 4pi@raspberrypi:~/dev $ cd /usr/bin 5pi@raspberrypi:/usr/bin $ sudo cp ./rclone /usr/local/bin 6pi@raspberrypi:/usr/bin $ which rclone 7/usr/local/bin/rclone 8

##教えてほしいこと

最後にwhichコマンドで確認すると、
/usr/local/bin/rclone
と場所が変更になっていることは確認できていますが、疑問があります。

/usr/binディレクトリにも、まだrcloneがあるのですが、
なぜ、copyした後は、whichコマンドの結果が、/usr/local/binになるのでしょうか。

確認1
pi@raspberrypi:~/dev $ echo $PATH
で確認すると、
/usr/local/binのほうが上位に来ているからでしょうか?

確認2
/usr/binディレクトリのrcloneは削除すべきでしょうか?

確認3
rcloneが2つのディレクトリにある場合は、上位のディレクトリにあるrcloneが実行されるという理解であっていますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

dameo

2020/08/20 10:28

1つ質問なのですが、「インストールしたrclone」とあるのはどうやってインストールしたrcloneなのでしょうか? (githubなどから持ってきたソースをビルドしてインストールしたものか、ソースパッケージを修正してビルドしたものなのかと思って尋ねています。その後の文脈だとそんな気がするんだけど、書いてないので)
raspypy

2020/08/20 23:48

githubからインストールしました。
dameo

2020/08/20 23:55

それを書かないと皆さん混乱すると思います。 であれば、現状ubuntuのパッケージ管理としてはrcloneがインストールされていない認識なんですよね? もしそうなのであれば、確認2については削除した方がいいと思います。 また、「後からインストールしたものドは、/usr/local/binに格納する」のであれば、ビルドの設定時にインストールディレクトリも大抵のプロジェクトでは設定できると思うので、そちらで/usr/local/binにしておくことをオススメします。
guest

回答5

0

インストールしたrcloneを/usr/local/binディレクトリにコピーしました。

お勧めしません。
今後rcloneがアップデートされたとき、/usr/local/binへのコピーを忘れると古いrcloneが起動することになりますし、ライブラリも更新されていたら動かなくなる可能性もあります。

インストール時にパス変更可能であればその時点で変更し、パス変更できないインストーラーなら手動コピーなどは避けるべきです。

まあ/usr/local/binにrcloneのシンボリックリンクを生成する程度なら実害なさそうですが。


確認1 環境変数PATH上で、/usr/local/binが/usr/binより前に指定されているからでしょう。
確認2 削除すべきではありません。
確認3 rcloneを絶対パス指定で起動しない限り、環境変数PATHの指定順に先に見つかったrcloneが起動します。

投稿2020/08/18 23:02

DreamTheater

総合スコア1095

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2020/08/19 01:59

回答ありがとうございました。 "/usr/local/binへのコピーを忘れると"のご指摘、おっしゃる通りです。勉強になりました。
guest

0

ベストアンサー

>>インストールしたrcloneを/usr/local/binディレクトリにコピーしました。

お勧めできません。
知らずに既存の/usr/local/bin/rcloneを上書きしてしまう可能性が有りますし、
(whichの結果から、今回は上記のおそれはないですけど・・)
逆に何かのソフトウェアの依存関係で今の/usr/local/bin/rcloneが上書きされる
可能性も有ります・・同じコマンドでもバージョンの差によって依存する共有オブジェクトが
違ったりしますので、動くはずの物が動かなくなったりします。

ポリシーとしては
>>後からインストールしたものは、/usr/local/binに格納するように・・

と言うのは良い考えですが、OSの用意したパッケージシステムが
デフォルトでインストールした物は、触らない方が無難です。

投稿2020/08/18 10:30

編集2020/08/18 10:35
hana_yama_san

総合スコア923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2020/08/19 02:00

回答ありがとうございました。 1点教えていただきたいのですが 「OSの用意したパッケージシステムが デフォルトでインストールした物は、触らない方が無難です。」という部分が理解できませんでした。 詳しく教えていただけると助かります。
hana_yama_san

2020/08/19 11:09

インストールしたrcloneをというのが 「/usr/bin/rclone」ですよね。 それを/usr/local/bin にコピーした訳です(よね)。 じゃあ初めにインストールしたのは誰ですか? OSの用意したパッケージシステムを(デフォルトのまま) 使用したから、望まないディレクトリにインストールされたんじゃ無いのですか? でなければ最初から/usr/local/binにインストール出来ますよね。 さもなくば、あなたが自発的に/usr/binにインストールしたものを 後から/usr/local/binに移動したという訳の解らない事態になるのですが・・・
raspypy

2020/08/20 23:52

コメントありがとうございます。 curl -L https://raw.github.com/pageauc/rclone4pi/master/rclone-install.sh | bash でインストールした後、whichコマンドでインストール先を確認すると、 /usr/binディレクトリが表示されましたので、(自発的に/usr/binにインストールしたわけではありません) /usr/local/binディレクトリにコピーした次第です。 curlコマンドでインストールする際、特にディレクトリは指定していないので、 今、Raspberry Piを使用しているのですが、Raspberry Piの場合は、 勝手に/usr/binディレクトリに保存されるのでしょうか。
hana_yama_san

2020/08/21 09:44 編集

なるほど、そういう訳ですか。おそらくは rclone-install.shの中か、このスクリプトが 仮にどこかを参照しているなら、 そこにインストールのprefixが記載してあるか と言う事でしょう。 そういう場合はそこを書き換えてインストールするのが 本当は良いと思いますよ。 物によっては実行ファイルだけパスを移動すると、 例えばラッパーから呼ばれている物とかは動かなくなりますし、 別の実行ファイル(たいていは本体)が/usr/libexecに 有るのに、移動したファイルだけ/usr/local/以下に有るという 気持ち悪い状態になったりしますよね(設定ファイルなんかもそう)
guest

0

環境変数pathの前方にある方が優先されます
また複数あっても困らないので残しておいてもいいです
きになるなら適当な拡張子でもつけるなどリネームしてください

投稿2020/08/18 08:22

yambejp

総合スコア115010

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2020/08/19 02:01

回答ありがとうございます。 複数あっても、バックアップとして考えればよいと思っています。
guest

0

確認1, 3について:
上位という表現が適切かどうかは分かりませんが, 恐らくご想像の通りです.

Unix 系で標準的な仕様のシェル (Bourne 系シェル) にコマンドが入力され外部コマンドを探すことになった場合,
環境変数 PATH (シェルによってはそれに準じた配列だったりもします) に列挙されている順にコマンドを探し,
最初に見つかったコマンドが実行されます.
それ以降は探さないので無視されます.

which -a, type -a などのコマンドでは最後まで探し見つかった順に列挙されることでしょう.

確認2について:
削除すべきではありません.
もしも /usr/local/bin へインストールしたコマンドによってコンピュータが不調に陥ったときのためにも, 残しておきましょう.

投稿2020/08/18 08:19

kagilinn

総合スコア354

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2020/08/19 02:02

回答ありがとうございます。 "コンピュータが不調に陥ったときのためにも, 残しておきましょう."の部分、おっしゃる通りだと思いました。残すようにします。
guest

0

1、3 そのとおりです
2 他から使われることを考慮して、残しておくほうがいいのでは

投稿2020/08/18 08:18

y_waiwai

総合スコア87800

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

raspypy

2020/08/19 02:02

回答ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問