Linux의 Bash에서 환경 변수를 설정하는 방법

Linux에는 여러 유형의 환경 변수가 있습니다. 이를 확인하고, 로컬 및 원격 로그인을 위해 생성하고, 재부팅 후에도 유지되도록 하는 방법을 배우십시오.

환경 변수의 작동 방식

터미널 창을 실행하고 그 안의 껍질, 셸이 올바르게 구성되었는지 확인하기 위해 변수 컬렉션이 참조됩니다. 또한 이러한 변수는 터미널 창과 셸이 참조해야 하는 모든 정보를 사용할 수 있도록 합니다. 집합적으로 이러한 변수는 터미널 창 내부에서 명령 프롬프트의 모양에 이르기까지 환경을 정의하는 설정을 보유합니다. 따라서 자연스럽게 환경 변수라고 합니다.

일부 환경 변수는 시스템 전체 또는 전역입니다. 나머지는 세션 전체에 표시되며 본인만 볼 수 있습니다. 다른 사용자는 세션 환경 변수를 참조할 수 없습니다. 쉘 내에 정의된 세 번째 환경 변수 세트가 있습니다. 로케일, 시간대 및 키보드 설정, 쉘이 명령을 찾으려고 할 때 검색되는 디렉토리 세트, 기본 편집기는 모두 쉘 환경 변수에 저장됩니다.

시스템에 존재하는 환경 변수를 확인하는 방법과 사용자 고유의 환경 변수를 만드는 방법을 설명합니다. 또한 자식 프로세스에서 사용할 수 있도록 하고 재부팅 후에도 지속되도록 하는 방법을 보여줍니다.

환경과 상속

쉘이 시작되면 초기화 단계를 거칩니다. 이 시점에서 쉘의 환경을 정의하는 환경 변수를 읽습니다.

프로그램이나 명령이 해당 셸에서 시작되면(자식 프로세스라고 함) 상위 프로세스의 환경을 상속하지만 조심하십시오! 우리가 보게 되겠지만, 환경에 추가되지 않는 변수를 생성할 수 있으므로 자식 프로세스에 상속되지 않습니다.

자식 프로세스가 셸인 경우 해당 셸은 자체의 새로운 변수 집합에서 초기화됩니다. 따라서 현재 셸에서 명령 프롬프트를 변경한 다음 자식 셸을 실행하면 자식 셸은 부모의 수정된 명령 프롬프트를 상속하지 않습니다.

전역 환경 변수

관례에 따라 환경 변수에는 대문자 이름이 지정됩니다. 다음은 전역 환경 변수 중 일부와 여기에 포함된 값이 나타내는 것입니다.

SHELL: 터미널 창을 열 때 실행될 셸의 이름입니다. 대부분의 Linux 배포판에서 이것은 배쉬가 될 것입니다 기본값에서 변경하지 않는 한.
용어: 터미널 창은 실제로 하드웨어 터미널의 에뮬레이션입니다. 이것은 에뮬레이션될 하드웨어 터미널의 유형을 보유합니다.
USER: 현재 시스템을 사용하는 사람의 사용자 이름입니다.
PWD: 현재 작업 디렉토리의 경로입니다.
OLDPWD: 현재 작업 디렉터리로 이동하기 전에 있던 디렉터리입니다.
LS_COLORS: ls에서 사용하는 색상 코드 목록 다른 파일 형식 강조 표시.
MAIL: 메일 시스템이 Linux 컴퓨터에 설정되어 있으면(기본적으로 설정되어 있지 않음) 현재 사용자의 사서함 경로.
PATH: 쉘이 명령 실행 파일을 찾기 위해 검색할 디렉토리 목록입니다.
LANG: 언어, 현지화 및 문자 인코딩 설정입니다.
HOME: 현재 사용자의 홈 디렉토리입니다.
_: 밑줄(_) 환경 변수는 입력된 마지막 명령을 보유합니다.

  iPhone에서 버스 또는 기차 정류장 알림을 받는 방법

