리눅스는 다중 사용자(multi-user) 시분할(time-sharing) 시스템입니다. 즉, 여러 사용자가 하나의 시스템에 동시에 로그인하여 사용할 수 있습니다. 시스템 관리자는 소프트웨어 설치·업데이트·삭제, 실행 가능한 프로그램, 열람 및 편집할 수 있는 파일 등 사용자가 시스템을 운영하는 방식의 다양한 측면을 관리하는 역할을 맡습니다.
또한 리눅스는 사용자 환경을 두 가지 방식으로 생성하고 유지합니다. 바로 시스템 전체(전역) 설정과 사용자별(개인) 설정입니다. 일반적으로 리눅스 시스템을 다루는 기본적인 방법은 셸(shell)이며, 셸은 사용자가 성공적으로 로그인한 후 초기화 과정에서 특정 파일들을 읽어 들여 환경을 구성합니다.
추천 글: 리눅스에서 환경 변수 설정하는 방법
이 글에서는 리눅스에서 로컬 사용자 관리와 관련된 셸 초기화 파일과 사용자 프로필에 대해 설명합니다. 아울러 사용자 지정 셸 함수, 별칭(alias), 변수, 시작 프로그램을 어디에 저장해야 하는지도 함께 알려드립니다.
중요: 이 글에서는 리눅스 시스템에서 가장 널리 사용되는 sh 호환 셸인 bash를 중심으로 설명합니다.
다른 셸(zsh, ash, fish 등)을 사용 중이라면, 여기서 다루는 관련 파일들에 대한 자세한 내용을 해당 셸의 공식 문서를 참고하여 확인하시기 바랍니다.
리눅스의 셸 초기화
셸이 호출되면 셸 자체와 시스템 사용자를 위한 환경을 구성하는 데 도움이 되는 특정 초기화/시작 파일들을 읽어 들입니다. 여기에는 미리 정의된(그리고 사용자가 지정한) 함수, 변수, 별칭 등이 포함됩니다.
셸이 읽는 초기화 파일은 크게 두 가지 범주로 나뉩니다.
- 시스템 전체 시작 파일 – 시스템의 모든 사용자에게 적용되는 전역 설정을 담고 있으며, 일반적으로 /etc 디렉터리에 위치합니다. /etc/profile, /etc/bashrc 또는 /etc/bash.bashrc 등이 여기에 해당합니다.
- 사용자별 시작 파일 – 시스템의 개별 사용자에게만 적용되는 설정을 담고 있으며, 보통 사용자 홈 디렉터리에 도트 파일(dot file) 형태로 존재합니다. 이 파일들은 시스템 전역 설정을 재정의(override)할 수 있습니다. .profile, .bash_profile, .bashrc, .bash_login 등이 포함됩니다.
한편, 셸은 세 가지 모드로 호출될 수 있습니다.
1. 대화형 로그인 셸(Interactive Login Shell)
사용자가 /etc/passwd 파일에 저장된 인증 정보를 확인한 후 /bin/login을 통해 시스템에 성공적으로 로그인했을 때 호출되는 셸입니다.
대화형 로그인 셸로 시작되면 셸은 /etc/profile과 그에 상응하는 사용자별 파일인 ~/.bash_profile을 읽습니다.
2. 대화형 비로그인 셸(Interactive Non-login Shell)
명령줄에서 /bin/bash나 /bin/zsh 같은 셸 프로그램을 실행하여 시작되는 셸입니다. /bin/su 명령으로도 시작할 수 있습니다.
또한 그래픽 환경에서 konsole, terminator, xterm 같은 터미널 프로그램을 통해서도 호출할 수 있습니다.
이 상태로 시작되면 셸은 부모 셸의 환경을 복사한 뒤, 추가 시작 설정 지시 사항을 위해 사용자별 ~/.bashrc 파일을 읽습니다.
$ su # ls -la
3. 비대화형 셸(Non-interactive Shell)
셸 스크립트가 실행될 때 호출되는 셸입니다. 이 모드에서는 스크립트(셸 명령 또는 일반 시스템 명령/함수의 집합)를 처리하며, 특별한 경우가 아니라면 명령 사이에 사용자 입력이 필요하지 않습니다. 부모 셸로부터 상속받은 환경을 사용하여 작동합니다.
시스템 전체 셸 시작 파일 이해하기
이 섹션에서는 시스템의 모든 사용자를 위한 설정을 저장하는 셸 시작 파일들을 자세히 살펴보겠습니다.
/etc/profile 파일 – 로그인 설정을 위한 시스템 전체 환경 구성과 시작 프로그램을 저장합니다. 모든 시스템 사용자의 환경에 적용하고 싶은 설정은 이 파일에 추가해야 합니다.
예를 들어, 전역 PATH 환경 변수를 여기서 설정할 수 있습니다.
# cat /etc/profile
참고: RHEL/CentOS 7 같은 일부 시스템에서는 "자신이 하는 작업을 정확히 알지 못한다면 이 파일을 변경하지 않는 것이 좋습니다. 향후 업데이트 시 병합할 필요가 없도록 /etc/profile.d/에 사용자 지정 .sh 셸 스크립트를 만들어 환경을 변경하는 것이 훨씬 안전합니다"와 같은 경고 메시지가 표시됩니다.
/etc/profile.d/ 디렉터리 – 환경을 사용자 지정으로 변경하는 데 사용되는 셸 스크립트를 저장합니다.
# cd /etc/profile.d/ # ls -l
/etc/bashrc 또는 /etc/bash.bashrc 파일 – 모든 시스템 사용자에게 적용되는 시스템 전체 함수와 별칭, 기타 설정을 포함합니다.
시스템에 여러 종류의 셸이 설치되어 있다면 bash 전용 설정을 이 파일에 넣는 것이 좋습니다.
# cat /etc/bashrc
사용자별 셸 시작 파일 이해하기
다음으로, 시스템의 특정 사용자를 위한 설정을 저장하는 사용자별 셸(bash) 시작 도트 파일에 대해 설명하겠습니다. 이 파일들은 사용자의 홈 디렉터리에 위치하며 다음과 같습니다.
# ls -la
~/.bash_profile 파일 – 사용자별 환경 및 시작 프로그램 설정을 저장합니다. 아래 스크린샷처럼 사용자 지정 PATH 환경 변수를 여기서 설정할 수 있습니다.
# cat ~/.bash_profile
~/.bashrc 파일 – 사용자별 별칭(alias)과 함수를 저장합니다.
# cat ~/.bashrc
~/.bash_login 파일 – 일반적으로 시스템에 로그인할 때만 실행되는 특정 설정을 포함합니다. ~/.bash_profile이 존재하지 않으면 bash가 이 파일을 읽습니다.
~/.profile 파일 – ~/.bash_profile과 ~/.bash_login이 모두 없을 때 읽히는 파일로, 동일한 설정을 저장할 수 있으며 시스템의 다른 셸에서도 접근 가능합니다. 여기서는 주로 bash를 다루었지만, 다른 셸은 bash 문법을 이해하지 못할 수 있으니 유의하세요.
다음으로, 반드시 bash 초기화 파일은 아니지만 알아두면 유용한 두 가지 사용자별 파일에 대해 설명하겠습니다.
~/.bash_history 파일 – bash는 사용자가 시스템에 입력한 명령어 기록을 유지합니다. 이 명령 목록은 사용자 홈 디렉터리의 ~/.bash_history 파일에 저장됩니다.
이 목록을 확인하려면 다음 명령을 입력하세요.
$ history 또는 $ history | less
~/.bash_logout 파일 – 셸 시작 용도가 아니라, 로그아웃 절차에 대한 사용자별 지시 사항을 저장합니다. 사용자가 대화형 로그인 셸을 종료할 때 읽혀 실행됩니다.
실용적인 예로는 로그아웃 시 터미널 창을 깨끗이 지우는 것이 있습니다. 원격 연결의 경우 창을 닫은 후에도 깔끔한 화면이 유지되므로 특히 유용합니다.
# cat .bash_logout
추가 정보를 얻으려면 다양한 리눅스 배포판에서 이러한 셸 초기화 파일들의 내용을 직접 확인해 보고, bash 맨 페이지(man page)도 함께 읽어 보시기 바랍니다.
지금까지 리눅스의 셸 시작/초기화 파일에 대해 살펴보았습니다. 궁금한 점이나 의견이 있다면 아래 댓글을 통해 알려주세요.