Linux Shell, init 파일 이해하기

Michael Kim·2023년 3월 5일
0

0. Intro

회사 내에서 쿠버네티스를 이용한 자동화 프로젝트를 다루면서, Linux를 사용할 기회가 많이 생겼다. 아무래도 내가 Linux를 얉게 알고 있다보니, 프로젝트를 진행하면서 막히는 경우가 많이 생겼다.
특히, 도커 이미지가 쿠버네티스(with kube operator) 상에서 배포되는 과정에서, 초기화 과정으로 Python 가상 환경에 접속 작업이 필요한 경우가 있었다. 이 때 이미지 빌드하기 전에 단순히 ~/.bashrc 파일을 고치는 것만으로 해결될 줄 알았지만, 그렇게 간단하게 해결되지 않았고, Kubernetes Operator와 Linux Shell 실행 순서 등등 여러 문서를 뒤져보면서 이 문제를 해결할 수 있었다.
본 글을 해당 이슈를 해결하면서 공부했던 Linux Shell 초기화 설정에 대한 글이다.

1. Linux에서 사용하는 Shell

shell이란?

Linux에서 shell은 명령어를 제공하여 사용자가 커널이 상호작용할 수 있도록 돕는다. 즉, 쉘을 통해 사용자가 파일에 접근하거나 프로세스를 다룰 수 있도록 돕는다.

Linux shell의 종류는?

  • dash: Linux의 기본 쉘(/bin/sh)이 따로 설정된 게 없다면 기본적으로 dash 쉘을 사용하도록 설정되어 있다. 다른 쉘에 비해 기능이 간소화되어 있어 실행 속도가 빠르다.
  • bash: dash 쉘보다 느리지만, 명령어 자동 완성이나, 명령어 히스토리 등 다양한 사용자 편의 기능을 제공한다. 대부분의 Linux 계열 운영체제에서는 bash shell이 기본 쉘로 지정되어 있다.
  • 그 외로 zsh, fish 등이 있다.

2. Shell의 설정 파일과 실행 순서

같은 Linux 계열이라도 어떤 OS에는 특정 설정 파일이 있고, 없을 수가 있다. shell 실행 순서에 대해서는 자주 사용하는 Ubuntu 기준으로 작성되어 있다.

1. dash

  1. /etc/profile 파일: 전체 시스템에 대한 기본 설정을 담고 있다.
  2. /etc/profile.d/ 디렉토리 내의 .sh 파일: 시스템 전체의 환경 변수를 설정한다.
  3. ~/.profile 파일: 개별 사용자의 환경 변수를 설정한다.

만약 사용자가 .profile 파일을 변경하였다면, 재로그인 하거나 source ~/.profile 명령어를 실행하여 변경 사항을 바로 적용시켜야 한다.

2. bash

  1. /etc/profile 파일: 전체 시스템에 대한 기본 설정을 담고 있다.
  2. /etc/profile.d/ 디렉토리 내의 .sh 파일: 시스템 전체의 환경 변수를 설정한다.
  3. ~/.bash_profile 파일: bash가 로그인쉘로 실행될 때 작동한다.
  4. ~/.bashrc 파일: Bash의 설정 파일로, Bash가 실행될 때마다 실행된다. export를 이용한 환경 변수 설정이나 별칭 등을 정의할 때 주로 사용된다.

dash와 마찬가지로, ~/.bashrc를 변경하였다면, 다시 접속을 하거나 source ~/.bashrc 명령어를 실행하여 변경 사항을 바로 적용시켜야 한다.

3. Outro

번외로 앞서 언급했던 이슈에 대한 히스토리를 더 설명하자면... ~/.bashrc 파일을 변경하여 특정 초기화 코드를 실행시키고자 했다. 하지만, 사용하고 있던 kubernetes operator에서는 pod가 실행될 때 비로그인 쉘 접근을 유도하고 있었다. 해당 부분을 bash 쉘 사용하도록 수정하여 Kubernetes Operator 개발자 깃허브에 PR 날리고자 했지만, 이미 다음 operator 버전에서는 해결된 내용이었다고 한다...

profile
정리하고 복습하고 일기도 쓰고

0개의 댓글