프로그래밍 공부
작성일
2022. 10. 5. 21:52
작성자
WDmil
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부터 본 쉘 대신 대시쉘 사용

 

쉘 확인법

  1. 프롬프트 모양 참조
    • 본 쉘, 배시 수레, 콘 쉘의 기본 프롬프트 : $
    • C쉘의 기본 프롬프트 : %
  2. 사용자 정보 확인 : /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