[Linux] tar, find, crontab, name server

gununoo·2022년 7월 22일
2

Linux

목록 보기
5/10
post-thumbnail

리눅스 명령어 복습

hostnamectl set-hostname

hostnamectl set-hostname test 

현재 서버의 이름을 test 로 변경한다.
재부팅 이후에 반영되므로 reboot 을 하거나 또는 재로그인을 su

route

route

라우팅 정보, 기본 게이트웨이 정보 확인 가능

netstat -anpt

netstat -nr

-r: display routing table
-n: numeric -> 이름이 아닌 ip주소로 보여줌

netstat -anpt | grep LISTEN

-a: all -> 모든 소켓 보여줌
-n: numeric -> 이름이 아닌 ip주소로 보여줌
-p: process id
-t: tcp 서비스만 보여줌

netstat -anpt | grep httpd 

grep

grep Listen /etc/httpd/conf/httpd.conf 

또는

cat /etc/httpd/conf/httpd.conf | grep Listen  

df

어떤 파일 시스템이 어디에 마운트 되었는지 볼 수 있음

df -h 

-h: human readable -> 용량을 K, M, G 단위로 보여줌

mount

mount /dev/sr0 /test 

cd-rom을 /test 디렉토리에 연결하겠다

mount -t nfs 192.168.1.99:/cloud /test 

원격지 서버인 192.168.1.99의 /cloud 디렉토리를 로컬에 있는 /test 디렉토리에 마운트 시킨다.
참고로 nfs는 공유 스토리지이므로 여러 사람이 동시에 접속할 수 있다.

top

실시간으로 메모리와 CPU가 프로세스별로 어느정도 사용되고 있는지를 확인할 수 있다.
(* virt-top : 가상머신들의 CPU/MEM 정보를 확인할 수 있다)

sysstat

yum -y install sysstat
sar 3 5 

3초마다 한 번씩 총 5번 CPU의 유휴자원 등을 확인하여 평균값을 출력

mkdir

mkdir -p /a/b/c

원래 a, b가 없던 상태에서 a, b가 생성되면서 c를 생성.

rpm

  • 리눅스에서의 패키지 설치: centos -> rpm

rpm으로 설치하기

rpm -Uvh test.1.0.rpm 

설치 확인

rpm -qi httpd

-qi: 설치된 패키지의 상세 정보 확인

  • rpm의 의존성 문제를 해결하기 위한 방법 -> yum -> dnf(메모리 적게 사용하면서 필요한 버전 설치 가능. yum은 설치 시 함께 설치된 의존성 해결 패키지를 remove할 때 지우지 않지만 dnf는 의존성 해결 패키지도 함께 삭제해 준다)
  • yum/dnf는 저장소를 이용하여 필요한 패키지를 요청하면 저장소에서는 해당 패키지와 의존성 해결을 위한 패키지를 묶어 다운로드 시켜준다.
  • 도커에서 httpd, nginx를 설치할 때에는 rpm과 같은 패키지를 이용하여 설치할 때와 설치되는 경로가 달라진다. 가령, 도커 컨테이너를 이용하여 centos 컨테이너를 생성하고 해당 컨테이너 내에서 httpd를 설치하면 기본 경로는 /var/www/html이지만, 컨테이너로 httpd 이미지를 사용하면 /usr/local/apache2/htdocs/가 된다.
yum grouplist 

yum -y groupinstall "Server with GUI"

그룹 관련 패키지를 모두 설치함

파일 압축/묶기

파일 묶기: tar

파일 압축: gzip, zip, bunzip, xz, ... -> 압축률의 차이가 있다. 이 중 압축률 가장 높은 것은 xz

.tar 압축/압축해제

압축하기

tar cvf my.tar test/ 

c: create
v: visual
f: filename

test/ 디렉토리 내에 포함되어있는 모든 파일과 디렉토리를 my.tar 파일로 묶겠다. 묶이는 과정을 확인하겠다.

압축 해제

