바로 건너뛰는 방법부터 소개하겠다.

1. 하단에 그라데이션으로 희미하게 보라색이 감도는 화면에 진입하면 Ctrl+C

2. 언어 선택 후 Enter

3. 큰 글씨로 ubuntu가 나오고 Install Ubuntu Server 글씨가 보이면 F6를 누르고, esc를 누른다.

4. 하단에 뜬 옵션에서 quiet 를 fsck.mode=skip 으로 고치고 Enter를 누른다.

5. 스킵 세팅 완료

 


여담

Ubuntu 20.04 버전을 최초 설치할 시 실행하는 파일시스템 무결성 검사인 듯 하다. 문제는 그 시간이 IPMI를 통한 서버 세팅 기준 약 3~40분이라는 건데, 사실 준비한 iso 이미지가 클린 이미지라는 확신만 있으면 건너뛰어도 괜찮지 않나 라는 생각으로 구글링을 좀 해 봤다. 그런데 "Checking integrity, this may take some time" 문구 그대로 검색하면 각종 해외 커뮤니티에서 디스커션은 많은데 다들 s키를 누르라는 얘기만 하길래(아무 일도 일어나지 않았음) 한글로 검색을 해 봤더니 의외로 솔루션이 나와버렸다.

 

리다이렉션 한 번 더 들어가면 번거로우니 포스팅에 글로만 정리를 해 봤고, 원본글에는 상세한 스크린샷까지 포함되어 있으니 아래 링크를 참고하기 바란다.

 

https://intrepidgeeks.com/tutorial/do-you-want-to-disable-integrity-checking-for-ubuntu-server-20041-iso


파일의 종류

- : 일반 파일

d : 디렉토리 파일

b(block device) : 플로피 디스크, 하드 디스크 등의 장치 파일

c(character device) : 마우스, 프린터 등 입출력 장치 파일

l(link) : 바로가기 파일


몇 가지 파일 명령어

mkdir

디렉토리 생성 명령어

-p(parent) 옵션 : 생성하려는 경로의 상위 디렉토리가 없으면 한꺼번에 전부 만든다.


cd [argument]

절대경로 : 어디서나 접근할 수 있다 : cd /

상대경로 : 현재 위치 기준으로 접근한다 : cd ../../../..

상황에 알맞게 사용해야 한다.


rmdir [option] [argument]

반드시 해당 디렉토리가 비어 있어야만 지울 수 있다.

-p 옵션 : rmdir aaa/bbb/ccc 다 지운다.


rm [option] [argument]

이 명령어로 파일 및 디렉토리를 삭제하는 경우가 더 많다.

삭제를 진행할 경우 복구하기 어렵다.

-i(interactive) 옵션 : 삭제 전 한 번 더 확인한다.

-f(force) 옵션 : 강제로 삭제한다.

-r 옵션(recursive) : 디렉토리 내의 파일까지 모두 삭제하기 위해서 사용하는 중요한 옵션

(디렉토리 내부를 순회하면서 하나씩 삭제하는 원리)


cp [option] [argument1] [argument2]

원본과 복사할 파일(타겟)을 모두 지정해주어야 한다.

-r 옵션(recursive) : 디렉토리 내의 파일까지 모두 복사하기 위해서 사용하는 중요한 옵션

(디렉토리 내부를 순회하면서 하나씩 복사하는 원리)


mv [option] [argument1] [argument2]

이동과 이름변경 두 가지 기능이 있기에 사용하기 전에 잘 생각해야 한다.

mv date.txt now.txt : 두 아규먼트의 레벨이 같으므로(둘 다 파일) 이름 변경이 이루어진다.

mv Temp Temp1 : 디렉토리의 이름 변경.

mv now.txt Temp1 : argument1은 파일, argument2는 디렉토리이므로 이동.


chmod [option] [argument]

보안의 기초로,

r(read), w(write)(삭제 권한 포함), x(execute) 3가지의 속성으로 권한을 제한한다.

그룹별로 지정하기에 용이함.

 

파일 상세정보에서

-rwxrwxrwx

이런 식의 포맷을 확인할 수 있으며 앞의 문자 하나는 파일의 종류를 나타내고, 이후로 3글자씩 끊어서 읽는다.

첫 번째는 파일의 소유주, 두 번째는 소유주 그룹, 세 번째는 일반인이다.

 

2진수를 10진수로 치환해서

rw- r-- r-x

110 100 101

6    4    5

이렇게 표기할 수도 있다.

chmod 744 sample.txt : 소유주는 rwx 모두, 소유주 그룹은 r--, 나머지는 r-- 이다.

 

u(user), g(group), o(other), a(all) 4가지 속성으로 r, w, x 권한을 빼거나 추가할 수 있다.

chmod o+x sample.txt : 일반 사용자에게 실행 권한을 추가한다.


ln [option] [argument1] [argument2]

링크의 종류에는 hard link와 symbolic link가 있다.

 

hard link는 i-node(주민번호)까지 똑같이 복제한 파일이다.

또한 원본이 수정되면 같이 수정된다.

원본이 삭제되어도 그대로 사용 가능하다.

ln data.txt clone.txt

 

symbolic link는 원본 파일로 연결되는 바로가기 파일이다.

파일명만 같으면 기존 파일이 삭제되고 다른 파일이 생겨도 그 곳을 가리킨다.

원본이 삭제되면 사용할 수 없게 된다.

ln data.txt -s twin.txt


wc [option] [argument]

Word Counter.

 

-l 옵션 : 라인 수

-w 옵션 : 단어 수

-c 옵션 : 바이트 수

-m 옵션 : 문자 수


sort [option] [argument]

파일의 내용을 소팅해서 보여준다.


cmp [option] [argument1] [argument2]

두 파일의 차이점을 보여준다.

업그레이드 버전이 diff 명령어.

 


vsftpd(Very Secure FTPD) 서버와 FileZilla 클라이언트 설치

포트 포워딩 룰 추가.

이름바꿔 복제.

$ sudo nano /etc/netplan/00-installer-config.yaml

114로 수정한다.

try, apply 절대 하지 말고 IP 변경하면 바로 리부트.

PuTTY에서 설정 후 세이브.

접속이 잘 되고 IP가 바뀌었다.

윈도우즈 커맨드에서 Host-Only IP로 핑 날리기.

FTP 서버 설치 준비가 끝났다.

$ sudo apt update

$ sudo apt install -y vsftpd

다음 설정 파일을 나노 에디터로 열어 수정해 줄 것이다.

25라인: anonymous_enable=NO -> YES

31라인: #write_enable=YES -> 주석 제거

40라인: #anon_upload_enable=YES -> 주석 제거

44라인: #anon_mkdir_write_enable=YES -> 주석 제거

$ sudo systemctl restart vsftpd

$ sudo systemctl enable vsftpd

$ sudo systemctl status vsftpd

$ cd /srv/ftp

$ sudo mkdir pub

$ sudo chmod go+w pub

 

익명으로 접속되는 디렉터리는 /srv/ftp 이다.

pub 디렉토리를 생성하고 모든 사용자의 모든 권한을 허용했다.

$ touch today.txt

write 권한이 others에게도 생겼기 때문에 sudo 없이도 가능하다.

FTP 서버의 전용 회선인 21번 포트를 연다(하지만 이후 연결이 되지 않아 아예 방화벽을 비활성화했다).

FileZilla Client를 설치한다.

맨 왼쪽의 것을 다운로드한다.

설치 후 셋업 파일을 실행하고 Next로 쭉 진행한다.

Desktop Icon은 유용하기에 추가로 체크해줬다.

호스트 IP와 사용자명을 입력, 비밀번호는 아무거나 입력하고 빠른 연결을 클릭한다.

포트 넘버는 생략해도 디폴트가 21이기에 넣지 않아도 상관없다.

아까 잠깐 언급했듯이 연결이 잘 되지 않아 방화벽 자체를 disable 시켜버리니 연결이 되었다.

파일을 업로드 할 때는 왼쪽에서 오른쪽으로 드래그해서 올리면 된다.

 

FTP 환경 구축 완료.


MySQL 환경 구축

포트 포워딩 룰 추가 및 가상머신 복제.

IP 수정 후 try, apply 하지 말고 $ sudo init 6

PuTTY 설정

변경된 IP 확인 및 HostOS에서 핑 날려보기.

설치 준비 완료.

$ sudo apt update

$ sudo apt install -y mysql-server

$ sudo mysql_secure_installation

 

비밀번호 확인 플러그인 허용 : y

비밀번호 안전도 : 0

[8자리 패스워드 입력]

[패스워드 재입력]

루트 비밀번호 변경 : n

익명 사용자 삭제 : n

원격 연결 제한 : n

테스트 DB 삭제 : n

권한 테이블 새로고침 : y

$ sudo mysql -u root -p

[비밀번호 입력]

