[Linux] sed/vim, grub, mount, package(rpm, yum, dnf)

gununoo·2022년 7월 21일
1

Linux

목록 보기
4/10
post-thumbnail

nfs -> shared storage
storage

  • block storage -> cloud에서 주로 쓰는 방식
  • file storage
  • object storage

sed, vim

  • 행 단위 편집기: sed -> 파일을 열지 않고 쉘 상에서 특정 단어를 변경하는 등의 내용을 작성하면 이를 파일에 반영시킬 수 있다.
sed -i 's/old/new/' abc.txt

-> abc.txt 파일 내에서 만나게 되는 첫 번째 old를 new로 변경한다.

sed -i 's/old/new/g' abc.txt 

-> 파일 전체에서 old를 new로 변경

edit=meow
sed -i "s/old/$edit/" abc.txt 

-> 변경될 변수를 이용하여 처리하고 싶으면 큰 따옴표 사용

  • 화면 단위 편집기: vi(m)
    :set nu
    -> 줄 번호 표시
    :set nonu
    -> 줄 번호 해제

vi에서 sed 사용하기

:%s/old/new/g

:s/old/new/  
sed -i -r -e "/\[database\]/a\5.5.5.5" test.txt

-e: 정규표현식
/a -> 아랫 줄에 append

인터페이스 이름 변경(ens32 -> eth0)

centos7 버전 이후로(이전에는 eth0, eth1, ...) 인터페이스의 이름은 다음의 과정을 거쳐 결정되도록 설정되어있다.
ens(slot) -> enp(port) -> eno(bios)

우리는 우리가 직접 입력한 인터페이스 이름을 사용하고 싶다. eth0으로 변경

1. grub 편집

vi /etc/default/grub 
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0"

한 줄 수정

2. ifcfg 편집

cd /etc/sysconfig/network-scripts/
ls ifcfg-*

mv ifcfg-ens32 ifcfg-eth0
vi ifcfg-eth0

해당 줄만 남기고 모두 삭제

:%s/ens32/eth0/g

ens32를 모두 eth0으로 변경

3. 변경된 사항에 대한 최종 반영 및 재부팅

grub2-mkconfig -o /boot/grub2/grub.cfg 
reboot 

4. 설정 확인

ifconfig eth0 
ping -c 3 www.google.com 

chmod

touch ddd.sh 
ls -l ddd.sh 

rw- r-- r--

chmod u+x ddd.sh 
ls -l 

rxx r-- r--
user에게 x 권한 추가

chmod +x ddd.sh 
ls -l 

rwx r-x r-x
모두에게 x 권한 추가

useradd

vi /etc/default/useradd 
HOME=/newhome

한 줄 변경

mkdir /newhome 
ls -l / 

home과 newhome이 보임

useradd user2 
tail -1 /etc/passwd

newhome 밑에 user2가 생겼음

ls -l /newhome/ 

퍼미션 확인 -> user2라는 소유주만 rwx를 할 수 있음

groups user2

user2: user2
-> user2그룹에 속함

usermod -g root user2 
groups user2 

user2: root
-> root 그룹으로 바뀜

생성된 사용자는 무조건 하나의 그룹에는 포함되어야 한다.
만약 2개의 그룹에 포함되어 있다면? 둘 중 하나는 primary group이어야 한다.

usermod -g user2 user2 
usermod -aG wheel user2 
groups user2 

user2 : user2 wheel

usermod -aG wheel user

usermod -aG newgroup user2 
groups user2

user2를 기존 그룹을 유지하면서 새로운 newgroup에 포함시킨다.
-a: append
자주 쓰는 명령어이므로 반드시 기억하기!

/dev

mount | grep sr0 
ls /run/media/root/CentOS\ 7\ x86_64/
umount /dev/sr0 

/dev/sr0는 리눅스의 ODD

