오늘 공부한 내용:
🐚 Shell (셸)의 기능 및 핵심 메커니즘
1. Shell의 정의와 역할
**셸(Shell)**은 유닉스/리눅스에서 대화형 사용자 인터페이스를 말하며, 운영체제의 바깥 계층에 위치하여 사용자가 입력하는 명령어를 이해하고 실행하는, 사용자와 커널의 의사소통을 담당하는 통로입니다.
주요 역할:
입력을 읽고 명령행을 분석합니다.
**특수 문자(와일드카드, 변수 등)**를 평가하고 치환합니다.
파이프, 리다이렉션, 백그라운드 프로세스를 설정합니다.
시그널을 처리하여 프로세스를 제어합니다.
Bash Shell: 현재 가장 널리 사용되는 셸로, 다양한 내장 명령어, 히스토리, alias, 파일/명령어 완성 기능 등 다양한 고급 기능을 지원합니다.
2. Shell 명령어 수행 방식
Foreground vs. Background 작업:
Foreground: 명령 수행이 완료될 때까지 셸이 대기하며 프롬프트가 출력되지 않습니다. (일반적인 명령어 수행)
Background (&): 명령어 수행과 관계없이 즉시 프롬프트를 출력하여 다음 명령어를 입력할 수 있습니다. 한 터미널에서 여러 작업을 동시에 수행할 수 있게 합니다.
내장 명령어 (Built-in Command):
셸 자체에 내장되어 있어 별도의 실행 파일(바이너리)을 호출하지 않고 셸이 직접 처리합니다.
속도가 빠르며 셸의 환경 변수, 작업 제어 등을 직접 조작할 수 있습니다. (예: cd, export, alias, exit)
서브셸 (Subshell):
현재 셸 환경과 독립적으로 실행되는 별도의 셸 프로세스입니다.
서브셸 내부의 환경 변경은 부모 셸에 영향을 미치지 않습니다.
주로 파이프, 명령어 치환, 괄호(())를 사용한 명령어 그룹화 실행 시 자동 생성됩니다.
3. Shell 변수 및 치환 (Substitution)
셸은 정보를 저장하고 재사용하기 위해 변수를 사용하며, 특수한 기호를 통해 저장된 값을 다른 값으로 치환합니다
유형,설명,사용 기호,예시
지역 변수,생성된 셸에서만 사용 가능,"= (할당), $ (호출)","NAME=Alice, echo $NAME"
환경 변수,생성된 셸과 파생된 자식 프로세스에서도 사용 가능,export,export PATH=$PATH:/new/bin
변수 치환,변수명을 저장된 값으로 대체,$,$M /down/test_dir (변수에 저장된 명령어 실행)
명령어 치환,명령어를 수행한 결과 값으로 대체,Back Quote (`),kill -HUP `cat /var/run/sshd.pid`
틸드 치환,사용자의 홈 디렉터리로 대체,~ (Tilde),"echo ~ (홈 디렉터리 출력), cd ~계정명"
Quoting (쿼팅): 특수 문자의 특수 의미를 제거하거나 치환을 억제하는 기능.
큰따옴표 ("): 변수, 명령어, 틸드 치환을 허용합니다.
작은따옴표 ('): 모든 치환을 억제합니다.
백슬래시 (\): 바로 뒤의 한 문자의 특수 의미를 제거합니다.
4. Standard I/O, Redirection, 및 Pipe
셸은 표준 입출력 스트림을 통해 프로그램 간의 데이터를 처리합니다.
기능,설명,기호,식별자,기본 장치
표준 입력,프로그램에 데이터 입력,<,0,키보드
표준 출력,프로그램의 정상 결과 출력,"> (쓰기), >> (추가)",1,모니터
표준 에러,프로그램의 에러 메시지 출력,2>,2,모니터
Redirection (리다이렉션): 표준 입출력의 방향을 다른 파일이나 장치로 바꿉니다.
ls -l > output.txt: ls의 표준 출력을 output.txt 파일로 보냄.
find / -name "*.c" 2> /dev/null: 에러 메시지(2)를 /dev/null (버리는 장치)로 보냄.
ls > result.txt 2>&1: 출력(1)과 에러(2)를 모두 result.txt로 보냄.
Pipe (파이프, |): 한 명령어의 표준 출력을 중간 파일 없이 다음 명령어의 표준 입력으로 직접 연결합니다.
cat /etc/profile | more: 파일 내용을 more 명령어의 입력으로 보내 한 페이지씩 출력합니다.
who | wc -l: who의 결과를 wc -l (라인 수 계산)의 입력으로 보냅니다.
5. 와일드카드 문자 (Wildcard Characters)
파일 이름이나 디렉터리 이름을 지정할 때 사용되는 패턴 매칭 규칙입니다.
문자,설명,예시,매칭 결과
*,모든 문자열 일치 (0개 이상의 문자),file*.txt,"file.txt, file1.txt, filetest.txt"
?,단일 문자 일치 (정확히 1개),file?.txt,"file1.txt, file2.txt"
[],괄호 안의 문자 집합 중 하나 일치,[abc]file.txt,"afile.txt, bfile.txt, cfile.txt"