01 셸의 기능과 종류

1) 셸의 기능

① 명령어 해석기 기능 : 해석기, 번역기 기능

② 프로그래밍 기능 : 셸 스크립트

③ 사용자 환경 설정 기능

2) 셸의 종류

본셸 

- 초기에 단순하고 처리 속도가 빨라서 많이 사용하였고, 지금도 많은 셸 스크립트는 본셸을 기반으로 한다. 

- 명령 이름 = sh

- 현재 본셀은 콘셸이나 배시셸로 심볼릭 링크가 되어 있다. 

C셸

- 본셸에는 없던 앨리어스나 히스토리 등 편의 기능 포함

- 명령 이름 = csh

- 크기가 커지고 속도가 느린 단점이 있으나 편리한 기능덕분에 많이 사용

콘셸

- 본셀과의 호환성 유지, C셸의 특징 모두 제공, 처리 속도 빠름

- 명령 이름 = ksh

배시셸

- 본셸과 호환성 유지, C셸, 콘셸의 편리한 기능 포함

- 명령 이름 = bash

 

02 셸 기본 사용법

1) 셸 지정 및 변경

현재 사용 중인 셸의 종류를 알아보기 위해선 grep 명령어를 사용한다.

grep user1 /etc/passwd

-> :/home/user1:/bin/bash  여기서 bin/bash가 사용자의 기본 셸이다. 

기본 셸 변경하기 : chsh [옵션][사용자명]

현재 바꿀 수 있는 셸의 종류는 /etc/shells 파일에 지정되어 있다.

바꾸려는 셸의 절대 경로를 지정하면 셸이 변경된다. : chsh -s /bin/sh user1

grep user1 /etc/passwd 를 입력해보면 셀이 바뀐 것을 확인할 수 있다. 

2) 셸 내장 명령

셸은 자체적으로 내장 명령을 가지고 있다. 이는 별도의 실행 파일이 없고 셸 안에 포함되어 있다.

실행 파일은 바이너리 파일이므로 cat 명령으로 파일의 내용을 확인할 수 없으므로 주의한다. 

file /usr/bin/pwd

 

3) 출력 명령 :echo [-n] [문자열]  , printf// -n : 마지막에 줄 바꿈을 하지 않는다. 

4) 특수문자 사용 방법

