[Naver Cloud Camp 7] 교육 정리

네이버 클라우드 캠프 6일차 230501

우기37 2023. 5. 1. 21:09

#1 교육 리뷰

오늘은 우선 log 관리에 대해서 배웠으며 logrotate 구동순서 및 옵션에 대해서 알게 되었습니다.

두 번째로는 예약작업(at)과 반복작업(cron) 실습을 했으며,

세 번째로는 리눅스에서 html(웹)에 사진 및 배경 넣기 등 기본적인 작성해보기 실습을 했습니다.

마지막으로는 가장 이해하기 힘들었던 Network의 이해에 대해서 배웠으며, 2진수, 8진수, 10진수, 16진수에 대한 이해와 반복 연습이 필요로 했습니다.ip_class 구분방법과 netmask 를 배웠습니다.

 

 

 

#2 log관리

 

last : 사용자들의 login 기록을 아래와 같이 보여줍니다.

 

 

logrotate 구동순서)

cron(주기적으로 반복되는 일을 자동으로 실행 될 수 있도록 설정해 놓는 데몬)을 이용해 logrotate 실행

 

crontab
cron.daily
logrotate
logrotate.conf
logrotate.d

 

cd /etc/logrotate.d/  #logrotate에 적용할 각종로그파일

ls  #확인하기

 

nl ufw #ufw 확인하기

 

 

cd /var/log/

ls

 

nl dmesg  #소켓을 통해 커널에서 출력된 메시지를 가져와 출력하는 명령어를 의미합니다. 이를 통해 네트워크와 관련된 정보를 확인할 수 있습니다.

 

dmesg  #리눅스 운영체제에서 시스템 메시지를 확인하는 명령어입니다.

리눅스 시스템은 부팅 과정에서 커널 메시지를 생성하고 이를 커널 메시지 버퍼에 저장합니다. 이 버퍼에는 시스템의 상태 정보, 에러 메시지, 하드웨어 정보 등이 기록됩니다. dmesg 명령어를 통해 이 버퍼에 저장된 메시지를 읽을 수 있습니다.

 

 

 

logrotate 옵션)

daily 매일 순환
weekly 매주 순환
monthly 매달 순환
yearly 매년 순환
rotate 파일 개수 순환 될 파일 개수
compress 순환된 로그파일 압축(gzip)
nocompress 순환된 로그파일을 압축하지 않는다(기본값)
compresscmd 압축명 gzip 이외의 압축프로그램 지정
uncompresscmd 압축해제 명령 지정(기본 값 : gunzip)
compressext 확장자명 압축된 백업 로그파일에 지정할 확장자 설정
compressoptions 옵션 압축 프로그램에 대한 옵션 설정 (-9 : 압축률 최대)
dateext 로그파일에 YYYYMMDD 형식의 확장자 추가
errors 메일주소 에러 발생시 지정된 메일주소로 메일발송
extention 확장자명 순환된 로그파일의 확장자 지정
maxage count로 지정된 날수가 지난 백업 파일 삭제
missingok 로그파일이 없을 경우에도 에러 처리하지 않는다
prerotate / endscript 순환작업 전에 실행 할 작업 설정
postrotate / endscript 순환작업 후에 실행 할 작업 설정
sharedscripts prerotate, postrotate 스크립트를 한번만 실행
ifempty 로그파일이 비어있는 경우 순환(기본값)
size 순환 결과 파일사이즈가 지정한 크기를 넘지않도록 설정
copytruncate 현재 로그파일의 내용을 복사하여 원본 로그파일 크기를 0으로 생성
noifempty 로그파일이 비어있는 경우 순환하지 않는다
mail 순환 후 이전 로그파일을 지정된 메일주소로 발송

 

 

 

#3 예약작업(at) 과 반복작업(cron)

 

먼저 at 과 cron이 설치 되어 있지 않다면 설치를 해주세요.

 

apt -y install at  #at 설치
apt -y install cron  #cron 설치

 

at)

 

systemctl start atd  #at 가동

systemctl stop atd ##at 중지
systemctl status atd  #at 상태 확인

 

at now +3 min  #명령어를 입력하는 순간으로부터 3분 뒤에 작업 실행

at now + 3housr  #명령어를 입력하는 순간으로부터 3시간 뒤에 작업 실행

at now + 2weeks  #명령어를 입력하는 순간으로부터 2주 뒤에 작업 실행

at now + 2days  #명령어를 입력하는 순간으로부터 2일 뒤에 작업 실행

at 5pm + 7days  #오후 5시부터 7일 후에 작업 실행

 

atq  #at -l 과 같은 명령어 (현재 예약되어 있는 작업 목록 보기)

atrm  #at -d 와 같은 명령어(예약한 작업을 취소하기)

 

 

 

cron)

 

nl /etc/crontab  #아래와 같이 각 자리의 * 에 대한 의미를 확인 할 수 있습니다.

 

crontab -e  #edit, crontab 파일의 내용을 편집

crontab -l  #list, 현재 crontab 내용 표준출력

crontab -r  #remove, 현재 crontab 내용 삭제

