Chapter 02 셸(Shell)
Section 01 개념 및 종류
1. 개념
셸 (Shell)
명령어 해석기(command interpreter), 사용자가 입력한 명령어를 해석하여 커널에 전달
커널과 사용자 간의 대화식 IF 제공, 강력한 스크립트 언어, 포어그라운드/백그라운드 프로세스 실행
2. 종류
본셸과 C셸 계열로 나뉨
본셸
종류 | 실행 파일 | 특징 | |
본셸 계열 | 본셸 (Bourne Shell) |
/bin/sh | - 가장 먼저 개발, 벨 연구소의 스티븐 본이 1979년 개발, - 유닉스에서 기본 셸로 사용, alias 존재x, - 조건구문(if)와 반복구문(while)을 이용, 1977년 유닉수 버전 7에 포함 |
콘셸 (korn shell) |
/bin/ksh | - AT&T사의 데이비드 콘이 1986년에 개발, 벨 연구소에서 본셸 확장해서 만듦 - 명령어 완성 기능, 히스토리 기능 가짐 |
|
배쉬 셸 (bash shell) |
/bin/bash | - 리눅스의 표준셸 - 브라이언 폭스가 1989년 개발, 본셸을 기반으로 GNU 프로젝트에 의해 개발, 리눅스 표준 셸로 채택, 명령어 완성&치환 기능 완성, POSIX와 호환 -GNU 운영체제와 리눅스, 맥OS, 다윈 등 여러 OS의 기본 셸로 탑재, 광범위하게 배포됨 - DJGPP 와 노벨 넷웨어에 의해 도스로 이식, 시그원과 MinGW의 배포로 마이크로소프트 윈도로 이식 - 명령, 히스토리, 명령어 완성 기능, 히스토리 치환, 명령행 편집 등을 지원, 본 셸을 기반으로 하여 제작 |
|
지셸 (z shell) |
/bin/zsh | - 폴 팔스타드가 1990년에 개발, 확장형 본셸으로 Korn shell의 재작성 셸 |
C셸
종류 | 실행파일 | 특징 | |
C셸 계열 | C셸 | /bin/csh | 버클리 대학의 빌 조이가 개발 C 언어 스타일의 문법을 지원해서 C 프로그래머들이 사용하기 편리하도록 설계 BSD 계열 시스템에서 여전히 볼 수 있고, 과거 유닉스 시스템 이해에도 도움 되는 개념 |
tc셸 | /bin/tcsh | 카네기 멜런 대학의 켄 그리어(Ken Greer)가 테넥스(TENEX) 운영체제에 명령행 완성 기능을 반영하면서 시작 - 확장 C셸로 BSD 계열에서 많이 사용, 명령어 편집 기능을 제공 |
2. 셸 확인 및 변경
셸은 사용자가 로그인 후 자동으로 생성되는 로그인 셸과 사용자가 직접 변경 실행하는 서브 셸(sub shell)로 구분
로그인 셸 변경은 반영구적인 셸 변경 방법으로 관리자가 셸 변경 후 다음 변경을 하기 전까지 지정된 셸을 사용
1) 로그인 셸 확인
파일 /etc/shells(= chsh -l) 에서 사용할 수 있는 셸들 확인 가능 (/etc/shell, /etc.login, /etc/logins 다 아님!)
사용자가 로그인 직후에 부여 받은 셸을 확인하는 방법
$cat /etc/shells
/bin/sh
/bin/bash
/sbin/nologin
/bin/dash
/bin/tch
/bin/csh
파일 /etc/passwd 파일에서 계정마다 할당된 셸 확인 가능
echo $SHELL 현재 로그인한 사용자가 사용하고 있는 셸 확인 가능
명령어 chsh(change shell)
현재 사용 중인 로그인 셸을 변경하는 명령어, 일반 사용자 환경에서 셸 변경 시 사용
chsh [옵션] 계정명 셸
명령어 usermod
관리자 환경에서 지정된 계정의 정보를 변경할 때 사용하는 명령어
usermod [옵션] 계정명 셸
명령어 Set
Bash의 쉘 변수를 관리하는 명령어, 셸 변수 확인 명령어, 셸 변수는 셸에만 적용되는 변수, 변수명=값 or export 변수명=값
ex. $var1=linux
$export var2 = linux2
$set | grep var1
출력내용 var1=linux
$set | grep var2
출력내용 var2 = linux2
Section 02 환경 설정
1. 환경 변수와 셸 변수
명령어 env
현재 설정된 전체 환경 변수 확인 명령, 환경 변수(전역 변수) : 전체 셸에서 사용 가능, 서브 셸에 기능 상속 가능
명령어 set
셸 변수 확인 명령, 셸 변수(지역 변수) : 현재 로그인 셸에서만 사용 가능, 서브 셸에 상속 불가능,
주요 환경 변수
PATH : 실행할 명령어 경로 검색, 셸 설정 파일 중 하나에 설정, 여러 개의 PATH 넣을 때, 구분은 콜론(:)으로 함
PATH 추가 명령어 형식 : export PATH=$PATH:추가경로
ex. PATH=$PATH:$HOME/bin , 기존 경로에 /home/ihd 경로를 추가할 경우 : export PATH = $PATH:/home/ihd
HOME : 사용자의 홈 디렉터리 절대 경로
HOSTNAME : 호스트명
USER : 사용자 이름
DISPLAY : X 디스플레이 이름, X 서버의 주소를 지정
PS1 : 셸 프롬프트를 선언 시 사용하는 변수, 프롬프트 변수
ex. PS1="[\u@\t\W]\$"
PS2 : 2차 셸 프롬프트를 선언 시 사용하는 변수, 명령줄이 바뀌면서 나타나는 기호와 관련된 환경변수
명령줄이 긴 경우 \(역슬래시) 이용하면 명령행 연장 가능, 명령어 줄이 바뀌면서 나타나는 기호 ">"를 "PS2 프롬프트" 라고 함
PWD : 현재 디렉터리의 절대 경로명
SHELL : 로그인 셸의 절대 경로명
TERM : 터미널 종류의 이름 ex. TERM=xterm
TMOUT : 로그아웃 관련 시간 제어
LANG : 프로그램 사용 시 기본 지원 언어, ex. LANG=C
PRINT : 기본 프린터
MAIL : 도착한 메일이 저장되는 경로
PROMPT : 화면에 출력되는 프롬프트 모양 지정 변수
환경 변수 설정
ex. SA=shina
1) 명령어 export
환경 변수 리스트 확인
ex. export=SA
2) export 변수명=변수값
3) 명령어 echo : 표준 출력(화면에 텍스트를 출력)하는 명령어
echo $변수명
echo $SA
4)명령어export : 환경 변수를 설정하거나 확인하는 명령어
export 변수명=$변수명:변수값
기존 변수명에 변수 값 추가
ex. export SA=$SA:shina
5) unset 변수명
변수 정의 해제
ex. unset SA
프롬프트 설정 형식
셸의 프롬프트 형식을 사용자 임의대로 변경할 수 있음
명령어
\t : 24시로 현재 시간을 표시
\W : 현재 작업 디렉터리의 전체 경로 중 마지막 디렉터리만 표시
\w : 현재 작업 디렉터리를 절대 경로로 표시
\s : 사용중인 셸 이름 표시
\u : 현재 사용자의 이름을 표시
\h : 호스트 이름을 표시
ex. ihd 사용자가 셸 프롬프트를 변경하려고 할 때 알맞은 것?
[ihd@09:30:21 ~\]$
PS1="[\u@\t\W]\$"
Section 02 환경 설정
2. 환경 설정 파일
셸 시작 시 자동으로 실행되는 고유의 시작 파일이 있으며, 이 파일은 사용자 운영환경을 설정
/etc/bashrc
별칭(alias)과 bash가 수행 시 실행되는 함수를 전역적으로 제어, 전역 설정 파일
생략되기도 하며, /etc/profile에 내용이 포함되기도 함
$HOME/.bashrc
배쉬셸의 환경파일, 개인 사용자가 정의한 alias와 함수들이 있는 파일
개인 사용자의 환경 변수 설정도 가능
/etc/group
4개 기본 항목 구성, 그룹명, 그룹 패스워드, 그룹 ID, 그룹 구성원 정보
배쉬셸(bash shell) 주요 기능
History 기능
일정 개수(기본 1000개) 이상 사용했던 명령어를 .bash_history에 저장해 두고 다시 불러서 사용할 수 있게 하는 기능
상하 화살표 키만 누르면 다시 사용할 수 있음
History 관련 환경 변수
history n : 최근에 사용했던 n개의 명령어만 출력
history 10
!1 : 1번 명령어 실행
!! : 가장 마지막에 실행한 명령 호출
!? : !?문자열? 가장 최근에 사용한 명령 중에 문자열을 포함하고 있는 명령어를 찾아서 실행
history 1 : 가장 최근에 사용한 1개의 명령어를 확인
기타
$cd /disk1;tar cvf - .|(cd /disk2; tar xvf -)
두 개의 디렉터리(/disk1과 /disk2)에서 tar 명령어를 사용하여 데이터를 압축하고 복원하는 작업을 동시에 수행하는 예제
tar 명령어
파일을 압축하거나 압축 해제하는 데 사용
tar cvf - .
tar 명령어는 파일을 압축하거나 압축 해제하는 데 사용돼.
c → 새로운 아카이브 파일 만들기 (create)
v → 과정 출력 (verbose), 압축되는 파일들을 출력
f → 파일 지정 (file), 압축 결과를 지정할 파일로 출력
- → 아카이브를 표준 출력(stdout)으로 보냄 (즉, 파일로 저장하지 않고 터미널로 출력)
. → 현재 디렉터리의 모든 파일을 아카이브에 포함
=> /disk1 디렉터리에서 모든 파일과 폴더를 아카이브로 만들고, 그 내용을 표준 출력으로 보냄.
| (파이프)
앞의 명령어의 출력을 뒤의 명령어로 넘겨주는 역할
/disk1의 tar 명령어로 생성된 아카이브 데이터를 /disk2 디렉터리로 전달
(cd /disk2; tar xvf -)
()는 서브셸을 의미해. 즉, 괄호 안의 명령어는 별도로 실행되는 독립적인 셸에서 실행돼.
cd /disk2 → /disk2 디렉터리로 이동
tar xvf -
아카이브를 압축 해제하는 명령어
x → 압축 해제 (extract)
v → 과정 출력 (verbose)
f → 파일 지정 (file), 압축 해제할 아카이브 파일을 지정
- → 표준 입력(stdin)을 통해 아카이브 데이터를 받음 (즉, tar가 /disk1에서 생성한 아카이브를 직접 받음)
🔹 종합 해석
/disk1에서 모든 파일을 아카이브로 만든 후 그 데이터를 표준 출력으로 보내.
그 데이터를 파이프를 통해 /disk2 디렉터리로 전달하여, 해당 위치에서 압축 해제하는 구조.
/disk1의 모든 파일을 tar로 압축하여 pipe로 넘기고, 이를 disk2로 받아서 압축을 풀어 동일한 파일 구조를 생성하는 작업을 한다는 의미야.
사용자의 로그인 셸을 확인하는 명령어
SHELL 변수의 내용을 확인
finger 명령어의 -l 옵션을 사용
finger 명령어
시스템에 로그인한 사용자에 대한 상세 정보를 조회, 사용자 이름, 로그인 상태, 로그인 시간, 홈 디렉터리, 로그인 셸 등의 정보를 확인
ls 명령어
현재 디렉터리에서 파일 목록을 출력하는 명령어
ls file[12].py
파일 이름 패턴을 사용한 ls 명령어로, 현재 디렉터리에서 특정 형식의 파일을 조회하는 명령
정규 표현식 []은 ['과'] 사이의 문자 중 하나를 선택
대괄호 []는 문자 집합을 의미하며, 여기서는 1 또는 2가 올 수 있다는 의미로 사용
미리 작성된 파일 내용을 메일 계정자에게 보낼 경우의 형식
mail 메일계정 < 파일명
즉, mail webmaster@example.com > report.txt
배쉬셸 명령행 편집 기능
Ctrl + E : 맨 오른쪽 이동
Ctrl + A : 맨 왼쪽 이동
Ctrl + B : 커서를 왼쪽으로 한 칸 이동
Ctrl + F : 커서를 오른쪽으로 한 칸 이동
'Linux' 카테고리의 다른 글
[리눅스 마스터 2급] 1과목 리눅스 운영 및 관리, 에디터 (0) | 2025.02.26 |
---|---|
[리눅스 마스터 2급] 1과목 리눅스 운영 및 관리, 프로세스 관리 (0) | 2025.02.25 |
[리눅스 마스터 2급] 1과목 리눅스 운영 및 관리, 권한 및 그룹 설정 (0) | 2025.02.25 |
[리눅스 마스터 2급] 1차 시험 후기 (1) | 2025.02.07 |
[리눅스마스터 2급] nice 명령어 (1) | 2025.01.22 |