Linuxpia/데스크톱 리눅스

환경설정에서 중요한 파일, .bashrc

Linuxpia4U 2024. 9. 29. 05:17
반응형

환경설정에서 중요한 파일, .bashrc

~/.bashrc 파일의 내용을 자세히 설명드리겠습니다. 이 파일은 비로그인(non-login) 쉘에서 Bash가 실행될 때 로드되는 설정 파일로, 사용자 환경 설정 및 명령어 자동화를 위한 다양한 구성이 포함되어 있습니다.

vi 에디터로 연 .bashrc

1. 주석 (1-3줄)

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
  • 이 파일은 비로그인 쉘에서 Bash가 실행될 때 호출됩니다. 예시로 /usr/share/doc/bash/examples/startup-files 경로에서 Bash 설정 파일의 예시를 참조할 수 있습니다.

2. 비대화형 쉘인지 확인 (5-9줄)

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
  • $- 변수는 쉘의 상태 정보를 담고 있으며, *i*가 포함되어 있으면 대화형(interactive) 쉘이라는 의미입니다. 이 코드에서는 대화형이 아닌 경우(*i*가 없을 때) 바로 return 명령으로 .bashrc의 실행을 중단합니다. 즉, 대화형 쉘이 아닐 때는 이 파일이 실행되지 않습니다.

3. 명령어 히스토리 설정 (11-20줄)

# don't put duplicate lines or lines starting with space in the history.
# See bash(1) for more options
HISTCONTROL=ignoreboth

# append to the history file, don't overwrite it
shopt -s histappend

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000
  • HISTCONTROL: 중복된 명령어나 공백으로 시작하는 명령어는 히스토리(명령어 이력)에 기록되지 않도록 설정됩니다. ignorebothignoredups(중복 명령어 무시)와 ignorespace(공백으로 시작하는 명령어 무시)를 함께 사용한 설정입니다.
  • shopt -s histappend: 히스토리 파일을 덮어쓰지 않고 새 명령어를 추가할 때 기존 내용을 유지하도록 설정합니다.
  • HISTSIZEHISTFILESIZE: 각각 메모리와 파일에 저장할 히스토리 명령어의 개수를 설정합니다. HISTSIZE=1000은 1000개의 명령어를 메모리에 저장하며, HISTFILESIZE=2000은 최대 2000개의 명령어를 파일에 저장합니다.

4. 윈도우 크기 자동 조정 (22-23줄)

# check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
  • shopt -s checkwinsize: 각 명령어가 실행된 후 터미널 창의 크기를 확인하고, 필요하면 LINESCOLUMNS 값을 자동으로 업데이트합니다. 이는 터미널 창 크기 변경에 따른 출력 오류를 방지합니다.

5. globstar 설정 (26-28줄)

# If set, the pattern "**" used in a pathname expansion context will
# match all files and zero or more directories and subdirectories.
#shopt -s globstar
  • 이 설정은 주석 처리되어 있지만 활성화하면 ** 패턴을 사용해 경로 탐색 시 모든 파일과 하위 디렉터리까지 매칭할 수 있게 합니다.

6. less 명령어 관련 설정 (31-32줄)

# make less more friendly for non-text input files, see lesspipe(1)
[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)"
  • lesspipe: 이 명령은 less 명령어가 비텍스트 파일을 처리할 때 더 유연하게 작동하도록 돕는 스크립트를 실행하는 설정입니다. /usr/bin/lesspipe 파일이 존재하고 실행 가능한 경우, 해당 스크립트를 eval 명령으로 호출하여 설정을 적용합니다.

7. chroot 환경 설정 (35-37줄)

# set variable identifying the chroot you work in (used in the prompt below)
if [ -z "${debian_chroot:-}" ] && [ -r /etc/debian_chroot ]; then
    debian_chroot=$(cat /etc/debian_chroot)
fi
  • chroot 환경에서 작업할 때 사용하는 변수 debian_chroot를 설정합니다. /etc/debian_chroot 파일이 존재하고 읽을 수 있을 때, 그 내용을 변수에 저장합니다. 이 설정은 프롬프트에서 chroot 환경을 식별하는 데 사용됩니다.

