CentOS の環境変数と設定ファイルの詳細な説明

CentOS の環境変数と設定ファイルの詳細な説明

序文

CentOS 環境変数設定ファイル システムは階層型システムであり、他のマルチユーザー アプリケーション システム設定ファイルと同様です。グローバル、ユーザー、シェル設定ファイルがあります。また、異なるレベルには継承関係がある場合もあります。

この記事では、CentOS の環境変数と設定ファイルに関する関連内容を詳しく紹介します。詳しい紹介を見てみましょう。

環境変数とは何か

bash シェルは、環境変数と呼ばれる機能を使用して、シェル セッションと作業環境に関する情報を保存します。つまり、プログラムまたはシェルで実行されているスクリプトがデータにアクセスできるように、データをメモリに保存できるようになります。

bash シェルでは、環境変数は次の 2 つのカテゴリに分けられます。

  • グローバル変数
  • ローカル変数

グローバル環境変数

グローバル環境変数は、シェル セッションと生成されたすべてのサブシェルに表示されます。ローカル変数は、それを作成したシェルにのみ表示されます。

グローバル変数を表示するには、env または printenv コマンドを使用できます。

[root@dev ~]# env
ホスト名=localhost
TERM=Linux の場合
シェル=/bin/bash
ヒストサイズ=1000
SSH_クライアント=10.0.100.17 56344 22
SSH_TTY = /dev/pts/0
ユーザー=ルート


[root@dev ~]# 
[root@dev ~]# printenv
ホスト名=localhost
TERM=Linux の場合
シェル=/bin/bash
ヒストサイズ=1000
SSH_クライアント=10.0.100.17 56344 22
SSH_TTY = /dev/pts/0
ユーザー=ルート


[root@dev ~]# printenv TERM
リナックス

$ + 変数名を使用して環境変数を使用します。

[root@dev ~]# echo $HOME
/根

システム環境変数は、一般ユーザーの環境変数と区別するために、通常は大文字で記述されます。

ローカル環境変数

名前が示すように、ローカル環境変数は、定義されているプロセス内でのみ表示されます。 set コマンドは、ローカル変数、グローバル変数、ユーザー定義変数など、特定のプロセスに設定されているすべての環境変数を表示します。

[root@dev ~]# 設定
バイナリ = /bin/bash
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV =()
BASH_CMDS=()
BASH_LINENO=()
BASH_SOURCE=()
BASH_VERSINFO=([0]="4" [1]="1" [2]="2" [3]="1" [4]="リリース" [5]="x86_64-redhat-linux-gnu")
BASH_VERSION='4.1.2(1)-リリース'
カラー=/etc/DIR_COLORS
列数=165

ユーザー定義変数

bash シェルを起動したら、そのシェル プロセス内で表示できるローカル変数を作成できます。プロセスによって作成されたサブシェルは、親シェルのローカル変数を読み取ることができません。

[root@dev シェル]# sh a.sh

2
22
2
[root@dev シェル]# cat a.sh
#!/bin/bash

1 = 1;
エクスポート b=2;

sh b.sh

$b をエコーし​​ます。


[root@dev シェル]# cat b.sh
#!/bin/bash

$a をエコーし​​ます。
$b をエコーし​​ます。
22 です
$b をエコーし​​ます。
[root@dev シェル]# sh a.sh 

2
22
2

ユーザーは変数をエクスポートしてグローバル変数にし、サブシェルでも読み取れるようにすることができます。サブシェルが変数を変更しても、親シェルは影響を受けません。

サブシェルで環境変数を設定した場合、それを親シェルで読み取りたい場合はどうすればよいでしょうか?

使用シナリオの 1 つは、複数の実行スクリプトが env.sh スクリプトに記述された共通の環境構成に依存している場合です。他の実行スクリプトはどのようにして env.sh 内の変数を読み取ることができるのでしょうか。サブシェルで変数をエクスポートしても、親シェルには影響しません。

source コマンド (C シェルから) は、bash シェルの組み込みコマンドです。ドット コマンドはドット記号 (Bourne Shell から) であり、source の別名です。どちらのコマンドも、現在のシェルの環境として実行されるスクリプトを引数として受け取ります。つまり、新しいサブプロセスは開始されません。スクリプトに設定されたすべての変数は、現在のシェルの一部になります。