SELECT VERSION();으로 버전 확인 후 exit.

$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

bind-address = 127.0.0.1로 된 것을 주석친다.

(로컬호스트에서만 접속 가능하게 하는 옵션이기 때문에 원격지에서 접속하기 위해서)

CREATE USER 'root'@'%' IDENTIFIED BY 'P@$$W0rd';

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

 

root 계정을 새로 만들어야 원격지 접속이 가능하다고 해서 새로 만들고 권한을 준다.

$ sudo systemctl restart mysql

$ sudo ufw allow 3306/tcp

이제부터 DB 서버에 연결할 클라이언트를 준비할 것이다.

HeidiSQL 사이트에 접속해서 클라이언트 툴은 다운로드한다.

동의 사항 동의해주고 기타 등등 Next.

설치 후 restart는 하지 않았다.

좌측 하단 '신규' 클릭 후 오른쪽 화면처럼 설정을 한다.

암호는 PuTTY에서 설정했던 'P@$$W0rd' 로 하면 된다.

HeidiSQL로 MySQL Database 접속에 성공한 모습.


Virtualization(가상화)

물리적인 하드웨어 장치를 논리적인 소프트웨어 장치로 추상화하는 것.

 

가상화 방법

1. Host 가상화

2. HyperVisor 가상화 : VirtualBox, VMWare, VirtualPC

3. Container 가상화

 


오늘을 끝으로 우분투 리눅스 기초를 공부했고

내일부터 네트워크와 보안 솔루션에 대해 공부한다.

물론 리눅스는 계속 사용하며 공부한다.


SSH 연결 안 될 때 확인 사항

1. $ sudo ufw status

2. $ sudo systemctl status ssh

3. Hyper V 실행 여부


Ubuntu Server에 Host-Only 이더넷 설정

Ubuntu Desktop에 Host-Only 설정할 때와 같이

두 번째 이더넷 어댑터를 켜주고 호스트 전용 어댑터로 설정한다.

 

$ cd /etc/netplan 으로 들어와서

$ sudo cp 00-installer-config.yaml 00-installer-config.yaml.bak

으로 백업본 만들기(기존 백업본이 있다면 제거 후).

$ sudo nano 00-installer-config.yaml

nano 에디터를 통해 이더넷 설정 내용 추가

(Host-Only라서 DNS는 필요치 않음.)

cat으로 확인 후

$ sudo netplan try

$ sudo netplan apply

$ sudo systemctl stop network-manager

$ sudo systemctl start network-manager

$ sudo systemctl stop network-manager

$ sudo systemctl start network-manager

ip a를 쳐보면 정상적으로 고정 ip가 설정되었음을 확인 가능하다.

Windows 커맨드에서 핑을 쏘아보았다.


&&, || 함께 쓰기

시험 삼아 해 봤는데 if~else문처럼

명령어 && echo "Success" || echo "Failed"

이런 식의 사용이 가능하다.


$PS1

현재 프롬프트 표시

 

\u@\h:\w\$

username@hostname:working directory$

yoonho\@ubuntu-server:~$

 

원하는 대로 프롬프트를 설정할 수 있다.

PS1='\d \t > '

이런 식으로 하면 이후엔 프롬프트가

Tue Aug 24 11:24:12 >

이렇게 나온다.

 

Secondary Prompt

\(역슬래시)를 긋고 이어서 명령어를 입력할 때 나오는 프롬프트이다.

 

PS2='\h, \t > '

이렇게 하면

ubuntu-server, 11:26:39 >

이런 식으로 프롬프트가 나오게 된다.

 

* 앞에 export를 붙이면 .profile 파일에 저장이 된다.

환경설정 파일에 저장하지 않으면 로그아웃 시 초기화 된다.

 

.profile = 현재 사용자 전용 프로필

/etc/profile = 모든 사용자에게 적용

 


Apache Web Server 구축

기존의 우분투 서버를 이름만 바꿔 복제한다.

PuTTY에서 임시적으로 127.0.0.1:50107 로 타고 들어와서 두 이더넷 어댑터의 IP의 4번째 옥텟들을 변경한다.

변경 후에 try, apply 등 하지 않고 reboot한다.

VirtualBox 관리자 환경설정에서 포트 포워딩 설정에 들어온다.

apache-web-server에 대한 포트 포워딩 룰을 만든다.

108에 맞추어 PuTTY에서 Apache Web Server 프리셋을 하나 더 만들고 접속한다.

ip를 확인해보면 아까 reboot할 때 자동으로 적용이 되어 108이 된 모습이다.

윈도우즈의 커맨드에선 10.0.2.108로 핑을 때릴 수가 없기 때문에

Host-Only 네트워크인 192.168.56.108로 핑을 때려본다.

화면에 안 나왔지만 $ sudo apt update 먼저 하고 $ sudo apt install apache2 를 한다.

웹 서버 접속을 위해 80번 포트를 열어준다.

방화벽까지 열어주고 나면 웹 브라우저에서 IP 입력 시 기본 html 페이지로 접속이 된다.

여기서 프로토콜인 http:// 와 포트번호인 :80은 생략이 되어서 IP만 입력한다.

 

이 페이지는 apache에서 제공하는 기본 페이지이고,

이 화면은 /var/www/html 경로의 index.html 파일이므로 수정도 가능하다.

$ cd /etc/apache2

$ sudo nano -c apache2.conf

화면엔 -c 옵션이 안 나와있는데 이걸 해야 라인 수를 파악하기 편하기 때문에 해야 한다.

170라인의 <Directory /var/www/> 를 주석치고

그 밑에 <Directory /WebHome> 을 작성한다.

원래 /var/www/ 였던 html 디렉토리의 경로를 /WebHome으로 바꾸는 작업이다.

(현업에선 이렇게 한다고 한다.)

저장과 나가기를 한 후에

$ cd sites-available

$ sudo nano -c 000-default.conf

9번째 라인의 주석을 풀고 서버네임을 www.naver.com으로 바꾼다.

서버 어드민도 naver.com으로 바꾸고

DocumentRoot /var/www/html을 주석치고 DocumentRoot /WebHome으로 바꿔 경로를 읽도록 한다.

$ sudo systemctl restart apache2

$ sudo systemctl enable apache2

$ sudo systemctl status apache2

이제 아까 경로에 박아놨던 WebHome 디렉토리를 실제로 만든다.

디렉토리를 만들고 원래 위치에 있던 html파일을 복사해 넣는다.

 

Apache Web Server 설정 끝.


Local DNS

C:\Windows\System32\drivers\etc 경로의 hosts 파일을 연다.

이 파일이 도메인 네임 입력 시 최우선으로 확인하는 곳인데

이 곳에서 해당 도메인에 대한 IP를 발견하지 못하면 한국 DNS로 넘어가서 IP를 받아오는 것이고

이 파일에서 192.168.56.108 www.naver.com

이런 식으로 설정을 해주면 웹 브라우저에서 www.naver.com 입력 시 내 서버로 접속이 된다.

 

주의할 점은 .txt 파일이 되어버리면 안되며, 윈도우즈에서 기본적으로 수정을 할 수 없도록 락을 걸어놨기 때문에

파일을 수정해서 외부에 다른 이름으로 저장을 하고, 그 파일의 확장자명을 강제적으로 없앤 뒤

원래의 C:\Windows\System32\drivers\etc 경로에 덮어써버리면 된다.


Nginx Web Server 구축

설정 과정은 Apache Web Server랑 거의 같다고 보면 되기 때문에

대충 생략하며 일부 과정만 스크린샷으로 남길 것이다.

 

Apache와 Nginx의 가장 큰 차이점은

Apache는 서버에 리퀘스트가 들어오기만을 기다리면서 다른 일을 하지 못하지만

Nginx는 다른 작업을 수행하면서 서버에 리퀘스트가 감지되면 그때그때 리퀘스트도 처리한다는 점이다.

 

Apache는 편의점 문이 조용히 열리는 문이어서 알바생이 24시간 내내 손님이 오나 문만 보고 있어야 하는 것이고

Nginx는 편의점 문에 종이 달려 있어서 청소 등 다른 일을 하다가도 손님이 오면 그에 맞춰 응대를 할 수 있는 것이다.

PuTTY로 접속해서 IP 변경.

마찬가지로 try, apply 등 하지 않고 reboot.

포트 포워딩 룰 추가.

윈도우즈에서 112번으로 핑 날려보기.

PuTTY로 로그인한다.

업데이트 후 Nginx 설치를 진행한다.

$ sudo systemctl restart nginx

$ sudo systemctl enable nginx

$ sudo systemctl status nginx

 

enable 시에 서비스이름.service 파일이 생성된다.

Web Server 전용의 80번 포트 열기.

192.168.56.112에 성공적으로 접속됨.

nginx의 index 페이지 파일 또한 /var/www/html에 있으니 임의로 수정할 수 있다.

