Linux Set Environment Variable Command Tutorial
Linuxでは様々な目的でBashシェルが使用されています。 Linux OSでシェルの環境変数をカスタマイズするにはどうすればいいですか? How can I set and view environment variable on Linux?
シェル変数を使ってデータを保存したり、設定オプションを設定したり、Linuxでシェル環境をカスタマイズすることができます。 LinuxではデフォルトのシェルはBashであり、以下の目的で使用することができます。
- シェルのルック&フィールを設定する。
- 使用しているターミナルに応じて、ターミナルの設定を行う。
- JAVA_HOMEやORACLE_HOMEなどの検索パスの設定。
- プログラムが必要とする環境変数の作成。
- ログインやログアウトのたびに実行したいコマンドを実行する。
- エイリアスやシェル機能を設定してタスクを自動化し、入力や時間を節約する。
- bashのプロンプトを変更する。
- シェルオプションを設定する。
2種類のシェル変数
- 環境変数(GLOBAL)。 通常、環境変数はシステム全体で利用可能であり、サブシェルや子プロセスもアクセスできるため、エンドユーザーは環境変数をいじるべきではありません。 特定のシナリオでは、必要に応じて環境変数を変更することができます。 例えば、JAVAアプリのためにシステム全体のパスを設定したり、バイナリを検索するためにPATHを設定したりします。 ほとんどの場合、環境変数の定義や変更には export コマンドを使用します。
- シェルおよびユーザー定義変数(LOCAL):その名のとおり、ユーザーによって定義され、現在のシェルセッションにのみ適用されます。
以下のコマンドを使用して、環境を表示および設定することができます。 ターミナル プロンプトを開き、次のように入力します:printenv
printenv VAR_NAME
printenv PS1
printenv ORACLE_HOME
printenv JAVA_HOME
# use the grep command/egrep command to filter out variables #
printenv | grep APP_HOME
printenv | egrep 'APP_HOME|DOCKER_HOME|NIX_BACKUP_HOST'
envコマンド
envコマンドは、変更された環境でLinuxのコマンドを実行します。 構文は次のとおりです。
env VAR_NAME=VALUEenv VAR_NAME=VALUE CMD1 ARG1env VAR_NAME=VALUE CMD1 ARG1
環境指定に続いてコマンド名が指定されない場合は、結果としての環境が画面に表示されることに注意してください。 これは、先ほど説明したprintenvコマンドの指定と同じです。 例:
envenv | moreenv | grep 'PS1'
Linuxでsetコマンドを使って環境変数を設定・一覧表示する方法
envコマンド/printenvコマンドは、Linuxシェルの環境変数のみを表示します。 シェル、環境、ユーザー定義のシェル関数を含むすべての変数の一覧を表示する必要がある場合はどうすればよいでしょうか。 次のsetコマンドで環境変数を表示してみましょう。set
set | grep BASH
以下のように表示されます。
BASH=/bin/bashBASH_ARGC=()BASH_ARGV=()BASH_LINENO=()BASH_SOURCE=()BASH_VERSINFO=(="3" ="2" ="25" ="1" ="release" ="x86_64-redhat-linux-gnu")BASH_VERSION='3.2.25(1)-release'COLORS=/etc/DIR_COLORS.xtermCOLUMNS=237CVS_RSH=sshDIRSTACK=()EUID=0GROUPS=()G_BROKEN_FILENAMES=1HISTFILE=/root/.bash_historyHISTFILESIZE=1000HISTSIZE=1000HOME=/rootHOSTNAME=server3.www.p.cyberciti.bizHOSTTYPE=x86_64IFS=$' \t\n'INPUTRC=/etc/inputrcLANG=en_US.UTF-8LESSOPEN='|/usr/bin/lesspipe.sh %s'LINES=64LOGNAME=rootLS_COLORS='no=00:fi=00:di=00;34:ln=00;36:pi=40;33:so=00;35:bd=40;33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:ex=00;32:*.cmd=00;32:*.exe=00;32:*.com=00;32:*.btm=00;32:*.bat=00;32:*.sh=00;32:*.csh=00;32:*.tar=00;31:*.tgz=00;31:*.arj=00;31:*.taz=00;31:*.lzh=00;31:*.zip=00;31:*.z=00;31:*.Z=00;31:*.gz=00;31:*.bz2=00;31:*.bz=00;31:*.tz=00;31:*.rpm=00;31:*.cpio=00;31:*.jpg=00;35:*.gif=00;35:*.bmp=00;35:*.xbm=00;35:*.xpm=00;35:*.png=00;35:*.tif=00;35:'MACHTYPE=x86_64-redhat-linux-gnuMAIL=/var/spool/mail/rootMAILCHECK=60OPTERR=1OPTIND=1OSTYPE=linux-gnuPATH=/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/binPIPESTATUS=(="0")PPID=35469PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'PS1='\$ 'PS2='> 'PS4='+ 'PWD=/rootSHELL=/bin/bashSHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitorSHLVL=1SSH_CLIENT='10.1.3.116 44212 22'SSH_CONNECTION='10.1.3.116 44212 10.10.29.68 22'SSH_TTY=/dev/pts/0TERM=xtermUID=0USER=root_=setconsoletype=ptytmpid=0genpasswd () { local l=$1; && l=16; tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs}xrpm () { && ( rpm2cpio "$1" | cpio -idmv )}
$PATHはコマンドの検索パスを定義しています。 これは、シェルがコマンドを探すディレクトリをコロンで区切ったリストです。 PS1 は、プロンプトの設定を定義します。詳細は、一般的に使用されるシェル変数の一覧を参照してください。
echo "$HOME"echo "$PS1"printf "%s\n" "$HOME"
Linuxの$HOME環境変数で設定されたホームディレクトリの位置を表示した最後のコマンドの出力です。/home/vivek
Linuxのコマンドで環境変数を設定する
構文はとてもシンプルです。
# A variable may be assigned to by a statement of the form #VAR_NAME=valueVAR_STR="this is a string"VAR_NUM_TRY=5MY_OS="Ubuntu"DOMAIN_NAME="cyberciti.biz|nixcraft.com" # If value is not given, the variable is assigned the null string.is_backup_failed= # Empty variable sql_tables="" # Boolean (true or false)is_job_failed=false
Linuxでbashを使って環境変数を作成・設定する際の注意点:
- =記号の周りにスペースを入れない。
- Linux のコマンドと同様に、bash の変数名は大文字と小文字を区別します。 通常、環境変数は UPPER CASE の名前のみで定義し、ベストプラクティスとされていますが、これは必須ではありません。
- デフォルトでは、Linux の変数のスコープは LOCAL です。 exportコマンドを使ってGLOBAL(環境変数)にすることができます。
先に定義したVAR_NUM、VAR_NUM、MY_OSなどの変数の値を、いろいろなコマンドを使って表示してみましょう。
echo "$VAR_NUM"echo "$MY_OS"printf "%s\n" "$DOMAIN_NAME"echo $is_backup_failed
シェル変数と値の設定解除/削除
unsetコマンドを使って、シェル変数や関数の値や属性の設定を解除することができます。
unset var_nameunset MY_OSunset is_backup_failed
Linuxでbashを使用する際に、読み取り専用の環境変数を設定する方法
readonlyコマンドを以下のように使用します。
readonly var=valuereadonly PI=3.14export PI # Make it enviorment/global var echo "$PI"PI=4.2bash -c "echo $PI"unset PI
Ubuntu Linuxで変更できない読み取り専用変数を設定する。
サブシェルや他のインスタンスでユーザー定義の変数にアクセスする
bashの新しいインスタンスを起動してみましょう。 エンターして、次のように値を表示してみます。
# 1. Define mysql_bak_dest and _mysql_dump variables mysql_bak_dest="/aws/efs"_mysql_dump="/usr/bin/mysqldump" # 2. Print 'mysql_bak_dest' and '_mysql_dump' variablesecho "$mysql_bak_dest" echo "$_mysql_dump" # 3. start a new shell bash # 4. Can you print 'mysql_bak_dest' and '_mysql_dump' variables ?echo "$mysql_bak_dest" echo "$_mysql_dump" # 5. Exit and go back parent shell session and print 'mysql_bak_dest' and '_mysql_dump' variablesexit echo "$mysql_bak_dest" echo "$_mysql_dump" # 6. Can you use the printenv to print 'mysql_bak_dest', '_mysql_dump', 'HOME' variable ?printenv mysql_bak_destprintenv $_mysql_dumpprintenv HOME
Linuxで環境LOCAL変数を設定・一覧表示する方法
ステップ#4では。 の出力は空です。 しかし、なぜでしょうか? それは、定義した変数が環境変数ではなく、LOCALであるということです。 サブシェルやその他の新しいシェルインスタンスでは、変数の値はエクスポートされません。 そのため、exportコマンドを使ってGLOBALな環境変数にします。 例えば、以下のようになります。
export var=value# make them GLOBAL or environment variable export mysql_bak_dest="/aws/efs"export _mysql_dump="/usr/bin/mysqldump"echo "$mysql_bak_dest" echo "$_mysql_dump"# Start a new sub-shell or instance by tping the 'bash' and try to access GLOBAL or environment vars bash -c "echo $mysql_bak_dest; echo $_mysql_dump"
export var=value# make them GLOBAL or environment variable export mysql_bak_dest="/aws/efs"export _mysql_dump="/usr/bin/mysqldump"echo "$mysql_bak_dest" echo "$_mysql_dump"# Start a new sub-shell or instance by tping the 'bash' and try to access GLOBAL or environment vars bash -c "echo $mysql_bak_dest; echo $_mysql_dump"
Linuxでの環境変数(GLOBAL)の設定について
exportコマンド
exportコマンドを使って、各環境変数やシステム変数を変更することができます。 環境変数PATHには、perlやシェルスクリプトの入ったbinディレクトリをインストールしたディレクトリを設定します。
export PATH=${PATH}:/home/vivek/bin
OR
export PATH=${PATH}:${HOME}/bin
JAVA_HOME環境変数を、J2SE SDKアプリケーションをインストールしたディレクトリに設定するには。 を入力します。
export PATH=${PATH}:/usr/java/jdk1.5.0_07/bin
以下のように複数のパスを設定することができます。
export ANT_HOME=/path/to/ant/direxport PATH=${PATH}:${ANT_HOME}/bin:${JAVA_HOME}/bin
以下の注意点があります。 envと変数の設定について
まず、NFS_ROOT変数を/efs/ec2/wwwdataに設定し、check_for_filesというperlスクリプトを実行します。plenv NFS_ROOT=/efs/ec2/wwwdata check_for_files.pl
この例では、「LOGNAME=nixcraft」、「DISPLAY=desktop2:0」を含む環境で「vim」を実行します:env - DISPLAY=desktop2:0 LOGNAME=nixcraft vim /path/to/file
FOOをbarに設定し、perlで印刷します。env - FOO=bar /usr/bin/perl -e 'print "$FOO \n"'
$FOOはperlのコードのためだけに定義されているので、シェルからは見えません:echo "$FOO"
Linuxですべての環境変数の設定を永続的にするには?
~/.bash_profile ($HOME/.bash_profile) または ~/.profile ファイルは、コンソールでログインしたときや、sshでリモート接続したときに実行されます。 次のコマンドを入力して ~/.bash_profile ファイルを編集し、次のように入力します:$ vi ~/.bash_profile
$PATH の設定を追加し、次のように入力します:export PATH=${PATH}:${HOME}/bin
ファイルを保存して閉じます。
IBM DB2 インスタンス名の設定
次のコマンドを入力します。
export DB2INSTANCE=prod_sales
/etc/profileファイルについての注意点
/etc/profileまたは/etc/profile.d/ ディレクトリには、Linux システム全体の環境と起動プログラムが含まれています。 bash, ksh, sh シェルを使うすべてのユーザーが使用します。 通常、PATH変数の設定、ユーザーの制限、その他のユーザーの設定に使用されます。 ログインシェルとしてのみ実行されます。
- Customize the bash shell environments from the Linux shell scripting wiki.
- UNIX Set Environment Variable
File | Purpose | 例(ファイルを見るにはcatを使う) |
---|---|---|
/etc/environment | システム全体の環境変数を設定する。システム全体の環境変数を設定します。 |
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin" |
/etc/profile | Linuxシステム全体の.ボーンシェル(sh)やbash、ksh、ashなどのBourne互換シェル用のプロファイルファイルです。 |
if ; then if && ; then # The file bash.bashrc already sets the default PS1. # PS1='\h:\w\$ ' if ; then . /etc/bash.bashrc fi else if ; then PS1='# ' else PS1='$ ' fi fifi if ; then for i in /etc/profile.d/*.sh; do if ; then . $i fi done unset ifi |
/etc/profile.d/ | すべての大規模なユーザーやサイト固有の環境のカスタマイズは、このディレクトリに配置する必要があります。 これはシステム全体でも同様です。 | $ ls -l /etc/profile.d/ $ cat /etc/profile.d/gawk.csh gawkpath_default () {unset AWKPATHexport AWKPATH=`gawk 'BEGIN {print ENVIRON}'`} gawkpath_prepend () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$*:$AWKPATH"} gawkpath_append () { && AWKPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKPATH="$AWKPATH:$*"} gawklibpath_default () {unset AWKLIBPATHexport AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`} gawklibpath_prepend () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$*:$AWKLIBPATH"} gawklibpath_append () { && \AWKLIBPATH=`gawk 'BEGIN {print ENVIRON}'`export AWKLIBPATH="$AWKLIBPATH:$*"} |
$HOME/.bash_profile | ログインシェルで実行される個人用の初期化ファイルです。 |
/usr/bin/keychain /root/.ssh/id_ed25519source /root/.keychain/$HOSTNAME-sh |
$HOME~/.bashrc | インタラクティブシェルごとの起動ファイル |
PS1='${debian_chroot:+($debian_chroot)}\h:\w\$ 'umask 022export LS_OPTIONS='--color=auto'export PATH="$HOME:/home/vivek/bin"eval "`dircolors`"alias ls='ls $LS_OPTIONS'alias ll='ls $LS_OPTIONS -l'alias l='ls $LS_OPTIONS -lA'alias rm='rm -i'alias cp='cp -i'alias mv='mv -i' |
$HOME/.bash_logout | 個々のログインシェルのクリーンアップファイルです。 ログインシェルが終了したときに実行される |
if ; then && /usr/bin/clear_console -qfi |
まとめ
Linuxでbashを使用する際に、環境変数を設定・一覧する方法を学びました。
コマンド | 説明 | サンプル |
---|---|---|
declareコマンド | bashの変数を宣言し、整数や連想配列などの属性を与えます。 変数やオプションが指定されていない場合は、変数の属性と値を表示します。 | Help declare
のページを参照してください。
declaredeclare | grep BASHdeclare | grep function_name# Make sure str_size have the 'integer' attribute declare -i db_size=20echo $db_size # will print 20db_size="foo"echo $db_size # will print 0 # Set max size for linux container and make it read-only too declare -ir MAX_MEM_FOR_CONTAINER=4096 |
envコマンド | 変更された環境でプログラムを実行することができます。 すべての環境変数を表示します。 |
envenv | moreenv | grep SERVER_ROOT |
exportコマンド | 環境(GLOBAL)変数を設定し、環境をエクスポートするコマンドで、サブシェルや他のインスタンスに環境をエクスポートするコマンドです。 | export NFS_ROOT=/aws/ec2/efs |
printenvコマンド | Linuxの環境変数の全部または一部(指定)を印刷します。 |
printenv SHELLprintenvprintenv | egrep 'SHELL|PS1|PS2' |
readonlyコマンド | シェル変数を変更できないようにマークします。 | |
readonlyコマンド | シェルの変数を変更できないようにする、つまり読み取り専用または一定のシェル変数としてマークする |
readonly K_VERSION="1.9.52" |
setコマンド | シェルのオプションや位置パラメーターの値を設定または解除する。 また、すべての環境変数を表示します。 | ‘help set’参照
set | moreMY_DOMAINS="cyberciti.biz:nixcraft.com:cyberciti.com"IFS=':'set -- $MY_DOMAINSecho "$1"echo "$2"echo "$3"for d in $@do echo "Working on $d ..."done |
unsetコマンド | シェルや環境変数を削除します。 すべての変数がunsetできるわけではありません。 | unset FOO |
🐧 23 comments so far… Add one ↓
カテゴリー | UnixとLinuxのコマンド一覧 |
---|---|
ファイル管理 | 猫 |
ファイアウォール | Alpine Awall – CentOS 8 – OpenSUSE – RHEL 8 – Ubuntu 16.04 – Ubuntu 18.04 – Ubuntu 20. |
ネットワークユーティリティ | dig – host – ip – nmap |
OpenVPN | CentOS 7 – CentOS 8 – Debian 10 – Debian 8/9 – Ubuntu 18.04 – Ubuntu 20.04 |
パッケージマネージャ | apk – apt |
プロセスの管理 | bg – chroot – cron – disown – fg – jobs – killall – kill – pidof – pstree – pwdx – time |
探索 | grep – whereis – which |
ユーザー情報 | groups – id – lastcomm – last – lid/libuser-。lid – logname – members – users – whoami – who – w |
WireGuard VPN | Alpine – CentOS 8 – Debian 10 – Firewall – Ubuntu 20.04 |