[root@dev シェル]# cat c.sh
. ./env.sh
ソース ./profile.sh

$env をエコーし​​ます。
$profile をエコーし​​ます。
[root@dev シェル]# cat env.sh
env='テスト';
[root@dev シェル]# cat profile.sh 
プロファイル="dev";
[root@dev シェル]# sh c.sh 
テスト
開発

環境変数を削除する場合

var_name の設定を解除

グローバル環境変数の設定

上記から、このプロセスと子プロセスで共通の環境変数を使用する必要があることがわかります。これは、source コマンドを使用して同じ環境変数スクリプトを読み取ることで実現できます。これはユーザー定義のスキームです。しかし、多くの場合、読み取る必要のあるグローバル環境変数のソースがわからないため、ファイルを読み取るにはデフォルトの環境変数が必要になります。

Linux システムにログインすると、bash シェルがログイン シェルとして起動します。ログインシェルは5つの異なるスタートアップファイルから読み取ります

  • /etc/プロファイル
  • $HOME/.bash_profile
  • $HOME/.bashrc
  • $HOME/.bash_login
  • $HOME/.プロファイル

/etc/プロファイル

/etc/profile ファイルは、bash シェルのデフォルトのメイン起動ファイルです。 Linux システムにログインしている限り、bash は /etc/profile 起動ファイル内のコマンドを実行します。

[root@dev シェル]# cat /etc/profile
# /etc/プロファイル

# ログイン設定用のシステム全体の環境とスタートアッププログラム
# 関数とエイリアスは/etc/bashrcに記述します

# 何をしたいのか分かっていない限り、このファイルを変更するのは得策ではありません
# は実行しています。custom.shシェルスクリプトを作成する方がはるかに良いです
# /etc/profile.d/ で環境に合わせてカスタム変更を加えることができます。
# 将来のアップデートでマージする必要がなくなります。

パスマンジ(){
 ケース ":${PATH}:"
  *:"$1":*)
   ;;
  *)
   if [ "$2" = "after" ] ; then
    パス=$パス:$1
   それ以外
    パス=$1:$パス
   フィ
 エサック
}


[ -x /usr/bin/id ]の場合;
 if [ -z "$EUID" ]; then
  # ksh の回避策
  EUID=`id -u`
  UID=`id -ru`
 フィ
 USER="`id -un`"
 ログ名=$USER
 メール="/var/spool/mail/$USER"
フィ

# パス操作
[ "$EUID" = "0" ]の場合
 パスムンジ /sbin
 パス変更 /usr/sbin
 パス変更 /usr/local/sbin
それ以外
 pathmunge /usr/local/sbinの後
 pathmunge /usr/sbinの後
 pathmunge /sbin後
フィ

ホスト名=`/bin/hostname 2>/dev/null`
ヒストサイズ=1000
if [ "$HISTCONTROL" = "ignorespace" ] ; then
 エクスポート HISTCONTROL=ignoreboth
それ以外
 エクスポート HISTCONTROL=ignoredups
フィ

エクスポート PATH ユーザー ログ名 メール ホスト名 HISTSIZE HISTCONTROL

# デフォルトでは、umask を設定する必要があります。これはログインシェル用に設定します
# システム予約済み uid/gid の現在のしきい値は 200 です
# uidgid予約の有効性は以下で確認できます
# /usr/share/doc/setup-*/uidgid ファイル
[ $UID -gt 199 ] && [ "`id -gn`" = "`id -un`" ] の場合;
 umask 002
それ以外
 umask 022
フィ

