네이버 클라우드 캠프 6일차 230501
#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 | 로그파일이 비어있는 경우 순환하지 않는다 |
순환 후 이전 로그파일을 지정된 메일주소로 발송 |
#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 | 위에서 반으로 나눔 |