리눅스의 물리장치는 논리장치(디렉토리)와 연계된 상태에서 사용할 수 있다. -> 마운트
물리 장치 -> /dev
(외부에 있는 스토리지에서 볼륨을 마운트하여 사용하는 경우에는 로컬에서 vda, vda와 같은 형태로 보이기도 한다. vda -> vda1, vda2)

mount /dev/sr0 /test
umount /test 또는 umount /dev/sr0

mkdir /test 
mount /dev/sr0 /test 
ls /test 
mount | grep /dev/sr0  

umount /test 
ls /test 

마운트 정보를 지속적으로 유지하고 싶다면 /etc/fstab 에 기록해둔다. OS가 부팅 시 읽어들인다.

cat /etc/fstab 

LVM

https://access.redhat.com/documentation/ko-kr/red_hat_enterprise_linux/5/html/logical_volume_manager_administration/lvm_definition

  • 크기가 작은 다수의 볼륨을 연결하여 하나의 볼륨으로 만들고 이를 다시 논리적으로 나누어 원하는 크기의 볼륨으로 조정하여 사용할 수 있다.
  • 각 볼륨의 크기가 달라도 상관 없이 연결이 가능하다.
  • 속도가 느리다
  • 데이터 손실 시 복구가 어렵다
  • FT(Fault Tolerance)를 지원해야 한다 -> 결함 허용 -> 혹시 결함에 의해 데이터가 손실되더라도 복구가 가능해야 한다.

RAID

RAID는 두 개 이상의 디스크를 결합하여 데이터 손실을 방지하고 데이터 I/O를 높여줄 수 있다.
RAID는 리눅스와 같은 운영체제에서 소프트웨어적으로 제공하는 방식과 서버/스토리지 자체적으로 제공하는 하드웨어적인 기법으로 구분할 수 있다.


-> iptime에서 RAID 설정 화면

raid 0 -> striping

  • 디스크를 동시에 사용하여 쓰기 -> 속도가 빠르다
  • 디스크 공간 활용률 -> 100%
  • 디스크 손상 시 복구가 불가능하다 -> 클라우드에서 쓰기 부적합하다

raid 1 -> mirroring

  • FT를 지원한다.
  • 공간 활용률 -> 50%

raid 4 -> parity

  • 패리티 비트를 한 대의 스토리지에 두고 사용하는 방식
  • 패리티 비트가 있는 스토리지가 파괴됐을 시 복구가 불가능함
  • 위의 예시에서는 공간 활용률 -> 75%
  • 만약 디스크가 100개 있다면 공간 활용률 -> 99%

raid 5 -> parity 분산

  • 패리티 비트를 각 스토리지에 분산시켜 두고 사용하는 방식
  • 위의 예시에서는 공간 활용률 -> 75%
  • 만약 디스크가 100개 있다면 공간 활용률 -> 99%

raid 10 -> raid 1+0

  • raid 0 으로 striping을 한 스토리지를 raid 1으로 mirroring

결국 RAID를 사용하면 데이터를 안정적으로 관리할 수 있다. 또한 쓰기 속도를 향상시킬 수 있다.

로컬에 디스크 추가하기

1. 전원 끄기

init 0

2. 새로운 디스크 추가 후 재부팅

edit virtual machine settings -> Add... -> Hard Disk -> SCSI -> create a new virtual disk -> 5GB -> disk file: CentOS1-0.vmdk -> Finish

파티셔닝, 포멧, 마운트까지 해야 사용할 수 있음
fstab에 기록해두어야 재부팅 시에서 마운트 유지됨

3. 파티셔닝

ls /dev/sd* 

/dev/sdb -> 아직 설정되지 않았기 때문에 번호가 부여되지 않았음

fdisk /dev/sdb 
n
p
w

primary -> 데이터 작성이 가능한 공간
최대 4개의 공간 있음 -> p1, p2, p3, p4
MBR(master boot record) -> OS 설치 가능
마지막 영역은 extended -> OS 설치 불가 -> 추가로 파티셔닝을 할 수 있음

