소개
환경 변수는 Linux 운영 체제에서 매우 중요한 역할을 합니다. 이는 시스템에서 실행되는 프로세스에 영향을 주는 동적인 값입니다. 이번 실습에서는 Linux의 export 명령어를 사용하여 환경 변수를 생성하고 관리하는 방법을 알아봅니다.
환경 변수는 구성 정보 저장, 프로세스 간 통신, 시스템 전체 설정 정의 등 다양한 시나리오에서 사용됩니다. 환경 변수를 다루는 방법을 이해하는 것은 모든 Linux 사용자나 시스템 관리자에게 필수적인 기술입니다.
이 실습에서는 변수 설정의 기초부터, 자식 프로세스에서 사용할 수 있도록 변수를 내보내고, bash 스크립트에서 활용하는 방법까지 단계별로 안내합니다. 이러한 변수를 사용하여 더욱 동적이고 구성 가능한 애플리케이션을 만드는 방법을 배우게 될 것입니다.
Linux 기본 변수 이해하기
이 단계에서는 Linux 셸 환경에서 변수를 생성하고 사용하는 기초를 배웁니다.
Linux에서 변수는 명령어와 스크립트가 참조하고 조작할 수 있는 데이터를 저장하는 데 사용됩니다. 변수는 단순히 값을 나타내는 이름입니다.
먼저 셸에서 간단한 변수를 생성해 보겠습니다.
name="LinuxLearner"
이 명령어는 name이라는 변수를 생성하고 "LinuxLearner"라는 값을 할당합니다. 변수에 값을 할당할 때는 등호(=) 주변에 공백이 없어야 한다는 점을 기억하세요.
변수의 값을 표시하려면 echo 명령어와 함께 변수 이름 앞에 달러 기호($)를 붙여 사용합니다.
echo $name
다음과 같은 출력이 나타납니다.
LinuxLearner
문자열 내에서 변수를 사용할 수도 있습니다.
echo "Hello, $name!"
출력:
Hello, LinuxLearner!
이제 좋아하는 색상을 저장할 다른 변수를 생성해 보세요.
color="blue"
두 변수를 모두 사용하여 메시지를 표시합니다.
echo "Hello $name, I see your favorite color is $color."
출력:
Hello LinuxLearner, I see your favorite color is blue.
생성한 이 변수들은 "셸 변수(shell variables)" 또는 "지역 변수(local variables)"라고 합니다. 이 변수들은 현재 셸 세션에서만 사용할 수 있습니다. 다음 단계에서는 export 명령어를 사용하여 다른 프로세스에서도 변수를 사용할 수 있게 만드는 방법을 배웁니다.
환경 변수로 변수 내보내기(Exporting)
이전 단계에서는 현재 셸 세션에서만 사용할 수 있는 셸 변수를 생성했습니다. 이 단계에서는 export 명령어를 사용하여 셸 변수를 자식 프로세스에서도 사용할 수 있는 환경 변수로 변환하는 방법을 배웁니다.
먼저 차이점을 이해해 봅시다.
- 셸 변수(Shell Variable): 현재 셸에서만 사용 가능
- 환경 변수(Environment Variable): 현재 셸과 그 모든 자식 프로세스에서 사용 가능
이를 확인하기 위해 새로운 셸 변수를 생성해 보겠습니다.
greeting="Welcome to Linux"
이제 이 변수에 접근하려는 새로운 셸 스크립트를 생성합니다. 텍스트 편집기를 열고 ~/project 디렉토리에 test_var.sh라는 파일을 만듭니다.
cd ~/project
nano test_var.sh
파일에 다음 내용을 추가합니다.
#!/bin/bash
echo "The greeting is: $greeting"
파일을 저장하고(Ctrl+O, Enter), nano를 종료합니다(Ctrl+X).
스크립트를 실행 가능하게 만듭니다.
chmod +x ~/project/test_var.sh
이제 스크립트를 실행합니다.
~/project/test_var.sh
출력은 다음과 같습니다.
The greeting is:
셸 변수는 자식 프로세스로 전달되지 않기 때문에 변수 값이 표시되지 않는 것을 확인할 수 있습니다.
이 변수를 스크립트에서 사용할 수 있게 하려면 내보내야 합니다.
export greeting="Welcome to Linux"
이제 스크립트를 다시 실행합니다.
~/project/test_var.sh
이번에는 다음과 같이 표시됩니다.
The greeting is: Welcome to Linux
축하합니다! 변수를 성공적으로 내보내어 다른 프로세스에서 접근할 수 있는 환경 변수로 만들었습니다.
env 명령어를 사용하여 현재 모든 환경 변수를 확인할 수 있습니다.
env
이 명령어는 현재 세션의 모든 환경 변수 목록을 표시합니다.
echo 명령어로 특정 환경 변수를 확인할 수도 있습니다.
echo $greeting
이제 또 다른 환경 변수를 생성하고 내보내 보겠습니다.
export USER_LEVEL="beginner"
다음 명령어를 실행하여 설정되었는지 확인합니다.
echo $USER_LEVEL
출력:
beginner
환경 변수를 사용하는 스크립트 작성
이 단계에서는 환경 변수를 구성에 활용하는 스크립트를 작성하고 실행하는 방법을 배웁니다. 이는 소프트웨어 개발에서 코드를 변경하지 않고도 애플리케이션을 더 유연하고 구성 가능하게 만들기 위해 널리 사용되는 관행입니다.
먼저 환경 변수를 사용하여 출력을 사용자 정의하는 스크립트를 만들어 보겠습니다. ~/project 디렉토리에 greet.sh라는 파일을 생성합니다.
cd ~/project
nano greet.sh
파일에 다음 내용을 추가합니다.
#!/bin/bash
## 이 스크립트는 환경 변수 사용법을 보여줍니다.
## 환경 변수가 설정되지 않은 경우의 기본값
DEFAULT_NAME="Guest"
DEFAULT_LANGUAGE="English"
## 환경 변수 또는 기본값 사용
USER_NAME=${USER_NAME:-$DEFAULT_NAME}
LANGUAGE=${LANGUAGE:-$DEFAULT_LANGUAGE}
## 언어에 따른 인사말
if [ "$LANGUAGE" = "English" ]; then
echo "Hello, $USER_NAME! Welcome to the Linux learning environment."
elif [ "$LANGUAGE" = "Spanish" ]; then
echo "Hola, $USER_NAME! Bienvenido al entorno de aprendizaje de Linux."
elif [ "$LANGUAGE" = "French" ]; then
echo "Bonjour, $USER_NAME! Bienvenue dans l'environnement d'apprentissage Linux."
else
echo "Hello, $USER_NAME! Welcome to the Linux learning environment."
fi
파일을 저장하고(Ctrl+O, Enter), nano를 종료합니다(Ctrl+X).
스크립트를 실행 가능하게 만듭니다.
chmod +x ~/project/greet.sh
이제 환경 변수를 설정하지 않고 스크립트를 실행합니다.
~/project/greet.sh
출력:
Hello, Guest! Welcome to the Linux learning environment.
환경 변수가 설정되지 않았으므로 스크립트가 기본값을 사용했습니다. 이제 환경 변수를 설정하고 스크립트를 다시 실행해 보겠습니다.
export USER_NAME="LinuxExplorer"
export LANGUAGE="Spanish"
이제 스크립트를 다시 실행합니다.
~/project/greet.sh
출력:
Hola, LinuxExplorer! Bienvenido al entorno de aprendizaje de Linux.
설정한 환경 변수에 따라 스크립트 출력이 변경된 것을 확인하세요. 이는 코드를 수정하지 않고도 환경 변수를 사용하여 애플리케이션 동작을 구성할 수 있음을 보여줍니다.
다른 언어로도 시도해 보세요.
export LANGUAGE="French"
~/project/greet.sh
출력:
Bonjour, LinuxExplorer! Bienvenue dans l'environnement d'apprentissage Linux.
이 방식은 소프트웨어 구성에서 애플리케이션을 다양한 환경에 유연하고 적응력 있게 만들기 위해 널리 사용됩니다.
고급 활용 및 임시 환경 변수
이 단계에서는 전역 환경을 변경하지 않고 단일 명령어에 대해서만 환경 변수를 설정하는 방법과 더 고급 환경 변수 활용법을 배웁니다.
단일 명령어를 위한 환경 변수 설정
때로는 단일 명령어에 대해서만 환경 변수를 설정하고 싶을 때가 있습니다. 이 경우 명령어 앞에 환경 변수 할당을 붙여서 실행할 수 있습니다.
LANGUAGE="Spanish" ~/project/greet.sh
스크립트가 스페인어 설정으로 실행되지만, 전역 환경 변수는 변경되지 않았음을 확인하세요.
echo $LANGUAGE
출력:
French
환경 변수가 해당 명령어가 실행되는 동안에만 설정되었기 때문입니다.
실제 시나리오에서의 환경 변수
더 실용적인 예시로 가상의 애플리케이션을 위한 구성 스크립트를 만들어 보겠습니다. app_config.sh라는 파일을 생성합니다.
cd ~/project
nano app_config.sh
다음 내용을 추가합니다.
#!/bin/bash
## 애플리케이션 구성 스크립트
## 현재 구성 표시
echo "Current Application Configuration:"
echo "--------------------------------"
echo "App Name: ${APP_NAME:-Unknown}"
echo "App Version: ${APP_VERSION:-0.0.0}"
echo "Log Level: ${LOG_LEVEL:-INFO}"
echo "Database URL: ${DB_URL:-localhost:5432}"
echo "API Key: ${API_KEY:-not set}"
echo "--------------------------------"
## 필수 구성이 설정되었는지 확인
if [[ -z "$APP_NAME" ]]; then
echo "WARNING: APP_NAME is not set. Some features may not work properly."
fi
if [[ -z "$API_KEY" ]]; then
echo "WARNING: API_KEY is not set. API functionality will be limited."
fi
## 로그 레벨 검증
valid_log_levels=("DEBUG" "INFO" "WARNING" "ERROR" "CRITICAL")
log_level=${LOG_LEVEL:-INFO}
valid=false
for level in "${valid_log_levels[@]}"; do
if [[ "$level" == "$log_level" ]]; then
valid=true
break
fi
done
if [[ "$valid" == false ]]; then
echo "ERROR: Invalid LOG_LEVEL '$log_level'. Must be one of: ${valid_log_levels[*]}"
exit 1
fi
echo "Configuration validation complete."
파일을 저장하고(Ctrl+O, Enter), nano를 종료합니다(Ctrl+X).
스크립트를 실행 가능하게 만듭니다.
chmod +x ~/project/app_config.sh
이제 환경 변수를 설정하지 않고 스크립트를 실행합니다.
~/project/app_config.sh
누락된 구성에 대한 경고 메시지가 표시됩니다.
이제 필요한 모든 환경 변수를 설정하고 스크립트를 다시 실행합니다.
export APP_NAME="MyAwesomeApp"
export APP_VERSION="1.0.0"
export LOG_LEVEL="DEBUG"
export DB_URL="postgres://user:password@dbserver:5432/mydb"
export API_KEY="abc123xyz456"
~/project/app_config.sh
모든 구성 값이 경고 없이 올바르게 표시되는 것을 확인할 수 있습니다.
잘못된 로그 레벨을 설정해 보세요.
export LOG_LEVEL="VERBOSE"
~/project/app_config.sh
스크립트가 잘못된 로그 레벨에 대한 오류 메시지를 표시해야 합니다.
이 예시는 환경 변수를 사용하여 검증 및 기본값 설정과 함께 애플리케이션을 구성하는 방법을 보여줍니다.
환경 변수 영구 설정하기
지금까지는 현재 터미널 세션에서만 유지되는 환경 변수를 설정했습니다. 터미널을 닫거나 로그아웃하면 이 변수들은 사라집니다. 이 단계에서는 세션 간에 환경 변수를 영구적으로 유지하는 방법을 배웁니다.
구성 파일에 환경 변수 저장하기
환경 변수를 영구적으로 만들기 위해 설정할 수 있는 파일은 여러 가지가 있습니다.
~/.bashrc또는~/.zshrc: 사용자별 변수/etc/environment: 시스템 전체 변수/etc/profile또는/etc/profile.d/내의 파일: 로그인 시 로드되는 시스템 전체 변수
사용자의 셸 구성 파일에 환경 변수를 추가해 보겠습니다. 이 실습 환경은 ZSH를 사용하므로 ~/.zshrc 파일을 편집합니다.
nano ~/.zshrc
파일 맨 아래로 이동하여 다음 줄을 추가합니다.
## 사용자 정의 환경 변수
export EDITOR="nano"
export CUSTOM_PATH="$HOME/bin"
export GREETING="Hello from .zshrc!"
파일을 저장하고(Ctrl+O, Enter), nano를 종료합니다(Ctrl+X).
현재 세션에 변경 사항을 적용하려면 파일을 소싱(source)해야 합니다.
source ~/.zshrc
이제 변수가 설정되었는지 확인합니다.
echo $EDITOR
echo $CUSTOM_PATH
echo $GREETING
.zshrc 파일에서 설정한 값이 표시되어야 합니다.
이제 새 셸 세션을 시작할 때마다 이 환경 변수들을 사용할 수 있습니다.
사용자 정의 환경 변수 파일 생성
환경 변수를 관리하는 좋은 방법은 특히 프로젝트별 변수의 경우 별도의 파일을 만드는 것입니다. 이렇게 하면 구성을 더 쉽게 관리하고 공유할 수 있습니다.
프로젝트 디렉토리에 .env라는 파일을 생성합니다.
cd ~/project
nano .env
다음 내용을 추가합니다.
## 프로젝트 환경 변수
export PROJECT_NAME="Linux Environment Lab"
export PROJECT_VERSION="1.0.0"
export DEBUG_MODE="true"
파일을 저장하고(Ctrl+O, Enter), nano를 종료합니다(Ctrl+X).
이 변수들을 현재 세션에 로드하려면 파일을 소싱합니다.
source ~/project/.env
이제 변수가 설정되었는지 확인합니다.
echo $PROJECT_NAME
echo $PROJECT_VERSION
echo $DEBUG_MODE
.env 파일의 값이 표시되어야 합니다.
환경 변수 로드 스크립트 작성
마지막으로 파일에서 환경 변수를 로드하는 스크립트를 만들어 보겠습니다. 이는 개발 환경에서 흔히 사용되는 패턴입니다.
cd ~/project
nano load_env.sh
다음 내용을 추가합니다.
#!/bin/bash
## .env 파일에서 환경 변수를 로드하는 스크립트
ENV_FILE=".env"
if [[ -f "$ENV_FILE" ]]; then
echo "Loading environment variables from $ENV_FILE"
## .env 파일의 각 줄을 읽음
while IFS= read -r line || [[ -n "$line" ]]; do
## 주석 및 빈 줄 건너뛰기
if [[ $line =~ ^## ]] || [[ -z $line ]]; then
continue
fi
## "export "로 시작하는 경우 변수 내보내기
if [[ $line == export* ]]; then
## "export " 접두사를 제거하고 변수 내보내기
eval "${line}"
echo "Exported: ${line#export }"
fi
done < "$ENV_FILE"
echo "Environment variables loaded successfully"
else
echo "Error: $ENV_FILE file not found"
exit 1
fi
파일을 저장하고(Ctrl+O, Enter), nano를 종료합니다(Ctrl+X).
스크립트를 실행 가능하게 만듭니다.
chmod +x ~/project/load_env.sh
이제 이전에 설정한 변수들을 해제(unset)한 후 스크립트를 실행하여 다시 로드해 봅니다.
unset PROJECT_NAME PROJECT_VERSION DEBUG_MODE
echo "PROJECT_NAME: $PROJECT_NAME"
## 이제 스크립트를 사용하여 변수 로드
~/project/load_env.sh
## 변수가 설정되었는지 확인
echo "PROJECT_NAME: $PROJECT_NAME"
스크립트가 .env 파일을 읽고 export 키워드로 정의된 각 변수를 내보냅니다.
이 방식은 개발 환경에서 프로젝트별 환경 변수를 관리하기 위해 일반적으로 사용됩니다.
요약
이번 실습에서는 Linux에서 환경 변수를 다루는 핵심 개념을 배웠습니다.
기본 변수: 현재 세션에서 셸 변수를 생성하고 사용하는 방법을 배웠습니다.
환경 변수:
export명령어를 사용하여 셸 변수를 자식 프로세스에서 접근 가능한 환경 변수로 변환하는 방법을 확인했습니다.스크립트에서 변수 사용: 코드를 변경하지 않고도 환경 변수를 읽고 사용하여 동작을 사용자 정의하는 스크립트를 작성했습니다.
고급 활용: 단일 명령어에 대한 변수 설정 및 스크립트 내 변수 값 검증과 같은 고급 기술을 살펴보았습니다.
영구 변수: 구성 파일에 추가하거나 유틸리티 스크립트를 생성하여 환경 변수를 영구적으로 유지하는 방법을 배웠습니다.
환경 변수는 애플리케이션 구성, 프로세스 간 데이터 공유, 환경 사용자 정의를 가능하게 하는 Linux의 강력한 기능입니다. 이는 소프트웨어 개발, 시스템 관리 및 애플리케이션 배포에서 널리 사용됩니다.
환경 변수를 마스터함으로써 개인 프로젝트부터 기업 수준의 시스템 관리에 이르기까지 Linux 여정에 큰 도움이 될 중요한 기술을 습득했습니다.