/etc/profile.d/*.sh の i に対して、
 [ -r "$i" ]の場合;
  [ "${-#*i}" != "$-" ] の場合;
   . "$i"
  それ以外
   . "$i" >/dev/null 2>&1
  フィ
 フィ
終わり

設定解除 i
-f パスの変更を解除

このファイルは、/etc/profile.d/ の下にあるすべての *.sh ファイルを読み取り、コマンド (ソース) をクリックして変数を読み込みます。つまり、/etc/profile および /etc/profile.d/*.sh で定義された変数は、グローバル システム環境変数です。

$HOME/.bash_profile

$HOME の下の起動ファイルはすべて、ユーザーの環境変数を定義するユーザー固有の起動ファイルです。 /etc/profile は、すべてのユーザーのシステム環境変数です。

シェルは、次の順序で最初に見つかったファイルを実行し、残りは無視します。

  • $HOME/.bash_profile
  • $HOME/.bash_login
  • $HOME/.プロファイル

.bashrc は .bash_profile を通じて呼び出されます。

[root@dev シェル]# cat ~/.bash_profile 
# .bash_プロファイル

# エイリアスと関数を取得する
[ -f ~/.bashrc ]の場合;
  . ~/.bashrc
フィ

# ユーザー固有の環境と起動プログラム

PATH=$PATH:$HOME/bin

エクスポートPATH

要約:

設定するシステムグローバル環境変数(JAVA_HOME など)を /etc/profile.d/ ディレクトリに配置し、*.sh スクリプトの形式で定義します。

さて、以上がこの記事の全内容です。この記事の内容が皆さんの勉強や仕事に一定の参考学習価値を持つことを願っています。ご質問があれば、メッセージを残してコミュニケーションしてください。123WORDPRESS.COM をご愛顧いただきありがとうございます。

以下もご興味があるかもしれません:
  • CentOS 7 での LNMP 開発環境の設定と設定ファイル管理の詳細な説明
  • CentOS での SSH パスワードレス ログイン用設定ファイル

<<:  JavaScriptにおけるこれの深い理解

>>:  MySQL 検査スクリプト (必読)

推薦する

Vueコンポーネントは、写真やビデオをアップロードするためのサンプルコードをカプセル化します

まず依存関係をダウンロードします: cnpm i -S vue-uuid ali-oss画像フィール...

1つの記事でJavaScript DOM操作の基本を学ぶ

DOM の概念DOM: ドキュメント オブジェクト モデル: ドキュメント オブジェクト モデルは、...

Vueはチャットインターフェースを実装する

この記事の例では、チャットインターフェースの表示を実現するためのVueの具体的なコードを参考までに共...

Mysqlトランザクション操作の失敗を解決する方法

Mysqlトランザクション操作の失敗を解決する方法トランザクションの原子性: トランザクションは、デ...

MySQL トリガーの使用シナリオとメソッドの例

トリガー:トリガーの使用シナリオと対応するバージョン:トリガーは次の MySQL バージョンで使用で...

setup+ref+reactive は vue3 の応答性を実装します

セットアップは、結合された API を記述するために使用されます。テンプレートが使用できるようにする...

MySQL トリガー: 複数のトリガー操作の作成例の分析

この記事では、例を使用して、MySQL で複数のトリガー操作を作成する方法について説明します。ご参考...

伝説的な VUE 構文シュガーは何をするのでしょうか?

目次1. 糖衣構文とは何ですか? 2. VUE の構文糖とは何ですか? 1. 最も一般的な構文シュガ...

TypeScript 学習ノート: 型の絞り込み

目次序文型推論真理値の絞り込み平等の縮小演算子の絞り込みインスタンスの絞り込み狭まりの本質ユニオン型...

Vue3の組み込みコンポーネントであるTeleportの使い方を詳しく説明します

目次1. テレポートの使用2. モーダルダイアログコンポーネントを完成させる3. コンポーネントのレ...

Tomcat メモリ オーバーフロー問題の解決経験

少し前に、製品バージョンをテスト用にテスターに​​提出したのですが、テスト結果はまったく予想外のもの...

JavaScriptプロトタイプとプロトタイプチェーンを徹底的に理解する

目次序文基礎を築くプロトタイプコンストラクタのプロパティ__プロト__プロトタイプチェーン改善する要...

MySQLデッドロック問題の詳細な分析

序文私たちのビジネスがまだ初期段階にあり、同時実行の度合いが比較的低い場合、数年間はデッドロックの問...

HTML テーブルタグチュートリアル (33): セルの垂直配置属性 VALIGN

垂直方向では、セルの配置を上、中央、下に設定できます。基本的な構文<TD VLIGN=&quo...

Linuxテキスト処理ツールの詳細な説明

1. /etc/passwdファイル内のデフォルトシェルが/sbin/nologinではないユーザー...