728x90
쉘의 기능과 종류
쉘의 기능
명령어 해석기 기능, 프로그래밍 기능, 사용하 환경 설정 기능
명령어 해석기 기능
- 사용자와 커널 사이에서 명령을 해석하여 전달하는 해석기와 번역기 기능
- 사용자가 로그인하면 쉘이 자동으로 실행되어 사용자가 명령을 입력하기를 기다림 ->로그인 쉘
- 로그인 쉘은 /etc/passwd 파일에 사용자 별로 지정
- 프롬프트: 쉘이 사용자의 명령을 기다리고 있음을 나타내는 표시
프로그래밍 기능
- 쉘은 자체 내에 프로그래밍 기능이 있어 반복적으로 수행하는 작업을 하나의 프로그램으로 작성 가능
- 쉘 프로그램을 쉘 스크립트
사용자 환경 설정 기능
- 사용자 환경을설정할 수 있도록 초기화 기능 제공
- 초기화 파일에는 명령을 찾아오는 경로를 설정하거나, 파일과 디렉터리를 새로 생성할 떄 기본 권한을 설정하거나, 다양한 환경 변수 등을 설정
쉘의 종류
본쉘, 콘쉘, C쉘, 배시 쉘, 대시 쉘
본쉘(Bourne shell)
- 유닉스 V7에 처음 등장한 최초의 쉘
- 명령 이름은 sh
- 초기위 본쉘은 단순하고 처리속도가 빨라서 많이 사용되었고, 지금도 시스템관리 작업을 수행하는 많은 쉘 스크립트는 본쉘을 기반으로 하고 있음
- 히스토리 엘리어스 작업제어 등 사용자 편의기능 제공불가
C쉘(C Shell)
- 캘리포니아 대학교 에서 빌 조이 가 개발
- 2BSD 유닉스에 포함되어 발표
- 본 쉘에는 없던 엘리어스나 히스토리 같은 사용자 편의 기능을 포함
- 쉘 스크립트 작성을 위한 구문 형식이 C언어와 같아 C쉘이라는 기능을 가짐
- C쉘의 명령 이름은 csh
콘 쉘 (Korn shell)
- 1980년대 중반 AT&T 벨 연구소의 데이비트 콘이 콘 쉘을 개발
- 유닉스 SVR4에 포함되어 발표
- C쉘과 달리 본 쉘과의 호환성을 유지하고 히스토리, 엘리어스 기능 등 C쉘의 특징도 모두 제공하면서 처리속도도 빠름
- 콘 쉘의 명령 이름은 ksh
배시 쉘(bash shell)
- 본쉘을 기반으로 개발된 쉘로서 1988년 브레인 폭스 가 개발
- 본 쉘과 호환성을 유지하면서 C쉘, 콘 쉘의 편리한 기능도 포함
- 배시 쉘의 모든 버전은 GPL라이선스에 의거하여 자유롭게 사용 가능
- 리눅스의 기본 쉘로 제공되고 있어 리눅스 쉘로도 많이 알려짐
대시 쉘(Dash shell)
- 본 쉘을 기반으로 개발된 쉘로 POSIX 표준을 준수하면서 보다 작은 크기로 개발
- 우분투 6.10부터 본 쉘 대신 대시쉘 사용
쉘 확인법
- 프롬프트 모양 참조
- 본 쉘, 배시 수레, 콘 쉘의 기본 프롬프트 : $
- C쉘의 기본 프롬프트 : %
- 사용자 정보 확인 : /etc/passwd 파일
- 사용자정보의 가장 마지막에 나온 /bin/bash가 기본 쉘
쉘 기본 사용법
기본 쉘 바꾸기
chsh | |
기능 | 사용자 로그인 셸 을 바꾼다 |
형식 | chsh[ 옵션 ] [ 사용자 명 ] |
옵션 | -s shell : 지정하는 셸로 로그인 셀을 바꾼다 -l : /etc/shells 파일에 지정된 셸을 출력한다. |
사용 예 | chsh -l chsh -s /bin/sh user1 chsh |
바꾸려는 셸은 절대 경로로 지정
로그인 쉘과 서브 쉘
- 프롬프트에서 다른 쉘을 실행 할 수 있는데 이를 서브 쉘 이라 함
- 서브 쉘은 또다른 서브 쉘 생성 가능
- 서브 쉘을 종료하는 명령은 ^d( +d), exit등 사용
- 서브 쉘이 종료되면 서브 쉘을 실행했던 이전 쉘 환경으로 복귀
- 로그인 쉘에서 로그아웃하면 접속 해제
쉘 내장 명령
- 쉘은 자체적으로 내장 명령을 가지고 있음
- 명령 예 : cd
- 쉘 내장 명령은 별도의 실행 파일이 없고 쉘 안에 포함
- 일반 명령의 경우
- 실행 파일은 바이너리 파일임으로 cat명령으로 파일의 내용을 확인할 수 없다.
배시 쉘의 출력 명령
echo
echo | |
기능 | 화면에 한줄의 문자열을 출력한다 |
형식 | ehco [ -n ] [ 문자열... ] |
옵션 | -n : 마지막에 줄바꿈을 하지 않는다. |
사용 예 | echo echo text echo -n text |
printf
%지시자와 \문자를 이용하여 출력형식을 지정 가능
printf | |
기능 | 자료를 형식화 하여 화면에 출력한다 |
형식 | printf 형식 [ 인수... ] |
옵션 | %d, \n등 C언어의 printf함수 형식을 지정한다 |
사용 예 | printf text printf "text\n" printf "%d\n" 100 |
특수문자 사용하기
- 사용자가 더욱 편리하게 명령을 입력하고 실행할 수 있도록 다양한 특수문자를 제공
- 주요 특수 문자는 *, ?, |, ., [], ~, '', "", '" 등
- 명령을 입력하면 쉘은 먼저 특수 문자가 있는지 확인하고 이를 적절한 형태로 변경한 후 명령을 실행
- 특수 문자 * [ 별표 ]
- 임의의 문자열을 나타내는 특수문자로 0개 이상의 문자로 대체
사용 예 | 의미 |
ls * | 현재 디렉터리의모든 파일과 서브 디렉터리를 나열한다 서브 디렉터리의 내용도 출력한다. |
cp */tmp | 현재 디렉터리의 모든 파일을 /tmp 디렉터리 아래로 복사한다 |
ls -F t* | t, tmp, temp와 같이 파일명이 t로 시작하는 모든 파일의 이름과 파일 종류를 출력한다 t도 해당한다는데 주의한다. |
cp*.txt../ch3 | 확장자가 txt인 모든 파일을 상위 디렉터리 밑의 ch3 디렉터리 로 복사한다. |
ls -l h*d | 파일명이 h로 시작하고 d로 끝나는 모든 파일의 상세정보를 출력한다. hd, had, hard, h12345d 등 이 조건에 맞는 모든 파일의 정보를 볼 수 있다. |
특수문자 ?와 [ ]
- 하나의 문자를 나타내는 데 사용
- ?는 길이가 1인 임의의 한 문자를, [ ] 는 괄호 안에 포함된 문자 중 하나를 나타냄
사용 예 | 의미 |
ls t*.txt | t 다음에 임의의 한 문자가 오고 파일의 확장자가 txt인 모든 파일의 이름을 출력한다. t1.txt, t2.txt, ta.txt.등이 해당된다. 단, t.txt는 제외한다. |
ls -l tmp[135],txt | tmp 다음에 1,3,5 중 한글자가 오고 파일의 확장자가 txt인 모든 파일의 이름을 출력한다. tmp1.txt, tmp3.txt, tmp5.txt. 파일이 있으면 해당파일의 상세 정보를 출력한다. tmp.txt 는 제외된다. |
ls -l tmp[1-3].txt | [1-3] 은 1부터 3까지의 범위를 의미한다. 따라서 ls -l tmp[123].txt와 결과가 같다. tmp1.txt, tmp2.txt, tmp3.txt 파일이 있으면 해당 파일의 상세정보를 출력한다. |
ls [0-9]* | 파일명이 숫자로 시작하는 모든 파일 목록을 출력한다. |
ls [ A-Za-z]*[0-9] | 파일명이 영문자로 시작하고 숫자로 끝나는 모든파일 목록을 출력한다. |
특수 문자 ~와 -
- ~와 -는 디렉터리를 나타내는 특수 문자
- ~만 사용하면 현재 작업 중인 사용자의 홈 디렉터리를 표시하고 다른 사용자의 로그인 ID와 함께 사용하면 해당 사용자의 홈 디렉터리 표시
- -는 cd 명령으로 디렉터리를 이전하기 직전의 작업 디렉터리 표시
사용 예 | 의미 |
cp *.txt~/ch3 | 확장자가 txt인 모든 파일을 현재 작업 중인 사용자의 홈 디렉터리 아래 tmp 디렉터리로 복사한다. |
cp ~user2/linux.txt. | user2 라는 사용자의 홈 디렉터리 아래에서 linux.txt 파일을 찾아 현재 디렉터리로 복사한다. |
cd - | 이전 작업 디렉터리로 이동한다. |
특수문자 ;와 |
- ;과 |는 명령과 명령을 연결
- ;은 연결된 명령을 왼쪽부터 차례로 실행
- |는 왼쪽 명령의 실행 결과를 오른쪽 명령의 입력으로 전달
사용 예 | 의미 |
date;ls;pwd | 왼쪽부터 차례대로 명령을 실행한다. 즉, 날짜를 출력한 후 현재 디렉터리의 파일 목록을 출력하고, 마지막으로 현재 작업 디렉터리의 절대 경로를 보여준다. |
ls -al/ | more | 루트 디렉터리에 있는 모든 파일의 상세 정보를 한 화면씩 출력한다. ls -al / 명령의 결과가 more 명령의 입력으로 전달되어 페이지 단위로 출력되는 것이다. |
특수 문자 ' '와 " "
- ' '와 " " 는 문자를 감싸서 문자열로 만들어주고, 문자열 안에 사용된 특수 문자의 기능을 없앰
- ' ' 는 모든 특수 문자를, " "는 $, ``,\를 제외한 모든 특수 문자를 일반 문자로 간주하여 처리한다.
사용 예 | 의미 |
echo '$SHELL' | $SHELL 문자열이 화면에 출력된다. |
ehco "$SHELL" | 셀 환경 변수인 SHELL에 저장된 값인 현재 셀의 종류가 화면에 출력된다. 예를 들면 /bin/sh 이다 |
특수 문자 ` `
- 쉘은 ` ~~~` 로 감싸인 문자열을 명령으로 해석하여 명령의 실행 결과로 전환
사용 예 | 의미 |
echo "Today is `date`" | `date`는 명령으로 해석되어 date명령의 실행 결과로 바뀐다. 결과적으로 다음과 같이 화면에 출력된다. Today is 2014. 02. 23. (일) 15:46:48 KST |
ls /platform/`uname-m` | uname-m 명령의 실행 결과를 문자열로 바꿔 디렉터리 이름으로 사용한다. |
특수 문자 \
- \ 은 특수문자 바로 앞에 사용되는데 해당 특수문자의 효과를 없애고 일반 문자처럼 처리
사용 예 | 의미 |
ls -l t\* | t*라는 이름을 가진 파일의 상세정보를 출력한다. \없이 t*를 사용하면 t로 시작하는 모든 파일의 상세 정보를 출력한다. |
echo \$SHELL | $SHELL을 화면에 출력한다. echo '$SHELL'의 결과와 같다. |
특수 문자 >, <, >>
- 입출력의 방향을 바꾸는 특수 문자
사용 예 | 의미 |
ls -l >res | ls -l명령의 실행 결과를 화면이 아닌 res 파일에 저장한다. |
입출력 방향 바꾸기
표준 입출력 장치
- 표준 입력 장치 : 쉘이 작업을 수행하는 데 필요한 정보를 받아들이는 장치 -> 키보드
- 표준 출력 장치 : 실행 결과를 내보내는 장치 -> 모니터
- 표준 오류 장치 : 오류 메시지를 내보내는 장치 -> 모니터
파일 디스크립터
- 파일 관리를 위해 붙이는 일련 번호
- 입출력 장치를 변경할 떄는 이 파일 디스크립터를 사용
- 표준 입출력 장치를 파일로 바꾸는 것을 '리다이렉션(redirection)'이라고 함
출력 리다이렉션
- > : 기존 파일의 내용을 삭제하고 새로 결과를 저장
- >> : 기존 파일의 내용 뒤에 결과를 추가
파일 덮어쓰기 : >
> | |
기능 | 파일 리다이렉션( 덮어쓰기 ) |
평식 | 명령 1> 파일 이름 명령 > 파일 이름 |
- 1: 파일 디스크립터 1번
- 쉘은 >를 사용한 리다이렉션에서 지정한 이름의 파일이 없으면 파일을 생성해서 명령의 수행 결과를 저장
- 파일이 있으면 이전의 내용이 없어지고 명령의 수행 결과로 대체
쉘 변수와 환경변수
- 쉘의 환경을 설정하기 위한 값을 저장할 수 있도록 쉘 변수와 환경 변수를 제공
- 쉘 변수 : 현재 쉘에서만 사용이 가능하고 서브 쉘로는 전달되지 않음( 지역변수 )
- 환경 변수 : 현재 쉘 뿐만 아니라 서브 쉘로도 전달(전역 변수)
전체 변수 출력 : set. env
- set : 쉘 변수와 환경변수 모두 출력
- env : 환경 변수만 출력
주요 쉘 환경변수
환경변수 | 의미 | 환경변수 | 의미 |
HISTSIZE | 히스토리 저장 크기 | PATH | 명령을 탐색할 경로 |
HOME | 사용자 홈 디렉터리의 절대경로 | PWD | 작업 디렉터리 절대 경로 |
LANG | 사용하는 언어 | SHELL | 로그인 셸 |
LOGNAME | 사용자 계정 이름 |
특정 변수 출력하기 : echo
- 변수의 값을 출력할 떄는 변수 이름 앞에 특수 문자 $를 붙임
쉘 변수 설정하기
변수 이름과 문자열 사이에 공백이 있으면 안된다.
셸 변수 설정 | |
형식 | 변수 이름=문자열 |
사용 예 | SOME=test |
환경 변수 설정하기 : export
먼저 쉘 변수를 정의하고, export 명령을 사용하여 이를 환경 변수로 변경
export | |
기능 | 지정한 셸 변수를 환경 변수로 바꾼다. |
형식 | export [-n] [셸 변수] |
옵션 | -n : 환경 변수를 셸 변수로 바꾼다 |
사용 예 | export, export SOME, export SOME=test |
환경 변수를 다시 쉘 변수로 바꾸기 : export -n
- SOME는 보이지만 SOME1은 보이지 않음.
변수 해제하기
unset | |
기능 | 지정한 변수를 해제한다 |
형식 | unset 변수 |
사용 예 | unset SOME |
에일리어스 ( alias )
에일리어스는 우리말로 별명을 의미
기존의 명령을 대신하여 다른 이름 을 붙일 수 있도록 하는 기능
긴 명령 대신 짧은 명령을 만들어 사용 가능
여러 명령을 연결하여 하나의 명령으로 만들 수도 있음
자주 사용하는 옵션을 포함하여 새로운 이름을 붙여서 사용가능
alias | |
기능 | 에일리어스를 생성한다 |
형식 | alias 이름 ='명령' |
사용 예 | alias : 현재 설정된 별칭 목록 출력 alias 이름='명령' : 명령을 수정하여 사용하는 경우 alias 이름='명령;명령2;...' : 여러 명령을 하나의 이름으로 사용하는 경우 |
에일리어스 헤제하기 : unalias
unalias | |
기능 | 에일리어스를 삭제한다. |
형식 | unalias 에일리어스 |
히스토리
사용자가 이전에 입력한 명령을 다시 불러 사용
history | |
기능 | 히스토리(명령 입력 기록) 를 출력한다 |
형식 | history |
명령 재실행 하기 : !
재 실행 방법 | 기능 |
!! | 바로 직전에 수행한 명령을 재실행한다. |
!번호 | 히스토리에서 해당 번호의 명령을 재실행한다. |
!문자열 | 히스토리에서 해당 문자열로 시작하는 마지막 명령을 재실행 한다. |
프롬프트 설정 변수 : PS1
프롬프트를 바꾸는 것은 환경 변수 PS1에 새로운 형태의 문자열을 지정하는 것
이스케이프 문자와 프롬프트 설정하기
- \로 시작하는 특별한 문자가 이스케이프 문자
- \u와 같이 \으로 시작하는 이스케이프 문자는 두 글자가 아니라 한글자로 처리
- 이스케이프 문자는 화면에 문자 그대로 출력되지 않고 쉘이 문자의 의미를 해석하여 실행
프롬프트에서 사용할 수 있는 이스케이프 문자
이스케이프 문자 | 기능 |
\a | ASC|| 종소리 문자(07 |
\d | '요일 월 일' 형식으로 날짜를 표시한다 |
\e | ASC||의 이스케이프 문자로 터미널에 고급 옵션을 전달한다. |
\h | 첫번째.(마침표) 까지의 호스트 이름 |
\H | 전체 호스트 이름 |
\n | 줄 바꾸기 |
\s | 셸 이름 |
\t | 24시간 형식으로 현재 시각을 표시한다 |
\T | 12시간 형식으로 현재 시각을 표시한다 |
\@ | 12시간 형식으로 현재 시각을 표시한다. |
\u | 사용자 이름 |
\v | 배시 셸의 버전 |
\w | 현재 작업 디렉터리(절대 경로) |
\W | 현재 작업 디렉터리의 절대 경로에서 마지막 디렉터리 명 |
\! | 현재 명령의 히스토리 번호 |
\[ | 출력하지 않을 문자열의 시작부분을 표시 |
\] | 출력하지 않을 문자열의 끝 부분을 표시한다. |
컬러 프롬프트 설정하기
컬러 프롬프트 | |
형식 | PS1='\[\e[x;y[nm\] 프롬프트\[\e[x;y;0m\]' |
프롬프트 컬러 번호
컬러 | 글자 색 번호 | 배경 색 번호 | 컬러 | 글자 색 번호 | 배경 색 번호 |
검은색 | 30 | 40 | 파란색 | 34 | 44 |
빨간색 | 31 | 41 | 보라색 | 35 | 45 |
초록색 | 32 | 42 | 청록색 | 36 | 46 |
갈색 | 33 | 43 | 하얀색 | 37 | 47 |
프롬프트 특수 기능 번호
번호 | 기능 | 번호 | 기능 |
0 | 기본 색 | 7 | 역상 |
1 | 굵게 | 10 | 기본폰트 |
4 | 흑백에서 밑줄 | 38 | 밑줄 사용 가능 |
5 | 반짝임 | 39 | 밑줄 사용 불가능 |
728x90
'대학교 코딩공부 > 운영체제 실습' 카테고리의 다른 글
운영체제 실습 9주차 리눅스 마스터 2급 시험문제 풀이2020년6월13일 (0) | 2022.10.25 |
---|---|
운영체제 실습 7주차 [ 파일 접근 권한 관리 ] (0) | 2022.10.12 |
운영체제 실습 5주차 [ 문서 편집 ] (0) | 2022.09.26 |
운영체제 실습 4주차 [ 우분투 명령어 ] (0) | 2022.09.20 |
운영체제 실습 2주차 우분투 활용 기초 (0) | 2022.09.07 |