tar xvf my.tar 

x: 압축 해제

.gz 압축/압축해제

압축하기

tar cvfz my.tar.gz test/ 

압축 해제

tar xvfz my.tar.gz 

.xz 압축/압축해제

압축하기

testdate=$(date +%y%m%d)
tar cfJP $testdate.tar.xz /var/www/html

J: xz
P: 디렉토리의 마지막 폴더인 html 폴더를 압축함

압축 해제

tar xfJ 220722.tar.xz 

find

atime: access -> 파일이나 디렉토리에 접근한 시간
mtime: modify -> 파일의 내용을 열고 수정하였다.
ctime: change -> 파일의 내용을 수정한 것이 아니라 파일의 고유 번호(inode)나 퍼미션(+x), 소유권(user1 -> root) 등을 변경

find /usr/bin -mtime -4 -type f 

/usr/bin 하위 파일을 검색하여 최근 4일 이내에 변경된 적이 있는 파일이 있다면 출력

crontab

실습 1

crontab -e 

-e: edit

* * * * * echo "hello" >> test.txt
*(분) *(시) *(일) *(월) *(요일) 

-> 매 분마다 작업 수행

systemctl restart crond 
cat ~/test.txt 

1분에 한 번씩 hello가 추가됨

실습 2

crontab -e 
* * * * * echo $(date +\%y\%m\%d\%H\%M) >> test.txt
systemctl restart crond 
cat ~/test.txt 

1분에 한 번씩 시간이 추가됨

시간 설정)

2 * * * *

매 시 2분에

*/2 * * * *

2분마다

실습 3

crontab -e 
* * * * * /root/backup.sh  

-> 매 분마다 backup.sh 쉘 스크립트 실행

backup.sh 쉘 스크립트 작성

touch /root/backup.sh 
chmod +x /root/backup.sh 
vi /root/backup.sh

#!/bin/bash 

echo "hello backup" >> /root/backup.txt

"hello backup"을 backup.txt에 추가함

cat /root/backup.txt 

1분마다 "hello backup"이 한 줄씩 작성됨

실습 4 - github 활용

  1. github 저장소에 임의의 index.html 파일을 생성한다.
  2. 리눅스에 있는 /root/backup.sh 파일의 내용을 아래와 같이 수정
    2.1 github로부터 로컬에 clone한다.
    2.2 clone된 디렉토리 내에 있는 모든 파일/디렉토리를 /var/www/html로 복사한다.
    2.3 systemctl restart httpd
  3. crontab -e에서 매분마다 /root/backup.sh를 실행하도록 작성
vi /root/backup.sh 
#!/bin/bash 

name=$(date +\%m\%d\%H\%M)

