bashスクリプトはどこに置くべきですか


15

私は、定期的にやることのために一緒にまとめた非常にシンプルなbashスクリプトをいくつか持っています。その1つは、バックアップタスクを実行するために複製を実行することです。if .. thenステートメントの単なる束のような賢いものは何もありません。これはsudoとして実行する必要があるため、スクリプトを/ usr / bin(またはPATHの他の場所)に置き、root.rootにchownし、700にchmodするのがベストプラクティスですか?


私が使用することを言うだろうgitどこかのようにgitリポジトリのローカルコピーを入れ、バージョン管理スクリプトをし~、その後にスクリプトをシンボリックリンク~/bin
edwinksl

あなたは意味gitのようにgithub雲の中?
WinEunuuchs2Unix

2
@ WinEunuuchs2Unixスクリプトを他のユーザーが利用できるようにする場合は、に配置する必要があります/usr/local/bin。それ以外の場合は、単にそれらを入れるだけ~/binです。両方のディレクトリにある独自のスクリプトは、アップグレード時に安全であるはずです。
edwinksl

2
上記のように、それらを/ usr / local / binに配置します。スクリプト名が一意であり、既存のLinuxコマンド/バイナリ名ではないことを確認してください。既存のLinux名が数字で終わるのを見たことがないので、私自身が作成するスクリプトの末尾に数字を追加するだけです。(いくつかの本当にあいまいなものがかもしれないと言うことではない
...-ダグ

1
私が言っているほぼ一年後@edwinkslは、~/binあなたが使用する必要はありませんとしてほとんどのスクリプトのために最高の場所ですsudoそれらがに格納されている場合、あなたがそうであるように編集し、それらを/usr/local/bin
WinEunuuchs2Unix

回答:


3

自分のスクリプトをに保存し/opt/scriptsます。

スクリプトをすべてのシステムユーザーが実行できるようにする必要がある場合は、へのシンボリックリンクを作成できます/usr/bin

rootのみがスクリプトを実行する必要がある場合は、へのシンボリックリンクを作成できます/usr/sbin

シンボリックリンクを追加するコマンド/usr/bin/

ln -s /opt/scripts/<script> /usr/bin/

ので、あなたは、スクリプトを実行することができ/usr/bin/、あなたの中にあるPATHデフォルトで。


1
競合を避けるために/usr/bin、ユーザー/ローカルシェルスクリプトのターゲットとして使用する代わりに- /usr/local/bin(または/opt/binFilesystem Hierarchy Standardに従って(または)Debian Wikiを使用することをお勧めします(ほとんどの場合、Ubuntuが提供するスクリプトを優先する必要があります)。
シャローム

ほとんどのシステムでは、パスの後半にあるため、/usr/local/binオーバーライドします/usr/bin。システムはファイルをそこに置かないので、これは意図的なものです。そのため、そこにファイルを置くことができます。システムが提供するファイルをオーバーライドする必要があります。
アロ

両方の答えがうまく見えたとしても、私はこれを正しい答えとしてマークしました。理由は、私はFHSのドキュメントを調べて、/ optがまさにこの目的のためにあるという理解に追いついたからです。/ usr / local / binにあるスクリプトに単にシンボリックリンクするというアイデアが好きです。すべてのポインタをありがとう。
ハッターマン

17

あなた以外のユーザーがこれらのスクリプトを使用していない場合:

その後、それらを保管できます/home/$USER/binbinフォルダーが存在しない場合は作成し、そこにファイルを移動します。ホームのbinフォルダーは、PATH環境変数に自動的に追加されます。コードは次の.profileとおりです。

# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
    PATH="$HOME/bin:$PATH"
fi

/ home / username / binを$ PATHに追加する方法をご覧ください

または、一部のシステムでは次の場所にあります.bashrc

export PATH=${HOME}/bin/:${HOME}/.local/bin:${PATH}

ありがとう、オタク長老

これらのスクリプトを他のユーザーが使用する場合:

その後、どちらか/usr/local/binまたは/opt/bin良いオプションです。カスタムLinuxスクリプトを配置するための標準的な場所はありますか?を参照してください

お役に立てれば


3

私は、ローカルツールまたはのさまざまなコンピューターに展開するもののクイックコレクションに使用するディレクトリを持ってい/usr/local/apolloます。flagsbinおよびのためのこのディレクトリからの分岐がありますlogs

デフォルトのapt-getリポジトリの外部でダウンロードしてインストールするアプリケーションの場合、アプリケーション/opt/の特定のバージョン用のサブディレクトリがもう1つある、アプリケーションの名前のディレクトリにディレクトリが配置されます。この方法では、などのアプリケーションのバージョンをコンパイルし、私vlceclipse分散型バージョンと競合しません。

私の使用/optは、基本的に公式に設計された方法です。

ディレクトリところで/usr/local/bin/usr/local/apollo/opt新鮮なOSバージョンのインストールの上書きを生き残っています。


1
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin私は、事実/usr/local/binがもう1つ覚えておかなければならない道にあるのが好きです。私は、/opt/program/versionカーネルのバージョン間で物事を変更するEnhanceIOのように取得してコンパイルするカーネルにそれを使用できるというあなたの方法が好きです。ある/apollo月面着陸の個人的な好みやそれがUbuntuの意味を持つのでしょうか?
WinEunuuchs2Unix

アップグレード中に後者が無効になるの/usr/local/binと、その違いは何usr/local/sbinですか?
WinEunuuchs2Unix

インストーラは、使用するディレクトリを削除します。便利に/usr/localディレクトリを作成しますが、どのディレクトリにも何も入れません。これらのディレクトリにはユーザーが入力します。リポジトリ外の多くのソースプログラムは、インストール先を選択するオプションをユーザーに提供します。構成ファイルのデフォルトは/usr/local/binです。したがって、これらのディレクトリを使用するのが一般的であるため、デフォルトでユーザーのパスに含まれます。デフォルトでは、システム~/bin はそれをチェックし、存在する場合はパスに追加します。
LDジェームズ

システムは~/binインストール中または起動ごとにチェックしますか?違いは何であるsbinとはbin?それらは共存しているようで、プログラムの種類に基づいて選択する準ルールが必要です。
WinEunuuchs2Unix

1
@ WinEunuuchs2Unix ~/binパス上...インストール時に追加されません。システムは、ログインごとにそれをチェックし、ログイン中に存在する場合は$ PATHに追加します。~/.profile設定の最後の2行を見てください。
LDジェームズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.