사용자의 명령을 해석하고 실행하는 명령 해석기. OS뿐만 아니라 모든 종류의 프로그램에 적용되는 일반 요소이다. 리눅스 CLI에서는 bash가 기본(표준) 셸이다.
터미널을 실행하거나 CLI 환경에서 로그인을 하면 자동으로 기본 셸(bash)로 시작하며, 셸 프로그램 이름으로 명령한다.
stty: 터미널 세팅 및 컨트롤 키 변경 명령어
stty -a: 현재 터미널에서 사용 가능한 명령어 보여준다.
셸의 공통 기능
다수의 내장(built-in) 명령어 제공
메타 문자 사용
입출력 및 오류 재지정 (redirection)
파이프라인
명령어 대치/완성/편집
환경 변수와 지역변수
백그라운드 처리와 작업(프로세스) 제어
셸 프로그래밍
메타문자: 문자 자체가 아닌 별도의 의미를 가지는 문자
메타문자
의미
예시
?
문자 한 개
a?
ab, ac, a3...
*
문자 여러 개 (0개 이상)
c*t
cat, chat, come at...
[set]
set에 있는 하나의 문자
[abc] [a-z] [-a-z]
abc 중 하나 모든 소문자 중 하나 -와 모든 소문자 중 하나
[!set]
set에 없는 하나의 문자
[!0-9] [0-9!]
숫자가 아닌 문자 모든 숫자와 !
{s1, s2...}
s1 or s2 or ...
b{ed,olt,ar}s ls*.{c,h,o}
beds, bolts. bars 확장자가 .c, .h, .o인 모든 파일 리스트
컨트롤 키를 이용한 제어
컨트롤 키
stty 명
기능
^C
intr
현재 명령 중지
^D
eof
입력의 끝
^/
quit
^C가 동작하지 않을 경우 현재 명령 중지
^S
stop
화면 출력 정지
^Q
start
화면 출력 다시 시작
^Z
susp
현재 명령 일시 중단
stty 명령어란 터미널 라인 설정을 출력하거나 변경하는 명령어이다.
명령 해석 기능
명령 문자를 일반 문자로 취급하는 방법
'\n'을 일반 문자로 취급하기
행의 끝에 / 사용 (\n을 완전히 무시하고 한 줄로 연결)
인용부호 (')로 연결 (\n을 끝이 아닌 하나의 문자로 취급)
특수 문자를 일반 문자로 취급하는 방법
인용부호 사용
\ 사용
echo this is \n test
# \뒤의 문자를 일반 문자로 바꾸고 역할을 다함
echo this is '\n' test
# 인용 부호 사용
echo this is \
test
# \는 이어서 쓰는 문자를 한 문장으로 출력해준다
echo 2*3>5
# 5라는 파일에 2*3을 저장함
echo '2*3>5'
# 인용 부호 사용
ehco 2\*3\>5
# \ 사용해서 일반 문자 취급
표준 입출력
데이터가 유닉스 시스템에 저장되거나 전송되는 표준방식으로, 다양한 입출력 기기를 추상화하고 공통된 처리 방식을 사용하도록 최초로 시도했다.
stdin (0) : 표준 입력
stdout(1) : 표준 출력
stderr (2) : 표준 오류 출력
입출력 재지정 (Redirction)
표준 입력 또는 출력을 파일 등 다른 입출력 장치로 대체하는 것. 메타문자를 이용해서 redirection을 지시한다.
기호
의미
>
출력 redirection
>|
출력 redirection, nocolbber 옵션을 무시하고 덮어 씀
>>
기존 파일에 출력을 추가
<
입력 redirection
>&, &>
표준 출력과 표준 에러를 파일로 redirection
>>&, &>>
표준 출력과 표준 에러를 파일에 추가
1>, 2>
표준 출력과 표준 에러를 따로 지정
cat > myfile
This is a test.
# myfile에 This is a test. 지정
cat myfile
# 파일 내용 확인
cat >> myfile
contents append.
# 기존 파일에 내용 추가
set -o noclobber
# 덮어쓰기 금지 옵션
cat > myfile
# 위 옵션 때문에 덮어쓰기 불가
cat >| myfile
overwrite
# 덮어쓰기 금지 옵션을 뚫고 myfile에 overwrite 재지정
redirection을 이용한 텍스트 파일 편집
>로 표준 입력에서 입력을 받아 myfile로 출력할 수 있다. >>를 통한 redirection은 기존 파일에 추가할 때 쓰인다.
입력 끝 표시는 ^d로 할 수 있다.
pipe
한 프로세스의 표준 출력을 다른 프로세스의 표준 입력으로 사용하는 것. 하나의 커다란 문제를 작은 작업으로 나누어 해결하는 것이 가능하다.
내용 자동 완성
Tab: 함수, 경로명, 파일명 등의 입력 시 텍스트 일부를 입력 후 Tab 키를 누르면 자동 완성된다. 한 번 더 누르면 가능한 모든 완성형을 출력한다.