Shell
명령어 해석기 또는 명령 행 인터페이스로, 사용자와 커널 사이에서 명령어를 해석하여 처리한다
- Shell script는 텍스트 파일로, 반복적으로 수행되는 작업을 Shell script로 작성할 수 있다.
- 세미콜론(;)을 사용하면 한 라인에 여러 명령을 입력할 수 있다.
- 셸은 Bash를 기본 셸로 사용하며, 일반사용자는 $, root 사용자는 #을 사용한다.
Bash shell
- Bourne Again Shell로 Bourne shell의 개선된 버전
- 많은 셸 스크립트의 문법이 Bourne shell에 기반을 둠
- 실행 명령은 /bin/bash
- 기본 셸을 변경할 수 있음
chsh -s /bin/sh
셸 명령의 형식
> 명령어 옵션 인수
- 대개 명령어는 프로그램의 이름
- 인수는 명령의 수행 대상을 지정하는 것
grep "Kildong Hong" /etc/passwd
# /etc/passwd에서 Kildong Hong찾기
chsh -s /bin/sh kdhong
# 옵션도 인수를 가질 수 있다.
- 환경변수 PATH에 설정된 경로 중에 실행 파일이 존재하면 명령의 이름만으로 실행이 가능
- 아니면 해당 실행 파일의 절대 경로를 사용해야 한다.
- 현재 디렉토리(.)는 보통 PATH에 포함되어 있지 않다.
- echo $PATH로 저장된 경로 확인 가능
- 명령어 종류
- alias : 자주 사용되는 명령의 단축 명령 (계속 유지하려면 셸의 환경 설정 파일에 기록해두어야 한다.)
- type: 명령이 어떻게 해석되는지 알려주는 명령
- which: 실행 프로그램을 환경변수 PATH를 기초로 찾아 경로 출력
- whereis: 실행파일, 소스프로그램, 매뉴얼 페이지까지 조회한다.man: 매뉴얼 페이지(사용법, 설정 파일)를 보여주는 명령
명령 히스토리
- history: 이전에 수행했던 명령 행의 목록을 불러온다.
- 히스토리 기능을 이용하여 명령 실행
- !! : 직전 명령 실행
- !n : 히스토리 목록에서 해당 명령 실행
- !string : 지정된 문자열로 시작하는 최근 명령 실행
특수 문자
- 백슬래시(\): 특수 문자의 기능을 제거하는 escape 문자
- or 긴 명령 행을 분리할 때 사용
- 틸드(~): ~또는 ~username 은 사용자의 홈 디렉터리를 의미
- 도트(.): 현재 작업 디렉터리 표시 or 명령 행의 맨 앞에서 셸 스크립트를 실행하는 source 명령
- 달러($): $변수는 변수의 값을 추출
- 앰퍼센트(&): 명령&은 명령을 백그라운드로 실행시킴
- >> : 표준 출력을 파일의 끝에 덧붙일 때 사용
- 입출력 리다이렉션
- 명령 < 파일 : 명령 수행에 필요한 입력을 표준 입력대신에 파일로부터 얻음
- 명령 > 파일 : 명령 수행의 결과를 표준 출력으로 보내지 않고 파일에 기록함
- 명령 2> 파일: 명령 수행 중 표준 오류 출력을 파일에 덧붙임
- 인용부호
- ' 는 특수문자의 의미를 제거함
- " 는 $,`,\,!를 해석하여 확장함
- 수식과 변수의 확장
- 명령 수행 전에 수식의 결과를 계산하여 전달
- $[수식] 또는 $((수식))
[202434-363489@localhost ~]$ echo "I am $[2024-1995] years old"
I am 29 years old
- 변수 (특정 데이터 또는 환경 설정을 위한 값 저장)
- 셸 변수(지역변수) : 정의된 셸에서만 사용 가능하고, 서브 셸에는 전달되지 않음
- 환경 변수(전역 변수): 현재 셸 + 서브 셸로도 전달한다.
- 보통 변수 이름으로 대문자를 사용한다.
# 시스템의 모든 환경 변수의 이름과 값을 출력하려면 printenv 명령 사용
[202434-363489@localhost ~]$ printenv
SHELL=/bin/bash
HISTCONTROL=ignoredups
HISTSIZE=1000
HOSTNAME=localhost
PWD=/home/202434-363489
LOGNAME=202434-363489
XDG_SESSION_TYPE=tty
MOTD_SHOWN=pam
HOME=/home/202434-363489
LANG=ko_KR.UTF-8
...
# 현재 셸의 모든 환경 변수를 출력
[202434-363489@localhost ~]$ export -p
declare -x DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/1000/bus"
declare -x DEBUGINFOD_URLS="https://debuginfod.centos.org/ "
declare -x HISTCONTROL="ignoredups"
declare -x HISTSIZE="1000"
declare -x HOME="/home/202434-363489"
declare -x HOSTNAME="localhost"
declare -x LANG="ko_KR.UTF-8"
declare -x LESSOPEN="||/usr/bin/lesspipe.sh %s"
...
# 변수 설정 및 확인
[202434-363489@localhost ~]$ export SOYUN=29
[202434-363489@localhost ~]$ printenv SOYUN
29
[202434-363489@localhost ~]$ echo $SOYUN
29
[202434-363489@localhost ~]$ FOO=bar
[202434-363489@localhost ~]$ echo FOO
FOO
[202434-363489@localhost ~]$ sh
sh-5.1$ echo $FOO # 서브셸
sh-5.1$ exit
exit
[202434-363489@localhost ~]$ export FOO
[202434-363489@localhost ~]$ sh
sh-5.1$ echo $FOO # export 후 서브셸에도 유효한 것 확인
bar
sh-5.1$ exit
exit
로그인과 셸 환경 설정 파일
/etc/profile | 모든 사용자에게 적용, 로그인할 때 가장 먼저 수행됨 (시스템 관리자에 의한 전역변수 설정) |
~/.bash_profile | 로그인할 때 수행되며 개별 사용자에게 적용됨 보통 내부에서 ~/.bashrc 실행 |
~/.bashrc | 셸 시작할 때마다 수행되며 개별 사용자에게 적용됨 |
/etc/bashrc | 모든 사용자에게 적용, 셸 시작할 때마다 수행됨 PS1 설정, alias 설정, umask를 사용한 접근권한의 초기값, 함수 설정 |
~/.bash_logout | 로그아웃 수행할 때 실행되는 스크립트 파일 |
반응형
'IT 지식쌓기' 카테고리의 다른 글
[운영체제] 운영체제란? (0) | 2024.03.06 |
---|