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
'운영체제 > CentOS Linux' 카테고리의 다른 글
[CentOS 리눅스: 시스템 & 네트워크 /Chapter 6]프로세스 관리 (0) | 2022.10.24 |
---|---|
[CentOS 리눅스: 시스템 & 네트워크 /Chapter 5] 파일 접근 권한 관리 (0) | 2022.10.24 |
[CentOS 리눅스: 시스템 & 네트워크 /Chapter 3]문서편집 (0) | 2022.10.23 |
[CentOS 리눅스: 시스템 & 네트워크 /Chapter 2] 디렉터리와 파일 사용법 (0) | 2022.10.23 |
[CentOS 리눅스: 시스템 & 네트워크 /Chapter 1] 리눅스 설치와 기본 사용법 (0) | 2022.10.23 |