4. 포멧

mkfs.ext4 /dev/sdb1 

5. 마운트

mkdir /added 
mount /dev/sdb1 /added 

df -h | grep /added 

6. /etc/fstab에 기록

vi /etc/fstab
/dev/sdb1   /added  ext4    defaults    0   0 

앞 0: 부팅 시 디스크 점검을 안 하면 0, 점검을 하면 1
뒤 0: 점검 순서

7. 재부팅 후 확인

df | grep sdb 

NFS, HAproxy 실습


그림 출처: https://velog.io/@dustndus8

NFS 서버(192.168.1.114)

  1. /added 디렉토리 권한 변경
chmod 777 /added 
  1. /added에 index.html 파일 생성
touch /added/index.html 
vi /added/index.html 
  1. 파일에 내용 입력

  2. nfs-utils 설치

yum -y install nfs-utils
  1. /etc/exports에 접근 가능하게 할 ip 작성
vi /etc/exports 
/added  192.168.1.115(rw,sync,no_root_squash)
/added  192.168.1.116(rw,sync,no_root_squash)
  1. nfs-server 재실행
systemctl restart nfs-server
systemctl enable nfs-server

웹서버 (192.168.1.115, 192.168.1.116)

  1. httpd 상태 확인
systemctl status httpd 
  1. 메인 페이지 생성
touch /var/www/html/main.html  
  1. NFS 서버 확인
showmount -e 192.168.1.114 

  1. added 디렉토리 생성
mkdir /suyeon 
  1. NFS 서버 마운트
mount -t nfs 192.168.1.114:/added /suyeon 

  1. NFS에서 메인페이지 받아오기
cp /suyeon/index.html /var/www/html/main.html 

  1. 접속 로그 확인
tail -3f /var/log/httpd/access_log 

HA Proxy

https://cloudwafer.com/blog/installing-haproxy-on-centos-7/

yum -y install haproxy 
vi /etc/haproxy/haproxy.cfg

haproxy 설치
haproxy 다음과 같이 설정

global
   log /dev/log local0
   log /dev/log local1 notice
   chroot /var/lib/haproxy
   stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon

defaults
     log global
     mode http
     option httplog
     option dontlognull
     timeout connect 5000
     timeout client 50000
     timeout server 50000
     
frontend http_front # frontend 에 속하며, Group 은 http_front 그룹이다. 
     bind *:80 # 모든 IP 로 80포트로 접근하는 대상에 대해서 처리한다. 
     stats uri /haproxy?stats # status 를 체크할수 있는 url 로 서버/haproxy?status 로 접근
     default_backend http_back # 해당 front_end 로 접근하는 대상은 backend 중 http_back 그룹으로 보낸다.

backend http_back # backend 중 http_back 그룹으로 설정하였다. (status 에서도 동일 이름 출력)
     balance roundrobin # roundrobin 방식으로, 아래 사이트를 순차적으로 접근하게 한다.
     server my_server1 192.168.1.115:80 check # 접근 대상 site 1번이며, 서버의 닉네임은 my_server1 이고, 해당 서버 ip 와 port 에 접근하도록 한다. check 는 health 체크를 의미한다.
     server my_server2 192.168.1.116:80 check # 접근 대상 site 2번이며, 서버의 닉네임은 my_server2 이고, 해당 서버 ip 와 port 에 접근하도록 한다. check 는 health 체크를 의미한다.

frontend -> 192.168.1.117 -> HAProxy
backend -> 192.168.1.115
backend -> 192.168.1.116

sudo systemctl restart haproxy
sudo systemctl enable haproxy

haproxy 실행

결과 확인

http://192.168.1.117/haproxy?stats


.115와 .116 에게 round robin으로 load balancing이 되는 것 확인

rpm, yum, dnf

RPM