crontab -u j  #j 사용자의 작업내용을 보거나, 편집, 삭제

 

 vi /etc/cron.deny  #허용파일이 없는 경우 거부 파일이 사용, 지정된 사용자를 제외한 나머지 사용자에세 crontab 명령 실행 가능

 

 vi /etc/cron.allow  #존재하고 있는 사용자만 crontab을 등록 가능, 지정되지 않은 사용자들은 crontab 명령을 실행 불가

 

today='date +%y%d%m'  #crontab 을 활용한 주기적으로 백업

00 3 * * * crontab -l > /backup/crontab_backup.$today

 

 

 

동적 & 정적 라이브러리)

정적 라이브러리 (static) : 실행 파일 로드시 링크, 실행 파일이 컴파일 될 때 필요한 모든 함수 및 코드를 로드하여 런타임에서 추가적인 로딩이 필요하지 않습니다. 실행 파일의 크기는 커지지만, 실행 속도가 빨라질 수 있는 장점이있습니다.

 

동적 라이브러리 (dynamic) : 

런타임에서 필요한 함수와 코드만을 로드하기 때문에 실행 파일의 크기가 줄어들 수 있습니다. 여러 실행 파일에서 공통으로 사용되는 라이브러리를 동적 라이브러리로 구성하여 메모리 공유와 코드 재사용의 장점을 가질 수 있습니다.

- 정적 링크 : 실행 파일이 메모리에 로드될 때 링크

- 동적 링크 : 필요할 때 메모리에 로드, 링크

- window에서 Dnl, *, so(shared object)

 

 

 

#4 리눅스에서 html mount 하기

 

먼저 리눅스와 window의 공유 폴더를 연결해주기 위해서 Oracle VM VirtualBox 에서 설정에 들어가서 공유폴더 탭에 들어가 줍니다.

 

후에 우측 하늘색 폴더 모양을 클릭!

 

폴더 경로에서 기타에 들어가서 mount 하려고 하는 경로를 찾기 해줍니다.

mount 하려는 폴더를 찾아주고 그 폴더 안에 사진을 저장해줍니다.

저는 c드라이브에 win 이라는 폴더를 만들어 주었습니다.

 

그러면 아래와 같이 폴더 경로에 window 경로가 찾아지고 자동 마운트와 항상사용하기를 체크 해줍니다.

그리고 확인! 그러면 window 경로와 mount 할 준비가 되었습니다.

 

cd /var/www/html  # 해당 경로로 들어가줍니다.

mkdir /yes  #/yes라는 directory 를 만들어주고

mount -t vboxsf win /yes  # win 폴더와 /yes derectory를 mount 연결해주기

cp /yes/my.jpg .  #저의 파일은 my.jpg로 저장 해두어서 /yes 에 복사를 해줍니다.

ls  # list를 확인해보면 아래와 같이 my.jpg 가 복사되었습니다.

mv index.html old.html  #html과 연결해주고

vi index.html  #index.html을 vi 로 들어가서 웹에 반영될 명령어를 입력해줍니다.

#vi 명령어
<meta charset='utf-8'> 

<body bgcolor=orange text=black> <br><br> <h1><center>
<hr> <br>

안녕하세요 독수리 입니다. <br><br>
<hr><br><br>

<img src='my.jpg'>

esc #나가기

:wq  #저장하고 나가기

 

그리고 linux 연결했던 본인의 ip 주소인 127.0.0.1 을 웹에 들어가서 입력해주시면 아래와 같이 mount 짜잔!

 

 

 

 

#5 Network의 이해

 

먼저 ifconfig 명령어를 통해 현재 시스템에 설치된 네트워크 인터페이스의 정보를 확인 해봅니다.

 

 

lo = local host

packet header : 내용물에 대한 정보

 

 

 

용어정리)

network
LAN 지역 Network ( Local Area Network)
internet LAN과 LAN의 통신이다
protocol 이기종간의 통신을 위한 약속
tcp/ip protocol의 한 종류로서 telnet, ftp, mail 등 가장 많이 사용된다.
gateway 다른 network와통신을 위한 관문
ip 통신을 하기 위해 각각 컴퓨터에 부여된 주소
Domain LAN의 이름
Hostname LAN에서 다른 host들과 구분하기 위한 이름
network 주소 LAN의 대표ip (어떤 LAN을 통칭할 때 대표 ip) - 가장 작은 번호
BroadCast LAN내의 모든 host들이 듣는 특별한 주소 - 가장 큰 번호
DNS (Domain Name System) Domain -> ip로 변경해주는 시스템
netmask 내부망과 외부망을 구분하는 값, LAN의 크기를 결정하는 값
ICMP (Internet Control Message Protocol) host서버와 Internet GateWay 사이에서 메시지를 제어하고 에러를 알려주는 protocol, RFC792에 의해 정의된다. ping 명령이 사용한다.
설정명령어 nmtui

 

 

 

