728x90

쿠버네티스를 학습하기 전, 도커와 리눅스 쉘에 대해서 선행 학습이 되어야 하는데요.

저는 이성미 강사님의 '따라하면서 배우는 배시 쉘 프로그래밍' 시리즈를 수강하며 공부한 내용을 정리했습니다.

도커도 이성미 강사님의 따배도 시리즈로 공부할 예정입니다. :)

https://youtu.be/38wy3gsiR6Q

 

[따배셸] 0. 따라하면서 배우는 Shell Programming 소개 영상!

[공지] 안녕하세요, 편집자 밍밍&차차입니다! 여러분의 성원에 힘입어 쉘 프로그래밍과 더불어 새로운 콘텐츠를 기획 중에 있습니다~ 원하시는 콘텐츠를 따배런 커뮤니티탭 첫 게시글에 남겨주

youtu.be

 

학습 환경: CentOS 8, root 권한

 

1. Linux Shell

1. Shell 역할

Shell: 사용자 명령어 해석기

사용자가 프롬프트에 입력한 커맨드를 해석해서 운영체제 커널에게 전달

 

2. Shell 종류 - 알아야 하는 네 종류

종류 의미
Bourne shell(sh) AT & T 벨 연구소에서 만든 Original shell (1969년 처음 만들어진 Unix에 탑재된 shell)
C shell(csh, tcsh) C언어 문법 적용된 shell - History, aliases, job control, vi command editing and completion 기능 포함
Korn shell(ksh) AT & T 벨 연구소에서 Bourne shell에 C shell의 기능 포함
Bourne-again shell(bash) GNU Project로 만들어진 Linux, MAC OS의 기본 shell

 

3. Shell 구성하기

  • 사용 가능한 shell 리스트 확인
