Contents
(Linux)편집기
   2022년07월20일     4분정도면 다 읽어요     - Comments

[카카오 클라우드 스쿨] VIM, SED 등의 편집기에 대해 학습한다.


  • gedit
    • runlevel 5에서 동작하는 애플리케이션
    • 따라서 그래픽 환경이 없다면 작동하지 않음
    • (runlevel 3 CLI 환경에서 작동하지 않음)
    • 편집기능이 부족함
  • 따라서 우리는 더 괜찮은 편집기를 사용해야 함


  1. 행단위 편집기
    • 프롬프트 상에서 파일을 편집하고, 해당 내용을 파일로 전송하는 형태
    • sed(자주 쓰임)
  2. 화면단위 편집기
    • 직접 파일을 화면에 모드 열어두고 편집하는 형태
    • emacs - 전문가용
    • vi(m) - 일반적으로 널리 사용되는 편집기


1 . 행 단위 편집기 - SED

  • 참고하면 좋다: https://reakwon.tistory.com/164
  • 파일을 열지 않고 셸 상에서 특정 단어를 변경하는 등 수정이 가능하다
[root@srv7 0720]# sed -i 's/root/hello/g' anaconda-ks.cfg
  • -i: inplace
  • s: 바꾼다(치환)
  • root -> hello 단어 치환한다
  • globally: 모든 단어에 적용한다 (없을 경우 첫 번째 문자열만 변경)


1 . 특정 단어 하단에 내용 추가하기

  • 대괄호 있을 경우 역슬래시 사용
[root@srv7 0721]# sed -n -e '/insert/a\inserted' -e '1,$p' hi.txt

[root@mainserver 0721]# sed -i -r -e "/\[database\]/a\5.5.5.5" a.txt


2 . 변수 사용해서 치환하기

  • 큰 따옴표 사용해야 함
[root@srv7 0720]# edit=hi
[root@srv7 0720]# sed -i "s/hello/$edit/g" anaconda-ks.cfg


3 . httpd 포트 수정해 보기

  • httpd의 기본포트 80을 수정해 보자
[root@srv7 0720]# grep Listen /etc/httpd/conf/httpd.conf
# Listen: Allows you to bind Apache to specific IP addresses and/or
# Change this to Listen on specific IP addresses as shown below to
#Listen 12.34.56.78:80
Listen 80
[root@srv7 0720]# sed -i 's/Listen 80/Listen 8888/' /etc/httpd/conf/httpd.conf
  • 하지만 서비스 재실행 시 오류가 발생함


4 . SELinux 비활성하기

  • /etc/selinux/config -> 들어가 보면 기본 포트밖에 못 쓰드록 되어 있음 (enforcing)
    • 따라서 이를 disabled 로 바꾸어서 다른 포트(8888)를 사용할 수 있도록 해야 함
  • 해당 파일 수정 후, 즉시 종료하도록 setenforce 0
[root@srv7 0720]# getenforce
Enforcing

[root@srv7 0720]# cat /etc/selinux/config
---
SELINUX=enforcing
---
[root@srv7 0720]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/'  /etc/selinux/config
[root@srv7 0720]# setenforce 0

[root@srv7 0720]# getenforce
Permissive

[root@srv7 0720]# systemctl restart httpd


리눅스에서의 보안

  • firewalld
    • 외부로 나가는 것(originate), 안으로 들어오는 것(terminate), 가로지르는 것(forwarded transit) 세 가지가 담당함
  • SELinux
    • 내부자원으로의 접근 관리를 담당한다



2 . 화면 단위 편집기 (VIM)

  • VI의 업그레이드 버전 VIM
  • 사실상 내부적으로 SED가 내장되어 있는 형태
  • 배포판에는 VIM이 설치되어 있지 않은 경우가 많음
    • 이 경우, VIM을 설치한 뒤, .bashrc에서 alias vi=’vim’ 을 설정해 두는 것이 좋음
    • (vi 실행 시 vim이 실행되도록 한다, 재부팅 시에도 유지됨)


1. 명령 모드

  • i, o: 입력 모드로 전환
  • hjkl: 이동
  • ^: home
  • $: end
  • gg: 맨 처음 행으로
  • G: 맨 마지막 행으로
    • 10G: 열 번째 행으로 이동
    • dG: 현재부터 마지막까지 지우기
  • dd: 한즐 제거
    • 10dd: 열줄 제거
  • yy: 복사하기
    • 3yy: 세줄 복사
  • p: 붙이기
  • u: undo

2. 입력 모드

  • esc: 명령 모드로 전환
  • : 마지막 행 모드로 전환

3. 마지막 행 모드

  • wq: 저장, 종료
  • wq!: 강제 저장, 종료
  • set nu: 번호 출력
  • /[검색할 단어]: 단어 검색
  • n: 다음 단어 검색
  • N: 이전 단어 검색


  • 실습
    • httpd 메인 페이지 파일(index.html)이 없으면 다른 페이지 파일(main.html)으로 연결되게끔 함
    • index를 main으로 바꾸어도 잘 접속되는 것을 확인함
[root@srv7 ~]# vi /etc/httpd/conf/httpd.conf
---
DirectoryIndex index.jsp index.html main.html
---

[root@srv7 ~]# mv /var/www/html/index.html /var/www/html/main.html



vim 실습 - 네트워크 인터페이스 수정

  • vi 편집기를 이용하여 네트워크 인터페이스의 이름 변경하기


  • CentOS7 버전 이후로 인터페이스의 이름은 다음의 과정을 통해 결정된다
    • CentOS7 이전: eth0, eth1..(연결)
    • CentOS7 이후: ens(slot) -> enp(port) -> eno(bios name)
  • 그러나, 우리는 우리가 직접 입력한 인터페이스 이름을 사용하고 싶다
    • eth0으로 변경해 보자!


1. bios 이름 및 if이름으로 설정하지 않겠다고 수정

[root@srv7 0721]# 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-ens32 이름을 ifcfg-eth0 로 수정
[root@srv7 0721]# cd /etc/sysconfig/network-scripts/
[root@srv7 network-scripts]# ls ifcfg-*
ifcfg-ens32  ifcfg-lo
[root@srv7 network-scripts]# mv ifcfg-ens32 ifcfg-eth0
[root@srv7 network-scripts]# vi ifcfg-eth0
---
TYPE=Ethernet
BOOTPROTO=none
NAME=eth0
DEVICE=eth0
ONBOOT=yes
DNS1=8.8.8.8
IPADDR=192.168.1.105
PREFIX=24
GATEWAY=192.168.1.1
  • ETHERNET
    • frame 처리가 가능한 포트 => L3 포트
    • L3: Router Port (IP 패킷 해석이 가능)
    • L2: IP가 들어가지 않음 (스위치 같은 친구들)
  • BOOTPROTO: static (dhcp X)
  • NAME, DEVICE: eth0으로 설정


3. grub 파일에 적용, 재부팅

[root@srv7 network-scripts]# grub2-mkconfig -o /boot/grub2/grub.cfg
[root@srv7 network-scripts]# reboot


4. 결과

  • 반영이 잘 된것을 확인할 수 있다
    • 물론 이름에 불과하므로 eth0 말고도 apple, hello 등으로 확인할 수 있다
[root@srv7 ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
[root@srv7 ~]# ping 8.8.8.8