8. 컬러 프롬프트 설정 (40-61줄)

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
    xterm-color|*-256color) color_prompt=yes;;
esac

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
#force_color_prompt=yes
  • 컬러 프롬프트: 프롬프트에 색상을 사용할지 여부를 설정하는 부분입니다. TERM 변수에 xterm-color 또는 *-256color가 포함되어 있으면 컬러 프롬프트를 활성화합니다.

9. 프롬프트 설정 (62-73줄)

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
  • PS1: 프롬프트를 설정하는 부분으로, 컬러 프롬프트가 활성화된 경우와 그렇지 않은 경우에 따라 다른 프롬프트를 설정합니다.
    • \u: 현재 사용자의 이름
    • \h: 호스트 이름
    • \w: 현재 디렉터리

10. xterm 타이틀 설정 (75-81줄)

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
    ;;
*)
    ;;
esac
  • xterm 타이틀: xterm이나 rxvt 같은 터미널에서 실행 중이라면, 터미널의 타이틀을 사용자@호스트:디렉터리 형식으로 설정합니다.

11. ls 명령어 컬러 및 별칭 설정 (83-91줄)

# enable color support of ls and also add handy aliases
if [ -x /usr/bin/dircolors ]; then
    test -r ~/.dircolors && eval "$(dircolors -b ~/.dircolors)" || eval "$(dircolors -b)"
    alias ls='ls --color=auto'
    alias grep='grep --color=auto'
    alias fgrep='fgrep --color=auto'
    alias egrep='egrep --color=auto'
    alias python='python3'
fi
  • dircolors: ls 명령어에 컬러 출력을 적용합니다. ~/.dircolors 파일이 존재하고 읽을 수 있으면 해당 설정을 적용하고, 그렇지 않으면 기본 설정을 사용합니다.
  • 별칭(alias): 여러 명령어에 대해 컬러 출력을 적용하는 별칭을 정의합니다. 예를 들어 grep 명령어는 grep --color=auto로 설정됩니다.

12. 추가 ls 별칭 (94-98줄)

# some more ls aliases
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
  • ll, la, l: 각각 ls 명령어의 자주 사용하는 옵션들을 결합한 별칭을 설정합니다. ll은 모든 파일을 자세히 나열하고(ls -alF), la는 숨김 파일을 포함하여 목록을 출력하며(ls -A), l은 기본적인 형식으로 파일 목록을 나열합니다(ls -CF).

13. 알림 별칭 (101-103줄)

# Add an "alert" alias for long running commands.  Use like so:
#   sleep 10; alert
alias alert='notify-send --urgency=low -i

 "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
  • alert: 긴 시간이 소요되는 명령어가 완료되었을 때 알림을 보내는 별칭입니다. 예를 들어, sleep 10; alert와 같이 사용할 수 있습니다.

14. 별칭 파일 로드 (108-110줄)

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi
  • 별칭 파일 로드: 별칭 설정을 외부 파일 ~/.bash_aliases에 저장했다면, 이 파일을 로드하여 적용합니다.

15. Bash 완성 기능 (112-118줄)

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi
  • 프로그래머블 완성 기능: 명령어 자동 완성 기능을 활성화하는 부분입니다. /usr/share/bash-completion/bash_completion 또는 /etc/bash_completion 파일이 존재하면 로드하여 적용합니다.

16. Conda 초기화 (121-130줄)

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/easyfly/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/easyfly/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/home/easyfly/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/home/easyfly/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<
  • Conda 초기화: 이 블록은 conda init 명령어에 의해 관리되며, Conda 환경을 초기화하는 설정입니다. Conda 명령어를 Bash에서 사용할 수 있도록 설정하고, 문제가 발생할 경우에는 Conda의 경로를 PATH에 수동으로 추가합니다.

정리

.bashrc 파일은 사용자 쉘 환경을 최적화하고 다양한 별칭과 자동화된 명령어 설정을 통해 작업 효율성을 높이는 데 중점을 둡니다. 히스토리 관리, 프롬프트 설정, 터미널 컬러 지원, 그리고 Conda 환경 초기화 등 다양한 설정들이 포함되어 있으며, 이는 리눅스에서 사용자의 작업 환경을 더 편리하게 관리할 수 있도록 돕는 역할을 합니다.

반응형