(1) 쉘 소개
-1. 쉘(shell)은 무엇인가?
-쉘의 역할
- 쉘은 사용자와 운영체제 사이에 창구 역할을 하는 소프트웨어
- 명령어 처리기(command processor)
- 사용자로부터 명령어를 입력 받아 이를 처리한다
-2. 쉘의 종류
- 유닉스 / 리눅스에서 사용 가능한 쉘의 종류
쉘의 종류 |
쉘 실행 파일 |
본 쉘 |
/bin/sh |
콘 쉘 |
/bin/ksh |
C 쉘 |
/bin/csh |
Bash |
/bin/bash |
tcsh |
/bin/tcsh |
- 본 쉘(Bourne shell)
- 벨 연구소의 스티븐 본에 의해 개발 됨
- 유닉스에서 기본 쉘로 사용됨
- 콘 쉘(Korn shell)
-1980년대에는 역시 벨연구소에서 본 쉘을 확장해서 만듬
- Bash(Bourne again shell)
-GNU에서 본 쉘을 확장하여 개발한 쉘
- 리눅스 및 맥 OS X에서 기본 쉘로 사용되면서 널리 보급됨
- Bash 명령어의 구문은 본 쉘 명령어 구문을 확장함
- C 쉘(C shell)
- 버클리 대학의 빌 조이
-쉘의 핵신 기능 위에 C언어의 특징을 많이 포하함
-BSD 계열의 유닉스에서 많이 사용됨
-최근에 이를 개선한 tcsh이 개발되어 사용됨
-3. 로그인 쉘(login shell)
- 로그인하면 자동으로 실행되는 쉘
- 보통 시스템 관리자가 계정을 만들 깨 로그인 쉘 지장
/etc/passwd … root:x:0:1:Super-User:/:/bin/bash ... Lee:x:109:101:hj lee:/user/faculty/Lee:/bin/csh
-4. 로그인 쉘 변경
- 쉘 변경 : $csh… %... %exit… $
- 로그인 쉘 변경 : $chsh … $logout … %
(2) 쉘의 기능
-1. 쉘의 중요 기능
- 명령어 처리
- 사용자가 입력한 명령을 해석하고 적절한 프로그램을 실행
- 시작파일
- 로그인할 때 실행되어 사용자별로 맞춤형 사용 환경 설정
- 스크립트
-쉘자체 내의 프로그래밍 기능
-2. 쉘의 실행 절차
-3. 쉘의 환경 변수
- 환경변수 설정법 : $ 환경변수 명 = 문자열 ($TERM =xterm …$echo $ TERM)
- 환경변수의 값을 문자열로 설정한다
- 환경변수 보기 ($env)
- 사용자 정의 환경 변수 ($MESSAGE = hello … $ export MESSAGE)
-4. 쉘의 시작 파일(start-up file)
- 시작 파일
- 쉘마다 시작될 때 자동으로 실행되는 고유의 시작 파일
- 주로 사용자 환경을 설정하는 역할을 하며
- 환경설정을 위해서 환경변수에 적절한 값을 설정한다.
- 시스템 시작파일
- 시스템의 모든 사용자에게 적용되는 공통적인 설정
- 환경변수 설정, 명령어 경로 설정, 환영 메시지 출력,…
- 사용자 시작 파일
- 사용자 홈 디렉터리에 있으며 각 사용자에게 적용되는 설정
- 환경변수 설정, 프롬프트 설정, 명령어 경로 설정, 명령어 이면 설정,…
-5. 시작 파일(start-up file)
- 본쉘
- 시스템 시작파일 /etc/profile 로그인
- 사용자 시작파일 ~/.profile 로그인
- bash
- 시스템 시작파일 /etc/profile 로그인
- 사용자 시작파일 ~/.bash_profile 로그임
- 사용자 시작파일 ~/.bashrc/etc/bashrc가 존재하면 호출하다. 로그인,서브쉘
- C쉘
- 시스템 시작파일 /etc/.login 로그인
- 사용자 시작파일 ~/.login 로그인
- 사용자 시작파일 ~/.cshrc 로그인, 서브쉘
- 사용자 시작파일 ~/.logout 로그아웃
-6.시작 파일 예
- profile
-PATH=$PATH:/usr/local/bin:/etc
TERM=vt100
export PATH TERM
Sty erase ^H
-시작 파일 바로 적용
-$..profile
(3) 전면 처리와 후면 처리
-1. 전면 처리 vs 후면 처리
- 전면 처리 : 명령어를 입력하면 명령어가 전면에서 실행되며 명령어 실행이 끝날 때까
지 쉘이 기다려 준다. ($명령어)
- 후면 처리 : 명령어들을 후면에서 처리하고 전면에서는 동시에 여러 작업을 수행 할
수 있다. ($명령어 &)
-2. 후면 처리 예
-$ (sleep 100; echo done) & [1] 8320
-$ find . –name test.c –print & [2] 8325
-3. 후면 작업 확인
- 사용법 : $jobs [%작업번호] ($jobs , $jobs % 1)
- 후면에서 실행되고 있는 작업들을 리스트한다. 작업 번호를 명시하면 해당 작업만
리스트한다.
-4. 후면 작업을 전면 작업으로 전환
- 사용법 : $fg % 작업번호 ($ (sleep 100; echo DONE) & , $ fg %1)
- 작업번호에 해당하는 후면 작업을 전면 작업으로 전환시킨다.
(4) 입출력 재지정
-1. 출력 재지정(output redirection)
- 사용법 : $ 명령어 > 파일 ($ who> names.txt , $ cat names.txt , $ls /> list.txt)
- 명령어의 표준출력을 모니터 대신에 파일에 저장한다.
-2. 출력 재지정 이용: 간단한 파일 만들기
- 사용법 : $ cat 파일 ($cat > list1.txt)
- 표준입력 내용을 모두 파일에 저장한다. 파일이 없으면 새로 만든다.
-3. 두 개의 파일을 붙여서 새로운 파일 만들기
- 사용법 : $ cat 파일1 파일2 > 파일3 ($ cat list.txt1 list2.txt > list3.txt)
- 파일 1 과 파일2의 내용을 붙여서 새로운 파일3을 만들어 준다.
-4. 출력 추가
- 사용법 : $명령어 >> 파일 ($date >> list1.txt )
- 명령어의 표준출력을 모니터 대신에 파일에 추가한다.
-5. 입력 재지정(input redirection)
- 사용법 : $명령어 < 파일 ($ wc < list1.txt )
-명령어의 표준입력을 키보드 대신에 파일에서 받는다.
-6. 문서 내 입력(here document)
- 사용법 : $ 명령어 << 단어…단어 ($wc << END)
- 명령어의 표준입력을 키보드 대신에 단어와 단어 사이의 입력 내용으로 받는다.
-7. 오류 재지정
- 사용법 : $ 명령어 2>& 파일 ($ls – l /bin/esr 2> err.txt)
-명령어의 표준 오류를 모니터 대신에 파일에 저장한다.
- 명령어의 실행 경과
- 표준 출력(standard output) : 정상적인 실행의 출력
- 표준 오류(standard error) : 오류 메시지 출력
-8. 파이프
-로그인 된 사용자들을 정렬해서 보여주기 ($who > names.txt)
- 사용법 : $ 명령어1 | 명령어2 ($who | sort)
- 명령어1의 표준출력이 파이프를 통해 명령어2의 표준입력이 된다.
- 예 : 로그인 된 사용자 이름 출력 ($ who | sort)
- 예 : 로그인 된 사용자 수 출력 ($who | wc –l)
- 예 : 특정 디렉터리 내의 파일의 개수를 출력 ($ls 디렉터리 | wc –w)
-9. 입출력 재지정 관련 명령어 요약
명령어 사용법 |
의미 |
명령어 > 파일 |
명령어의 표준출력을 모니터 대신에 파일에 추가한다. |
명령어 >> 파일 |
명령어의 표준출력을 모니터 대신에 파일에 추가한다. |
명령어 < 파일 |
명령어의 표준입력을 키보드 대신에 파일에서 받는다. |
명령어 << 단어 … 단어 |
표준입력을 키보드 대신에 단어와 단어 사이의 입력 내용으로 받는다. |
명령어2 >파일 |
명령어의 표준오류을 모니터 대신에 파일에 저장한다. |
명령어1 | 명령어2 |
명령어1의 표준출력이 파이프를 통해 명령어2의 표준입력이 된다. |
cat 파일1 파일2 > 파일3 |
파일1과 파일2의 내용을 붙여서 새로운 파일3을 만들어 준다. |
(5) 여러 개 명령어 사용하기
-1. 명령어 열(command sequence)
- 나열된 명령어들을 순차적으로 실행한다.
- 사용법 : $ 명령어1; …; 명령어n : ($ date; pwd; ls)
- 나열된 명령어들을 순차적으로 실행한다.
-2. 명령어 그룹(command group)
-나열된 명령어들을 하나의 그룹으로 묶어 순차적으로 실행한다.
- 사용법 : $(명령어1; …;명령어n) ($date; pwd; ls > out1.txt)
- 나열된 명령어들을 하나의 그룹으로 묶어 순차적으로 실행한다.
-3. 조건 명령어 열(conditional command sequence)
- 첫 번째 명령어 실행 결과에 따라 다음 명령어 실행을 결정할 수 있다.
- 사용법 : $ 명령어1 && 명령어2 ($ gcc myprog.c && a.out)
- 명령어1이 성공적으로 실행되면 명령어2가 실행되고, 그렇지 않으면 명령어2가
실행되지 않는다.
- 사용법 : $ 명령어1 || 명령어2 ($gcc myprog.c || echo 컴파일 실패)
- 명령어1이 실패하면 명령어2가 실행되고, 그렇지 않으면 명령어2가 실행되지 않는다.
-4. 여러 개 명령어 사용: 요약
명령어 사용법 |
의미 |
명령어1; …;명령어n |
나열된 명령어들을 순차적으로 실행한다. |
(명령어1; …;명령어n) |
나열된 명령어들을 하나의 그룹으로 묶어 순차적으로 실행한다. |
명령어1 && 명령어2 |
명령어1이 성공적으로 실행되면 명령어2가 실행되고, 그렇지 않으면 명령어2가 실행되지 않는다. |
명령어1 || 명령어2 |
명령어1이 실패하면 명령어2가 실행되고, 그렇지 않으면 명령어2가 실행되지 않는다. |
(6) 파일 이름 대치와 명령어 대치
-1. 파일 이름 대치
- 대표문자를 이용한 파일 이름 대치
- 대표문자를 이용하여 한 번에 여러 파일들을 나타냄
- 명령어 실행 전에 대표문자가 나타내는 파일 이름들로 먼저 대치하고 실행
대표 문자 |
의미 |
* |
빈 스트링을 포함하여 임의의 스트링을 나타냄 |
? |
임의의 한 문자를 나타냄 |
[..] |
대괄호 사이의 문자 중 하나를 나타내며 부분범위 사용 가능함. |
($ gcc *.c , $gcc a.c b.c test.c , $ls *.txt , $ls [ac]*)
-2. 명령어 대치(command substitution)
- 명령어를 실행할 때 다른 명령어의 실행 결과를 이용
-역따옴표(’)로 에워싼 다른 명령어 부분은 그 명령어의 실행결과로 대치된후 실행
- 예 : $ echo 현재 시간은 ‘date‘ ( ‘는 역따옴표)
-3. 따옴표 사용
- 따옴표를 이용하여 대치 기능을 제한
- 정리
-1 작은 따옴표(‘)는 파일이름 대치,변수 대치, 명령어 대치를 모두 제한한다.
-2. 큰따옴표(“)는 파일이름 대치만 제한한다.
-3. 따옴표가 중첩되면 밖에 따옴표가 효력을 갖는다.
핵심개념
- 쉘은 사용자와 운영체제 사이에 창구역할을 하는 소프트웨어로 사용자로부터 명령어를 입력 받아 이를 처리하는 명령어처리기 역할을 한다.
- 입력재지정은 명령어의 표준입력을 키보드 대신에 파일에서 받게 한다. 출력 재지정은 명령어의 표준 출력을 모니터 대신에 파일에 하게한다.
- 파이프를 이용하면 한 명령어의 표준출력을 다른 명령어의 표준입력으로 바로 받을 수 있다.
'Back-end > 리눅스 개념' 카테고리의 다른 글
8장 파일 유틸리티 (0) | 2020.12.30 |
---|---|
6장 프로세스 (0) | 2020.12.30 |
4장 파일사용 (0) | 2020.12.30 |
3장 유닉스 기본 명령어 (0) | 2020.12.30 |
유닉스 / 리눅스 소개 (0) | 2020.10.16 |
댓글