[root@localhost ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
  • 사용 중인 shell 확인
[root@localhost ~]# echo $SHELL
/bin/bash
  • 로그인 shell 변경
// sudo 권한 필요
[root@localhost ~]# chsh
Changing shell for root.
New shell [/bin/bash]
/bin/sh
Shell changed.

// /etc/passwd 경로에 저장됨
[root@localhost ~]# grep <사용자명> /etc/passwd
root:x:0:0:root:/root:/bin/sh
operator:x:11:0:operator:/root:/sbin/nologin

 

2. Bash shell과 변수

1. Shell의 변수

  • Shell의 변수란?
    • 데이터를 넣는 그릇
    • 선언할 필요 없이 사용 가능
    • 변수명: 문자, 숫자, _(언더바)로 구성되며 반드시 문자나 _로 시작
  • 변수 선언: varname=value
    • =앞뒤로 띄어쓰기 있으면 안 됨
[root@localhost ~]# name=ncoding
[root@localhost ~]# age=20
  • 변수 확인: echo, set
[root@localhost ~]# echo $name
ncoding
[root@localhost ~]# echo $age
20
[root@localhost ~]# set
BASH=/bin/bash
BASHOPTS=checkwinsize:cmdhist:complete_fullquote:expand_aliases:extglob:extquote:force_fignore:histappend:interactive_comments:login_shell:progcomp:promptvars:sourcepath
BASHRCSOURCED=Y
BASH_ALIASES=()
BASH_ARGC=()
BASH_ARGV=()
BASH_CMDS=()
// 등등...
[root@localhost ~]# set | grep name
name=ncoding
// grep을 통해 원하는 단어만 출력 가능
  • 변수 제거: unset varname
[root@localhost ~]# unset name

 

2. Shell의 환경 변수

  • Shell 환경 변수란?
    • 동작되는 프로그램에게 영향을 주는 변수
    • 일반 변수와 달리 이후에 실행되는 프로그램에게 전달된다
  • 환경 변수 선언: export varName=value
[root@localhost ~]# export NAME=ncoding
[root@localhost ~]# echo $NAME
ncoding
  • 시스템에 적용된 환경 변수 확인: env
[root@localhost ~]# env
...
LANG=en_US.UTF-8
HISTCONTROL=ignoredups
HOSTNAME=localhost.localdomain
S_COLORS=auto
USER=root
PWD=/root
HOME=/root
NAME=ncoding
...
  • 기억해야 하는 환경 변수
PATH 명령어 탐색 경로
HOME 홈 디렉토리의 경로, cd 명령 실행시 적용
USER 로그인 사용자 이름
SHELL 로그인 shell의 이름
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
// $PATH: 명령어 실행 시, 해당 명령어가 어느 디렉토리에 있는지 경로를 제공하는 중요 환경 변수
[root@localhost ~]# echo $HOME
/root
[root@localhost ~]# echo $USER
root
[root@localhost ~]# echo $SHELL
/bin/bash
728x90

'OS > Linux' 카테고리의 다른 글

Linux BASH Shell (2) Shell의 기능  (2) 2021.09.16
[Linux]  (1) 2021.05.13
[Linux] /etc/fstab  (2) 2021.02.05

728x90

스토리지 Attached Type

스토리지는 서버(호스트)의 로컬 저장소 용량이 가득 차 한계가 발생했을 때, 용이하게 공간을 추가하기 위해 만들어졌다. 서버와 구분된 저장 장치 개념으로 첫 발을 떼었고, 서버 하나에 스토리지 하나를 직접 연결하는 DAS 방식이 그 시발점이다.

 

만약 서버 두 대가 스토리지 하나를 연결해서 사용하게 된다면, 두 대의 서버를 클러스터링하여 한 대처럼 사용하고 있는 게 아닌 이상, 두 대 서버가 스토리지의 파일 하나에 동시에 쓰기 명령을 내린다면 데이터의 정합성이 깨지게 된다. 스토리지를 서버의 OS 파일 시스템으로 포맷하여, 한 대의 서버에만 할당해서 독점 사용해야 한다.

 

여러 대의 서버에서 하나의 스토리지를 동시 사용하고 싶다면, 서버를 클러스터로 구성하거나 별도의 Application을 사용하거나, 후술할 NAS 방식으로 연결하여 사용하면 된다.

 


 

DAS (Direct Attached Storage)

전용 케이블(SCSI 또는 Fiber Channel)로 서버와 스토리지를 직접 연결한다. 간단하게는 컴퓨터에 직접 연결하는 외장하드가 다스 구조라 할 수 있다.

고속 전송이 가능하고 구성이 간단하지만 물리적 포트의 한계로 확장성이 떨어지는 초기 스토리지 연결 방식이다.

 


 

SAN (Storage Area Network)

SAN

샌 방식은 다스 구조에 SAN Switch를 달아서 여러 스토리지에 여러 서버를 연결할 수 있게 했다. 각각 다른 OS 환경에서 스토리지 자원을 나눠 가질 수 있게 된 것이다. SAN Switch를 통해 스토리지 전용 네트워크가 만들어지기 때문에 Storage Area Network라고 칭한다.

Zoning

샌 방식으로 연결한 스토리지 역시 다스와 같이 서버에서 직접 연결된 것처럼 보이는데, 이를 위해 샌 스위치에서 서버와 스토리지간 Zone을 구성해야 한다. Zone을 구성하는 것을 조닝이라고 하는데, 단어 자체의 뜻으로 이해하면 된다. 서버에서 스토리지를 구역으로 만들어서, 데이터가 원활하게 목적지를 찾을 수 있게 한다.

Lun (Logical Unit Number)

이를 통해 샌 방식에서는 한 스토리지에 여러 서버를 연결할 수 있고, 반대로 여러 서버가 한 스토리지를 바라볼 수도 있다. 물론 한 서버가 하나의 저장 공간을 독점해야 하는 것은 같으나, 스토리지 내부 공간을 파티셔닝하여 각 서버에게 할당이 가능하다. 따라서 여러 서버가 한 대의 스토리지의 저장 공간을 나눠 가지게 된다. 이렇게 파티셔닝된 공간을 LUN라고 부른다.

NAS와의 비교

샌 방식 스토리지는 블록 단위로 데이터가 저장되기 때문에 압축이나 중복제거가 비교적 잘 되고, 네트워크를 사용하지 않아 성능이 잘 나온다. 하지만 SAN Switch를 추가적으로 구매해야 한다는 단점이 있다. 다만, 요즘은 스토리지 벤더가 많고 벤더별 SAN과 NAS 스토리지 라인업이 다르기 때문에 상대 가격을 논하긴 애매하다고 볼 수 있다.

 


 

NAS(Network Attached Storage)

NAS

나스는 여러 사용자가 문서 등의 파일을 용이하게 공유해야 하는 필요성에 의해 개발되었다. 기존 네트워크 인프라가 구축되어 있다면 스토리지를 붙여서 바로 사용 가능하다. 이름 (Network Attached Storage) 그대로 네트워크에 스토리지를 붙이는 것이다.

 

나스는 L2나 L3같은 네트워크 스위치를 통해 TCP/IP를 사용하는 이더넷으로 통신한다. 사용자는 NAS로 등록된 IP를 통해 NAS에 접근 가능하다. 물론 ACL(Access Control List) 설정도 가능하다. 윈도우는 보통 AD를 연동하여 권한을 주고, 리눅스는 ip base기 때문에 ip 화이트리스트를 만드는 식이다. 

 

리눅스에서는 NFS(Network File System), 윈도우에서는 SMB(Server Message Block) 혹은 CIFS(Common Internet File System) 프로토콜을 통해 나스에 마운트하여 공유 파일에 Access하게 된다.

 

SAN과의 비교

나스는 파일 단위로 데이터가 저장되기 때문에 파일 시스템 관리를 OS에서 할 수 없다. 따라서 스토리지에서 파일 시스템 관리를 하게 되고, 어느 한 서버가 저장 공간을 독점하지 않기 때문에 포맷도 필요하지 않다.

네트워크 기반으로 통신하기 때문에 샌 방식 스토리지보다는 속도가 느리다. 기존 구축된 네트워크 인프라만 있다면 바로 사용 가능하다. 하지만 스위치나 포트 여분이 없다면 스위치 구매 비용이 발생될 수 있다.

 


 

마치며

스토리지는 위에서 소개한 세 가지 방식 중 하나로 활용할 수 있다. 대부분의 스토리지는 샌이나 나스 중 하나를 택하여 지원한다. 물론 Unified Storage라고 하여 한 스토리지에서 샌과 나스 두 가지 방식 모두를 지원하는 제조사도 있다. 샌과 나스, 그리고 제조사별 특징을 알아야지만 각자의 환경에 맞는 알맞은 스토리지를 선택할 수 있을 것이다.

 

Server Icons made by bqlqn from www.flaticon.com

Storage Icons made by Freepik from www.flaticon.com

Switch Icons made by phatplus from www.flaticon.com

File System Icons made by srip from www.flaticon.com

728x90

'Storage' 카테고리의 다른 글

Storage Workload  (2) 2020.04.21