
LinuxでPATH環境変数がどのように機能するかは混乱しています。私はLinux Mint 15ユーザーです。
/home/.bashrc
まず、ファイルの編集と実行方法について読みましたがPATH=$PATH:/directory
、インストールされているすべてのソフトウェアがシェルのどこからでもアクセスできるように
管理されているいくつかのパスエントリについても学びました。/etc/bash.bashrc
/usr/local/bin
Linuxでは、パス変数はどのように機能し、どこに配置する必要がありますか?
答え1
ここで理解すべき基本的な概念は、PATHが複数の場所で定義できることです。 @demureが彼の答えで説明したようPATH=$PATH:/new/dir
に次へ追加 /new_dir
到着すると$PATH
不明なことが判明しました$PATH
。
ファイルが多すぎる理由の1つは、シェルの概念login
に関連しています。non-login
バラよりここ良いまとめです。以下はbashのマニュアルページからのものです(ハイライト):
bashが--loginオプションを使用して対話型ログインシェルまたは非対話型シェルとして呼び出されると、ファイルが存在する場合は、まず/etc/profileファイルからコマンドを読み取り、実行します。ファイルを読み取ったら、~/.bash_profile、~/.bash_login、~/.profile を順番に探します。、最初の既存および読み取り可能なコマンドからコマンドを読み取り、実行します。この動作は、シェルの起動時に --noprofile オプションを使用して無効にできます。
初めてシステムにログインすると起動します。ログインシェルなので、bashは上記のファイルを読み込みます。ほとんどの展開には、すべてのユーザーに適用する変更を適用する必要があるシステム全体$PATH
(すべてのユーザーに適用)設定があります。/etc/profile
これは私のDebianにあります:
PATH="/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games"
ログイン後に端末を開くと起動します。対話型、非ログインシェル。これについては、次のようにman bash
話す必要があります。
When an interactive shell that is not a login shell
is started, bash reads and executes commands from
/etc/bash.bashrc and ~/.bashrc, if these files exist.
したがって、新しい端末を開くたびにこれらのファイルを読みます。最後の $PATH は、すべてのファイルの値の組み合わせです。一般的なシナリオでは、グラフィカルログインマネージャを使用してログインし、新しいセッションを開始します。この時点で、コンテンツは各ファイルで定義されてい$PATH
ます。profile
端末を開くとインタラクティブシェルにあり、bashrc
内容が$PATH
。
全体的に、あなたが本当に知っておくべきことは$PATH
編集できるということです$HOME/.profile
。
答え2
ホームディレクトリでは.bashrc
代わりになります.bash.rc
。
システム全体の構成/etc/bashrc
ではありません/etc/.bash.rc
。
UnixとLinuxはファイルパスを使用せずにファイルパスを\some\path\here
使用します/some/path/here
。\
他の特殊文字を無効にするために使用されるエスケープ文字です。
(ホームディレクトリを表します)行に$PATH
それを追加して編集できます。~/.bashrc
~
PATH=$PATH:/usr/local/bin:/some/other/path
export PATH
どこ
$PATH
PATHに設定されているすべての項目を保持します。:
別のアイテム。:/some/other/path
これら2つのディレクトリは例です(該当するものは必要ありません)。
/etc/bashrc
直接変更する必要がある場合は、システム全体の編集をお勧めしません。
答え3
まず、カーネル(またはinitramfs)は、プロセスに初期デフォルトのPATH値init
と他の環境変数を提供します。必要に応じてその内容を表示できます。
$ sudo strings /proc/1/environ
selinux=0
SHLVL=1
HOME=/
init=/sbin/init
TERM=linux
drop_caps=
BOOT_IMAGE=/vmlinuz-4.9.80-atom
PATH=/sbin:/usr/sbin:/bin:/usr/bin
crashkernel=384M-:128M
PWD=/
rootmnt=/root
起動時に起動されるデーモンやその他のプロセスの場合、プロセスinit
(従来のSysVinitまたは最新の代替手段のいずれかsystemd
)に独自のデフォルトPATHを適用するか、単にカーネルデフォルトを渡すことができます。これは設定可能または不可能です。初期化システムのマニュアルを参照してください。
ログインセッションの場合、PAM設定には、pam_env.so
ユーザーセッションへのデフォルトパスを適用できるエントリを含めることができます/etc/security/pam_env.conf
。または、使用されていない場合は、ログインを処理するプロセス(既存のペアなど)pam_env.so
コンソールまたはシリアルポートログインなど、ユーザーセッションに独自のデフォルトの開始パスを適用できます。sshd
*getty
login
その後、ユーザーのシェルは通常、1つ以上のシステム全体のログインスクリプトと1つ以上のユーザー固有のログインスクリプト(存在する場合)を実行します。これらのいずれかを既存のPATH設定に追加するか、完全に置き換えることができます。
答え4
PATH
私の使用/etc/enviroment
のために/etc/login.defs
...