이론
운영체제
쉘
- 쉘(shell)이란 사람이 사용하는 명령어를 프로그램이 실행할 수 있도록 만들어 주는 인터페이스.
- 쉽게, 터미널에서 사용하는 명령어를 말한다.
- 윈도우에서는 명령프롬프드도 쉘이다.(CLI) 그러나 그냥 폴더를 여는 것(탐색창)도 쉘 명령어이다.(GUI)
- 쉘에서는 프로그램에 직접 명령어를 전달할 수도 있고, 내부에서 함수도 짤 수 있으며, 또 초기 환경 셋팅도 가능하다.
- 우리가 4/5일 사용한 것은 bash shell이다. (CentOS환경)
- sh shell 환경도 존재한다.
디렉토리
- 컴퓨팅에서 파일을 분류하기 위해 사용하는 이름공간이다.
- 폴더(folder), 또는 카탈로그(Catalog)라고 한다.
- 디렉토리 안의 디렉토리는 서브디렉토리(Sub directory)라고 한다.
- 디렉토리들은 계급, 곧 트리 구조를 형성한다.
운영체제 요소
리눅스란?
- 리눅스는 매우 가볍고 적은 용량으로 설치가 가능하며, 가벼운 만큼 복제가 쉽다. 따라서, 스케일 아웃(수평적 확장)할 때 가장 적합하다.
- 또, 커널이 공개되어 있어, 커널을 수정하여 사용할 수 있다.
- 리눅스(Linux)는 컴퓨터 운영 체제(서버 운영체제)이며, 그 커널을 뜻하기도 한다.
- 리눅스는 자유 소프트웨어와 오픈 소스 개발의 가장 유명한 표본으로 들 수 있다.
- 다중 사용자, 자중 작업(멀티태스킹), 다중 스레드를 지원하는 네트워크 운영체제(NOS)이다.
- 리눅스, AWS관점에서 네트워크를 구성 해 볼것이다. 이때, 리눅스가 네트워크 구성에 강하다.
- 초기에는 몇몇의 전문가만 사용했지만, Unix가 서버 분야에서 Windows를 대체하는 등, 현재는 많이 사용된다.
- AWS AMI, Amazon Linux2, Ubuntu 등 사용되고 있다.
- 많은 전문가들이 이러한 성공을 벤더 독립성(상품화 쉬움, 구매필요X), 적은 개발비, 보안성과 안전성에 기인한다고 분석한다.
- 리눅스는 PC부터 슈퍼컴퓨터, 모바일 등 임베디드 시스템까지 이용된다.
리눅스의 역사
- Unix로 시작. 여전히 존재
- BSD : Unix기반 버클리 Universty Distributon, 클라우드보다 물리서버쪽에서 유명하다.
- 그 다음 Linux가 나왔다.
- 그 외에도, Solaris, CentOS, Ubuntu, MacOS
리눅스의 디렉토리 구조
상대경로와 절대경로
/
: 부터 시작되면, 최상위 경로부터 말하는 것으로 절대경로이다.
- 예 : /etx/systemconfig/network-system/~~~
- 상대경로는 현재 작업 위치 기준으로 시작하는 경로이다.
- .
: 현재경로
CLI명령어 구조
- #명령어 [옵션][인자]
- 예 : ls -l /etc
자주 쓰이는 디렉토리
- home : 사용자 홈 디렉토리가 생성되는 곳. (권한 제어 떄문에 아무데나 들어갈 수 없음)
- ~
: cd ~ 하면 여기로 돌아온다. (root사용자는 root로감)
- media : CD_ROM이나 USB같은 외부 장치를 연결하는 디렉토리
- mount 관련 디렉토리
- opt : 추가 패키지가 설치되는 디렉토리
- dev : 장치파일들이 저장되어 있는 디렉토리
- CD_ROM, DVD_ROM 같은 장치들을 서버에 붙일 떄, sr0(장치파일) 이런 것들이 있다.
- 장비에 연결할 떄, 연결하는 장치파일이 dev에 들어있다.
- root : root계정의 홈 디렉토리 (
/
디렉토리랑 다름, root유저가 cd ~
하면 여기로 온다.)
- sys : 리눅스 커널관련 정보가 있는 디렉토리
- usr : 기본 실행파일과 라이브러리 파일, 헤더 파일등의 파일이 저장되어 있는 디렉토리
- boot : 부팅에 필요한 정보를 가진 파일들이 있는 디렉토리
- var : 시스템 운영중에 발생한 데이터와 로그가 저장되는 디렉토리
- 홈페이지를 꾸밀 때 필요한, 정보가 /var/www/html/index.~~ 에 있다.
- tmp : 시스템 사용중에 발생한 임시데이터 저장 (부팅 시 초기화)
- srv : FTP나 Web등 시스템에서 제공하는 서비스의 데이터가 저장되는 디렉토리
- run : 실행중인 서비스와 관련된 파일이 저장되는 디렉토리
- proc : 프로세스 정보 등 커널 관련 정보가 저장되는 디렉토리
- mnt : 파일 시스템을 임시로 연결(Mount)하는 디렉토리
- etc : 리눅스 설정을 위한 각종 파일들을 가지고 있는 폴더
실습
복습
Image
- 이런 이미지 들은 도커에서도 사용할 것이다.
- 또, 도커에서는 더 작은 용량의 이미지를 사용하게 될 것이다. (용량이 작을수록 더 빠르다.)
Bridge
- HostOnly + NAT 조합을 한번에 쓸 수 있다.
- 그러나 IP를 받을 수 없는 상황이 생길 수 있다.
환경 다시 설치
PC 스팩 (Minimal)
- CPU : 2C
- RAM : 4Gb(4096Mb) - VGA (128Mb)
- SSD : 128Gb (동적할당, Thin Provisioning)
- IMG : ContOS7Mini*.iso
- 플로피 해제
- 비디오메모리 128Mb (최대)
- iso 마운트
- 오디오 체크 해제
- USB해제
- 네트워크 어댑터1 : NAT, 어댑터2 : Host Only
VM 설정
- 언어 English US, 날짜 및 시간 : Seoul, Partitioning:
/home
지우고 /
에 몰빵
- Swap : 속도향상, 기능향상을 위해 메모리자원을 효율적으로 사용하기위해 사용하는 공간
- 설정한 랜카드 2개를 on으로 하고 Done
- 그러나 랜카드 2개를 동시에 설정한것은 처음이다.
- 한번에 2개를 켜면 랜카드 하나가 꺼져있을 수 있다.
- 그래서 터미널에서 수동으로 켜야한다. 차후 강의예정
- Root Password를 만들어 준다.
- 이러한 보안 관련은 AWS AMI 에서 또 볼것이다.
- NAT랜카드는 켜졌지만, HostOnly가 안잡힘을 볼 수 있다.
- 이때, 랜카드를 키는 방법을 알아본다.
- cd /etc/sysconfig/network-scripts/
- vi 사용
- vi test.txt
- insert모드 들어가기 : i
(문자 입력 모드)
- ~~ 모드 탈출하기 : Ecs key
- 기본 상태에서 : :
누르면 명령어 입력모드
- 명령어 모드에서 w
: 저장한다.
- 명령어 모드에서 q
: 나간다.
- 명령어 모드에서 wq
: 저장하고 나가기
- 명령어 모드 + 명령어 + Enter : 실행
- cat test.txt 로 작성된 내용 확인해보다
- mode
를 잘 보고 있어야 실수를 막을 수 잇다.
- LAN카드 Power on
- vi ifcfg-enp0s8
- ONBOOT=yes 하고 :wq 고고
- if : interface
- LAN카드 설정 변경 후,
systemlctl restart network
를 해줘야한다.
- 제대로 나왔다. (근데 IP가 안잡힌다.)
VM백업
- 이름 : CentOS7XFCE
- MAC 주소정책 : 모든 네트워크 어댑터의 새 MAC주소 생성
- 완전한 복제
- 실행 후 ip a 로 ip가 제대로 나오는지 확인한다.
CentOS7XFCE
- VM 메뉴바에서 장치 -> 클립보드 공유, 드래그앤 드롭 모두 양방향
- 장치 -> 가상확장 CD이미지 삽입 누른다.
- 먼저 CentOS 경량 데스트톱(X-Windows)를 설치한다.
- 옵션 중
-y
는 묻지말고 설치하라는 옵션인데 yum 뒤면 아무데나 위치하여 띄어쓰기로 구분만 되면 된다.
- unzip wget : unzip이라는 도구와 wget이라는 도구를 설치했다.
- Linu에서는 크롬을 지원하지 않기 때문에, 크롬 설치는 Repository를 따로 만들어서 사용해야 한다.
- opt/google/~~ : 구글 추가 패키지가 저장된다.
한글 나눔글꼴 설치
# mkdir /usr/share/fonts/nanumfont && cd $_
# wget http://cdn.naver.com/naver/NanumFont/fontfiles/NanumFont_TTF_ALL.zip
# unzip NanumFont_TTF_ALL.zip
화면 크기 자동맞춤
# rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
# yum install -y perl gcc dkms kernel-devel kernel-headers make bzip2
# ls /dev/sr0
# mkdir /test
# mount /dev/sr0 /test (`umount /test` 해서 마운트 해제 가능)
# df -h
#cd /test
./VBoxLinuxAddtions.run
- 최상위 폴더
/
에 test하위폴더를 만들고, mount /dev/sr0 /test해서 test에 sr0를 마운트 한다. (읽기 전용으로 마운트 된다.)
- df -h 사용하고 있는 용량을 확인할 수 있음
- 만약
ls /dev/sr0
했을 때, 출력으로 /dev/sr0
이 나오지 않는다면,
- webshare를 PC로 킨다.
C:\ProgramFiles\Oracle\VirtualBox\VBoxGuestAdditions.iso
의 압축을 풀고, 그 안에 VBoxLinuxAddtions.run
을 webshare로 올려준다.
- 그후, VM으로 크롬 에서 들어가 다운받는다.
wget http://[HostIPAddress]/Files/VBoxLinuxAdditions.run
로 다운 받아준다.
- 다운받은 폴더를 찾고,
chmod 744
로 권한 변경해준다.
- 그리고
mv /test
로 옮겨준다.
- 다운받을때는 흰글씨지만 chmod로 실행가능하게 해주니 초록색이 되었다.
- /test로 옮겼으나, 읽기전용이라 옮겨지지는 않았다.
chmod
- r : 4, Read
- w : 2, Wright
- x : 1, eXcute
CLI 복습
- mkdir 여러파일 만들기
- touch 여러파일 만들기
- cat
CLI 제어문자
- Ctrl + u
- 지금 입력되고 있는 명령어 싹 지워지는거
- 근데 Ctrl + C면 된다....
- Ctrl + w면 한 단어씩 지워진다.
- Ctrl + S
- 출력이 너무 많을 때, 출력 일시정지
- Ctrl + Q
- 출력이 너무 많을 떄, 탈출 (쓸일 없을것이다.)
- Ctrl + c
- 정지와 복귀를 반복하다 빠져나온다.
- du -a : 출력이 많이 나오는데, 이걸로 위 제어문자를 테스트해보자.
매뉴얼 페이지
매뉴얼 페이지 보기
- 나올 때는 q를 누른다.
- man uname
- man ls
그 외 CLI명령어
ls
- ls -l (long, 세부정보 포함)
- ls -a
- 위 .파일명
으로 되어있는 파일들은 숨겨진 파일이라 그냥 ls로는 나오지 않는다.
- ls -al : (-a 속성과 -l 속성을 같이 출력)
- ls =l /dev
- dev폴더에 있는 파일들에 대한 ls -l를 읽어왔다.
- 위 sda파일은 리눅스의 루트 드라이브이다. (Windows로 치면 C드라이브)
- 이게 파일로 되어있는 리눅스의 특징을 볼 수 있다.
- ls -l dirA : dirA안의 폴더들의 정보를 보여준다.
- ls -ld dirA : dir의 정보를 보여준다.
- ls -r : 모든 파일들의 하위파일을 보여준다.
- ls -r dir : dir의 하위파일을 보여준다.
file
- file fileA : fileA 내용에 대한 정보를 보여준다.
- cat > fileA로 text를 넣어주니 empty에서 ASCII 파일로 바뀌었다.
- 아까 SDA파일은 block Special이라 나온다.
- ls -a 을 실행했을 떄,
.
과 ..
이 나오는데,
- .
는 현재 폴더를 의미한다. 따라서 cd .
하면 변화가 없다.
- ..
는 상위 폴더를 의미한다. 따라서 cd ..
하면 상위 폴더로 올라간다.
- 위 3가지 방법으로 /home으로 갈 수 있다. (root사용자 기준 /root)
파일 작업
more
- cat /etc/ssh/sshd_config : 명령어 입력하면 위처럼 매우 길게 나와 읽기 힘들다
- more /etc/ssh/sshd_config : more를 사용하면, 스페이스바를 누르며 조금씩 읽으며, 아래로 내려갈 수 있다.
echo
\
기호는 엔터(줄바꿈)을 의미한다.
- echo는 number라는 파일을 만들면서,
""
사이의 내용을 넣으면서 출력했다.
cat, head, tail
- cat numbers : 1~15까지 출력 되었다.
- head numbers : 1~10까지만 출력 되었다. (앞 10줄만 출력해준다.)
- head -13 numbers : 1~13까지 정한 만큼만 출력할 수도 있다.
- tail -5 numbers : head와 비슷한 맥락으로 뒤에서 정해진 줄 만큼만 보여준다. (아래것이 가장 최근 것이라면, 최근 자료만 볼 수 있다.)
wc
- wc는 파일의 데이터 정보를 알려준다.
- wc -l : 데이터 line수
- wc -m : 데이터의 char수
- wc -c : 데이터 bytes
- wc -w : 데이터 word수
복사
파일 복사
- cp A B : A를 B이름으로 복사한다.
- cp A dirA : A를 dirA에 복사해서 넣어준다.
디렉토리 복사
- cp dirA dirAA : dirA에 내용물이 있다면 그냥 복사할 수는 없다.
- cp -r dirA dirAA : -r (Recursive)옵션을 주어 내용물까지 복사한다.
이동
파일 이동
- mv fileD dirC : 현재 위치에서 존재하는 fileD를 dirC로 이동시켰다.
디렉토리 이동
- mv dirCC dirC : dirCC를 dirC로 옮긴다. (삭제가 아니기 떄문에 옵션이 필요 없다.)
생성
빈 파일 생성
디렉토리 생성
- mkdir dirX : dirX라는 디렉토리를 만든다
- mkdir dirY/dirZ : dirY가 없으니, 에러가 난다. (dirY로 dirZ를 만든다.)
- mkdir -p dirY/dirZ : -p옵션을 줘서, dirY도 만들고 dirZ도 만든다.