명령어 기록(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 키로 자동 완성:
- 내부 명령어 검색
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 출력