$ sudo nano /etc/nginx/sites-available/default

파일에 들어가서 설정을 해주어야 한다.

위는 IPv4, 아래는 IPv6인데 둘 다 포트 넘버를 80 -> 8080으로 변경한다.

Apache Web Server가 이미 80번 포트를 쓰고 있어서 겹치면 안 되기 때문.

아래 쪽으로 내려서 root /var/www/html; 를 주석치고

root /WebHome; 을 넣는다.

 

서버네임도 www.kakao.com; 으로 바꾼다.

설정한 8080포트를 방화벽에서 열어준다.

아까의 hosts 파일에서 또 한 번 Local DNS를 사용해본다.

www.kakao.com:8080 으로 접속이 되는 모습.

 

 


요약

1. 가상머신을 복제한다.

2. IP를 변경한다(reboot).

3. 포트 포워딩 룰을 추가한다.

4. PuTTY에서 프리셋을 만든다.

5. 아파치 혹은 엔진엑스를 설치한다.

6. 포트 방화벽을 열어준다(80 or 8080).

7. /var/www/html 경로의 index.html 파일을 수정해본다(필수 아님).

8. /etc 쪽 경로에서 각종 파일을 설정한다.

9. restart, enable, status 삼총사를 실행한다.

10. WebHome 디렉토리 생성 후 index.html을 복사해 넣는다.


XRDP 서버 열기

$ sudo apt -y install xrdp

XRDP 서버 패키지를 설치한다.

$ sudo ufw allow 3389/tcp

XRDP서버의 전용 포트인 3389/tcp 포트를 열어준다.

윈도우즈에 기본적으로 탑재된 원격 데스크톱 연결 프로그램을 열고 '옵션' 클릭.

리눅스 서버의 Host-Only IP와 사용자 이름을 입력한다.

이게 XRDP의 클라이언트 프로그램이다.

처음엔 접속을 하려고 하면 블랙 스크린이 뜰 것이다.

약간의 설정 파일 수정이 필요하다.

$ sudo nano -c /etc/xrdp/startwm.sh

-c 옵션은 에디터 내 라인 수 표시이다.

위와 같이 33번줄부터 정확히 입력하고 덮어쓰기-종료 를 한다.

cat으로 확인하고 stop & start 반복

다시 접속해보면 성공적으로 XRDP 서버에 연결된다.


Shutdown 관련 명령

$ sudo poweroff : 서버 전원을 물리적으로 끄는 것과 같다

$ sudo shutdown -r now : 즉시 리부트 실행

$ sudo shutdown -P +10 : 10분 후 종료

$ sudo shutdown -r 22:00 : 오후 10시에 재부팅

$ sudo shutdown -c : 예약된 shutdown 취소

$ sudo init 0 : 시스템 종료

$ sudo init 6 : 시스템 재부팅

 

init의 런레벨

0 : Power Off - 종료 모드

1 : Rescue - 시스템 복구 모드

2 : Multi-User - 사용하지 않음

3 : Multi-User - 텍스트 모드의 다중 사용자 모드

4 : Multi-User : 사용하지 않음

5 : Graphical - 그래픽 모드의 다중 사용자 모드

6 : Reboot

 

default.target으로 현재 런레벨을 확인할 수 있다.


WSL2(Windows Subsystem for Linux) 설치

Windows 검색 -> PowerShell -> 관리자 권한으로 실행

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

복사해서 넣기

winver 명령어로 빌드가 18362 이상인지 확인하고 진행한다.

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

입력 후 엔터.

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

위 파일을 다운로드하고 설치 및 실행한다. 오류가 뜨면 재부팅하고 다시하면 된다.

wsl --set-default-version 2

입력 후 엔터.

https://aka.ms/wslstore

Microsoft Store 앱을 열고 Linux 검색 후 Ubuntu 20.04 LTS를 다운로드한다.

유저네임, 비밀번호, 비밀번호 확인을 입력해준다.

wsl --set-default Ubuntu-20.04

wsl -l -v

를 쳐서 디폴트 설정을 해주고 왼쪽에 애스터리스크가 정상적으로 표시되는지 확인한다.

 

이후 설치한 Ubuntu 20.04 LTS 어플리케이션을 열거나 PowerShell에서 wsl 명령어 입력,

또는 SSH를 통해 접속하는 방법이 있다(SSH 접속은 추후에 할 것 같다.).

 

 

 

 


Shell 환경변수

export YOIL=monday

echo $YOIL

unset $YOIL

echo $YOIL

 

모든 쉘 스크립트 파일은 알아볼 수 있도록 확장자명을 .sh로 하고

주석으로 #!/bin/bash를 시작할 때 넣는다.

nano 에디터를 사용해 이런 식의 쉘 스크립트를 코딩할 수 있다.

실행 결과.


Linux Commands

$PATH : 모든 명령어들의 경로의 집합

which : 해당 명령어의 경로를 출력

find : 파일의 위치를 알려준다.

-exec rm { } \; 을 뒤에 추가해서 찾은 파일들에 대한 추가 명령을 할 수 있다.

whereis : 해당 명령어의 경로와 소스 등 상세 정보까지 출력

locate : DB에서 찾기 때문에 가장 상세하지만 updatedb 명령을 해야 한다.

--help 속성 : 해당 명령어의 사용법을 알려준다.

man : 해당 명령어의 매뉴얼을 보여준다.

whoami : 현재 로그인한 사용자명 출력

cat /etc/os-release : OS에 대한 자세한 정보 출력

file : 해당 파일의 타입과 기타 정보 출력

 

rwxrwxrwx

ls -l 명령 시 대상이 파일이면 앞에 -을 붙이고 출력되는 옵션.

Read, Write, eXecute 를 뜻하고, 앞에서부터 3개씩 끊어서

파일 제작자, 제작자가 속한 그룹, 그 외 사용자의 권한을 정의한다.

 

만약 대상이 디렉토리라면 앞에 d를 붙이고 나온다.

 


내가 이미 알고 있거나 간단해서 굳이 정리할 필요 없는 부분은 생략하며 정리하고 있다.


NAT Network 설정과 포트 포워딩

어댑터 1을 NAT 네트워크로 설정해주고 자동으로 잡히는 MyNatNetwork를 확인한다.

지난 시간에 준비한 포트 포워딩 세팅에서 외우기 편하도록 게스트 IP의 4번째 Octet을 105로 수정해주었다.

PuTTY에서 포트 포워딩에서 설정했던 호스트 IP와 호스트 포트를 입력하고 저장한다.

apt 명령어를 통해 network-manager를 설치한다.

설치가 되었다면 /etc/netplan 으로 이동해 파일이 있음을 확인한다.

예상치못한 변수에 대비해 복사본을 생성해 백업을 해둔다.

$ sudo nano 01-network-manager-all.yaml

'나노'라는 TUI 에디터로 파일을 열고 위와 같이 수정한다.

 

줄바꿈을 할 때 Tab키가 아닌 반드시 Space 두 번으로 들여써야 한다.

 

작업이 끝나면 Ctrl+O를 입력해 파일명은 그대로 덮어쓰기 한다.

Ctrl+X를 입력해 에디터를 종료한다.

cat 명령어로 확인.

$ sudo netplan try

Enter를 눌러 세팅을 유지한다.

적용을 위한 apply를 하고 stop과 start를 수 차례 반복해준다.

네트워크 연결 여부를 확인할 때는 $ sudo apt update

성공적으로 업데이트가 된다. NAT Network의 1번 어댑터로 인터넷에 접근이 되었다.


호스트로부터 포트 포워딩을 통해 고정 IP 서버에 접근하기

Before

GuestOS와 HostOS 사이에 Host-Only로만 통신이 된다.

서버는 고정 IP로 설정해야 한다.

하지만 GuestOS가 고정 IP면 연결이 되지 않는다.

 

After

포트 포워딩을 해서 고정 IP의 GuestOS와 HostOS를 통신하게 한다.

그럼 Host-Only는 필요없는가? 필요하다. 왜?

GusetOS에 Apache 서버를 설치하게 되면

1) 10.0.2.105는 접근 안 됨

2) 127.0.0.1은 localhost로 인식해서 안 됨

유일한 방법은 192.168.56.5 (Host-Only)로 연결하는 것

 

결론: NAT Network와 Host-Only 두 가지를 같이 써야 한다.

 

위에 언급된 "HostOS는 GuestOS가 고정 IP면 연결할 수 없다"를 해결한다.

PuTTY에서 IP 127.0.0.1, 105번 포트로 진입했다.

포트 포워딩에 의해 호스트 IP와 호스트 포트가 게스트 IP와 게스트 포트로 변경되기 때문에

실질적으로는 GuestOS의 1번 어댑터(NAT Network)의 고정 IP인 10.0.2.105, 22번 포트로 연결된다.


GuestOS 간의 통신