리눅스는 설치를 위한 모든 코드를 외부에 공개한다. 따라서 특정 애플리케이션을 설치하고자 한다면 소스코드를 다운로드하고 파일을 컴파일한 뒤 이를 설치하는 과정을 거쳐야한다. 컴파일을 위해서는 설치 위치, 필요한 옵션 등을 수동으로 지정할 수 있어 전문가나 익숙한 사람들에게는 좋은 방법이 될 수 있으나, 초보자나 클라우드 환경과 같이 빠른 설치가 필요한 곳에서는 어려운 일이 될 수 있다. 이를 해결하기 위하여 윈도우의 install.exe와 비슷한 파일을 RedHat에서 만들었는데, 이를 RPM이라 부른다(또는 패키지라 칭한다).

rpm -e gedit 

-e: erase
gedit 삭제함

rpmfind.net에서 gedit 검색
맨 아래의 버전에서 링크 복사

wget http://www.rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/gedit-3.28.1-3.el7.x86_64.rpm

rpm -ivh 패키지이름.rpm 

install한다. 단, 동일 패키지가 설치되어있다면 오류가 발생한다. -> 잘 안 씀

rpm -Uvh 패키지이름.rpm

기존에 설치된 것 있는지 확인하고 기존 설치된 버전보다 지금 설치하고자 하는 버전이 최근 버전이라면 업그레이드 설치를 진행한다. 만약 설치되어있지 않다면 정상적인 install을 진행한다. -> 자주 쓰는 명령어

-v: 설치 과정 확인
-h: #를 이용하여 확인

rpm -Uvh gedit-3.28.1-3.el7.x86_64.rpm 

gedit 설치 완료

rpmfind.net에서 wireshark-gnome 검색

wget http://www.rpmfind.net/linux/centos/7.9.2009/os/x86_64/Packages/wireshark-gnome-1.10.14-25.el7.x86_64.rpm

rpm -Uvh wireshark-gnome-1.10.14-25.el7.x86_64.rpm 

의존성 문제로 설치 안 됨

gedit는 그래픽 환경에 의존성을 갖는다.

yum

yum -> dnf
yum은 인터넷이나 회사 내에 다수의 패키지를 저장소에 보관하고 사용자가 필요한 패키지를 요청했을 때 해당 패키지, 의존성 해결을 위한 패키지를 묶어 사용자에게 전달해주는 방식이다.

민약 패키지가 epel에서 제공하는 패키지라면 CentOs에서는 설치할 수 없다. 이 경우에는 epel 목록을 설치하여 해결할 수 있다.

ls /etc/yum.repos.d/

yum 설치 목록 확인

yum -y install epel-release
ls /etc/yum.repos.d/

epel 목록이 설치되었음

wget http://...com/test.rpm 
yum -y install test.rpm 

test.rpm을 설치하면서 해결해야할 의전성 패키지는 yum으로 연결하여 다운로드 설치한다.

yum clean all 
yum check-update 
yum -y install && init 0  

dnf

dnf -y install php 
php -v

php 설치 후 설치 확인
7.2버전이 설치되었음

dnf module list php 

php의 버전들 확인

dnf -y remove php 

php 제거, 의존성 있는 것들까지 제거

dnf module reset php 
y 

dnf module enable php:7.4
y

7.4버전 enable 시키기

dnf module list php 

7.4 버전이 enable 되었음

dnf -y install php 
php -v

php 재설치
7.4 버전이 설치되었음

dnf module list python* 

3.6 버전이 enable 되어있음

python3 --version 

3.6.8 버전이 설치되어있음

내일 배울 내용:
파일 압축, cron과 at
cron은 젠킨스(crontrigger), k8s(cronjob)에서도 나오기 때문에 매우 중요함
반복 일정에 따라 잡을 만든다

과제 1. cron이란?
과제 2. date 명령을 실행했을 때 아래와 같은 형식으로 출력되도록
2207211750

profile
take a look

0개의 댓글