PATHはなぜこれらのディレクトリのアイデアを持っていますか?

PATHはなぜこれらのディレクトリのアイデアを持っていますか?

私の.profile、PATH="$HOME/.local/lib:$HOME/.local/bin:$HOME/.node_modules/bin:$HOME/.cargo/bin:$HOME/local/bin:/usr/bin:$PATH" 私の.zshrcにminicondaパスコンテンツ(export PATH = "/ home / user / miniconda3 / bin:$ PATH")がありましたが、削除しましたが、最後にロードされたようです。私はそれが問題だとは思わない。しかし、私のシェルでは次のようになります。

/sbin:/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/opt/cuda/bin:/opt/cuda/nsight_compute:/opt/cuda/nsight_systems/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:/var/lib/snapd/snap/bin

たぶん、いくつかのアーチパッケージがこれらのパスを設定しますか?しかし、私の道にsbinを設定するものは何ですか?私は根ではありません。

また、私の.profileのPATHコマンドが選択されていないため、エクスポートしようとしましたが、エクスポートされませんでした。私はそれがうまくいったと確信しています。 (編集:zshは.zprofileのみをソースとして使用しているようです。)

答え1

珍しい点はlib目次だ。sbin過去数年間、ますます多くのLinuxディストリビューションでそのディレクトリにディレクトリsbinシンボルbinを作成しているため、これがあるのが一般的です。たとえば、私のアーチでは:

$ ls -ld /sbin /usr/sbin
lrwxrwxrwx 1 root root 7 Jan 31 20:51 /sbin -> usr/bin
lrwxrwxrwx 1 root root 3 Jan 31 20:51 /usr/sbin -> bin

これはアーチ文書:

Arch Linux は、以下を使用してオペレーティングシステムのファイルシステム階層に従います。システムサービスマネージャ。バラよりファイル階層(7)各ディレクトリとその名前の説明。具体的には、、およびはの/binシンボリック/sbinリンク/usr/sbin、および/usr/bin/lib/lib64シンボリックリンクです/usr/lib

sをそのsにシンボリックリンクしてbinマージしてディレクトリを作成することがますます一般化されています。 freedesktop.orgの人々はこれを示しています。sbinsbinbinここ、以下の主な主張のいくつかを再現します。

互換性:必須

  • 他のUnix/Linuxとの動作互換性が改善されました。/usrマージ後、すべてのバイナリはそれぞれおよびで使用できます/bin(シンボリックリンクがそれぞれへのシンボリックリンクになったため/usr/bin)。これは、他のUnixまたは他のLinux用に作成され、ディストリビューションに移植されたスクリプト/プログラムが、呼び出されたバイナリのファイルシステムパスを変更する必要がないことを意味します。それ以外の場合、苦情の主な原因となる可能性があります。そして(それぞれand)全く同じです。/sbin/usr/sbin/bin/usr/bin/sbin/usr/sbin/usr/bin/bin/usr/sbin/sbin
  • 他のUnix(特にSolaris)スキンとの互換性の向上:現在、主な商用Unixの実装はOracle Solarisです。 Solaris は/usrSolaris 11 で同じマージを完了しました。 Linuxでも同じ変更を行うことで、基本的なUnix実装との違いを最小限に抑え、Solarisの移植性を簡素化しました。
  • GNUビルドシステムとの互換性の向上:Linuxソフトウェアの最大の部分は、Linux固有の/usrパーティション化を認識しないGNU autoconf / automake(GNU autotoolsなど)を使用して構築されます。分割を維持するには、/usrアップストリームビルドシステムとデプロイパッケージで重要なプロジェクト固有の処理が必要です。マージすると、/usrこれは不要になり、パッケージをLinuxに移植する方が簡単になります。
  • 現在のアップストリーム開発との互換性の向上:Linuxディストリビューションとアップストリーム開発の違いを最小限に抑えるために、/usrマージが重要です。

[。 。 .]

互換性を超えて

/ usrマージの主な利点は、システムの複雑さが減少することです。新しいファイルシステム階層がより単純化され、ベンダーが提供するオペレーティングシステムリソース(読み取り専用、変更不可能)とユーザーリソースがより明確になります。階層の複雑さが減少するにつれて、.specファイルの分割処理の問題がなくなり、パッケージングがより簡単になります。

マージされたディレクトリ/usrには、ベンダーが提供するほとんどすべてのオペレーティングシステムリソースが含まれており、オペレーティングシステムのスナップショットに関連する多くの新機能と、ネットワーク共有または単一ホストで複数のゲストを実行するためのエンタープライズ環境オプションが提供されます。ベンダーが提供する静的オペレーティングシステムリソースは単一の場所で排他的であり、システム全体または各サービスに対して個別に読み取り専用に簡単に設定できます。現在、複数のディレクトリにわたってランダムなツールが断片化されているため、この作業の大部分は難しくても不可能です。

ベンダーによって提供されたすべてのオペレーティングシステムリソースを単一のディレクトリ/ usrに配置すると、アトミックに共有でき、そのリソースのスナップショットがアトミックになり、ファイルシステムを単一単位で読み取り専用にすることができます。

あなたの設定に関しては、PATHあなたの場合は/usr/local/sbinデフォルトファイルによって追加されます/etc/profile

$ grep sbin /etc/profile
append_path '/usr/local/sbin'

/sbin追加する場所や追加する場所が見つかりません/usr/sbin。奇妙です。私が考えることができるどんな文書にも言及されていないようです。bib2次のパスを使用してシステムに新しいユーザーを作成しました。

$ echo $PATH 
/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/sbin:/usr/local/bin

ただし、以下を除いて、/usr/local/sbin他のsbinディレクトリは明らかな場所には記載されていません。

$ grep -HR sbin ~/.bashrc ~/.profile ~/.bash_profile \
       ~/bash.login ~/.bash_aliases /etc/bash.bashrc /etc/profile \
        /etc/profile.d/ /etc/environment /etc/security/pam_env.conf \
        /etc/login.defs 2>/dev/null 
/etc/profile:append_path '/usr/local/sbin'
/etc/login.defs:ENV_SUPATH  PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
/etc/login.defs:ENV_PATH    PATH=/usr/local/sbin:/usr/local/bin:/usr/bin
/etc/login.defs:#USERDEL_CMD    /usr/sbin/userdel_local

したがって、これらは他の場所で定義する必要がありますが、どこにも見つかりません。

関連情報