📌 개요
🔑 학습 키워드
┗ 셸 종류: Bash(Bourne Again Shell), Bourne 셸, C 셸, TC 셸, Korn 셸
┗ 기본 셸 선택하기: etc/passwd 마지막 항목에 기본 셸 프로그램 경로가 적힘
┗ 셸 시작: 로그인 시 실행(default=bash), 셸 종료: exit
┗ 셸 명령 형식: command options arguments => 짧은 옵션(-), 긴 옵션(--)
┗ 셸 명령 실행: PATH 환경변수 => ls(입력) -> /bin/ls(ls 파일 찾아서 실행)
┗ 셸 명령 종류 크게보면: alias, 셸 예약어, 함수, 내장 명령, 일반 명령(외부 명령)
┗ 셸 명령 종류: alias, type, which, whereis, man (대표적 기본 명령)
┗ 셸 명령 히스토리: history, !, !!, 방향키
┗ 셸 명령 연결 및 확장: 백슬래시(\), 인용부호(',"), 리다이렉션(>,<,>>,<<), 명령치환(₩₩)
┗ 셸 명령 그 외: date, who, cal
┗ 셸 변수: 수식, 변수(지역변수, 환경변수)
💡 1. 셸(Shell)
[ 셸(shell) ]
┗ 명령어를 해석하고 관리하는 프로그램
┗ 과거에는 키보드를 이용하여 명령어를 타이핑하는 방법만 가능했음
┗ 셸은 커널과 사용자 간의 가교 역할
┗ 리눅스 셸은 강력한 기능 제공함
┗ 셸은 "명령어 해석기"이면서 "스크립트 언어"이기도 함
[ 셸 종류 ]
┗ Bourne 셸:
- 벨(Bell) 연구소의 스티븐 본(Stephen Boume)이 개발함
- 많은 셸 스크립트가 Boume 셸에 기반하고 있음
┗ C 셸:
- 스크립트 형식이 C 언어 구문과 유사함
- BSD 계열의 유닉스 사용자가 많이 사용했음
┗ TC 셸:
- C 셸을 확장 개선한 버전
- '명령 행 완성'과 '명령 행 편집' 기능을 추가함
- /bin/tcsh
┗ Korn 셸:
- Bourme 셸을 확장하고 C 셸의 많은 기능을 추가함
- System V 계열 유닉스 사용자에게 인기가 많았음
┗ Bourne Again 셸:
- Boume 셸을 토대로 개발함
- C 셸과 Korn 셸의 유용한 기능을 가져와 통합함
- '많은 리눅스 배포판'에서 '기본 셸'로 사용됨
- /bin/bash
[ 기본 셸 선택하기 ]
┗ /etc/passwd 파일에서 "사용자 계정 정보"의 "마지막 항목"에 "기본 셸"이 기록됨
[ 'etc/passwd 내부' ] => 참고로 passwd 는 파일임
root:x:0:0:root:/root:/bin/bash <-- 1번 사용자(관리자): bash 사용
junbin:x:1000:1000:Hong:/home/hong:/bin/sh <-- 2번 사용자(hong): sh 사용
┗ Bash 셸의 실행 프로그램: /bin/bash
┗ Bourne 셸의 실행 프로그램: /bin/sh
┗ chsh -s /bin/sh 명령어를 수행하면 기본 셸을 Bourne 셸로 변경 가능
[ 셸을 시작 명령 & 종료 명령 ]
┗ 셸 시작: 로그인하거나 터미널 창을 띄우면 시작
┗ 또한, 셸 프롬프트에서 특정 셸 프로그램을 실행시킬 수도 있음
- 예를들면, '/bin/tcsh'을 실행하면 'TC 셸'이 시작이 됨
- 즉, '/bin/bash'를 실행하면 'bash 셸'이 시작되는 원리임
-> 이것은 원래 셸에서 '서브셸'을 시작시키는 것임
-> 로그인할 때부터 실행되는 기본 셸 위에서 실행하는 것이므로 서브셸을 시작시키는것과 같음
┗ 서브셸을 종료하려면 "exit" 명령을 수행해야 하며, 이때 원래 셸로 돌아감
💡 2. 셸 명령 형식
[ 셸 명령 형식 ]
┗ 형식: > command options arguments
┗ "명령어(command)"에 따라 "옵션"이나 "인수"가 (필수적, 선택적)일 수 있음
┗ 옵션: 어떤 옵션을 사용하느냐에 따라 명령의 의미나 출력 형태가 달라짐
┗ 인수: 명령의 수행 대상을 의미함
[ 옵션 ]
┗ 짧은 옵션:
- 1개의 문자를 대시(-) 문자 뒤에 붙여 '-a'와 같이 사용함
- '유닉스 스타일' 옵션이라고 함
- 여러 옵션 사용 시 개별적으로 나열도 가능함
- 예사: 'ls -lat' 또는 'ls -l -a -t'
┗ 긴 옵션:
- 이중대시(--) 뒤에 단어를 붙여 사용함 (--help)
- 'GNU 스타일' 옵션이라고 함
- 예시: ls --help 또는 ls --all --sort=time
┗ 옵션을 지정할 때 대시(-)를 사용하지 않는 "BSD 스타일" 옵션도 있음 ( ex: ps a )
[ 인수 ]
┗ 인수: 명령어의 수행 대상을 의미함
┗ 파일 이름, 디렉터리, 사용자 계정, 디바이스 등이 "인수"로 사용됨
- 'cat /etc/passwd'
- '명령어': cat, '인수': /etc/passwd
┗ 옵션에도 인수가 필요할 수 있음:
- '짧은 옵션': 공백 다음에 인수를 위치시킴
-> '예시': chsh -s /bin/tcsh => 옵션 -s 의 인수 /bin/tcsh
-> 즉, grep -e "hello" text.txt => [명령어][옵션 + 인수][인수]
- '긴 옵션': 공백 없이 바로 등호(=)와 인수를 붙여 지정함
-> '예시': ls -l --sort=time => 옵션 --sort 의 인수 time
[ 셸 명령의 실행과 PATH 환경변수 ]
┗ 셸 명령을 수행하기 위해서는 실행 프로그램이 필요
┗ 실행 프로그램은 셸의 환경변수 중 PATH 변수에 설정되어 있는 경로 중에 있어야 함
┗ PATH 변수의 값을 확인하기 위해 echo $PATH를 실행할 수 있음
-'예시': ls 입력 -> PATH 환경변수 열기 -> 적힌 폴더 주소를 통해 ls 이름의 파일 찾기
-> ls => /bin/ls
💡 3. 셸 명령 종류
[ 셸 명령 종류 ]
┗ 에일리어스: 명령 또는 [명령 옵션]을 짧은 별칭으로 정의
┗ 셸 예약어: 셸 스크립트 작성 시 사용되는 do, while, case, else 등
┗ 함수: 셸에서 수행될 수 있는 일련의 명령을 함수로 정의한 것
┗ 내장 명령: 셸 내부에 만들어져 있는 명령
- cd, echo, pwd 등 이며, man builtin & help builtin-command 로 사용법 확인 가능
┗ 일반 명령(또는 외부 명령): 파일 시스템에 실행 파일로 존재하는 명령
- 실행 파일이 PATH 환경변수에 포함된 경로에 있어야 -> 명령어 이름만 입력하여 실행 가능
- 실행 파일 구별을 위해 확장자는 따로 존재하지 않음
[ alias 명령 ]
┗ 명령의 별칭을 만드는 기능 => 자주 사용되는 명령 빠르고 효율적인 단축 명령으로 만듦
- alias 명령 사용 -> 특정 명령을 옵션과 함께 짧은 '별칭'으로 정의해 둔 것
- '예시': alias ll='ls -l' => ll 별칭으로 ls -l 명령어 사용 가능
- 'alias 설정 해제': unalias [명령어]
- '참고': alias 설정 유지를 위해선 셸 환경 설정 파일에 기록해야함 ( ~./bashrc )
[ type 명령 ]
┗ 특정 명령을 어떻게 해석하는지 알기 위해 사용하는 명령
┗ 해당 명령에 대한 정보를 알려준다고 보면 됨
- 'alias 의 경우': type ll => ll is aliased to 'ls -l'
-> type ll 의 정보로 어떤 명령어가 alias로 된 기존 명령인지 보여줌
- '내부 명령의 경우': type [명령어] => is a shell builtin
-> 결과는 shell 의 builtin 임을 나타냄
- '일반 명령(외부)의 경우': type ls => ls is /bin/ls
- PATH 환경변수 속 폴더에 파일 형태로 존재하는 진짜 프로그램(일반 명령)의 경우 경로가 나옴
[ which 명령 ]
┗ 셸 명령을 인수로 지정하고 이것의 실제 실행 프로그램을 알아내기 위한 명령
┗ 즉, 외부 실행 파일에 한해서 사용하는 명령어로 특정 명령어의 파일 경로 주소(PATH)를 찾아줌
- which ls => /bin/ls (외부 실행 파일 위치)
[ whereis 명령 ]
┗ which 와 동일하게 경로를 찾아주지만, 소스와 메뉴얼 페이지가 존재할 때 이것도 같이 찾아줌
- whereis ls => ls: /bin/ls /usr/share/man/man1/ls.1.gz(메뉴얼)
[ man 명령 ]
┗ 명령어의 메뉴얼 페이지(설명서)를 볼 수 있는 명령어 ( 각종 프로그램 사용법 확인 가능 )
- '자주 사용되는 형식': man [section] command
-> 같은 명령어인데 다른 뜻을 내포할 수 있기 때문에 섹션을 통해 구별 가능
- 'man 1 passwd': 일반 사용자가 계정 비밀번호 변경에 쓰는 명령어 프로그램(bin/passwd)
- 'man 5 passwd': 실행 프로그램이 아니라 텍스트 설정 파일의 규칙(포맷)(/etc/passwd 텍스트 문서)
['섹션의 분류']
- '1': 사용자 명령
- '2': 커널 시스템 호출(커널이 제공하는 함수)
- '3': C 라이브러리 함수
- '4': 디바이스 드라이버 정보
- '5': 시스템 설정 파일의 형식
- '6': 게임
- '7': 파일 포맷, 인코딩 등
- '8': 시스템 관리 명령
┗ 앞선 5가지 명령어의 공통점: 가장 기본적인 명령어 5가지임
- 앞선 5가지 명령어(alias, type, which, whereis, man)
-> '공통점': 리눅스 시스템 명령어의 정체 파악, 위치 찾기, 사용법을 알아내는 도구
💡 4. 셸 명령 히스토리
[ 명령 히스토리 & 명령 행 불러오기 ]
┗ 이전에 수행하였던 명령의 목록을 의미
- 'histroy': 이전 사용한 명령어 목록을 보여줌. (default: 보통 1000개)
- '!!': !! 만 치면 바로 직전에 사용한 명령어를 바로 실행
- '!':
$ history
1 mkdir test_dir
2 cd test_dir
3 ls -la
$ !1
-> history 목록의 번호를 통해 실행 가능
-> '![알파벳,단어]' 형식으로 최근에 쳤던 명령중 관련있는거 바로 실행
- 또한, '방향키(위,아래)'를 통해 직전 또는 직후 명령 불러올 수 있음
[ 명령 행 완성 기능 ]
┗ 셸 명령 입력 시 처음 몇 자만 타이핑 후 탭(Tap) 키 자동 완성
- '명령어, alias, 함수': 보통 문자로 시작하는 경우
- '변수': 달러($) 기호로 시작하는 경우
- '디렉터리': 틸드(~) 문자로 시작하는 경우
- '호스트 이름': at(@) 기호로 시작하는 경우
💡 5. 셸 명령의 연결과 확장
[ 특수 문자 ]
┗ 백슬래시( \ ): 특수 문자 앞에 붙어 특수 문자의 기능을 제거하는 기능
- 즉, 특수 문자의 기능을 제거해 그냥 문자처럼 사용을 하게 도와줌
- 명령 행을 연잘할 때도 사용함
┗ 인용부호(',"): 공백 포함 문자열을 인수로 사용하고싶을 때 쓰는 기능
- 리눅스 셸(Shell)에서 공백은 명령어 옵션, 인수를 구분하는 구분자 역할을 함
-> 그렇기 때문에 '인용부호('',")'를 활용해서 문자열로 취급함
- '작은따옴표': 내부의 모든 것을 오직 문자 그대로(Literal) 취급
- '큰 따옴표': 작은 따옴표와 유사하나, 일부 특수 문자($, `, \)의 기능은 허용
┗ 세미콜론(;): 여러 명령을 순서대로 실행할 때 구분하기 위해 사용함
┗ 앰퍼샌드(&): "명령&"는 명령을 백그라운드로 실행시킴
┗ 물음표(?): 파일 이름에서 사용할 때 1개 문자와 대응
┗ 도트(.): 현재 작업 디렉터리
┗ 더블 도트(..): 현재 디렉터리의 부모 디렉터리
[ 파이프 ]
┗ 파이프( | ): 앞 명령의 출력을 다음 명령의 입력으로 연결시키는 기능
- '예시': cat file.txt | grep "error"
-> cat = 출력 명령어, grep = 특정 단어 포함된 줄 반환
-> '결과': file.txt 의 내용을 grep 가 받아 error 단어가 포함된 줄 반환
[ 리다이렉션 ]
┗ 왼쪽 화살괄호(<)는 표준입력(키보드)을 지정된 파일로 디라이렉션하는 기능
- echo "안녕하세요" > hello.txt
-> "안녕하세요" 결과를 화면이 아닌, hello.txt 입력
- sort < /etc/passwd
-> passwd 파일의 내용을 sort(정렬) 후 화면에 출력
- '왼쪽(<)': 키보드로 받아야 할 입력을 파일에서 가져오도록 출발지를 바꾸는 것
- '오른쪽(>)': 모니터로 나와야 할 출력을 파일로 보내도록 목적지를 바꾸는 것
- '>>,<<': 덮어씌우는게 아닌 덧붙히는것!!
- 리눅스 출력 번호 3가지
-> '0' : 표준 입력 (키보드)
-> '1' : 표준 출력 (정상적인 결과 메시지, 생략 가능)
-> '2' : 표준 오류 (에러 메시지)
command > file: 표준출력을 지정된 파일로 보냄
command 2> file: 표준오류 출력을 지정된 파일로 보냄
command > file 2>&1: 표준출력, 표준오류 출력을 지정된 파일로 보냄
┗ 참고로 >,< 화살표는 덮어씌기 기능임
┗ 만약 파일이 이미 존재한다면, 기존 내용을 다 지우고 새로운 내용으로 덮어씌우게 됨
[ 명령 치환 ]
┗ $(command) 또는 `command` 형태
┗ 명령어를 수행하기 전에 위와 같은 명령을 셸이 먼저 처리함
ls -l $(which passwd) = ls -l /usr/bin/passwd
-> 오른쪽 = 왼쪽은 내용이 같으며, $() 먼저 명령어 수행 후 결과를 다음 명령에서 사용
[ date 명령 ]
┗ 서버의 날짜와 시간을 확인하거나 설정함 ( 시간 설정 등 )
┗ 설정 기능은 root 계정만 실행 가능함
$ date => Wed Oct 14 21:05:00 KST 2026
[ who 명령 ]
┗ 현재 시스템에 접속해 있는 사용자들을 조회할 수 있음
┗ 사용자명, 터미널 정보, 접속시간, 로그인 시간 등을 조사함
$ who
junbin pts/0 2026-10-14 10:30 (192.168.1.50)
root pts/1 2026-10-14 11:05 (:0)
[ cal 명령 ]
┗ 달력을 출력하는 명령
💡 6. 셸 변수
[ 수식의 확장 ]
┗ $[expression] 또는 $((expression))의 형태
┗ 명령어를 수행하기 전에 셸은 위와 같은 수식을 먼저 계산함
echo $(( 10 + 5 ))
-> 수식 먼저 계산 후 값 출력
[ 변수의 확장 ]
┗ $변수는 변수의 값을 추출하여 확장됨
name="홍길동"
echo "안녕하세요, $name님!"
[ 셸 변수 ]
┗ 셸 안에 임시로 데이터를 담아두는 공간(메모리 공간)을 의미함
┗ 지역변수: 현재 셸에서만 유효한 변수
┗ 환경변수: 현재 셸의 서브셸에서도 계속 유효한 "전역변수"
┗ export [variable] 명령: 지역변수를 환경변수로 만드는 명령
sub_var=123 // 지역변수
export my_var // 전역변수로 승격
┗ HOME, PS1, PATH, USER 등은 자주 사용되는 잘 알려진 환경변수임
[ 로그인과 환경 설정 파일 ]
┗ ~/.bash_profile:
- 로그인 셸이 시작될 때 수행되는 설정 파일
- 환경변수를 설정할 수 있으며, 보통 내부에서 '~/.bashrc'를 실행함
┗ ~/.bashrc:
- 로그인 후 셀(비로그인 셸)이 시작될 때 수행되는 설정 파일
- 보통 내부에서 /etc/bashrc를 수행하며, 개별 사용자를 위한 에일리어스 또는 함수를 정의함'방송통신대학교 > 🐧 UNIX 시스템' 카테고리의 다른 글
| [UNIX 시스템] 5강 - 리눅스 시작과 종료 (0) | 2026.10.16 |
|---|---|
| [UNIX 시스템] 4강 - 파일과 디렉터리 (0) | 2026.10.15 |
| [UNIX 시스템] 2강 - 리눅스 설치 (0) | 2026.10.12 |
| [UNIX 시스템] 1강 - 리눅스 소개 (0) | 2026.10.05 |
