以前、debian でこの状況に遭遇しました。新しく追加されたユーザーは毎回ログインします。パスすべての例では、sh-42$ が通常に戻るには su - ユーザー名が必要であり、ユーザー ディレクトリ内の .bashrc やその他の設定ファイルを入手する方法がないため、一連の問題が発生していることがわかります。
この場合、Linux のデフォルトの起動シェルが間違っている可能性が非常に高くなります。su をスーパー ユーザーに切り替え、vi /etc/passwd を使用して、そのユーザーの対応する起動シェルを表示し、他の一般ユーザーの起動シェルと比較して、異なる場合は同じになるように修正してください。 。
たとえば、他の正常ユーザーのシェルが /bin/bash で、異常ユーザーのシェルが /bin/sh の場合、/bin/bash に変更します。
bash シェルは、環境変数を設定するためにいくつかの起動ファイルを使用します。これらの起動ファイルはシェルそのものです。システム ユーザーは特定の bash シェル構成を決定します。この記事では、.bashrc、.bash-profile、および .profile の違いを理解します。
Bash は、対話型シェルにログインと非ログイン (ログインと非ログイン) という 2 つのモード オプションを提供します。
ssh を使用してシステムにログインすると、対話型ログイン シェル (対話型ログイン シェル) が取得され、呼び出されたときに起動ファイルが読み取られます。
ただし、すでにログインしているシェル上で新しいシェルを呼び出すと、対話型の非ログイン シェルが得られます。このシェルは .bashrc ファイルのみを実行します
シェルがコマンドを実行するために人間の介入を必要としない場合、それを非対話型シェルと呼びます。たとえば、スクリプトがコマンドを実行するためにサブシェルを生成する場合、そのサブシェルは非対話型シェルであり、サブシェルは起動ファイルを実行せず、サブシェルを作成したシェルから環境変数を継承します。
起動ファイルには、シェルの起動時に実行する必要があるコマンドが含まれています。したがって、シェルはこれらの起動ファイル内のコマンドを自動的に実行して、シェルをセットアップします。このプロセスは、コマンド プロンプトが表示される前に実行されます。
3.1 .bash_profile の重要性
.bash_profile ファイルには環境変数を設定するためのコマンドが含まれているため、シェルはこれらの変数を継承します。
対話型ログイン シェルでは、bash は最初に /etc/profile ファイルを探します。見つかった場合、bash はそれを読み取り、現在のシェルで実行します。その結果、/etc/profile はすべてのユーザーの環境設定を設定します。
同様に、bash はホーム ディレクトリ (ホーム ディレクトリとして cd ~ によって入力されたディレクトリ) に .bash_profile が存在するかどうかを確認します。存在する場合、bash は現在のシェルで .bash_profile を実行し、その後、Bash は .bash_login や .profile などの他のファイルの検索を停止します。
bash が .bash_profile を見つけられない場合、.bash_login と .profile を順番に探し、最初の読み取り可能なファイルのみを実行します。
サンプルの .bash_profile ファイルを見てみましょう。ここでは、PATH 変数をリセットしてエクスポートします
echo "Bash_profile execution starts.." PATH=$PATH:$HOME/bin; export PATH; echo "Bash_profile execution stops.."
対話型シェルのコマンド プロンプトにログインする前に、次の出力が表示されます
Bash_profile execution starts.. Bash_profile execution stops.. [example@example ~]$
3.2 .bashrcの意味
.bashrc には、bash シェルに固有のコマンドが含まれています。すべての対話型非ログイン シェルは最初に .bashrc を読み取ります。一般に、.bashrc はエイリアスと bash 関連の機能を追加するのに最適な場所です。
bash シェルはホーム ディレクトリで .bashrc ファイルを検索し、ソースを使用して現在のシェルでそれを実行します。
サンプルを通じて .bashrc ファイルについて理解しましょう
echo "Bashrc execution starts.." alias elui='top -c -u $USER' alias ll='ls -lrt' echo "Bashrc execution stops.."
対話型非ログイン シェルのコマンド プロンプトの前に、次の出力が表示されます
[example@example ~]$ bash Bashrc execution starts.. Bashrc execution stops.. [example@example ~]$
3.2 .profile の意味
対話型シェルのログイン プロセス中に、ホーム ディレクトリに .bash_profile が存在しない場合、bash は .bash_login を探します。 、bash がそれを実行します。 .bash_login がホーム ディレクトリに存在しない場合、bash は .profile を探して実行します。
.profile は、.bash_profile または .bash_login と同じ構成を維持できます。どのプロンプトが表示されるか、キーボードの音、どのシェルを開くか、および /etc/profile ファイルに設定されている変数をオーバーライドする個々のプロファイル設定を制御します。
bash シェルは、対話的にログインするたびに .bash_profile を実行します。 .bash_profile がホーム ディレクトリに見つからない場合、bash は .bash_login と .profile から見つかった最初の読み取り可能なファイルを実行します。ただし、対話型の非ログイン シェルが開始されるたびに、bash は .bashrc を作成します。
通常、環境変数は .bash_profile に置かれます。対話型ログイン シェルは最初のシェルであるため、環境設定に必要なすべてのデフォルト設定は **.bash_profile** に入れられます。したがって、これらは 1 回だけ設定され、すべてのサブシェルに継承されます。
同様に、エイリアスと関数も .bashrc に配置されます。既存の環境からシェルを起動するたびに、これらがロードされていることを確認してください。
ただし、ログインと非ログインを避けるため、インタラクティブシェルのセットアップの違い。 .bash_profile は .bashrc を呼び出します。したがって、次のコード スニペットが **.bash_profile** に挿入され、すべての対話型ログイン シェルで .bashrc も同じシェルで実行されるようになります。
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi PATH=$PATH:$HOME/bin export PATH
注意:
总而言之,在使用环境之前,shell需要其启动文件以配置shell环境。
在本文中,我们检查了各种shell模式。然后,我们了解了各种bash启动文件的重要性。最后,我们检查了这些启动文件之间的差异。
以上がLinux ユーザーソースの .bashrc または .profile がファイルを見つけられない問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。