Windowsでは、システムドライブC:
にはディレクトリがあり、program_files
そのディレクトリ内の各プログラムには独自のディレクトリがあります。
Linuxでは、以下/usr/
と下などが/usr/local/
あります。/bin, /etc, /share, /src
したがって、Windowsでは、各プログラムのすべてのファイルが同じディレクトリにグループ化され、Linuxでは、同じ種類のファイルがすべてのプログラムに対して同じディレクトリにグループ化されます。
私は、Windowsがインストーラを構成する方法がLinuxよりも論理的であるため、インストールされたプログラムを手動で管理する方が簡単だと思います。
Linuxがインストールされたプログラムファイルを構成する方法の利点は何ですか?ありがとうございます。
次の問題に直面したときにこの問題が発生しました。シェルが実行時に検索できるように、$ HOMEにインストールされたプログラムをどのように構成できますか?、Windowsの方法でプログラムを構成しようとしていますが、$HOME
プログラムの検索パスを指定する際にいくつかの問題があります。
答え1
Linux では、適切なメンテナンスを行うと、他の場所にいくつかのロジックが反映されることがよくあります。例えば。 :
/bin
最も基本的なツール(プログラム)が含まれています。/sbin
最も基本的な管理手順が含まれています。
どちらにも、起動と基本的なトラブルシューティングのための基本的なコマンドが含まれています。ここで最初の違いを見ることができます。一部のプログラムは一般ユーザーには適していません。
それから入って見てください/usr/bin
。ここでは通常、1000を超えるより多くのコマンド(プログラム)を見つけることができます。これは標準的なツールですが、/bin
そのツールほど重要ではありません/sbin
。
/usr/bin
構成ファイルが別の場所にある間にコマンドを含めます。これは、機能エンティティ(プログラム)とその設定やその他のファイルを分離しますが、ユーザー機能に関する限り、コマンドが他のものと混在することなく実行可能ファイルを指すPATH
変数を使用できるため便利です。また、明確さを紹介します。何でも実行可能でなければなりません。
私のものを見てPATH
、
$ echo "$PATH" | perl -F: -anlE'$,="\n"; say @F'
/home/tomas/bin
/usr/local/bin
/usr/bin
/bin
/usr/local/games
/usr/games
正確に6つの場所には、直接呼び出すことができるコマンドが含まれています(パスではなく実行可能ファイル名など)。
/home/tomas/bin
パーソナル実行可能ファイル用のマイホームフォルダのプライベートディレクトリ。/usr/local/bin
以下でそれぞれ説明します。/usr/bin
上記のように。/bin
上記も説明されています。/usr/local/games
/usr/local
(以下の説明)とゲームの組み合わせです。/usr/games
それはゲームです。ユーティリティ実行可能ファイルと混在しないでください。独自の場所があります。
今/usr/local/bin
これは少し滑りやすく、ここで説明されています。/usr/local/binとは何ですか?。これを理解するには、フォルダが/usr
多数のコンピュータで共有され、ネットワークの場所からマウントできることに注意してください。前述のように、コマンドとは異なり、これらのコマンドは起動時に必要とされないため、/bin
起動プロセスの後の段階で場所をインストールできます。読み取り専用でインストールすることもできます。/usr/local/bin
一方、ローカルにインストールされたプログラムのため、書き込みが可能でなければなりません。したがって、多くのネットワークコンピュータは共通ディレクトリを共有できますが、各コンピュータは共通ディレクトリに/usr
あります。/usr/local
/usr
PATH
最後に、私のrootユーザーを見てください。
# echo "$PATH" | perl -F: -anlE'$,="\n"; say @F'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
これには次の内容が含まれています。
/usr/local/sbin
、次の種類の管理コマンドが含まれています。/usr/local
/usr/local/bin
、これは一般ユーザーが使用できるものと同じです。同様に、そのタイプは次のように説明できます/usr/local
。/usr/sbin
必須ではない管理ユーティリティです。/usr/bin
必須ではない管理および一般ユーザーユーティリティです。/sbin
必須の管理ツールです。/bin
管理者や一般ユーザーに必要なツールです。
答え2
今、私はこれが古典的なUNIXの歴史的遺産だと思います。
UNIXの最初のバージョンでは、プログラムは今ほど大きくありませんでした。これらのプログラムは通常、システムライブラリを使用する実行可能ファイルで構成されます。したがって、誰も独自のライブラリで構成されたプログラムを考慮していません。デフォルトライブラリはCライブラリであり、すべてのプログラムはその場所を知っています。
また、UNIX環境は文書を準備するための完成品と見なされます。したがって、すべてのツールのパスは固定されています。
今日、HDD(ハードディスクドライブ)時代の固定パスにはいくつかの利点があります。 FSH(ファイルシステム階層)が別々のディスクパーティションに分割され、バイナリとライブラリのあるパーティションがHDDのメインセクタの近くに配置されると、プログラムの起動時間が少し速くなります。
答え3
/usr/bin
/usr/lib
アプリケーションパッケージ(あるディレクトリにはC ++コンパイラ、別のディレクトリにはイメージ編集プログラム)ではなく、個々のファイルを目的(実行ファイル、ライブラリ用)別に分割するスタイルを議論しているようです。 Unixシステムでこれの主な理由は歴史的ですが、今日のUnix系システムでこれを好む傾向がある勢力もあります。つまり、システムのほとんどのプログラムを管理するパッケージマネージャです。
Windowsでは、歴史的にもまだそうです。アプリケーションは独自のインストーラ、特にアンインストーラを提供する必要があり、現在も中央アプリケーションのリストに自分自身を登録しないことがよくあります。この場合、通常、アプリケーションはできるだけ多くのファイルを保持できる「自己」ディレクトリを持つことをお勧めします。これは常に動作するわけではありませんが、他のアプリケーションとの競合を回避するのに役立ちます(特に次の場合)。DLL)。
一方、Unixシステムは1990年代から一般的に認められているパッケージマネージャと、そのパッケージマネージャを通じてよく使われる大量のソフトウェアを提供するグループを持っている。 (さまざまなUnicesの公式パッケージマネージャにはyum
Linux apt
、pkgsrc
NetBSD、およびports
FreeBSDが含まれています。商用Unixシステムには、brew
MacOSなどの非公式ですが広く使用されているパッケージマネージャがよくあります。)
これらのパッケージマネージャの利点は、システムが「所有」したさまざまなサブディレクトリ内のすべてのファイルを追跡できることです。単一のグループがここで各ファイルの名前と場所を割り当てるため、誰もが互いに共有する小さなディレクトリのセットにアクセスできます。これは、アプリケーション間でファイルを共有し、ライブラリや実行可能ファイルを検索するために必要なパスの数を減らすなど、さまざまな利点を提供します。
つまり、Unixでは通常、「アプリケーションごとに別々のディレクトリ」をインストールする長い伝統があります/opt
。
答え4
あなたが見る現代のUnixシリーズシステムは、実際には伝統的なシステムではありません。
/
通常、システムユーティリティの階層は非常に小さく/usr
、プログラムはサブディレクトリに個別にインストールされ、/usr/local
シンボリックリンクを作成して使用できるようになります。
GNUソフトウェアの非常に一般的な設定はコンパイルとインストールです。
./configure
make
make install prefix=/usr/local/DIR/program-1
cd /usr/local/DIR
stow program-1
牛に似た一種の栄養お店このユーティリティは、PATH変数にディレクトリを追加せずに標準パスでソフトウェアを使用できるようにシンボリックリンクを作成します(Windowsと同様に、クルフトがそこに蓄積する傾向があります)。
しかし、最新のLinuxディストリビューションはすべてを既製のパッケージとして提供するので、プログラムは「システム」の一部になります。パッケージマネージャはインストールを管理するため、シンボリックリンクは必要なく、プログラムを分離しても役に立ちません(ただし、多くの小さなディレクトリを調べる必要があるため、プログラムの起動が遅くなります)。
ホームディレクトリにソフトウェアをインストールするには、GNU stowも使用することをお勧めします。これはプログラムを別々に保つことができ、パッケージマネージャを使用しない場合は賢明な方法です。
私の伝統的な設定は、~/software/DIR
プログラムをディレクトリにインストールしてからstowを使って背中をDIR
作成することです。つまり、PATH変数を追加するだけで、インストールされているすべてのソフトウェアを取得できます。~/software/bin
~/software/share
~/software/bin
使用:
./configure --prefix=~/software
make
make install prefix=~/software/DIR/program-1
cd ~/software/DIR
stow program-1
プログラムがGNU規則に従う場合は、そのプログラムをインストールしてください。