우리는 이들 중 일부가 echo보다 더 정교한 것을 사용하지 않도록 설정되어 있음을 알 수 있습니다. 터미널 창에 값 쓰기. 환경 변수가 보유한 값을 보려면 이름 시작 부분에 달러 기호($)를 추가해야 합니다.

좋은 터치는 당신이 사용할 수 있다는 것입니다 탭 완성 환경 변수 이름을 입력합니다. 이름의 몇 글자를 입력하고 Tab 키를 누르십시오. 변수의 이름은 쉘에 의해 완성됩니다. 그렇지 않은 경우 환경 변수를 동일한 문자로 시작하는 이름을 가진 다른 명령과 구별하기 위해 몇 개의 문자를 더 입력해야 합니다.

echo $SHELL
echo $LANG
echo $HOME
echo $PWD

고유한 전역 환경 변수를 생성하려면 /etc/environment 파일에 추가합니다. 이 파일을 편집하려면 sudo를 사용해야 합니다.

sudo gedit /etc/environment

환경 변수를 추가하려면 해당 이름, 등호(=) 및 환경 변수에 저장할 값을 입력합니다. 등호(=) 앞뒤에 공백을 두지 마십시오. 환경 변수의 이름은 문자, 밑줄(_) 또는 숫자를 포함할 수 있습니다. 단, 이름의 첫 글자는 숫자가 될 수 없습니다.

값에 공백이 있는 경우 전체 값을 따옴표(“)로 묶어야 합니다.

파일을 저장한 다음 로그아웃했다가 다시 로그인합니다. echo를 사용하여 새 변수가 존재하고 설정한 값을 유지하는지 테스트합니다.

echo $WEBSITE

이것은 전역 환경 변수이고 모든 사람이 사용할 수 있기 때문에 사용자 mary는 다음에 로그인할 때 환경 변수를 참조할 수 있습니다.

echo $WEBSITE

에게 모든 환경 변수 보기 한 번에 printenv를 입력하십시오. 많은 출력이 있으므로 정렬을 통해 파이프한 다음 더 적게 출력하는 것이 좋습니다.

printenv | sort | less

환경 변수의 정렬된 목록이 더 적게 표시됩니다.

grep을 통해 출력을 파이프하여 환경 변수를 찾을 수 있습니다. 특정 주제와 관련된.

printenv | grep GNOME

셸 환경 변수

이것들은 bash에서 동작과 기능을 지시하거나 기록하는 데 사용되는 일부 셸 환경 변수입니다. 터미널을 사용하면 일부 값이 업데이트됩니다. 예를 들어, COLUMNS 환경 변수는 터미널 창 너비에 대한 변경 사항을 반영하도록 업데이트됩니다.

BASHOPTS: bash가 시작될 때 사용된 명령줄 옵션입니다.
BASH_VERSION: 단어와 숫자의 문자열로 된 bash 버전 번호.
BASH_VERSINFO: bash 버전을 숫자로 나타냅니다.
COLUMNS: 터미널 창의 현재 너비.
DIRSTACK: 디렉토리 스택에 추가됨 pushd 명령으로.
HISTFILESIZE: 최대 수 허용되는 라인 히스토리 파일.
HISTSIZE: 메모리에서 허용되는 히스토리 라인 수.
HOSTNAME: 컴퓨터의 호스트 이름입니다.
IFS: 내부 필드 구분 기호 명령줄에서 입력을 분리하는 데 사용됩니다. 기본적으로 이것은 공백입니다.
PS1: PS1 환경 변수는 기본, 기본 및 명령 프롬프트에 대한 정의를 보유합니다. 명령 프롬프트의 정의에 이스케이프 시퀀스라는 토큰 세트를 포함할 수 있습니다. 호스트 및 사용자 이름, 현재 작업 디렉토리, 시간 등을 나타냅니다.
PS2: 명령이 둘 이상의 행에 걸쳐 있고 더 많은 입력이 예상되면 보조 명령 프롬프트가 표시됩니다. PS2 환경 변수는 기본적으로 보다 큼 기호(>)인 이 보조 프롬프트의 정의를 보유합니다.
SHELLOPTS: set 옵션을 사용하여 설정할 수 있는 쉘 옵션입니다.
UID: 사용자 식별자 현재 사용자의.

  마이크로소프트 365란?