1. VirtualBox 관리자에서 Ubuntu Desktop을 복제한다.

2. 복제본을 삭제하되 완전 삭제가 아닌 목록에서 보이지 않게만 삭제한다.

C:\My Virtual Machines 경로에서 'Ubuntu Desktop 복제'라고 되어있는 폴더를 확인하고 폴더명을 고친다.

이후 해당 폴더 안에 있는 두 개의 아이콘의 이름을 복제 -> 1로 수정해주고,

파란색 아이콘의 Ubuntu Desktop1.vbox 파일을 텍스트 편집기에서 연다.

 

9번째 줄의 Machine 태그의 name 속성에서 또한 복제 -> 1로 고치고,

12번째 줄의 HardDisk 태그의 location 또한 해당 부분만 수정하고 파일을 저장한다.

다시 VirtualBox 관리자로 돌아와서 [도구 -> 추가] 로 수정한 .vbox 파일을 연다.

두 개의 가상머신을 모두 실행하고, Ubuntu Desktop1 쪽의 고정 IP의 마지막 Octet을 106으로 수정한다.

TUI의 방법으로는 Terminal에서

 

$ cd /etc/netplan

$ sudo nano 01-network-manager-all.yaml

 

로 접근해 파일을 수정하는 방법도 있다.

참고용 nano 실행 화면. 위의 GUI 혹은 nano 둘 중 하나의 방법으로 IP를 바꾸면 된다.

수정 후 cat 명령어로 확인.

Enter 입력 후 apply, stop, start 연속적으로 진행한다.

수정 완료된 ip 확인

105와 106에서 서로에게 핑 때려보기(GuestOS 간의 통신)

HostOS에서의 접근을 위해 Ubuntu Desktop1을 위한 포트 포워딩 설정을 추가해준다.

PuTTY에서 설정하는 스크린샷이 누락되었으나

IP 자리에 localhost인 127.0.0.1을 넣고 포트 넘버에 SSH의 포트인 22를 입력하면 된다.

GuestOS인 Ubuntu Desktop1에 성공적으로 접속한 모습.

구분하기 편하도록 테마를 또 다르게 설정했다.

ip a 명령의 결과. enp0s3의 IP 부분에 10.0.2.106이 출력된다.


Ubuntu Server 설치

VirtualBox 관리자에서 새로 만들기 클릭.

위와 같이 입력.

기타 항목들은 다음을 클릭하고, 메모리는 2GB, 하드디스크 용량은 50GB로 설정해 주었다.

생성 완료된 가상머신에서 고유 설정에 들어간다.

시스템 메뉴 마더보드 탭에서 '플로피' 해제

프로세서 탭에서 마치 CPU가 2개인 것처럼 듀얼코어로 설정한다.

저장소 메뉴 -> '비어 있음' 클릭 -> 광학 드라이브 옆의 파란 CD 아이콘 클릭 -> 디스크 파일 선택

다운로드했던 live server의 iso파일 열기.

마지막으로 네트워크 설정 확인이다.

처음엔 설치를 해야하기 때문에 HostOS를 통해 인터넷에 연결하는 방식인 NAT로 진행한다.

설정을 마치고 '시작' 버튼을 클릭하면 나오는 최초 화면이다.

서버에서 한글을 쓸 일이 없기 때문에 English로 진행.

Done * 3

캐시 업데이트를 위한 미러사이트. 그대로 Done.


이제부터 총 50GB의 하드 디스크를 Desktop 설치 때와 같이 swap, boot, root 3개의 파티션으로 분할할 것이다.

 

Tab키를 눌러 Custom storage layout에 커서를 올리고 Enter 또는 Space를 눌러 체크한다.

Tab으로 Done에 맞추고 진행.

 

Enter -> Add GPT Partition

4096M 또는 4G 입력, Format은 swap.

4096M

ext4

/boot

Size는 나머지 공간을 전부 잡기 위해 Tab.

ext4

/

방금 만든 3개의 파티션과 bios_grub으로 하드 디스크가 구성되어 있는 모습.

Done -> Continue

사용자 이름, 서버 이름, 아이디, 패스워드 입력

OpenSSH server는 추후에 별도로 설치할 것이기 때문에 체크하지 않고 진행.

부가적으로 설치할 수 있는 것들. 체크하지 않고 진행.

설치 후 업데이트 중... 아직 건드리지 않는다.

Reboot Now가 뜨면 진행한다.

Enter 키를 눌러 가상의 CD ROM을 언마운트한다.

프로세스가 끝나면 로그인한다.

이쁘다.


Install OpenSSH Server on Ubuntu Server

$ sudo apt install openssh-server

Ubuntu Desktop에서 했던 것과 같이 기타 등등 설치 및 설정 수행.

화면은 nano를 통해 IP를 수정한 후 cat 명령어로 변경되었음을 확인하고 있다.

 

이후

$ sudo netplan try -> Enter

$ sudo netplan apply

$ sudo systemctl stop network-manager

$ sudo systemctl start network-manager

$ sudo systemctl stop network-manager

$ sudo systemctl start network-manager

$ ip a 로 IP가 변경되었음을 확인.

 

$ sudo systemctl restart ssh

$ sudo systemctl enable ssh

$ sudo systemctl status ssh

서버 준비 삼총사 실행

 

NAT Network 방식을 통해 인터넷에 연결되었음을 확인하기 위해 캐시 업데이트를 실행한다.

$ sudo apt update

PuTTY를 실행해서 IP와 포트 번호를 입력 및 기타 설정 후 Open.

사정 상 105, 106... 등을 50105, 50106... 등으로 고치게 되었다. 포트 포워딩에서도 설정함.

마지막으로 로그인하고 $ sudo apt update 명령어로 인터넷 연결을 확인한다.


Shell

Shell이란 일종의 명령어 해석기로,

사용자로부터 명령어를 입력받고 번역하여 Kernel에게 전달하거나

Kernel이 사용자에게 알려야 할 정보를 번역하여 사용자에게 전달하는 역할을 한다.

 

사용자와 OS(Kernel) 사이에 위치하는 인터페이스.

 

지구에 다양한 언어가 있듯이 Shell에도 여러가지 종류가 있다.

Shell을 바꿔가며 사용할 순 있지만 동시에 여러 개를 쓸 수는 없다.

ex) Bourne Again SHell(BASH), Korn Shell, Z Shell, C Shell

 

* 주로 BASH가 많이 쓰인다.

* 대표적인 Shell 어플리케이션은 터미널.

BASH의 2가지 출력 방식

1. printf (PRINT Format)
  ex) $ printf "My name is %s" Yoonho

2. echo
  ex) $ echo "Hello World!" : 문자열이 그대로 화면에 출력된다.

BASH의 환경 변수

$USER : 현재 로그인한 유저의 유저네임
$HOME : home의 경로. ~와 같음
$OLDPWD : 바로 전의 위치. -와 같음

 

Shell 명령어의 문법

