Bash 쉘의 주요 기능 및 사용법

명령어 기록(History)

Bash 세션에서는 사용자가 실행한 명령 기록을 유지합니다. history 명령어로 확인할 수 있으며, 환경 변수를 통해 동작을 제어합니다.

  • HISTSIZE: 메모리에 저장되는 명령어 수
  • HISTFILE: 기록 파일 경로 (기본값 ~/.bash_history)
  • HISTFILESIZE: 파일에 저장되는 최대 기록 수

history 명령어 옵션

history [옵션]
-c: 전체 기록 삭제
-d 번호: 지정한 번호의 기록 삭제
-a: 현재 세션 기록을 파일에 추가
-r: 기록 파일을 메모리로 읽어옴
!n: n번 명령어 재실행
!!: 직전 명령어 재실행
!문자열: 문자열로 시작하는 최근 명령어 실행
^old^new: 이전 명령어의 첫 old를 new로 치환

기록 제어 변수

HISTCONTROL 변수로 기록 방식을 제어:

  • ignorespace: 공백 시작 명령어 생략
  • ignoredups: 연속 중복 명령어 생략
  • ignoreboth: 상위 두 옵션 동시 적용

탭 완성(Tab Completion)

명령어 입력 시 Tab 키로 자동 완성:

  1. 내부 명령어 검색
  2. PATH 경로에서 외부 명령어 검색
$ echo $PATH
/usr/local/bin:/usr/bin:/bin

$ ec<kbd>Tab</kbd> → echo (자동완성)
$ wh<kbd>Tab</kbd><kbd>Tab</kbd> → which whereis who (후보 목록 표시)

명령어 확장(Expansion)

특수 문자를 이용한 경로 확장:

# 홈 디렉토리 확장
$ cd ~/Documents

# 중괄호 확장
$ mkdir -p project/{src,test}/{main,util}

# 생성된 디렉토리 구조
project/
├── src
│   ├── main
│   └── util
└── test
    ├── main
    └── util

명령어 실행 상태

$? 변수로 종료 상태 확인:

$ ls /valid/path
$ echo $?  # 성공 시 0 출력

$ ls /invalid/path
ls: cannot access... 
$ echo $?  # 실패 시 0 아닌 값 출력

따옴표 처리(Quoting)

  • 작은따옴표('): 모든 문자 리터럴 처리
  • 큰따옴표("): 변수 및 명령 치환 가능
  • 역따옴표(`) 또는 $(): 명령 실행 결과 치환
$ echo "$PATH"        # 경로 변수 확장
$ echo '$PATH'        # 문자열 $PATH 출력
$ echo $(date)        # 현재 날짜 출력

단축키

  • Ctrl+l: 화면 지우기
  • Ctrl+c: 명령어 중단
  • Ctrl+a/e: 커서 처음/끝 이동
  • Ctrl+u/k: 커서 기준 앞/뒤 삭제

별칭(Alias)

alias로 현재 설정 확인 및 등록:

$ alias ll='ls -l'
$ alias  # 모든 별칭 목록 표시

영구 적용을 위해 ~/.bashrc 또는 /etc/bashrc에 추가

와일드카드(Wildcards)

* : 0개 이상 문자 일치
? : 단일 문자 일치
[abc] : a,b,c 중 하나 일치
[!0-9] : 숫자 제외
[:digit:] : 모든 숫자
[:space:] : 공백 문자
$ ls report_202[0-9].txt  # report_2020.txt ~ report_2029.txt

표준 입출력 및 파이프

프로세스는 세 가지 표준 스트림을 가집니다:

  • stdin(0): 표준 입력 (기본 키보드)
  • stdout(1): 표준 출력 (기본 화면)
  • stderr(2): 표준 오류 (기본 화면)

출력 재지정

명령 > 파일 : stdout을 파일로 저장 (기존 내용 덮어쓰기)
명령 >> 파일 : stdout을 파일에 추가
명령 2> 파일 : stderr을 파일로 저장
명령 &> 파일 : 모든 출력을 파일로 저장

입력 재지정

$ sort < input.txt  # 파일 내용을 sort 입력으로 전달
$ bc << EOF
2*3
4+5
EOF  # 6\n9 출력

파이프라인

명령어 간 출력 전달:

$ cat log.txt | grep "error" | wc -l
$ ls /dir | tee filelist.txt  # 화면 출력과 동시에 파일 저장

문자 변환(tr)

$ echo "Hello" | tr 'a-z' 'A-Z'  # HELLO 출력
$ echo "Remove 123" | tr -d '0-9'  # Remove 출력

태그: bash linux-shell command-history tab-completion io-redirection

8월 1일 10:01에 게시됨