1. 쉘 (Shell)
가. 쉘의 개념
- 리눅스에서 대화형 사용자 인터페이스를 부르는 용어이며 쉽게 명령어 해석기라고 함.
- 사용자의 명령어를 해석하여 그 결과를 커널에 전달하고 원하는 일들을 수행하게 해주는 역할
- 명령어를 실행시키는 명령어 해석기 이면서도 프로그래밍 언어로서의 특성을 가짐
- 별도의 프로그램을 사용하지 않고도 시스템을 보다 효율적으로 운영할 수 있는 내부 루틴을 작성할 수 있음
- 사용자가 로그인 하면 자동으로 쉘 프로그램을 실행하게 되고 만일 /etc/passwd 파일에 특정 쉘이 지정되어 있지 않으면, 사용자는 기본 쉘인 Bash Shell을 이용하여 로그인
- 쉘들은 /etc/shells 파일에 경로가 설정되어 있으며, 사용자가 원한다면 사용하고자 하는 쉘을 변경 가능
나. Bourne Shell (sh)
- Unix 시스템의 표준 구성 요소로서 가장 오래되고 강력한 명령 프로그래밍 언어 기능을 가짐
- 모든 리눅스 시스템에서 사용할 수 있으며, Bourne Shell 프로그램의 실행 명령어는 'sh'
- 가장 큰 단점은 상호 대화식 방식을 취하고 있지 않음
- .profile 파일로 환경을 초기화 할 수 있음
다 . C Shell (csh)
- 프로그램 명은 'csh' 로서 버클리 버전 UNIX의 쉘로 개발된 것으로 Bourne Shell 과 매우 유사
- 커맨드 구조에서 C언어와 유사하고, 몇 가지 프로그램 개발에 편리한 기능도 내장하고 있어 많이 보금
- 상호 대화식 방식으로 구성되어 있으며 .cshrc 파일로 환경을 초기화할 수 있음
라. Bash Shell (Bash)
- FSF (Free Software Foundation) 에서 개발한 무료 공개용 쉘
- 최종 목적은 IEEE POSIX Shell 과 도구 명세 (IEEE Working Group 1003.2) 에 호환
- Korn Shell 과 C Shell 의 유용한 특징들을 통합하고 있으며, 쉘 프로그래밍 언어에 있어서는 Bourne Shell 과 호환
- 대부분의 리눅스 기계에서의 표준적인 명령어 라인 인터페이스, 명령어 라인 편집, 완료, 재실행 지원
- 리눅스에서 처음 로그인을 하였을 때 기본으로 주어지는 쉘
[SHELL의 종류]
Bourne Shell 계열 |
명칭 |
실행파일 |
비고 |
|
Bourne Shell |
/bin/sh |
|
||
Korn Shell |
/bin/ksh |
Bourne Shell 과 C Shell을 접목 |
||
Bash |
/bin/bash |
|
||
Z Shell |
/bin/Zsh |
Bourne Shell에 다양한 기능 추가 |
||
C Shell 계열 |
C Shell |
/bin/csh |
|
|
TC Shell |
/bin/tcsh |
C Shell의 결함을 고치고 새로운 기능 추가 |
2. 쉘의 활용과 환경설정
가. 사용자 쉘 확인 및 변경
- /etc/shells 파일에서 경로 설정 확인
cat /etc/shells
/bin/sh
/bin/bash
/bin/csh
- /etc/passwd 파일에서 사용자가 사용하는 쉘 확인
user01:x:500:500::/home/user01:/bin/bash
--> 사용하는 쉘을 변경하려면 /etc/passwd 파일 수정
--> 해당 사용자의 로그인을 막으려면 마지막 필드를 '/bin/false' 로 수정
- 사용하는 쉘 확인
echo $SHELL
나. bash
- Bash Shell 버전 알아보기
bash --version
1) 환경 설정 파일
- 리눅스에서 쉘 환경 설정 파일은 기본적으로 사용자의 홈 디렉토리 안에 있으며, '.' 으로 시작하는 파일들이 해당
- 파일이름은 'Resource Configuration' 라는 의미의 'rc' 로 끝나는 경우가 대부분
- 쉘 환경 설정 파일의 종류 (/etc/skel)
파일 |
설명 |
.bashrc |
alias 설정과 /etc/bashrc 파일 실행하도록 구성 |
.bash_profile |
로그인할 때 실행하는 설정파일로 로그인 시점에서 실행시키고 싶은 명령, 시스템에 대한 정보를 보여주는 명령 등을 실행 |
.bash_logout |
로그인 쉘이 종료 되면서 실행 |
/etc/profile |
유저가 로그인할 때 가장 먼저 읽어들이는 시스템 초기화 파일 |
/etc/bashrc |
시스템 전역 함수와 alias 설정 |
2) 환경 변수
- 사용자가 사용하고자 하는 쉘의 환경을 작업 환경에 맞도록 설정하는데 사용되는 값.
- 사용자마다 이 변수 값을 변경해 줌으로써 각기 원하는 환경을 설정할 수 있으며, 쉘 프로그래밍을 할 경우에도 유용하게 사용
환경변수 |
설명 |
환경변수 |
설명 |
HOME |
현재 사용자의 홈 디렉토리 |
PATH |
실행 파일을 찾는 디렉토리 경로 |
LANG |
기본 지원되는 언어 |
PWD |
사용자의 현재 작업하는 디렉토리 |
USER |
현재 사용자의 이름 |
SHELL |
로그인 해서 사용하는 쉘 |
BASH |
bash 쉘의 경로 |
메일을 보관하는 경로 |
|
HISTFILE |
히스토리 파일 경로 |
HISTSIZE |
히스토리 파일에 저장되는 개수 |
HOSTNAME |
호스트의 이름 |
USERNAME |
현재 사용자 이름 |
- 환경 변수값 확인
- 하나씩 확인
# echo $변수명 or printenv 변수명
- 현재 설정된 변수 값을 모두 확인
# printenv
- 환경 변수 값 설정 및 변경
# export [환경변수명]=[변수값]
ex) export HISTSIZE=500 (띄어쓰기 없이)
3. Shell Script
가. 기본
1) 작성
- 파일의 확장자는 '*.sh' 사용을 권장
- 작성 예
#!/bin/bash --> 특별한 형태의 주석. 해당 스크립트를 실행하기 위한 프로그램을 커널에게 알림
echo $USERNAME --> echo 로 환경변수 USERNAME 출력
echo $HOSTNAME --> echo 로 환경변수 HOSTNAME 출력
exit 0 --> 종료 0은 종료 코드를 의미
2) 실행
- sh 명령으로 실행
sh [Script Name]
- 실행 권한을 부여하고 실행
chmod +x [Script Name]
./[Script Name]
[+] 쉘 스크립트에서 환경변수를 사용할 경우,
환경변수는 $[변수명] 으로 사용하거나 ` (역따옴표) 로 묶어준다..
$PWD == `PWD`
나. 변수
1) 변수의 기본
- 쉘에서는 변수를 사용하기 전에 미리 선언하지 않음. 변수에 값이 할당되면 자동으로 변수 생성
- 모든 문자열은 `string(문자열)` 취급. (숫자를 넣어도 마찬가지)
- 변수명은 대소문자를 구분. ($aa =/= $AA)
- 변수를 대입할 때 = 의 좌우에는 공백이 없어야 함.
- 값의 공백은 " " 로 묶어야 함.
Ex) testval="asdf asdf"
2) read
- read 명령은 newline (엔터로 구분) 을 발견할 때까지 한 라인을 가져와서 읽는다.
read a |
읽은 내용을 a 변수의 값으로 할당 |
read first second |
공백이나 newline 을 기준으로 나눠 할당 |
read |
REPLY 빌트인 변수에 할당 |
3) 변수의 입력과 출력
- $문자를 변수로 인식하지 않고 문자 자체로 출력하려면 '' 로 묶어주거나 앞에 '\' 를 붙인다.
4) 산술 연산
- 정수형 변수 선언
declare -i [변수이름]
(정수형으로 선언하면 float 형 자료는 못넣음)
- let 명령
빌트인 명령으로 declare 로 선언하지 않았을 경우에 정수형 산술 연산을 수행할 수 있다.
# help let : 사용되는 연산자 목록
let 명령은 (( )) 로도 사용할 수 있다.
++ bash 는 정수형 연산만 지원하므로, 실수형 연산은 bc, awk 와 같은 다른 유틸리티를 사용해야 한다.
5) 파라미터
- 파라미터 변수는 $0, $1, $2 의 형태를 가진다.
ex) yum install -y samba 의 경우
$0 = yum
$1 = install
$2 = -y
$3 = samba
다. 조건문
1) 종료상태
- bash 는 표현식의 결과가 true 인지 false 인지에 따라 명령이 성공인지 실패인지 테스트 한다.
- 종료 상태가 0이면 성공(true)이고, 0 이외의 수이면 실패 (false) 이다.
- 이전 명령의 성공/실패 를 확인하려면 ? 변수의 값을 출력한다.
ex) echo $?
2) test 명령 연산자
- test 명령은 [ ] 으로 대체할 수 있다.
- [ ] 앞뒤에 빈칸이 있어야 한다.
문자열
[ string ] : NULL 여부
[ -z string ] : 문자열 길이가 0인지
[ -n string ] : 문자열 길이가 0이 아닌지
정수형
[ int1 -eq int2 ] : 둘이 같은지
[ int1 -ne int2 ] : 둘이 다른지
[ int1 -gt int2 ] : 1이 2보다 큰지
[ int1 -ge int2 ] : 1이 2보다 크거나 같은지
[ int1 -lt int2 ] : 1이 2보다 작은지
[ int1 -le int2 ] : 1이 2보다 작거나 같은지
논리적
[ string1 -a string2 ] : 둘다 true 인지
[ string1 -o string2 ] : 둘 중 하나가 true 인지
[ !string1 ] : not
논리적 복합
[[ string1 && string2 ]] : 둘다 true
[[ string1 || string2 ]] : 둘 중 하나가 true 인지
[[ !string1 ]] : not
3) if 문
if [ 1 -eq 2 ]
then
참이면 실행
fi
if -> 만약
elif -> 아니면 만약
else -> 아니면
4) 파일 관련 조건
파일 연산자 |
결과 |
파일 연산자 |
결과 |
-d filename |
파일이 디렉토리면 참 |
-s filename |
파일크기가 0이 아니면 참 |
-e filename |
파일이 존재하면 참 |
-w filename |
파일이 쓰기가능이면 참 |
-f filename |
파일이 일반 파일이면 참 |
-x filename |
파일이 실행가능이면 참 |
-r filename |
파일이 읽기가능이면 참 |
|
|
5) for 문
for 변수 in 목록
do
명령
done
'전공 과목 시험정리 > 서버구축실무' 카테고리의 다른 글
Samba (0) | 2015.10.06 |
---|---|
NFS (0) | 2015.10.06 |
라우터 명령어 (0) | 2015.10.06 |
Ubuntu 14.10 Server 에 Pydio 설치 (0) | 2015.07.24 |
메일 서버 (0) | 2015.07.02 |