$ command options [argument1, [argument2...

 

$ ls -a /etc/netplan

command = ls

option = -a

argument = /etc/netplan

 

* command는 동사, argument는 목적어, option은 부사와 비슷한 것 같다.

 

BASH Metacharacters

Metacharacters란 원래 뜻이 아닌 BASH에서 쓰는 고유의 의미를 갖고 있는 기호들을 말한다.

 

*(asterisk) = 여러 글자 대용의 조커 카드

e*.txt : e로 시작하는 txt파일

 

? = 한 글자 대용의 조커 카드

e?.txt : e로 시작하고 파일명이 총 2글자인 txt파일

 

[ ] = 대괄호 안에 든 것들 중 하나

e[abc].txt : ea.txt || eb.txt || ec.txt

doc[1-3].txt : doc1.txt || doc2.txt || doc3.txt

[a-zA-Z].txt : 모든 영문자 중 한 글자로 된 파일

 

{ } = 중괄호 안에 든 것 모두

touch {mon,tues,wednes}day

: monday tuesday wednesday 생성됨

 

~(tilde) = home의 위치

cd ~ : /home/yoonho 로 이동

 

-(hyphen) = 바로 전에 있던 위치

 

;(semicolon) = 명령어들을 묶어서 한 번에 할 수 있게 함(개수 제한 없음)

pwd ; ls ; date

 

|(pipe) = 명령의 결과가 너무 많을 때 오른쪽으로 보낸다

ls -al | more : 페이지 단위로 표시 후 더보기 제공

 

' ' = 문자열을 문자열 그 자체로 본다

echo '~' : ~가 프린트 됨

echo ~ : /home/yoonho가 프린트 됨

 

" " = $, `, \를 해석함

echo "$PATH" : 문자열이 아닌 패스값이 출력됨

 

` `(backtick) = 쌍따옴표 안에 있는 명령어를 해석한다(Unquoting).

echo "Now is `date`."

 

\ = 뒤에 나오는 Metacharacter를 무력화한다(Escape).

echo \~ : ~가 출력됨

 

&&(Double Ampersand) = 왼쪽이 성공하면 오른쪽을 실행해라

$ mkdir Test && echo "Success"

만드는 데에 성공해서 Success 출력

 

||(Double Pipe) = 왼쪽이 실패하면 오른쪽을 실행해라

$ mkdir Test || echo "Failure"

Test 디렉터리가 이미 존재해 mkdir 실패 -> Failure 출력

 

>, < = 입출력의 흐름을 바꾼다(Redirect)

ls > test.txt : 현재 위치의 목록을 표준출력이 아닌 파일로 보낸다.

cat < test.txt > aaa.txt : test.txt의 내용을 aaa.txt로 복사한다.

 

>> = 추가로 붙인다(Appending)

$ date > date.txt

$ cal >> date.txt

덮어쓰기 되지 않고 둘 다 들어감.

 

 


Ubuntu Server 파일 설치

Get Ubuntu Server | Download | Ubuntu

 

Get Ubuntu Server | Download | Ubuntu

Get Ubuntu Server one of three ways; by using Multipass on your desktop, using MAAS to provision machines in your data centre or installing it directly on a server.

ubuntu.com

Option 2 -> Download Ubuntu Server 20.04.2 LTS 클릭

 

오늘 과정에선 더 진행하지 않았다. 아마도 내일 우분투 서버를 실행할 수 있을 듯하다.


Host-Only Ethernet Adapter 설정

VirtualBox 초기화면에서 Ubuntu-Desktop을 선택하고 설정 - 네트워크 - 어댑터2 에서

'네트워크 어댑터 사용하기' 체크, 다음에 연결됨을 '호스트 전용 어댑터'로 설정하고 확인 버튼 클릭.

Ubuntu를 부팅하고 시스템 인디케이터를 통해 설정에 진입한다.

이후 Network 설정에서 새로 생긴 2번 어댑터인 enp0s8의 설정(톱니바퀴)을 클릭한다.

IPv4 탭에 들어와 Method를 Manual로 바꾸고 직접 Addresses를 입력하고 Apply한다.

네트워크 허용 옵션에 따라서 이 설정 없이 될 수도 있고 안 될 수도 있다.

필자의 경우 '모든 네트워크'에서 공유 켜기 옵션을 켜야 했다.

우분투에서 IP 확인 시 정상적으로 바뀐 모습이다.

기존 DHCP에 따른 4번째 Octet이 101이었던 IP주소로 때린 핑과

Manual로 설정 후에 때린 핑이 모두 성공적으로 돌아온 모습.

 

어댑터 2를 처음 만들 때는 DHCP로 생성했었는데 그 과정을 스크린샷으로 담지 못했다.

어떻게 생성하는지, 어떻게 Manual 방식을 사용할 수 있는지만 알면 된다.


CIDR(Classless Inter-Domain Routing) 표기법 (사이더 표기법)

 

IPv4 : 총 32bit, 4개의 Octet으로 되어 있으며 각 Octet의 구분은 .으로 한다.

8bit.8bit.8bit.8bit

 

class 표기법

 

A class : 0으로 시작한다. 00000000 ~ 01111110(126)(127은 사용 불가)

ex) Google : 8.8.8.8 (A class)

서브넷 마스크 : 255.0.0.0

8.x.x.x -> 255*255*255가지의 IP를 사용 가능

 

B class : 10으로 시작한다. 10000000(128) ~ 10111111(191)

ex) 한국 통신 DNS : 168.126.63.1 (B class)

서브넷 마스크 : 255.255.0.0

168.126.x.x -> 255*255가지의 IP를 사용 가능

 

C class : 110으로 시작한다. 11000000(192) ~ 11011111(223)

ex) 212.34.56.78

서브넷 마스크 : 255.255.255.0

212.34.56.x -> 255가지의 IP를 사용 가능

 

클래스 방식은 A,B는 남고 C는 부족해서 Classless를 사용하기로 했다.

 

CIDR 표기법 (IP/비트 수)

213.34.56.78/8 : Octet 1개 가림

213.34.56.78/16 : Octet 2개 가림

213.34.56.78/24 : Octet 3개 가림

 

213.34.56.78/18 : Octet 2개와 2진수로 변환한 3번째 Octet의 앞 두 자리를 가림.

 


IPv6 : 총 128bit.

32bit.32bit.32bit.32bit


서버의 원격 관리

TELNET : 고전적인 방식, 보안에 취약함.

SSH(Secure Shell) : 인증서를 통한 보안이 뛰어나지만 GUI를 제공하지 않음.

XRDP : GUI를 제공하지만 그만큼 퍼포먼스가 느림.

 

준비 사항

            Client                                                            Server
-----------------------------------------------------------------------------------------
       Web Browser           <--------80------->       Web Server(Apache, Nginx)
    Telnet Client Tool        <--------23------->                Telnet Server
SSH Client Tool(PuTTY)     <--------22------->       SSH Server(openssh-server)
      DB Client Tool          <-------3306------>                 DB Server
                                      (MySQL의 경우)

소켓의 구성

OSI 제 3계층 (Network Layer) : IP (공항 = 목적지)
OSI 제 4계층 (Transport Layer) : TCP/UDP 포트 (게이트 번호) : 0 ~ 65535

 


TELNET 서버와 클라이언트

 

TELNET은 보안이 취약하기 때문에 실제로 사용할 순 없고 SSH 전에 연습삼아 해보는 것이다.

$ sudo apt update

$ sudo apt install xinetd telnetd

 

뒤에 붙는 d는 daemon의 약자로 백그라운드 실행을 의미한다고 한다.

설치가 완료되면 위 경로로 찾아가 관리자 권한으로 telnet 파일을 만든다.

$ sudo gedit telnet

gedit에서 g는 GNU를 의미한다. 만든 telnet 파일을 열어서 위와 같이 작성하고 저장해준다.

cat 명령어를 통해 작성된 내용을 확인.

$ sudo adduser teluser

'teluser'라는 유저네임으로 유저를 생성한다.

비밀번호와 비밀번호 확인을 입력하고 나머지 부가 정보는 Enter키로 스킵한다.

$ sudo systemctl restart xinetd

$ sudo systemctl enable xinetd

$ sudo systemctl status xinetd

 

서버 준비를 위해 3종 세트를 실행.

이제 윈도우즈의 cmd에서 연결을 시도해보면 연결할 수 없다고 나온다.

방화벽이 활성화 되어있어 모든 포트가 막혀있기 때문이다.

리눅스 서버에 가서 방화벽이 active임을 확인하고,

$ sudo ufw allow 23/tcp 로 23번 포트를 TCP로 연다.

 

v6는 IPv6를 의미함

다시 cmd에서 접근을 시도해보면 권한이 거부되었다는 알림이 나온다.

관리자가 아닌 일반 유저는 접근할 수 없기 때문이다.

아까 작성한 문서에서 유저네임을 root로 바꾼다. 관리자를 뜻하는 고정 이름이다.

적용을 위해 다시 한 번 삼총사 실행.

다시 cmd로 이동해 접속해보면 드디어 접근이 됨을 확인할 수 있다.

윈도우즈 환경이 아닌 우분투 리눅스 환경임을 확인하기 위한 명령어 테스트.

cls는 찾을 수 없는 명령어라고 나오고, clear를 입력 시 명령이 수행된다.

 


SSH 서버와 클라이언트 (feat. PuTTY)

$ sudo apt install openssh-server 명령으로 SSH 서버 패키지를 설치한다.

화면엔 나오지 않았지만 설치 전에 동기화를 위해 $ sudo apt update를 반드시 실행해주어야 한다.

서버 준비를 위해 systemctl 삼총사 실행.

SSH의 포트번호인 22/tcp를 허용해주고, TELNET을 위해 열었던 23/tcp는 닫아준다.

서버는 기본적으로 필요한 포트 외에는 전부 닫아야 하기 때문.

Windows 10에 PuTTY 설치 마법사를 설치하고 진행한다.

PuTTY 프로그램 설치가 완료되면 실행한다. 위 사진은 초기화면이다.

Session 메뉴에서 IP와 포트 번호를 입력한다.

Appearance 메뉴에서 폰트와 글씨 크기 등을 변경할 수 있다.

Colours 메뉴에서 테마 색상을 변경할 수 있다.

설정을 마쳤으면 Session 메뉴에서 이름을 입력하고 Save 버튼을 클릭해 세팅값을 저장한다.

저장 후 Open을 하면 뜨는 경고창인데, 최초로 서버를 열 때 나오는 인증서가 믿을 수 없다고 판단되는 경우 뜬다.

믿을 수 있으므로 '예' 클릭.

실행된 PuTTY에 비밀번호를 입력하면 우분투 서버의 Terminal에 접속할 수 있다.

겉으로 보기엔 TELNET과의 차이를 모르겠지만 통신 과정에서 패킷에 대해 암호화와 복호화가 이루어져

중간에 해커가 패킷을 가로채더라도 내용을 해석할 수 없다고 한다.


서버의 조건

1. 머신이 서버여야 한다.
2. OS가 서버용 OS여야 한다.
3. 서버 프로그램(Package)이어야 한다.
4. 서비스가 Start 되어야 한다.

Windows 10에서 Port Number 목록 보기

C:\Windows\System32\drivers\etc 경로에서 services 파일을 열면 된다.


apt 명령어

apt -y install [패키지 이름] : 설치 여부 재확인 스킵 옵션
apt update : /etc/apt/sources.list 파일의 내용이 수정되었다면 이 명령으로 패키지 목록을 업데이트 해야 함
(인터넷에 연결되어 있지 않으면 불가하기 때문에 인터넷 연결 여부를 확인할 수 있다.)
apt remove [패키지 이름] : 기존 설치된 패키지 제거
apt purge [패키지 이름] : 기존 설치된 패키지를 설정 파일을 포함해 완전히 제거
apt autoremove : 사용하지 않는 패키지를 모두 제거
apt clean / apt autoclean : 설치할 때 내려받기한 파일 및 과거의 파일을 제거

apt-cache show [패키지 이름] : 패키지의 정보를 화면에 출력
apt-cache depends [패키지 이름] : 패키지에 대한 의존성 정보를 출력
apt-cache rdepends [패키지 이름] : 이 패키지에 의존하는 다른 패키지의 목록 출력

add-apt-repository : PPA 생성
dpkg 명령어 옵션


dpkg -i || --install 패키지파일이름.deb : 패키지 설치

dpkg -r || --remove [패키지 이름] : 기존에 설치된 패키지 제거
dpkg -P || --purge [패키지 이름] : 기존에 설치된 패키지 삭제 및 설정 파일까지 모두 제거

dpkg -l [패키지 이름] : 설치된 패키지에 대한 정보 출력
dpkg -L [패키지 이름] : 패키지가 설치한 파일 목록 출력

dpkg -info 패키지파일이름.deb : 패키지 파일에 대한 정보 출력

 


NAT Network 포트 포워딩을 위한 사전준비

VirtualBox 초기 화면 -> 파일 -> 환경설정 -> 네트워크 -> 녹색 플러스 아이콘 클릭.

주황색 톱니바퀴 아이콘 클릭.

네트워크 이름을 설정하고 아래의 '포트 포워딩' 버튼 클릭.

우측의 녹색 플러스 아이콘을 클릭해 Rule을 하나 만들고, 이름을 설정한다.

호스트 IP와 호스트 포트를 받아 게스트 IP와 게스트 포트로 포워딩 시키는 것이 포트 포워딩이라고 한다.

위와 같이 설정한다.

 

 

오늘은 여기까지 설정하고, 내일 수업 때 포트 포워딩과 NAT Network에 대해 공부한다.

32-bit, 64-bit CPU에 관하여

32-bit CPU는 21억의 주소 절대값을 가진다. 하지만 메모리 어드레스에는 음수가 없기 때문에 음수 부분의 주소가 양수로 올라가서 42억, 즉 4GB의 메모리에 접근할 수 있게 된다. 16GB의 RAM을 가진 컴퓨터에서 32-bit의 CPU를 사용할 경우엔 Quad-Core여야 메모리를 전부 사용할 수 있다는 개념이다.


About Linux

 

Linux는 Red Hat 계열과 Debian 계열 중 Debian 계열의 OS이다.

 

원래 리누스 토발즈가 리눅스라는 OS 자체를 만든 줄 알았는데,

사실은 리눅스에 들어가는 Kernel을 개발한 것이라고 한다.

Kernel은 운영체제의 핵심 요소로써

사용자 -> Shell -> Kernel의 과정을 거쳐 명령어를 전달받고 실행하는 역할이라고 한다.


네트워크에 관하여

 

Networking을 위한 요소 3가지

1. 내 주소 : IP (Internet Protocol)
2. 서브넷 마스크
3. 대문 주소 : Gateway (Router)

서브넷 마스크 : 내 주소와 255.255.255.0을 2진수로 치환해서 AND연산을 수행하고 목적하는 IP주소도 같은 방식으로 연산을 수행한 후에 비교를 한다. IP주소의 앞자리 3개에 255라는 마스크를 씌워서 본연의 값을 그대로 나오게 하고 비교 결과가 같을 경우 같은 곳에 있는 것이기 때문에 대문 주소를 찾을 필요가 없다. (이 부분은 아직 잘 모르겠다. 일단은 서브넷 마스크의 동작 원리까지 이해했다.)

대문 주소 : 대문을 거쳐서 바깥으로 나가야 하기 때문에 대문 주소를 모르면 안에서 헤맬 수 밖에 없다.

 

IP의 종류

 

공인(Public) IP, 사설(Private) IP

 

물리적(Physical) IP (MAC Address) : 하드웨어에 박혀 있는 고정 IP

논리적(Logical) IP : 소프트웨어로 변경 가능한 IP

 

수동(Manual) IP : 내 IP, 서브넷 마스크, 게이트웨이를 직접 설정하는 것

자동(Automatic) IP : 부팅 시 자동으로 설정해주는 것

 

*DHCP(Dynamic Host Configuration Protocol) 서버 = 자동 IP 사용 시에 IP를 부여해주는 서버

 

 

NAT(Network Address Translation)

공인 IP는 가격이 비싸지만 인터넷에 접속이 가능하고,

사설 IP는 가격은 비싸지 않지만 인터넷에 접근하지 못하고 주변 기기와의 연결만 가능하다.

 

그래서 공인 IP 하나와 사설 IP 여러 개를 구매해서 공인 IP 하나를 여럿이서 돌려쓰는 구조로 사용한다.

사설 IP의 종류

10.xx.xx.xx
172.xx.xx.xx
192.168.xx.xx

 

DNS (Domain Name Server)

숫자로 된 IP를 도메인 네임으로 변환하거나,

그 반대를 수행하는 것.

 

IP로 설정할 수 없는 것

사설 IP
Look Backup IP : 127.0.0.1 (내가 나의 IP를 가리키는 대명사 : localhost)

 

ping 카운트 옵션

$ ping -c 4 localhost

 

리눅스 IP 확인 명령어

ip a
ip address
ifconfig

1 : 진짜 IP주소(localhost)

2 : 가짜 IP주소(10으로 시작하기 때문에 사설 IP)

 

 


Software & Updates

업데이트 하기 전 패키지를 다운받을 사이트를 지정해주는 작업을 먼저 진행한다.

Software & Updates(보라색 아이콘)을 클릭한다.

위에서부터 4개의 항목을 체크하고 Download from: 에서 Other... 클릭.

패키지를 다운로드할 사이트를 잡아줄 것이다.

Korea, Republic of에서 하단 메뉴를 내려 원하는 사이트를 선택해준다.

해외(먼 지역)의 사이트로부터 패키지를 받을 경우 시간이 길어지기 때문에 필요한 작업이다.

선택 후 Close 버튼을 클릭하면 Reload 창이 뜨는데,

이는 현재 내 OS와 서버에 있는 버전의 상태를 같게 만들기 위한 새로고침 과정이라고 한다.

 

이 과정이 끝나면 아까 Software & Updates 아이콘 옆에 있던 비슷한 모양의 흑백 아이콘을 클릭한다.

클릭하면 뜨는 실질적인 업데이트를 진행하는 프로그램이다. Install Now를 클릭한다.

Details를 열어 각종 진행 사항을 확인할 수 있다.

소프트웨어 업데이트가 완료되면 Restart Now를 진행한다.


Install Ubuntu Restricted Extras

애플리케이션 목록에서 Terminal을 클릭한다. 윈도우의 cmd와 비슷한 프로그램이다.

"sudo apt install ubuntu-restricted-extras"라는 명령어를 입력해준다.

여기서 sudo란 관리자 권한으로 실행하겠다는 뜻으로

Super User DO, Switch User DO 두 가지의 의미를 모두 갖고 있다.

비밀번호의 입력이 시각적으로 보이지는 않지만 입력하고 엔터키를 누른다.

[Y/n] 은 기본값이 Y라는 뜻이므로 Continue를 위해 엔터키를 한 번 더 눌러준다.

Tab키 -> Enter키

각종 Agreement이다.

기본으로 커서가 No에 위치해 있다. Tab 또는 방향키로 Yes에 올린 후 Enter.

Ubuntu Restricted Extras 다운로드가 완료되었다.

 

 

키보드 단축키 설정

Settings 앱을 실행하고 Keyboard Shorcuts 메뉴에 들어간다.

Terminal의 실행 단축키인 Ctrl+Alt+T 를 확인한다.

또한 Launch web browser의 Disabled 부분을 클릭하여 단축키를 지정해준다.

키보드에서 "Ctrl+Alt+B" 입력 후 Set.

*Ubuntu에선 물론이고 HostOS에서 사용하는 단축키와도 겹치지 않도록 설정해야 한다.

Terminal에 gnome-system-monitor 입력 시 시스템 모니터(윈도우의 작업관리자)가 실행된다.

시스템 모니터 또한 단축키화 할 것이니 설정에 들어와서 맨 밑까지 내리면

+ 버튼을 확인할 수 있다. 클릭한다.

Name - 본인이 알아볼 단축키 이름

Command - 터미널에서 사용하는 명령어

Shortcut - 입력할 키보드 조합

윈도우즈의 작업관리자 단축키와 같은 로그아웃 단축키를 지정해제 해야 한다.

충돌이 일어날 경우 HostOS의 단축키를 우선으로 실행하므로

우분투 로그아웃을 위해 Ctrl+Alt+Delete 입력 시 윈도우즈의 작업관리자가 실행되어 버릴 것이다.

클릭 후 Backspace 키 누르기.


한글 언어팩 설치를 위한 5가지 프로그램 인스톨

몇 가지 프로그램을 인스톨할 것이다.

위와 같은 명령어를 입력한다. 여기서 \(역슬래시)는

명령어를 논리적으로 줄바꿈하지 않고 하나의 명령어를 이어서 쓰되 보기에 편하도록 내려쓰는 것이다.

소프트웨어 업데이트와 같이 진행해주면 된다.

Language Support 애플리케이션을 실행하고, Install을 클릭한다.

인스톨이 완료되면 Close한다.

로그아웃 후 다시 로그인한다.

검색창에 Region & Language를 검색하여 설정에 들어간다.

+버튼 클릭 -> Korean -> Korean(Hangul) -> Add

메뉴바 우측에 '한'이라고 적힌 메뉴가 생겼을 것이다. 클릭해서 Korean(Hangul)로 바꿔주면 전환이 가능하다.

또한 Setup을 클릭해서 토글 단축키를 확인할 수 있다.

Text Editor를 열어 토글 한영키를 확인해보자.

Hello, World!

(Shift+Space)

안녕하세요


방화벽

Firewall은 기본적으로 외부에서 나에게 접근하는 Inbound를 필터링한다.
반대의 개념인 OutBound를 필터링하는 것은 Froxy가 한다고 한다.

Firewall은 관리자 모드로만 실행 가능하기에 앞에 sudo를 붙인다.

네트워크 관련 접근이 안 될 때는 방화벽을 의심해보자.

방화벽의 스테이터스 확인 - sudo ufw status

방화벽 활성화 - sudo ufw enable

*ufw = Ubuntu FireWall

 


 

가로 계층

2-Tier : Client - Server (Request - Response)

3-Tier : Client - Middle - Server

4-Tier : Web Browser - Web Server - WAS - DB Server

N-Tier : Client - ............. - Server

 

세로 계층

OSI(Open System Interconnectivity) 7 Layers

제 3계층과 제 4계층 - 게이트 갯수 : 65536개(포트넘버)
(이를 ufw이 필터링한다, 공항의 게이트 번호와 같다)
방화벽이 모든 인바운드를 기본적으로 전부 막고 필요할 때만 열어준다.

대형 서버용 OS 발전의 흐름

 

Mainframe -> Unix -> Minix -> Linux

 

Linus Benedict Torvalds는 어셈블리어로 Linux Kernel 0.01 버전을 처음 작성했다.

Unix 시스템의 작은 버전인 Minix보다 좋은 운영체제를 만드는 것을 목표로 삼아

1992년에는 0.02 버전을 작성하면서 인터넷에 소스 코드를 공개했는데,

이것이 Linux의 탄생이었다.

 

Linux는 GNU 프로젝트에 의해 만들어졌으므로 GNU/Linux라고 부르는 것이 맞다.


About Ubuntu

 

Ubuntu Desktop : GUI 기반의 인터페이스 환경.

Ubuntu Server : TUI 기반의 인터페이스 환경.

 

일반 버전

지원 기간 : 약 9개월

출시 주기 : 약 6개월

 

LTS(Long Term Support) 버전 : 주로 정식 버전이라고 부름

지원 기간 : 약 5년

출시 주기 : 약 2년

 

버전명은 출시년도.출시월

ex) 20.04 LTS : 2020년 4월에 출시된 LTS 버전

 


Tweaks를 이용한 가상 데스크탑 활용

 

install 명령 시에 추가할 수 있는 -y 옵션은 다음 단계에 묻는 확인 메시지에 미리 동의하겠다는 의미이다.

설치가 끝났다면 Show Applications에서 Tweaks를 실행하고 Workspaces 메뉴에 들어가서

원하는대로 설정한다.

Ctrl+Alt+위, 아래 방향키

또는

윈도우 키로 가상 데스크탑 간을 이동하고 확인할 수 있다.


우분투의 패키지

 

우분투에서는 프로그램이나 소프트웨어, 애플리케이션 등의 용어 대신 패키지라고 부른다.

 

패키지 설치 방법 5가지


1. dpkg - Debian Package
- 데비안 패키지 설치 파일로, 의존성 문제가 있으며, 저장된 .deb파일을 통해 패키지를 설치한다.
의존성 ex) galculator는 libquadmath0 패키지가 있지 않으면 설치할 수 없다.

2. apt - a CLI utility installing packages in terminal
- Advanced Package Tool의 약자로, .deb 패키지를 편리하게 설치하기 위한 도구.
apt-get 방식은 패키지 설치 명령을 입력하면 자동으로 /etc/apt/sources.list 파일을 확인한다.

이 파일에는 Ubuntu 20.04 LTS 패키지 저장소의 인터넷 주소가 적혀 있기 때문에
입력받은 패키지명에 맞는 패키지를 가져와 보여주고, 설치에 동의하면 서버로부터 패키지를 다운받는다.
어떤 패키지를 설치하고자 할 때, 의존성 문제가 있는 파일도 자동으로 설치해주어서

의존성 문제를 완전히 해결했다.

3. Synaptic Package Manager - a GUI for dpkg/apt
- Ubuntu Software Center에서 다운로드할 수 있다.
GUI 기반의 환경으로 패키지들을 관리할 수 있음.


4. aptitude - a console client with CLI and ncurses-based TUI interfaces
- GUI와 TUI가 섞인 환경의 툴. 자주 쓰이지 않는다.

5. Ubuntu Software Center
우분투 데스크탑을 사용하는 유저 또는 우분투 리눅스에 대해 잘 모르는 사람을 위한
패키지 설치 방법으로, GUI로 직관적이고 간편하게 패키지를 설치할 수 있다.

 

 

 

패키지를 설치하기 전에 반드시 $ sudo apt update를 해주어야 한다(Update cache).

- 캐시 목록 확인과 네트워크 연결 여부 확인을 위함

$ sudo apt install focuswriter


Thunderbird Mail에 실제 메일 연동하기

네이버 메일 -> 환경설정 -> POP3/IMAP 설정에 들어가서

POP3/SMTP 사용 라디오버튼을 사용함으로 체크하고

'메일 프로그램 환경 설정 안내'의 항목들을 확인한다.

Thunderbird Mail을 실행해서 이름, 네이버 메일 주소, 메일 비밀번호를 입력하고 Continue 클릭.

확인한 서버와 포트 정보를 맞게 입력하고 Re-test 후 연동을 완료한다.

성공적으로 연동된 모습


Chrome 브라우저 다운로드

www.google.com/chrome/  접속 후 다운로드 클릭.

Save File로 선택해서 다운로드 한다.

 

pwd - ls - cd 세트

현재 디렉토리명 확인,

현재 디렉토리에 있는 디렉토리 및 파일 확인,

디렉토리 변경

3가지 명령은 많이 같이 쓰인다.

 

터미널에서 위 3가지 명령어를 테스트해보고

 

$ sudo dpkg -i google 까지 입력하고 Tab키로 나머지 완성

또는

$ sudo dpkg -i google*.deb

 

입력 후 Enter키로 명령한다.

 

dpkg = Debian Package

-i = install 명령어 속성


www.opera.com  

같은 방식으로 Opera 브라우저도 다운로드 실습을 해 보았다.

ls 명령 시에 Chrome과 Opera의 파일 두 개가 모두 보이는 모습이다.


PDF Reader 설치

www.foxit.com/pdf-reader/  

Foxit PDF Reader의 tar.gz 압축 파일을 다운로드한다.

xvfz

-x = 압축을 해제한다

-v = 압축, 압축 해제 시에 과정을 보여준다

-f = 압축 파일의 이름을 지정한다

-z = gzip을 사용한다


절대경로와 상대경로

절대경로: 루트(/)부터 시작해서 모든 주소를 입력하는 방식

상대경로: .이 현재 디렉토리를 표현하므로 이런 식으로 표현할 수 있다.

 

* .. = 상위 디렉토리


VLC Media Player 설치

이런 식의 명령어로 설치했다.

 

 

 


네트워크가 전체적으로 알아야 할 용어와 이해해야 할 개념들이 정말 많다는 생각이 들었다.

빨리 '그림으로 보는 네트워크 원리'를 구매해서 참고서적으로 읽어야겠다.

가상화 프로그램은 HostOS 위에서 GuestOS를 실행시켜 동시에 여러개의 OS를 사용할 수 있게 해주는 프로그램이다. Megazone Cloud에서 제공해 준 랩탑은 Windows 10 환경이며, 여러 가상화 프로그램 중 무료로 사용 가능한 VMWare의 VirtualBox를 통해 CANONICAL 사에서 Linux 기반으로 개발한 Ubuntu Desktop을 설치한다고 한다. 강사님이 Ubuntu Desktop과 Ubuntu Server 두 가지가 있다고 하시는데 내가 아직 잘 모르기 때문에 그 부분은 추후에 정리하기로 하고 일단 설치와 셋업을 진행해보자.


www.virtualbox.org  주소로 들어가면 나오는 화면. 큼지막한 다운로드 버튼을 클릭해준다.

VirtualBox 6.1.26 platform packages에서 본인의 OS에 맞는 것으로 선택해 다운로드한다. 

또한 VirtualBox 6.1.26 Oracle VM VirtualBox Extension Pack에서 OS에 구애받지 않는 확장팩도 다운로드한다.

다운로드한 exe파일을 실행하면 VirtualBox Setup이 시작된다. 설치 경로, 설치 옵션 등을 원하는대로 선택한 후 설치를 끝낸다.

Extension Pack도 설치가 완료되었다.

바탕화면에 생긴 VirtualBox 아이콘을 눌러 실행시키면 나오는 초기화면이다. 파일 -> 환경설정으로 들어간다.

여기서 일반, 입력, 확장 이 3가지 부분을 세팅해 줄 것이다.

기본 머신 폴더의 경로를 지정해 줄 것이다. 가상 머신(ex Ubuntu, CentOS...)을 인식할 기본 위치인데, 가상화 프로그램을 포토샵 프로그램이라고 가정했을 때 이 가상 머신은 .psd 파일이 된다. 가상화 프로그램에서 가상 머신 파일을 실행시켜 GuestOS를 동작시키는 것이다.

C 드라이브에 새 폴더인 My Virtual Machines를 만들어 준 후에 그 위치를 잡아준다.

다음은 입력 설정이다. 가상 머신 탭으로 이동한 뒤 '호스트 키 조합'에 대응하는 키를 확인한다.

기본값은 Right Control로 되어 있을 것이다. 우리 교육 과정에서는 데스크탑과 별도의 키보드가 아닌 랩탑을 사용하기 때문에 Right Control 키가 없어 따로 재지정해주게 되었다. 강사님 말씀으로는 잘 안 쓰이는 키를 사용하는 편이 충돌을 막을 수 있다고 하신다.

확장 설정이다. 오른쪽에 작게 보이는 +버튼을 클릭한다.

아까 다운로드한 Extension Pack 파일이 잡힐 것이다. 이걸 선택해서 열기버튼을 누르면 된다.


가상화 프로그램 설치는 끝났으니 실행할 파일인 우분투를 다운로드 해야 한다.

www.ubuntu.com 에 접속하여 Download -> Ubuntu Desktop -> 20.04 LTS 를 클릭한다.

잠시 기다리면 다운로드가 시작된다. 용량이 어느 정도 있어서 설치에 시간이 좀 걸릴 것이다. iso 확장자명은 디스크 이미지를 말하는데 CD와 비슷한 개념이라고 생각하면 될 것 같다.

우분투 디스크 이미지의 다운로드가 완료되면 아까 설정을 마친 VirtualBox의 툴바에서 '새로 만들기'를 클릭한다.

머신 폴더는 아까 잡아둔 경로로 잡힐 것이고, 이름과 종류, 버전을 설정하면 되는데 이런 식으로 이름에 핵심 키워드가 들어오면 종류와 버전에서 자동으로 인식을 해 준다.

Ubuntu Desktop에 할당해 줄 메모리 크기이다.

우리 과정에선 지급받은 랩탑의 RAM이 16GB이므로 여유있게 4GB로 잡았다.

'만들기' 클릭

VirtualBox를 사용하고 있으므로 VDI로 선택하고 진행한다.

예를 들어 가상 하드 디스크의 크기를 100GB로 설정할 경우 '동적 할당'을 사용하면 초기에는 용량을 적게 잡아 먹고, Ubuntu Desktop에 프로그램, 파일 등이 설치됨에 따라 그만큼 늘어나는 용량을 가변적으로 커버해서 맥시멈 100GB까지 늘린다는 뜻이다. '고정 크기'는 말 그대로 시작부터 100GB를 할당해 주어서 용량이 많이 차기 전까지는 단편화(용량 낭비)가 많이 생긴다고 볼 수 있겠다.

가상 하드 디스크의 용량은 최대 100GB, 동적 할당으로 설정해 주었다.

성공적으로 사양 설정을 완료했다. 툴바에서 주황색 '설정' 버튼을 눌러 추가 설정을 하도록 하자.

시스템, 디스플레이, 저장소, 네트워크 총 4가지의 설정을 건드릴 것이다.

'시스템' 메뉴에 들어와 '마더보드' 탭의 '부팅 순서' 체크 리스트에서 '플로피'를 해제한다.

다음으로 '프로세서' 탭에 들어와서 프로세서 개수를 2개로 바꾼다. 듀얼 코어로 사용하기 위함이다.

'디스플레이' 메뉴에서 비디오 메모리를 최대인 128MB로 설정한다. GUI 환경에서 우분투를 사용하기 때문이다.

'저장소' 메뉴 -> 컨트롤러: IDE에서 비어 있음 선택 -> '광학 드라이브'는 'IDE 세컨더리 마스터' 선택 -> 옆의 파란색 디스크 아이콘 클릭 -> 디스크 파일 선택

다운로드했던 디스크 이미지 파일을 선택해서 열기를 누른다. 탐색기가 알아서 잡아주지 않을텐데 대체로 다운로드 폴더에 있다. 그렇지 않으면 파일 탐색기에 이름을 검색해서 찾으면 된다.

성공적으로 경로가 잡힌 모습.

마지막으로 '네트워크' 메뉴에서 '어댑터 1' 탭에 진입, 네트워크 어댑터 사용하기 체크 및 '다음에 연결됨'을 NAT로 설정해 주면 된다.

 

가상화로 시동되는 GuestOS가 인터넷에 접근하기 위해선 HostOS를 통해 Network Address Translation 과정을 거쳐 라우터를 통해 접근하는 NAT 방법과 직접 라우터를 통해 인터넷에 접근하는 Bridge가 있다고 한다.


툴바의 '시작' 버튼을 클릭한다.

상큼한 소리와 함께 우분투의 부팅이 완료되면 최초 세팅이 시작된다.

언어는 English 선택 후 Install Ubuntu를 클릭한다.

English(US) -> English(US) -> Continue

서드파티 소프트웨어도 설치하겠다는 체크박스만 추가적으로 선택한다.

Something else -> Continue

::: 중요한 부분 진입 :::

New Partition Table... 클릭 -> Continue

새로 생성된 free space 선택 -> 좌측의 +버튼 클릭 -> 화면에 보이는 것과 같이 swap area 할당.

같은 방식으로 /boot 할당.

*두 번째 파티션부터는 Type for the new partition이 기본적으로 Logical로 되어 있기 때문에 주의*

같은 방식으로 사이즈 건드리지 않고 나머지 공간 파티셔닝. 여기서도 Primary 부분을 잘 확인해야 한다.

사진과 같이 파티셔닝이 잘 되었는지 확인 후 Install Now -> Continue

 

지역 선택 - Seoul로 자동으로 잡힐 것이다. Next. (스크린샷은 못 찍음)

Your name - 본인 이름

Your computer's name - 우분투 리눅스를 사용한다는 점과 Desktop 버전임을 표기하면 알아보기 좋다.

username - 본인이 사용할 아이디

password - 비밀번호. 강력하게 설정하는 편이 좋지만 실습이기 때문에 간단하게 했다.

Continue;

패키지 인스톨이 끝나면 리스타트 창이 뜬다. 재시동이 되면 만들었던 계정으로 로그인하고 Welcome to Ubuntu라고 안내해주는 사항, 리포트 옵션 등을 선택하고 넘기면 세팅이 끝난다.

세팅 완료 후 뜨는 업데이트 창, X 버튼을 누른다.

 


 

이로써 모든 설치 과정과 설정이 끝났다.

+ Recent posts