* 는 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, h1234d 등 이 조건에 맞는 모든 파일의 정보를 볼 수 있다. 
? 와 [ ]는 모두 하나의 문자를 나타내는 데 사용된다. 
ls t?.txt t다음에 임의의 한 문자가 오고 파일의 확장자가 txt인 모든 파일의 이름을 출력한다. 단, t.txt는 제외한다. 
ls -l tmp[135].txt tmp 파음에 1,3,5 중 하나가 오고 파일의 확장자가 txt인 모든 파일의 이름을 출력한다. 단, tmp.txt는 제외한다. 
ls -l tmp[1-3].txt [1-3]은 1에서 3까지의 범위를 의미한다. 
ls [0-9]* 파일명이 숫자로 시작하는 모든 파일의 목록을 출력한다. 
ls [A-Za-z]*[0-9] 파일명이 영문자로 시작하고 숫자로 끝나는 모든 파일의 목록을 출력한다. 
~ 만 사용하면 현재 작업 중인 사용자의 홈 디렉터리를, 로그인ID~ 로 사용하면 해다 사용자의 홈 디렉터리를 나타낸다. 
- 는 cd 명령으로 현재 디렉터리로 이동하기 직전의 디렉터리를 나타낸다. 
cp *.txt ~/tmp 확장자가 txt인 모든 파일을 현재 작업중인 사용자의 홈 디렉터리 아래 tmp 디렉터리로 복사한다. 
cp ~user2/linux.txt . user2라는 사용자의 홈 디렉터리 아래에서 linux.txt 파일을 찾아 현재 디렉터리로 복사한다. 
cp - 이전 작업 디렉터리로 이동한다. 
; 은 연결된 명령을 왼쪽부터 차례로 실행한다.
l 는 왼쪽 명령의 실행 결과를 오른쪽 명령의 입력으로 전달한다. 
date ; ls ; pwd 날짜를 출력한 후, 현재 디렉터리의 파일 목록을 출력하고, 마지막으로 현재 작업 디렉터리의 절대 경로를 보여준다. 
ls -al / / more 루트 디렉터리에 있는 모든 파일의 상세 정보를 한 화면씩 출력한다. 
' ' , " "는 문자를 감싸서 문자열로 만들어주고, 문자열 안의 특수기호의 기능을 없앤다.
" "는 $, ` , \ 를 제외한다.
echo '$SHELL' $SHELL 문자열이 화면에 출력된다.
echo "$SHELL" 셸 환경 변수인 SHELL에 저장된 값인 현재 셸의 종류가 화면에 출력된다. /bin/bash를 예로 들 수 있다. 
셸은 ` `로 감싸인 문자열을 명령으로 해석한다. 
echo "Today is `date`" Today is 2019 어쩌고~~ 로 출력
ls /usr/vin/`uname -m` uname -m 명령의 실행 결과를 문자열로 바꾸어 파일 이름으로 사용한다. 
\ 는 해당 특수문자의 효과를 없애고 일반 문자처럼 처리한다. 
ls -l t\* t*라는 이름을 가진 파일의 상세 정보를 출력한다. 
echo \$SHELL $SHELL을 화면에 출력한다. 

03 입출력 방향 변경

1) 표준 입출력 장치

표준 입력 장치0 셸이 작업을 수행하는 데 필요한 정보를 받아들이는 장치
표준 출력 장치1 실행 결과를 내보내는 장치
표준 오류 장치2 오류 메시지를 내보내는 장치

표준 입출력 장치를 파일로 바꾸는 것을 '리다이렉션'이라고 한다. 

2) 출력 리다이렉션

파일 덮어쓰기 cat 사용시 입력을 받을 수도 있다.
set -o noclobber 사용시 예상치 않게 파일 내용을 덮어쓰는 일을  예방할 수 있다. 
>> 파일에 내용 추가하기  

3) 오류 리다이렉션

>로는 표준 오류가 리다이렉션 되지 않는다. >은 1>와 같은 것으로, 결국 1번 파일 대신에 사용한 파일명을 지정하는 것이기 때문이다. 따라서 2>를 사용해야 한다.

버리고 싶은 오류 메시지가 잇다면 /dev/null을 사용하면 된다. 

4) 입력 리다이렉션 : <

cat out1 = cat < out1 = cat 0<out1

04 배시셸 환경 설정

1) 셸 변수와 환경 변수

HISTSIZE 히스토리 저장 크기 PATH 명령을 탐색할 경로
HOME 사용자 홈 디렉터리의 절대경로 PWD 작업 디렉터리의 절대 경로
LANG 사용하는 언어 SHELL 로그인 셸
LOGNAME 사용자 계쩡 이름    

2) 셸 변수와 환경 변수 출력

전체 변수 출력하기 set 셸 변수와 환경 변수
env 환경 변수
특정 변수 출력하기 echo 변수명 앞에 $ 붙여야 한다. 

3) 셸 변수와 환경 변수 설정

셸 변수 설정 변수명=문자열 //
변수명과 문자열 사이에 공백이 있으면 안된다.
SOME=test
echo $SOME
test
환경 변수 설정 export [옵션] [셸 변수] export SOME
env | grep SOME
SOME=test

export SOME1=test1
env | grep SOME
SOME=test
SOME1=test1

4)변수 해제 : unset [변수]

05 앨리어스와 히스토리

1) 앨리어스 : alias 이름='명령' / unalias 앨리어스

2) 히스토리 :history

!! 바로 직전에 실행한 명령을 재실행한다.
!번호 히스토리에서 해당 번호의 명령을 재실행한다. 
!문자열 히스토리에서 해당 문자열로 시작하는 마지막 명령을 재실행한다. 

06 프롬프트 설정

07 환경 설정 파일

1) 시스템 환경 설정 파일

/etc/profile
/etc/bashrc
/etc/profle.d/*.sh

사용자 환경 설정 파일 적용하기 . .bashrc  또는 source .bashrc

+ Recent posts