Linux kernel과 사용자의 상호 작용을 위한 인터페이스 역할 수행 어플리케이션
기능
1. 프로그래밍 기능(자동화),
반복적으로 수행하는 작업을 프로그램형태로 작성 - 반복 자동화
shell 프로그램 -> shell script
shell 에서 사용하는 명령을 모아 높은 파일
shell script를 실행함 으로써 명령들을 자동 실행
2. 명령 해석 및 실행기능 (사용자와 리눅스 커널 사이에서 명령을 해석하고 전달하는 해석기 및 번역기
(interpreter, translator 기능을 함)
리눅스 부팅 후 기본 사용하는 shell -> login shell 이라고 함
login shell 지정 및 보고 싶으면 -> /etc/passwd 파일에 저장되고 cat이나 이런걸로 보면 됨
패스워드라는 파일은 현재 Linux에 등록된 사용자 정보 저장 파일, 실제 password는 저장하고 있지 않다.
-> 사용자이름: X(이거는 패스워드여서 이럼) :숫자(UID): 숫자(GID): 사용자 설명: 홈디렉토리: 로그인 쉘
/etc/shadow -> 패스워드 저장 파일
/etc/group -> 현재 우리 리눅스의 그룹 정보가 나옴 (그룹 이름과 GID를 확인할수있다)
chgrp 로 그룹을 변경하는게 가능
groupadd명령으로 그룹을 추가
프로그램을 사용할수있는 사용자를 지정 하고 싶으면 그룹을 사용해서 권한을 부여할때 그룹 생성
/etc/gshadow 에 그룹 패스워드가 있다
프롬프트 - 사용자로부터 명령입력을 기다릴때 표시되는 내용
기본 프롬프트는 로그인 쉘이다!
사용자 환경 설정 기능
사용자 환경을 설정할 수 있는 환경 설정 파일(초기화 파일)
설정 파일
명령 검색 경로
파일 생성시 기본 권한
환경 변수 설정
본 쉘(Bourne shell)
UNIX V7에 처음 적용
표준 shell 이라고도 한다.
본 쉘 이름 - sh
단순하고 처리 속도가 빠른 장점, 시스템 관리 작업 수행시 현재도 많이 사용하는 shell
history, alias 작업 제어등의 편의 기능이 미약 ㅜㅜ
vi 에서 :!sh 는 외부명령을 vi에 적을때 사용! -> 사용하는 쉘이 login shell이 아니게 됨
C shell
C shell 이름 - csh
BSD UNIX에 처음 적용
Bourne shell에 없던 history,alias등과 같은 편의 기능 추가
shell script 형식이 c언어와 같기 때문에 C shell이라 한다
쉘은 독립적인 프로그램이기 때문에 필요하면 설치하고 로그인 쉘로 해놓을 수 있다
콘쉘(korn shell)
AT&T에서 개발
UNIX SVR4에 처음 적용
콘 쉘 이름 - ksh
본 쉘과 호환성을 유지하면서 사용자의 편의 기능과 C shell의 특징을 모두 포함!
Bash shell(bourn again shell) -> 지금 우리가 사용하고 있는거
본 쉘 기반으로 개발
본 쉘과 호환성 유지하면서 csh,ksh 기능 포함
본 쉘 이름 -> bash
리눅스 기본 쉘로 제공!!
오픈소스이다 -> GPL license 기반(완전 무료 및 소스 공개까지!)
대시 쉘(dash shell)
본 쉘 기반으로 개발
POSIX 표준 준수 및 크기가 작게 개발
대시 쉘 이름 -> dash
Ubuntu에서는 배쉬 대신 dash 사용
zsh 는 맥 OS에서 사용! -> BXD 기반으로 만들어서 애네가 제작함
chsh 명령 -로그인 쉘 변경 명령
chsh [옵션] [사용자명]
-s shell -지정한 쉘(쉘의 절대 경로)로. Login shell 변경
-l -지정 가능한 shell 출력, /etc/shells 파일 저장 내용 우분투 2004에서는 지원안함!!!!
절대경로로 입력해야 shell을 볼 수 있다.
cat /etc/shells 하면 쉘 다 볼 수 있다
로그인 쉘과 서브 쉘
현재 프롬프트 상에서 다른 쉘을 실행하면 해당 쉘은 서브 쉘 이라 한다.
-> sh 입력하기,
서브 쉘은 현재 쉘가 별개의 다른 쉘을 실행
서브 쉘 종료 방법은 exit 명령, ctrl+d 입력
서브 쉘이 종료 되면 이전 쉘 환경으로 복귀
로그인 쉘을 종료 하면 logout 상태가 된다.
logout - 현재 사용자 사용 종료, Linux booting 후 login 화면으로 전환
Linux 종료 - shutdown이라고 하면 리눅스를 완전히 종료한다는 의미
shell 내장 명령
쉘에 내장된 명령으로도 별도의 실행 파일이 존재 하지 않는 명령
type 명령 - 명령 종류 확인 -> type<명령>
ex) cd 같은애들 -> which나 whereis로 파일 존재하는지 확인할 수 있다
shell 일반 명령
별도의 실행 파일로 존재하면 실행시 메모리에 로드한 후 실행 되는 과정을 거치는 명령
사용자 작성 프로그램 또한 shell 일반 명령으로 볼 수 있다.
ex) which ls -> 하면 실행 파일 존재함
echo 명령은 자동 줄 바꿈 기능이 있다
echo [옵션] <문자열 또는 변수>
-n: -줄바꿈 하지 않는다
문자열은 ‘(따옴표)’ 나 “(이중 따옴표)”로 묶거나 직접 문자열만 표기 가능!
특수문자
‘(따옴표)’ - 문자열을 감싸서 표현, 문자열 안의 특수 문자 기능은 모두 해제
“(이중 따옴표)” - 문자열을 감싸서 표현, 문자열 안의 특수 문자중 $,`(백틱), / 는 가능
₩백틱 - 표현식 또는 명령에 대한 기능 수행 결과
\(백슬래쉬) - 제어문자(특정 문자에 기능을 적용) 효과 배제!
\n, \t, \b -등을 의미
변수
- 값을 저장하는 메모리의미
- 항상 대문자로 사용
- 변수명은 변수에 대한 이름
- 변수 종류
shell 변수 - 현재 사용중인 쉘에서만 사용 가능한 변수(지역변수)
환경 변수 - 현재 사용중인 shell과 서브 쉘 모두 적용되는 변수(전역변수)
생성 - > export 변수명=값
-> shel l변수를 환경 변수로 변경 - export <shell 변수>
다시 돌리기 위해서는 export -n 적기!
unset 명령 - 변수 해제
unset 변수 명
- 변수 목록 출력
set 명령 - 전체 변수 출력 shell변수와 환경변수 전부 출력
env 명령, printing 명령 - 환경 변수 전체 출력, 여러개 있으면 맨위에만 출력
주요 환경 변수
HISTSIZE - 명령 history 저장크기
HOME - 사용자 홈 디렉토리 절대 경로
LANG - 사용 언어
LOGNAME - 사용자 계정 이름
리눅스에서 명령 검색 하면 path 변수내용의 경로에서 검색
맨 처음 경로부터 한개 씩 봄 -> 없으면 없다고 나옴
PWD - 현재 디렉토리 경로
SHELL - login shell
ex) echo ‘hello world’ > text 처럼 리다이렉션도 가능! (원래 표준 출력은 전부 리다이렉션이 가능)
쉘에서 변수 내용을 지칭할때는 $를 앞에 붙인다!
별명을 의미하여 원하는 기능을 수행하는 명령들을 별도의 alias를 통해 지정
alias <이름> = ‘명령; 명령’ ~~ alias
unalias <alias 이름> - alias 해제
리눅스 부팅시 또는 사용자 로그인 할때 마다 자동으로 shell 환경 설정
환경 설정 파일 - 환경 설정 내용을 담고 있는 text 파일
Linux 시스템을 사용하는 모든 사용자들에게 공통으로 적용되는 환경 정보를 담고 있는 파일
관리자 권한으로 수정 가능
/etc/profile
시스템 공통으로 적용되는 환경 변수 설정
PATH, USER, HOME, HISTSIZE 등
기본 접근권한설정 - /etc/profile.d/*.sh 실행
/etc/bashrc- 없을 수도 있다
시스템 공통으로 적용되는 함수와 alias 설정
기본 프롬프트 설정
서브 쉘을 위한 명령 경로 설정, 기본 접근 권한 설정
/etc/profile.d/*
언어나 명령 별 각각 필요 환경 설정, 필요시 설정 파일 추가
개별 사용자 마다 원하는 환경 설정에 대하여 환경 설정 정보를 담고 있는 파일
사용자가 로그인 하면 먼저 시스템 환경 설정 파일 내용을 적용하고 이 후 사용자 환경 설정 파일을 적용
사용자 환경 설정 파일은 사용자 홈 디렉토리에 hidden 파일로 저장
~/.bash_profile
경로 추가 등 사용자 정의 환경 설정
~/.bashrc ====================== 여기에 적기!~!
일반적인 사용자 환경 설정
사용자 정의 함수나 alias등 설정
~/.bash_logout
로그 아웃시 실행할 함수 등 설정
-> vi ~/.bashrc에 가서 MYPWD=“current directory - `pwd`”
echo $MYPWD 하면 적용됨 —> 우리가 실제 들어올때마다 적용됨
Shell Script
shell 명령 기반으로 자동화를 수행하는 텍스트 파일(실행권한을 부여해줘서 실행이 가능함!)
단순히 shell 명령만 사용 하는 것이 아니라 선택/ 반복과 같은 실행
흐름 제어기능을 적용하여 프로그램 성격을 갖도록 작성한 파일
shell script 파일 첫 줄에 #!/bin/sh 또는 #!/bin/bash(shebang, 셔뱅) 을 추가하여 실행할 shell을 명시 해주는 것이 일반적인 형식
shell script 파일은 .sh 확장자 부여
쉘 스크립트 실행
실행 권한 부여
chmod 명령을 이용하여 실행 권한 부여
소스 명령 사용
source <shell script 파일>
환경 설정 파일 변경 후 바로 적용하고자 할때 사용
vi ~/.bashrc에 적고 source ~/.bashrc 하면 exit로 안나가도 바로 내가 적은 내용 지금 쉘에 적용됨!
shell script 구성요소
변수 - 값 저장목적으로 사용하는 shell 변수
변수명은 소문자 사용
만약 shell 변수나 환경 변수로 사용할 변수는 대문자 사용
변수 내용 접근 시 $를 변수명 앞에 사용
다른 문자열과 변수를 혼합하여 사용시 변수를 {} 로 묶어서 사용
shell script에서 사용하는 특수 변수
$0 - 쉘 스크립트 파일 이름
$1 - $n - n번째 인수
$# - 인수 개수
$? - 직전 실행 명령 상태(반환 값)
$$ - shell script process ID
$LINENO - 변수를 사용할 줄 번호
shift - 인수 위치를 하나씩 왼쪽으로 이동 -> 1번째 인수 버리고 2번재 인수가 1번째 인수가 됨!
조건에 따른 실행
if then - elif - else - fi - 조건식
if [조건식1] then
조건식1 참인경우 실행내용
elif [조건식2] then
조건식2 참인경우 실행 니용
else
조건식1과 2 아닐때
fi
• [ 식 ]
* [ -n string ] - string 길이가 0이 아니면 참
* [ -z string ] - string 길이가 0이면 참
* [ str1 = str2 ] - str1과 str2가 동일하면 참
* [ str1 != str2 ] - str1과 str2가 같지않으면 참
관계 연산
논리 연산
파일 판단
반복할 횟수가 정해진 경우 - for
조건에 따라 반복을 수행할 경우 - while
<반복 제어 변수 초기화>
while [ <반복 제어 변수> 이용한 조건식 ]; do
조건이 참인 동안 수행할 내용
<반복 제어 변수 내용 변경>
expr - 연산식을 표현할때 맨 앞에 사용!
express `1+2`
PATH에 저장 안되어있는 쉘 스크립트면 실행이 되지않는다!! Sammple.sh 만 해도 실행파일이면 나와야하는데 안나온다!!
절대경로나 상대경로로 지정해서 이름을 적어야한다
애플이 zsh만든건 아니다!! -> 그냥 자기네 맞게끔 설정 하기만 한 거!
눈에 보이지 않는 문자는 white space인데 이걸 하고 싶으면 ‘ ‘나 “” 사용해서 안에 적어야한다
Echo -n ‘ ‘ ; echo world
변수 - 메모리공간에 부여한 이름, 메모리 공간에 값을 저장할때 사용
환경변수랑 쉘 변수 구분하기 힘듬
리눅스는 항상 환경변수 내에 있는 path 경로 들을 살펴보고 정함 (현재 디렉토리 굳이 검사 안함!!)
윈도우는 명령어 입력하면 현재 디렉토리에 있는지 먼저 검색 하고 path안에 있는지 검색
alias 도 변수 처럼 생성 하기 때문에 그리고 명령의 형태를 담는 것이기 때문에 변수처럼 생각 하면 된다