1. 셸의 이해
1. 셸의 개념과 특징
(1)셸
-커널과 사용자간의 다리 역할
-사용자로부터 명령을 받아 그것을 해석하고 프로그램을 실행하는 역할
-커널에서 분리된 별도의 프로그램이어서 다양한 종류의 셸이 존재
-사용자가 시스템에 로그인 하게되면 각 사용자에게 설정된 셸이 부여되면서 다양한 명령을 수행 가능(사용자에게 셸을 부여하지 않으면 로그인을 하더라도 명령 수행 불가능)
(2)주요 셸의 특징
-Bourne Shell : 유닉스 버전 7의 기본 셸
-bash : 현재 리눅스의 표준 셸
명령어 문법 ‘sh’와 호환됨, 명령어 히스토리,명령어 완성기능, 히스토리치환 , 명령어
편집 지원
-C Shell : C언어를 기반으로 만들어졌고 강력한 프로그램 작성기능을 가짐
히스토리기능, 별명기능, 작업제어 기능포함
명령행 편집기능 지원하지않음
-tcsh : The Enhanced C Shell
Csh의 기능을 강화시킴 명령어 완성기능, 명령행 편집 기능 추가 지원
-ksh : 본셸을 확장하고 C셸의 기능을 추가
작업제어, 앨리어스(별명기능),히스토리기능, vi및 Emacs스타일의 명령행 편집기능, 명령행 완성기능 제공
2. 셸확인과 변경
(1)셸확인
-환경변수 SHELL을 통해 확인
-명령프롬프트 상에 ‘echo $SHELL’
-‘chsh-l’ (change shell)or ‘cat /etc/shells : 다른 셸을 사용하기위해 변경가능한 셸확인’
(2)셸의 변경
-‘chsh’ : 사용자가 로그인 셸은 변경
셸을 절대경로로 입력하면 변경가능 대신 적용은 다음 로그인부터 가능
(3)사용자의 로그인 셸 정보확인
- /etc/passwd의 7번쨰 필드에 기록됨
-‘$ grep 사용자명 /etc/passwd’로 확인가능
3. 셸 환경설정
(1)셸 변수
- 특정 셸에서만 적용되는 변수
-리눅스에서는 명령행에서 ‘변수명 =값’ 형태로 지정하고 변수값 출력시 변수명 앞에 $붙이고echo명령으로 확인가능
(2)환경 변수
-프롬프트 변경, PATH변경 등과 같이 셸의 환경을 정의하는 중요한 역할을 수행하는 변수
-미리예약된 변수명을 사용
-evn : 현재설정된 전체 환경변수 값 확인명령
-특정환경변수의 값 확인과 설정은 일반 셀변수 설정과 같다
(3)주요 환경변수
변수 : 내용
-> HOME: 사용자의 홈 디렉터리
->PATH: 실행파일을 찾는 디렉터리경로
->LANG: 셸사용시 기본으로 지원되는 언어
->TERM: fhrmfldsgks 터미널 종류
->PWD:사용자의 현재 작업 디렉터리
->SHELL:사용자의 로그인셸
->USER:사용자의 이름
-> DISPLAY :X에서 프로그램 실행시 출력되는 창
->PS1: 프롬프트 변수
->PS2:2차프롬프트 변수
->HISTFILE:히스토리파일의 절대경로
->HISTSIZE:히스토리 파일에 저장되는 명령어의 개수
->HISTFILESIZE:히스토리 파일의 파일 크기
->HOSTNAME:시스템의 호스트명
-> MAIL: 도착한 메일이 저장되는 경로
-> TMOUT: 사용자가 로그인한후 일정시간동안 작업을 하지 않을경우 로그아웃 시키는 시간의 단위는 초
->UID: 사용자의 UID
(3)환경 변수의 사용 및 변경
-환경변수를 사용해 각 사용자의 고유의 셸환경 구축 및 명령어와 별합하여 사용가능
Cf)주요 프롬프트 형식
\d : ‘요일 월 일 ’형태로 날짜 표시
\h: 호스트 이름 표시
\s:사용중인 셸의 이름을 표시
\t: 24시형태의 현재시간을 표시
\T:12시 형태의 현재시간을 표시
\@:12시형태의 현재시간에 AM/PM을 추가로 표시
\u:현재 사용자의 이름을 표시
\w: 현재 작업 디렉터리를 절대경로로 표시
\W: 현재 작업 디렉터리의 전체경로중 마지막 디렉터리만 표시
\!: 현재 명령의 히스토리 넘버를 보여준다
4. 배시셸의 주요기능
(1) 명령행 완성기능
-명령시 글자 일부분만 입력하고[TAB]키를 눌러나머지 부분을 자동 완성 시키는 기능
-첫글자입력후 [ TAB]여러 개 존재시 다시한번 누르면 확인가능
(2)명령어 History 기능
-위아래 방향키를 이용해 검색 및 편집해 특정명령어를 반속해서 수행가능
-history명령은 !로 대처 가능
-명령입력하면 히스토리 리스트에 있는 명령어들이 출력됨
-사용법 : $ history[숫자값]
-!와 히스토리 명령문
!! : 마지막에 사용한 명령 실행
!n :n번쨰 사용한 명령 실행
!-n:역으로 n번째 사용한 명령실행
!문자열: 가장최근 사용한 명령중 ‘문자열’로 시작하는 명령 찾아 실행
!?문자열? : 가장최근명령중 ‘문자열’을 포함하고 있는 명령을 찾아 실행
^문자열1^문자열2 : 마지막에 사용한 명령문의 ‘문자열 1’을 ‘문자열2’로대체후 실행
-히스토리 관련 환경변수
변수명 : 설명
HISTSIZE : 히스토리 스택의 크기가 지정되어 있는 변수
HISTFILESIZE : 실질적인 히스토리 파일의 크기
HISTFILE :히스토리 파일의 위치
HISCONTROL : 중복되어지는 명령에 대한 기록 유무를 지정하는 변수
HISTIMEFORMAT : history명령 실행시 출력되는 시간형식을 지정할떄 사용
-관련 파일 : .bash_history
-> 사용자들이 입력했던 명령이 기록되는 파일
-> 파일명이 ‘.’로 시작되어 숨겨진 파일형태로 존재하고 로그인해 내린 명령들은 로그아웃할 때 기록됨 그래서 다음 로그인시 확인가능
-history관련키
-> [Ctrl]+[r] : 특정문자 입력시 최근 그문자로 수행한 명령 보여줌
->[ESC] 후 [.] : 최근 사용한 명령행을 붙여주는데 한번실행할때마다 하나씩 역으로 호출됨
->[ALT]+[.] :두키를 계속누르면 최근 사용된 인자를 하나씩 호출됨
(3)alias 기능(별명)
-어떤 명령 지정해 놓으면 사용자가 그 명령 실행시 alias로 지정해 놓은 명령이 대신 실행됨
-alias만 실행시 별명이 설정된 목록 확인가능
-unalias는 설정된 명령 해제
-사용법 : $alias [별명=’명령어’]
$unalise 별명
(cf) alias를 지정했을 때 원래 명령을 설정 해제하지 않고 명령을 일시적으로 실행하려면 which명령을 이용해 해당 명령어의 위치를 파악후 절대 경로 로 실행하는 방법과 명령어앞에 \을 붙이는 방법이 있다
셸상태에서 설정한 alias는 재로그인하거나 시스템 부팅시 다시 설정해야 해서 ㅈㅣ속적으로 사용하려면 홈디렉터리 안에 있는 /bashrc에 설정하면된다)
(4)명령행 편집 기능
-주요 커서 이동 명령
[ctrl]+[b] : 커서를 왼쪽으로 한칸이동
[ctrl]+[f] : 커서를 오른쪽으로 한칸 이동
[esc]후[b]:커서를 왼쪽으로 한단어 이동
[esc]후[f] : 커서를 오른쪽으로 한 단어 이동
[Ctrl]+[a] : 맨왼쪽으로 이동
[Ctrl]+[e] : 맨오늘쪽으로 이동
-주요 삭제 명령
[ctrl]+[d] : 커서 오른쪽 한 글자 삭제
[esc] 후 [backspace] : 커서 왼쪽 한 단어 삭제
[esc]후 [d] : 커서 오른쪽 한단어 삭제
[ctrl]+[k]: 커서 왼쪽 행 전체 삭제
[ctrl]+[u] :행전체삭제
[ctrl]+[y] : 삭제취소
(5)명령 대체 기능
-특정 명령의 결과를 다른 명령어의 인자값으로 사용하는 것
-$()나 ‘’를 이용해 대체가능
(6)그룹 명령 실행
- ; : 단순히 한줄에 여러명령을 나열하기 위해 사용하고 입력순서대로 순자처리됨
- || : 논리적 or이라고 부름 명령성공시 결과출력 그렇지않으면 뒤에 명령 실행
- && : 논리적 and라고 부름 앞에 명령이 성공이여야만 다음 명령수행됨
-ex : $ls;find/-type>list.txt -> find/-type 의 명령결과를 list.txt파일로 저장
(7) 표준입출력 제어 기능
-표준 입력과 출력이라는 이름의 데이터 흐름을 말함
-종류
->표준 입력(Standard Input) : 입력을 담당하는 키보드 약어 stdin 셸에서는 0으로 표시
->표준 출력(Standard Output) : 명령 결과값이 보여지는 화면 약어 stdout 셀에서는 1(생략가능)으로 표시
->표준 에러(Standard error) : 에러값이 보여지는 화면 약어 stderr 셸에서는 숫자 2
(8) 라다이렉션
-표준 입출력이 아닌 다른입출력으로 변경시 사용
-출력결과 파일로 저장하거나 파일의 내용을 프로세스의 입력으로 사용하는 기법
-종류
> : 프로세스출력을 표준출력에서 다른 출력으로 변경
>> : 프로세스의 출력을 지정한 출력에 추가
<< : 기호 뒤에 지정한 문자열을 입력받아 해당 문자열이 나오기 전까지의 표준 입력을 삼아 해당 내용을 출력
(9)파이프 |
-어떤 프로세스의 표준 출력이 다른 프로세스의 표준 입력으로 쓰이게 하는 것
-여러 개의 파이프 라인을 구성하면 데이터들은 파이프 라인에 따라 흐르게됨
-사용법
$명령어1 | 명령어 2 : 명령어 1의 결과값이 명령어 2의 입력으로 사용됨
- “tee “
-> 파이프 연결출력을 두갈래로 나눌 때 사용하는 명령어
-> 사용법 : $tee [option] [파일]
-> 옵션
-I : 인터럽트를 무시하도록 한다
-a : 지정된 파일로 출력을 덮어쓰지않고 파일뒤에 내용을 추가
Ex) $find /-name ‘*.txt’ 2>error.txt >result.txt
=>결과값은 result.txt에 저장하고 에러값은 error.txt에 저장
$find /-name ‘*.txt’ 2>error.txt
=> 결과값은 화면에 출력하고 에러는 error.txt파일에 저장
2. Shell Programming
- 셀프로그래밍 : 셸에서 사용되는 여러 명령어들을 모아 하나의 파일로 만드는 과정
(1)셸 스크립트 작성 방법
1. vi편집기를 사용하여 파일생성 -> $vi who.sh
2. 첫번째 줄은 사용할 셸을 명시 -> #!/bin/bash
3. 두번째 줄부터 원하는 명령 및 구분 입력
4. 스크립트를 실행가능한 파일로 만듦 -> $chmod 755 who.sh
5. 실행 시킨다 -> $./who.sh
Cf) ./는 현재 디렉터리 안에 있는 해당파일을 실행시키라는 것
실행권한 없이도 실행하는 방법
$sh who.sh
$soure who.sh
$ . who.sh
2. 셸 프로그래밍 문법
(1)주석
#
(2)변수
-변수형은 문자열만 가지며 변수형 선어는 필요가 없다
-사용법
Var=var
-기타변수 대응법
종류 : 설명
${name} : name이라는 변수에 들어있는 값으로 치환
${name:=value} : name이 null이면 value로 할당하여 지정 name값이 있으면 그값을 사용
${name:+value} : 기존의 name이 null이 아니면 value를 사용하지만 name에 저장하지는 않는다
${name:-value} : 기존의 name값이 있다면 그값을 사용하고 값이없으면 value 값을 대입한다. Name에 value값을 저장하지는 않음
${name:?value} : 기존에 name값이 있다면 기본값으로하고 없으면 error을 내면서 value값을 보여준다
${#name} : name의 문자열 길이 반환
${name:offset} : name값에서 offset만큼 삭제후 값을 반환
${name:offset:length} : name값에서 offset만큼 삭제한후 length만큼 센뒤 값을 반환
-관련 환경변수
$IFS : 입력필드 구분자로 셸 상에서 입력을 읽어 들일때 글자를 구분하기 위한 목적으로 사용되는 문자 목록을 말한다. 스페이스, 탭, 개행문자 사용
-아규먼트 변수(위치 매개변수)
-> 이변수는 매개변수를 불러올 때 스트립트의 명령행 인자를 담당
$0 : 실행된 셸스크립트명
$1 : 스크립트에 넘겨진 첫번째 아규먼트
$2 : 스크립트에 넘겨진 두번쨰 아규먼트
$# : 스크립트에 넘겨진 아규먼트의 개수
$$ : 셸스크립트의 PID
$* : 스크립트에 전달된 인자 전체를 하나의 변수에 저장하면 IFS변수의 첫번째 문자로 구분
$@ : $*와 동일하지만 IFS변수를 사용하지 않음
$? : 실행한뒤반환 값 참이면 0거짓이면 1
$- : 현재 shell이 호출될 때 사용한 옵션
-Shell변수의 출력과 제거
명령 : 설명
set : 현재 정의되어 있는 모든 변수와 그값을 출력
env : export된 변수의 값만 출력
export: 특정 변수의 범위를 환경 데이터 공간으로 전송하여 자식 프로세스에서도 그 특정 변수를 사용할수 있게함
upset : 선언된 변수 제거
(3) echo문과 escape문자
-echo문은 라인을 제어하는 명령 해석기 -e옵션과 같이 \로 시작하는 escape특수문자 사용가능
-escape특수 문자
-> \f : 앞문자열 만큼 열을 밀어 이동
->\n : 새로운 줄로 바꿈
->\r : 앞문자열의 앞부분부터 뒷문자열만큼 대체하고 반환
->\t : 탭만큼 띄움
-> \\ :\를 표시
(4)간단한 조건식
-사용법
Test 표현식
[ 표현식 ]
-표현식
문자열비교
산술비교
[ expr1 -eq expr2 ] : 두 표현식이 같다면 참 (Equal)
[ expr1 -ne expr2 ]: 두표현식이 같지않다면 참(not equal)
[ expr1 -gt expr2 ] : expr1>expr2면 참(greater then)
[ expr1 -ge expr2 ] : expr1>=expr2이면 참(greater equal)
[ expr1 -lt expr2 ]: expr1<expr2면참(less then)
[expr1 -le expr2 ]:expr1<=expr2 면 참(less equal)
[ ! expr ] : expr이 참이면 거짓, 거짓이면 참
[ expr1 -a expr2 ] : expr1 AND expr2의 결과
[ expr1 -o expr2 ] : expr1 OR expr2의 결과
파일의 조건
3. 조건문
(1)if문
-사용법
If [조건1]
then
실행문장1
elif [조건2]
then
실행문장2
else
실행문장3
fi
(2)case 문
-사용법
case 문자열
in
정규식)명령어1;;
정규식)명령어2;;
*)해당하지않는 경우
esac
(3)select문
-사용법
select 변수 in 값1,값2,,,,
do 실행문장
done
4. 반복문
(1)for문
-사용법
for 변수 in 값1, 값2
do 실행문장
done
(2)while문
-사용법
while 조건문
do 실행문장
done
(3)until문(while 과 같지만 조건이 반대일때실행)
-사용법
until 조건문
do 실행문장
done
5. 함수
-사용법
(function) 함수이름 //function 은 생략가능
{ command }
6. 패턴과 패턴비교
-일종의 문자열을 연산한 것으로 특정 패턴을 놓고 변수의 문자열 값이 일부분이라도 이 패턴과 일치하는지 검사할때사용
-종류
${variable#pattern} : 처음부터 패턴과 맞는 variable의 부분을 찾아 이중 가장 작은 부분제거하고 나머지 반환
${variable##pattern}: 처음부터 패턴과 맞는 variable부분을 찾아 가장 큰 부분을 제거하고 나머지 반환
${variable%pattern}:끝에서부터 패턴과 일치하는variable의 최소부분 제거하고 나머지반환
${variable%%pattern}: 끝에서부터 패턴과 일치하는 variable의 최대부분을 제거하고 나머지 반환
'License > 리눅스 마스터 1급' 카테고리의 다른 글
[리눅스마스터1급1차] 네트워크 / OS7계층 (0) | 2020.06.13 |
---|---|
[리눅스마스터 1급 1차] 프로세스 (0) | 2020.06.13 |
[리눅스마스터1급1차] X윈도 (0) | 2020.06.02 |
[리눅스마스터1급1차] 리눅스 구조 및 grub (0) | 2020.06.02 |
[리눅스마스터1급1차] 리눅스와 하드웨어 (0) | 2020.06.02 |