nl /etc/netplan/*.yaml  #네트워크 인터페이스, IP 주소, 게이트웨이 등을 구성하는 YAML 파일이 저장됩니다. nl은 "new line"을 의미하는 명령어로, 파일 내용을 줄 단위로 출력합니다. 따라서 nl /etc/netplan/*.yaml 명령은 해당 디렉토리 내의 모든 YAML 파일의 내용을 줄 단위로 출력합니다.

 

"This is the network config written by 'subiquity'"는 시스템 설정 도구 'subiquity'가 작성한 네트워크 구성 파일임을 나타냅니다. 이 파일은 시스템의 네트워크 인터페이스를 구성하는 데 사용됩니다. subiquity는 Ubuntu 서버 설치 프로세스에서 사용되는 인터페이스입니다.
"network:"는 이 YAML 파일이 네트워크 구성 정보를 포함한다는 것을 나타내는 헤더(header)입니다.
"ethernets:"는 이 시스템에서 사용하는 Ethernet 인터페이스들에 대한 설정을 나타냅니다.
"enp0s3:"는 Ethernet 인터페이스의 이름입니다. 이는 시스템에 설치된 네트워크 카드와 연결되는 인터페이스를 식별하는 데 사용됩니다.
"dhcp4: true"는 해당 Ethernet 인터페이스가 DHCP를 사용하여 IP 주소를 자동으로 할당받도록 설정한다는 것을 의미합니다. DHCP는 Dynamic Host Configuration Protocol의 약자로, 네트워크에 연결된 호스트가 자동으로 IP 주소, 서브넷 마스크, 게이트웨이 등의 정보를 가져오는 데 사용됩니다.
"version: 2"는 이 YAML 파일의 구문 버전을 나타냅니다. 이 값은 해당 파일의 구조가 따르는 YAML 버전을 나타냅니다.

 

 

server  (표준)포트넘버
ftp :      21
smtp :    25
pop3 :   110
domain : 53
mysql :  3306
tomcat : 8080 / 8000

 

ping -c3 google.com  #열린 google port 확인하기

 

 

 

ip_class 구분방법)

 

ip_class를 구분하기에 앞서 아래와 같이 2진수 / 8진수 / 10진수 / 16진수 를 이해하였습니다.

2진수 8진수 10진수 16진수
0 0 0 0
1 1 1 1
10 2 2 2
11 3 3 3
100 4 4 4
101 5 5 5
110 6 6 6
111 7 7 7
1000 10 8 8
1001 11 9 9
1010 12 10 A
1011 13 11 B
1100 14 12 C
1101 15 13 D
1110 16 14 E
1111 17 15 F
10000 20 16 10
10001 21 17 11
10010 22 18 12
10011 23 19 13
10100 24 20 14
10101 25 21 15
10110 26 22 16
10111 27 23 17
11000 30 24 18
11001 31 25 19
11010 32 26 1A
11011 33 27 1B
11100 34 28 1C
11101 35 29 1D
11110 36 30 1E

출처 : https://gksid102.tistory.com/89

 

 

이해하는데 어려움이 있었지만, 짝꿍의 설명과 위, 아래 표를 참고하여 좀 더 쉽게 이해가 되었습니다.

 

               
2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
128 64 32 16 8 4 2 1

 

예시)

1 1 0 1 0
2^4 2^3 2^2 2^1 2^0
16 8 0 2 0

3번째 줄의 총합은 26 입니다. 그러면 10진수가 26이 되는겁니다.

 

연산자)

AND : X (곱하기)

OR : + (더하기)

NOT : 0 -> 1 // 1 -> 0

XOR :

0 0 -> 0

0 1 -> 1

1 0 -> 1

1 1 -> 0

 

구분방법)

CLASS 첫 필드 범위 실제 예
A 0 ~ 127 63 129 32 150
B 128 ~ 191 153 65 210 33
C 192 ~ 223 211 238 142 110

 

-network 주소와 broadcast의 용도는 빠지기에 2^8 개를 쓸 수 있다면, 0 과 256을 뺀 254개를 사용 가능합니다.

network IP 내부 네트워크의 시작이 되는 IP(0으로 끝나는 IP)
Broadcast 내부 네트워크의 끝이 되는 IP(255가 끝인 IP)

 

- A CLASS가 37.*.*.*. 이면, 2^24-2개 사용가능

- B CLASS가 132.30.*.*. 이면, 2^16 -2개 사용가능

- 여기서 37 & 132.30 은 network 주소, * 은 host 를 의미합니다.

 

 

 

Netmask)

상대 IP가 들어오면, IP를 AND 연산, 대표 네트워크가 같으면 내부 NETWORK, 다르면 외부 NETWORK로 구분한다.

(목적지 주소ㅘ netmask 값을 AND 연산하며, 결과값과 Network 주소값을 비교하여 동일하면 내부망, 다르면 외부망)

255.255.255.0 1111 1111 1111 1111 1111 1111 0000 0000 0000 0000 을 통으로 사용
255.255.255.128 1111 1111 1111 1111 1111 1111 1000 0000 위에서 반으로 나눔
255.255.255.192 1111 1111 1111 1111 1111 1111 1100 0000 위에서 반으로 나눔
255.255.255.224 1111 1111 1111 1111 1111 1111 1110 0000 위에서 반으로 나눔