git clone https://github.com/ptah0414/react_blog.git /root/$name
\cp /root/$name/* /var/www/html 

systemctl restart httpd 
crontab -e 
* * * * * /root/backup.sh  

[확인]

  1. http://localhost 확인

  2. github에서 index.html 파일의 내용을 수정

  3. 1분 정도 기다린 다음 웹페이지를 다시 확인하면 변경된 내용으로 보여야 한다.

DNS

centos7 - dns 서버, 192.168.1.116
centos8 - 일반 pc, 211.183.3.111

[centos8]

ping -c 3 192.168.1.116

centos7과 통신이 된다

dns 주소를 192.168.1.116(centos7)으로 변경

cat /etc/resolve.conf  

dns 주소가 192.168.1.116(centos7)으로 변경되었음

ping -c 3 www.google.com 

안 된다
centos7에서 dns 구성이 되어있지 않기 때문에 도메인을 모른다.

ping -c 3 8.8.8.8

된다

사용자 입장에서 자신의 NIC 에 DNS 항목에 작성한 DNS 서버 주소 -> 로컬 네임서버

실제로 DNS 서비스를 제공하는 서버는 크게

  • 캐시 네임서버 : 자신이 직접 도메인을 관리하지는 않는다. 루트도메인서버, .com 서버 등에게 질의한 다음 최종 결과를 자신의 캐시에 저장하고 해당 결과를 사용자에게 전달해 주는 역할만을 수행한다.
    이후에 동일 주소에 대한 query 가 또 있을 경우 캐시에 있는 정보를 확인하여 전달해 준다.

  • 마스터 네임서버 : test.com, test.co.kr 과 같은 도메인을 직접 관리하는 서버이며 zone 파일이라는 곳에 서브도메인 등을 작성하여 외부에서 www.test.com 과 같은 주소로의 접속을 희망했을 경우 서브도메인에 대한 주소를 알려주는 역할을 수행한다.

실습 - 캐시네임 서버

[centos7]
1. bind, bind-chroot 설치

yum -y install bind bind-chroot
  1. 관련 파일 수정
vi /etc/named.conf 
13) listen-on port 53 { any; };
14) listen-on-v6 port 53 { none; };
21) allow-query     { any; };
36) dnssec-validation no;

systemctl restart named
systemctl enable named
systemctl status named 

확인

[centos8]

nslookup server 

-> 192.168.1.116

1) rapa

nslookup www.rapa.or.kr 

-> 14.63.193.79

dig www.rapa.or.kr 

-> 14.63.193.79

2) google

nslookup google.com 

-> 172.217.26.238

nslookup www.google.com 

-> 142.250.196.100

실습 - 마스터네임 서버

우리 회사에 있는 캐시네임서버 192.168.1.116을 마스터네임 서버로 활용할 계획이다. 도메인 주소는 gunwoo.com이다.

내부에 있는 211.183.3.111이 주소창에 www.gunwoo.com이라고 했을 때, 마스터 네이버 서버에서 동시에 서비스하고 있는 웹서비스를 제공할 수 있어야 한다.

[centos7]

vi /etc/named.conf 
zone "gunwoo.com" IN {
  type master;
  file "gunwoo.com.db";
  allow-update { none; };
};

맨 아래에 코드 추가
allow-update: 만약 master dns가 다운되면 slave dns를 사용할 것임
우린 slave dns를 설정 안 했으므로 allow-update none

named-checkconf 

오타가 없다면 아무런 반응이 없음

zone 파일 구성

cd /var/named/
touch gunwoo.com.db 
vi gunwoo.com.db 
$TTL            3H
@       SOA     @       root. ( 2 1D 1H 1W 1H )
        IN      NS      @
        IN      A       192.168.1.116

www     IN      A       192.168.1.116

shop    IN      A       192.168.1.199
hr      IN      A       192.168.1.101

www.gunwoo.com 으로 접속 -> 192.168.1.116(내 pc)으로 보냄
shop.gunwoo.com 으로 접속 -> 192.168.1.199(bt님 pc)으로 보냄
hr.gunwoo.com 으로 접속 -> 192.168.1.101(hr님 pc)으로 보냄

systemctl restart named 
vi /etc/sysconfig/network-scripts/ifcfg-eth0 
DNS1=127.0.0.1
DNS2=8.8.8.8

DNS1과 DNS2를 위와 같이 변경
DNS1=127.0.0.1 -> 본인 것을 확인

systemctl restart network
systemctl restart httpd 

[centos8]
shop.gunwoo.com 접속

www.gunwoo.com 접속

hr.gunwoo.com 접속

프록시 서버

web proxy는 웹서버의 내용을 캐시에 담고 이를 클라이언트에게 전달한다.
이후 동일 사이트 접속 시도 시 캐시에 있는 LAN에서 전달하므로 속도가 빠르다.

https://docs.oracle.com/cd/E19575-01/821-0053/adyml/index.html

클라우드

  • cloud는 가상화를 포함해야 효율성을 극대화할 수 있다.
  • 사용자는 on-demand 서비스를 필요로 한다 -> 가상화
  • 동작 중인 애플리케이션, 서비스는 무중단 상태여야 한다 -> live migration
profile
take a look

0개의 댓글