728x90
1. 셸 개요
✅ 셸(shell)
- 명령어 해석기 또는 명령 행 인터페이스
- 사용자와 커널 사이에서 명령어를 해석하여 처리
- 셸 명령을 사용하면 GUI로는 하기 힘든 다양한 기능을 수행할 수 있음
- 셸 명령을 프로그램으로 작성하여 처리할 수도 있음
- 셸 스크립트는 텍스트 파일로, 프로그래밍을 통한 셸 명령의 조합
- 반복적으로 수행되는 작업을 셸 스크립트로 작성할 수 있음
- 셸이 쉘 스크립트 파일을 읽어 처리할 수 있음
- 로그인을 하면 기본 셸이 주어짐
- 종류
- 많은 리눅스 배포판에서 bash를 기본 셸로 사용함 → 명령 프롬프트로 일반 사용자는 $, root 사용자는 #을 사용함
- 셸의 종류에 따라 alias 설정, 초기화 파일, 스크립트 작성, 명령 행 완성 기능, 명령 행 편집 기능 등에 차이가 있음
✅ bash 셸
- Bourne Again Shell로 Bourne 셸의 개선된 버전 (많은 셸 스크립트의 문법이 Bourne 셸에 기반을 둠)
- C 셸과 Korn 셸의 유용한 기능을 가져옴
- 실행 명령은 /bin/bash
- /etc/passwd 파일에 아래와 같은 라인이 있음
- 기본 셸을 변경할 수 있으며 터미널 창은 대화형 셸임
chsh -s /bin/tcsh | 기본 셸 변경 |
exit (ctrl + d) | 셸 종료 |
- 로그인 셸과 비로그인 셸을 구별해야 함
- logout 명령은 로그인 셸에서만 가능
- 참고로 ctrl + alt + F2~6으로 가상 콘솔을 사용할 수 있음. 실제 콘솔이 하나만 있더라도 가상 콘솔을 여러 개 띄워서 사용 가능 (콘솔: 서버 컴퓨터에 직접 물려있는 터미널, ctrl + alt + F1)
- 셸 프롬프트에서 셸 프로그램을 실행하면 '서브 셸'이 실행됨
2. 셸 명령
✅ 셸 명령의 형식
명령어 [options] [인수] |
- 명령어는 대게 프로그램으로 존재(그래서 실제로 해당 명령어의 실행 파일이 어딘가 존재)
- 가장 간단한 형태의 실행은 명령어만 사용 (예: who, date, ls, pwd)
who | 로그인한 모든 사용자의 정보 출력 |
date | 현재 요일과 날짜 및 시간 출력 |
ls | 디렉터리가 가지고 있는 파일이나 서브 디렉터리 목록 출력 |
pwd | 현재 작업 디렉터리 경로 출력 |
- 옵션과 인수는 여럿일 수 있으며 선택적 또는 필수적
- 대괄호는 생략 가능, 이탤릭체는 적당한 내용으로 대체해야 함. 복수는 여러 개가 가능하다는 의미
✅ 옵션과 인수
- 짧은 옵션 (-) : Unix 스타일
- ls -l
- ls -lat == ls -l-a-t
- 긴옵션(--) : GNU 스타일, 이중 대시 뒤에는 약어가 아닌 단어가 붙음
- ls --all
- 인수는 명령의 수행 대상을 지정하는 것
- cat -n /etc/passwd
- grep "KilDong Hong" /etc/passwd → 수가 2개인 경우도 있음
- 옵션도 인수를 가질 수 있음
- chsh -s /bin/sh kdhong
- chsh --shell=/bin/bash kdhong → 옵션에 인수가 필요할 경우에 옵션과 인수 사이에 '=' 기호 붙여야 하고 그 사이에 공백 없어야 함
✅ 명령어의 종류
alias | - 자주 사용되는 명령의 단축 명령을 만드는 명령 - alias : 현재 설정 되어있는 alias 확인 - alias la='ls -A' - alias rm='rm -i' - 계속 유지하려면 셸의 환경 설정 파일에 기록해두어야 함 |
셸 예약어 | 예약된 단어로 do, while, case 등 |
함수 | 셸에서 수행되는 함수의 정의 |
내장 명령 | - 셸 내부에 존재하는 명령으로 cd, echo, pwd 등 → 별도의 실행 파일이 존재하지 않고 셸 프로그램 안에 존재 - help 내장 명령 : 해당 내장 명령어 사용법 안내 |
일반 명령 | - 실행 파일이 존재하는 명령(환경 변수 PATH에 설정된 경로 중에 실행파일이 존재하면 이름만으로 실행 가능) - PATH에 경로가 없는 프로그램을 실행할 때는 절대 경로를 사용해야 함 - 현재 디렉터리를 의미하는 '.'은 보통 PATH에 포함되어있지 않기 때문에 현재 디렉토리에 있는 프로그램을 실행시킬 때 이름만 주고 실행시키면 셸이 그 명령을 이행하지 못할 수 있음! ./실행프로그램명을 쓰거나 PATH에 현재 디렉토리를 추가해줘야 함 - echo $PATH로 저장된 경로를 확인할 수 있음 - 일반 명령 --help : 해당 일반 명령어 사용법 안내 |
✅ 기타 셸 명령 & 명령 히스토리
type 명령 | - 해당 명령어가 어떻게 해석되는지 알려주는 명령 - type cd, type -a ls |
which 명령 | - 실행 프로그램을 환경변수 PATH를 기초로 찾아 경로를 출력함 - which rm → /usr/bin/rm |
whereis 명령 | - 실행 프로그램 경로뿐만 아니라 소스 프로그램 경로와 매뉴얼 페이지 경로 출력 - whereis rm → /usr/bin/ rm /usr/share/man/man1/rm.1.gz /usr/share/man/man1p/rm.1p.gz |
man 명령 | - 매뉴얼 페이지를 보여줌 - 명령의 사용법이나 설정 파일 등에 관한 온라인 도움말 제공 - man passwd 또는 man 5 passwd (섹션 5 내용을 출력하라는 뜻. 페이지가 8가지 섹션으로 나뉘어져 있음) |
history 명령 | - 이전에 수행했던 명령 행의 목록을 불러옴 - history (최대 1000개까지 출력) 또는 history 10 ✔️ 히스토리 기능을 이용하여 명령을 실행하는 방법 (이전에 수행했던 명령을 이용하여 명령을 수행할 수 있음) - !!: 직전명령을 불러옴 - !숫자: 히스토리 목록에서 입력한 숫자값에 해당하는 명령 불러옴 - !문자: 지정된 문자열로 시작하는 최근 명령을 불러옴 - [↑] 또는 [↓] : 누를 때마다 직전 또는 직후 명령을 불러옴 ✔️명령 행 완성 기능 - 일부만 입력하고 나머지를 자동 완성으로 하는 기능 - 처음 몇 자만 입력한 후, [tab]키를 누르면 실행! 명령어, 변수($), 파일, 디렉터리(~ 또는 -) 등을 구분하여 결정함 - 정보가 충분하지 않은 경우, [tab]키를 한번 더 누르면 가능한 모든 경우를 보여주고 원래의 명령행 유지 |
3. 명령의 연결과 확장
🔸특수문자
: 셸에서 특별한 의미를 가지는 문자
백슬래시( \ ) | 특수 문자의 기능을 제거하는 이스케이프(escape) 문자 또는 긴 명령 행을 분리할 때 사용 => [ \ ] + [ enter ] 키를 누르면 다음 명령 행에 명령을 이어쓸 수 있음 |
틸드( ~ ) | ~ 또는 ~username은 사용자의 홈디렉터리를 의미 |
도트( . ) | 현재 작업 디렉터리를 표시 또는 명령 행의 맨 앞에서 쉘 스크립트를 실행하는 source 명령 |
더블도트( .. ) | 현재 디렉터리의 부모 디렉터리 |
파운드( # ) | 주석 처리 |
달러( $ ) | $변수는 변수 값을 추출 |
앰퍼샌드( & ) | 명령&는 명령을 백그라운드로 실행시킴 ↔ &를 붙이지 않으면 포그라운드로 실행. 해당 명령이 끝나야만 명령 프롬프트가 등장 |
애스터리스크 ( * ) |
파일 이름에서 사용할 때 0개 이상의 임의 문자열과 대응됨 |
물음표( ? ) | 파일 이름에서 사용할 때 1개 문자와 대응됨 |
파이프( | ) | - 앞 명령의 출력 결과를 다음 명령의 입력으로 연결시킴 - 명령1 | 명령2 => cat /etc/passwd | sort | more |
( < ), ( > ) *입출력 리다이렉션 |
- 입력 리다이렉션: 명령 수행에 필요한 표준 입력(키보드 입력) 대신에 파일로부터 데이터를 얻는 방법 - 명령<파일 예) sort</etc/passwd (sort만 입력한 다음 엔터키 치면 라인 단위로 사용자의 입력을 받아서 그 입력 값을 정렬함) - 출력 리다이렉션: 명령 수행의 결과를 표준 출력으로 보내지 않고 파일에 기록함 - 명령>파일 예) grep typedef /usr/include/*>typedef.out |
>> | - 표준 출력을 파일의 끝에 덧붙일 때 사용 - 명령 수행 중 표준 오류 출력을 파일에 덧붙임 - 명령 2>>파일 예) ls 2>>error.txt |
느낌표( ! ) | 명령 히스토리 기능을 이용할 때 사용 |
🔸인용 부호
- 빈칸을 포함하는 문자열을 1개의 인수로 사용할 때 인용 부호가 필요함
echo I am a student → 인수 갯수: 4 |
echo "I am a student" → 인수 갯수: 1 |
- 작은따옴표(' ')는 특수 문자의 의미를 제거함
- 큰따옴표(" ")는 $, ` `, \, ! 를 해석하여 확장함
- \ : escape 문자로서 echo "\ $(date)" 이 경우 \뒤의 $의미가 없어지기 때문에 명령어로 해석되지 않고 문자로 출력됨
🔸명령 치환
- 명령을 수행할 때, 명령의 인수에 다른 명령의 결과를 사용
- $(명령어) 또는 ` 명령어`
- ls -l $(which passwd) : /usr/bin/passwd 파일의 정보 출력
🔸수식 확장
- 수식 결과를 명령 수행 전에 전달
- $[수식] 또는 $((수식))
🔸변수 확장
- 변수 값을 추출하여 명령 수행 전에 전달
- $변수
4. 셸 변수
✅ 셸 변수
- 셸의 환경 설정을 하기 위한 값을 저장 → 모든 변수와 값을 출력하기 위해 set 명령을 사용
- 현재 셸에서만 사용 가능하고 서브 셸로는 전달되지 않음(지역변수)
✅ 환경 변수
- 현재 셸 뿐만 아니라 서브 셸로도 전달(전역변수)
- 보통 변수 이름으로 대문자를 사용
- 터미널 창을 열어 쉘을 시작하면 이미 많은 환경변수가 설정되어 있음
- 모든 환경 변수와 값을 출력하기 위해 printenv 명령을 사용
변수=값 | 변수 설정 ※이콜 사인 사이에는 공백이 들어가면 안 됨! |
export 변수 | 환경 변수 설정 |
printenv 환경변수 | 해당 환경 변수의 값을 확인 |
echo $변수 | 모든 종류(셸 변수, 환경 변수..)의 변수 값을 확인 |
🔸자주 사용되는 환경 변수
HISTSIZE | 1개 셸에서 저장되는 명령 히스토리 목록의 최대 갯수(기본 값: 1000) |
HOME | 홈 디렉터리 |
사용자의 메일박스에 해당하는 파일로 보통 /var/spool/mail/username | |
PATH | 명령을 수행할 때 실행 파일을 찾기 위한 디렉터리 목록 |
PS1 | 쉘 프롬프트 모양을 표시하기 위한 문자열 |
SHELL | 사용 중인 기본 셸 |
PWD | 현재 작업 디렉터리 |
USER | 현재 사용자 계정 |
🔸로그인/셸 환경 설정 파일
- 로그인할 때 또는 셸을 시작할 때 자동으로 실행되는 명령을 저장한 파일
- 시스템 환경 설정 파일과 사용자 환경 설정 파일이 있음
- 셸의 종류에 따라 다른 이름의 파일을 사용함
bash 셸의 경우 아래와 같음
실행순서 | 파일 | 설명 |
1 | /etc/profile | - 모든 사용자에게 적용되고 로그인할 때 가장 먼저 수행됨 - PATH, MAIL, HISTSIZE 등 전역의 환경 변수가 설정됨 |
2 | ~/.bash_profile | - 로그인할 때 수행되며 개별 사용자에게 적용됨 - 보통 내부에서 ~/.bashrc를 실행 |
3 | ~/.bashrc | - 쉘을 시작할 때마다 수행되며 개별 사용자에게 적용됨 - 보통 내부에서 /etc/bashrc를 수행 |
4 | /etc/bashrc | - 모든 사용자에게 적용되며 쉘을 시작할 때마다 수행됨 - PS1, alias 설정, umask를 사용한 접근권한의 초기 값, 함수 등을 설정 |
5 | ~/.bash_logout | - 로그아웃을 수행할 때 실행되는 스크립트 파일 |
- 로그인할 때 1,2번 반드시 실행되고 쉘을 시작할 때 3,4번이 반드시 실행됨
- 3번이 먼저 실행되지만 4번이 먼저 끝남
728x90
'KNOU > UNIX시스템' 카테고리의 다른 글
[UNIX 시스템] 2. 리눅스 설치 (1) | 2022.09.11 |
---|---|
[UNIX 시스템] 1. 리눅스 소개 (0) | 2022.09.06 |