다음 셸 변수 중 몇 가지를 확인해 보겠습니다.

echo $BASH_VERSION
echo $HOSTNAME
echo $COLUMNS
echo $HISTFILESIZE
echo $UID

완전성을 위해 다음은 명령 프롬프트 정의에서 사용할 수 있는 토큰입니다.

t: HH:MM:SS 형식의 현재 시간입니다.
d: 현재 날짜로 요일, 월, 날짜로 표시됩니다.
n: 개행 문자.
s: 쉘의 이름.
W: 현재 작업 디렉토리의 이름입니다.
w: 현재 작업 디렉토리의 경로.
u: 로그인한 사람의 사용자 이름입니다.
h: 컴퓨터의 호스트 이름.
#: 쉘 내의 각 명령에는 번호가 매겨집니다. 이렇게 하면 명령 프롬프트에서 명령 번호를 볼 수 있습니다. 이것은 명령이 기록 목록에 있는 번호와 동일하지 않습니다.
$: 프롬프트의 마지막 문자를 일반 사용자의 경우 달러 기호($)로 설정하고 루트 사용자의 경우 해시 기호(#)로 설정합니다. 이것은 사용자의 UID를 확인하여 작동합니다. 0이면 사용자는 루트입니다.

.bashrc 파일에서 PS1 환경 변수의 정의를 찾을 수 있습니다.

세션 환경 변수 생성

자신만의 환경 변수를 만들려면 .bashrc 파일의 맨 아래에 추가하십시오. SSH 연결과 같은 원격 세션에서 환경 변수를 사용하려면 .bash_profile 파일에도 추가해야 합니다.

환경 변수 정의의 형식은 두 파일 모두에서 동일합니다. .bash_profile 파일에 정의를 추가하려면 홈 디렉토리에 다음을 입력하십시오.

gedit .bashrc

INHERITED_VAR이라는 환경 변수를 추가했습니다. 줄 시작 부분에 있는 “내보내기”라는 단어에 유의하십시오.

편집을 마친 후 파일을 저장하고 닫습니다. 로그아웃했다가 다시 로그인하거나 다음과 같이 dot 명령(.)을 사용하여 셸이 .bash_profile 파일을 다시 읽도록 할 수 있습니다.

. .bashrc

이제 명령줄에서 환경 변수를 생성해 보겠습니다.

LOCAL_VAR="This session only"

LOCAL_VAL=

echo를 사용하면 두 환경 변수 모두에 액세스할 수 있음을 알 수 있습니다.

echo $LOCAL_VAR
echo $INHERITED_VAR

INHERITED_VAR 환경 변수의 정의에 줄 시작 부분에 “export”라는 단어가 있음을 알 수 있습니다. 이것은 환경 변수가 현재 셸의 자식 프로세스에 상속된다는 것을 의미합니다. bash 명령을 사용하여 다른 변수를 실행하면 자식 셸 내부에서 두 변수를 다시 확인할 수 있습니다.

bash
echo $LOCAL_VAR
echo $INHERITED_VAR

보시다시피 INHERITED_VAR은 자식 셸에서 액세스할 수 있지만 LOCAL_VAR은 액세스할 수 없습니다. 우리는 단순히 빈 줄을 얻습니다.

“내보내기”는 자식 프로세스가 상속하는 환경에 환경 변수 부분을 추가하지만 INHERITED_VAR은 전역 환경 변수가 아닙니다. 예를 들어 사용자 mary는 이를 참조할 수 없습니다.

echo $INHERITED_VAR

자식 bash 세션을 닫으려면 exit를 사용합니다.

exit

상속된 환경은 스크립트에도 영향을 미칩니다. 다음은 세 가지 환경 변수의 값을 터미널 창에 쓰는 간단한 스크립트입니다.

#!/bin/bash

echo "WEBSITE" $WEBSITE
echo "LOCAL_VAR" $LOCAL_VAR
echo "INHERITED_VAR" $INHERITED_VAR

이것은 envtest.sh라는 파일에 저장되었고 다음과 같이 실행 가능하게 되었습니다:

chmod +x envtest.sh

스크립트를 실행하면 세 가지 환경 변수 중 두 가지에 액세스할 수 있습니다.

./envtest.sh

스크립트는 WEBSITE 전역 환경 변수와 INHERITED_VAR 내보낸 환경 변수를 볼 수 있습니다. 스크립트가 변수가 생성된 동일한 셸에서 실행 중이더라도 LOCAL_VAR에 액세스할 수 없습니다.

  Linux에서 Bash에서 C Shell로 전환하는 방법

필요한 경우 명령줄에서 환경 변수를 내보낼 수 있습니다. LOCAL_VAR에 대해 이를 수행한 다음 스크립트를 다시 실행합니다.

export LOCAL_VAR
./envtest.sh

현재 셸의 환경에 환경변수가 추가되어 스크립트가 상속한 환경에 나타납니다. 스크립트는 해당 환경 변수도 참조할 수 있습니다.

원격 연결

전역 환경 변수는 원격 로그인 세션에서 액세스할 수 있지만 로컬로 정의된 환경 변수를 원격으로 사용하려면 .bash_profile 파일에 추가해야 합니다. .bashrc 및 .bash_profile 파일에서 동일한 환경 변수를 다른 값으로 설정할 수 있습니다. 이것은 예를 들어 시스템을 로컬 또는 원격으로 사용하는 사람들의 동작을 수정하기 위해 스크립트에 의해 선택될 수 있습니다.

(혼란의 위험이 있으므로 .profile 파일도 있습니다. 이 파일에는 환경 변수 정의도 저장할 수 있습니다. 그러나 .bash_profile 파일이 있으면 .profile 파일을 읽지 않습니다. 따라서 가장 안전한 방법은 다음과 같습니다. bash 호환 방법은 .bash_profile 파일을 사용하는 것입니다.)

.bash_profile 파일을 편집하려면 gedit를 다시 사용합니다.

gedit .bash_profile

이전에 사용한 것과 동일한 값으로 동일한 환경 변수를 추가할 것입니다.

변경 사항을 저장하고 gedit를 닫습니다.

다른 컴퓨터에서 SSH를 만들 것입니다. 테스트 컴퓨터에 연결.

ssh [email protected]

연결되면 스크립트를 다시 한 번 실행합니다.

./envtest.sh

.bash_profile 파일은 원격 로그인 초기화의 일부로 읽혀졌으며 INHERITED_VAR 환경 변수는 우리와 스크립트에서 액세스할 수 있습니다.

환경 변수 설정 해제

환경 변수를 설정 해제하려면 다음을 사용하십시오. 설정 해제 명령. 전역 환경 변수 WEBSITE와 내보낸 환경 변수 INHERITED_VAR의 설정을 해제하면 명령줄이나 자식 프로세스에서 더 이상 사용할 수 없습니다.

unset WEBSITE
unset INHERITED_VAR
./envtest.sh
echo $WEBSITE

주의할 점은 이 세션에서 전역 환경 변수의 가용성만 변경한다는 것입니다. 동시에 로그인한 다른 사람은 여전히 ​​해당 전역 환경 변수의 인스턴스에 액세스할 수 있습니다. 그의 인스턴스는 로그인 프로세스 동안 초기화되고 /etc/environment 파일에서 읽혔으며 다른 사람의 변수 복사본과 독립적입니다.

예를 들어, 사용자 mary는 사용자 dave가 자신의 세션에서 설정을 해제한 경우에도 여전히 WEBSITE 환경 변수에 액세스하고 해당 값을 읽을 수 있습니다.

echo $WEBSITE

환경 관리

환경 변수를 사용하여 스크립트와 응용 프로그램이 어떻게 동작해야 하는지 알 수 있습니다. 설정이나 소량의 데이터를 저장하는 데 사용할 수 있습니다. 예를 들어, 스크립트는 파일에 쓰지 않고도 다른 스크립트에서 참조할 수 있는 값으로 환경을 채울 수 있습니다.